bajaclaw 0.15.0 → 0.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  ██╔══██╗██╔══██║██ ██║██╔══██║ ██║ ██║ ██╔══██║██║███╗██║
8
8
  ██████╔╝██║ ██║╚█████╔╝██║ ██║ ╚██████╗███████╗██║ ██║╚███╔███╔╝
9
9
  ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝
10
- autonomous agents on your terms · MIT · v0.15.0
10
+ autonomous agents on your terms · MIT · v0.15.2
11
11
  ```
12
12
 
13
13
  ## What BajaClaw is
@@ -3,7 +3,7 @@
3
3
  // Replaces the old readline-based REPL (v0.14.23 and earlier). Prior
4
4
  // versions fought readline's `_refreshLine` cursor model to draw a
5
5
  // bordered "sandwich" around the input; see HANDOFF.md landmine 17.
6
- // Ink sidesteps all of that it owns the render loop, diffs each
6
+ // Ink sidesteps all of that - it owns the render loop, diffs each
7
7
  // frame, and lets us describe the UI declaratively.
8
8
  //
9
9
  // Layout, top to bottom:
@@ -92,7 +92,7 @@ export function ChatApp({ profile, cfg: initialCfg, agentName, initialModelOverr
92
92
  // Seed the Static list with the intro entry on first render so the
93
93
  // banner + identity block land in scrollback. Ink 7 renders only
94
94
  // the LAST <Static> in the tree, so we use ONE Static for everything
95
- // intro goes in the same list as the turns.
95
+ // - intro goes in the same list as the turns.
96
96
  const [turns, setTurns] = useState(() => {
97
97
  const db = openDb(profile);
98
98
  let usage;
@@ -123,7 +123,7 @@ export function ChatApp({ profile, cfg: initialCfg, agentName, initialModelOverr
123
123
  const [commandHistory, setCommandHistory] = useState([]);
124
124
  // Local message queue. If the user hits Enter while a cycle is in
125
125
  // flight, the message lands here instead of forcing them to wait.
126
- // Drained FIFO as soon as `thinking` flips false see the useEffect
126
+ // Drained FIFO as soon as `thinking` flips false - see the useEffect
127
127
  // below.
128
128
  const [messageQueue, setMessageQueue] = useState([]);
129
129
  const historyRef = useRef([]);
@@ -151,7 +151,7 @@ export function ChatApp({ profile, cfg: initialCfg, agentName, initialModelOverr
151
151
  return () => clearInterval(i);
152
152
  }, [thinking, thinkingStart]);
153
153
  // Ctrl-C / Ctrl-D exit. Registered as a top-level input handler so
154
- // it fires even while the composer's own useInput is active Ink
154
+ // it fires even while the composer's own useInput is active - Ink
155
155
  // delivers each key event to every registered handler.
156
156
  useInput((char, key) => {
157
157
  if (key.ctrl && (char === "c" || char === "d")) {
@@ -878,7 +878,7 @@ async function handleSlash(input, ctx) {
878
878
  return;
879
879
  }
880
880
  case "history":
881
- ctx.appendSystem([{ text: "(use the dashboard for full history /stats for session totals)", dim: true }]);
881
+ ctx.appendSystem([{ text: "(use the dashboard for full history - /stats for session totals)", dim: true }]);
882
882
  return;
883
883
  default:
884
884
  ctx.appendSystem([
@@ -243,15 +243,39 @@ function isRunning(pid) {
243
243
  // Find running processes whose command line contains `daemon run <profile>`.
244
244
  // Skip our own pid and any pid stored in the pidfile (stop before
245
245
  // calling this if you want to sweep the referenced daemon too).
246
+ //
247
+ // Cross-platform: unix uses `ps -axo`; Windows uses PowerShell's
248
+ // Get-CimInstance Win32_Process (wmic is deprecated in Win11).
246
249
  function findStaleDaemons(profile) {
247
- if (process.platform === "win32")
248
- return []; // `ps` unavailable
249
- const needle = `daemon run ${profile}`;
250
+ const ownPid = process.pid;
251
+ const referenced = readReferencedPid(profile);
252
+ // Defensive: profile names are validated upstream but sanitize the
253
+ // PowerShell -like pattern too so a literal `*` or `'` in a profile
254
+ // name can't escape the wildcard match.
255
+ const safeProfile = profile.replace(/[^a-zA-Z0-9 _-]/g, "");
256
+ const needle = `daemon run ${safeProfile}`;
257
+ if (process.platform === "win32") {
258
+ // Single-quoted strings in PowerShell don't interpolate, but the
259
+ // pattern still needs balanced quotes. `-like '*...*'` with sanitized
260
+ // input is safe.
261
+ const script = `Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -like '*${needle}*' -and $_.CommandLine -like '*bajaclaw*' } | Select-Object -ExpandProperty ProcessId`;
262
+ const r = spawnSync("powershell.exe", ["-NoProfile", "-NonInteractive", "-Command", script], { encoding: "utf8" });
263
+ if (r.status !== 0 || !r.stdout)
264
+ return [];
265
+ const out = [];
266
+ for (const line of r.stdout.split(/\r?\n/)) {
267
+ const pid = Number(line.trim());
268
+ if (!Number.isFinite(pid) || pid <= 0)
269
+ continue;
270
+ if (pid === ownPid || pid === referenced)
271
+ continue;
272
+ out.push(pid);
273
+ }
274
+ return out;
275
+ }
250
276
  const r = spawnSync("ps", ["-axo", "pid=,command="], { encoding: "utf8" });
251
277
  if (r.status !== 0 || !r.stdout)
252
278
  return [];
253
- const ownPid = process.pid;
254
- const referenced = readReferencedPid(profile);
255
279
  const out = [];
256
280
  for (const line of r.stdout.split("\n")) {
257
281
  if (!line.includes(needle))
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ import { loadAllSkillsRaw, runtimeSkipReason } from "../skills/loader.js";
15
15
  import { currentVersion } from "../updater.js";
16
16
  const __dirname = dirname(fileURLToPath(import.meta.url));
17
17
  // Candidate locations for dashboard.html, resolved per-request so HTML
18
- // edits hot-reload (see `sendHtml` below no cache on the body).
18
+ // edits hot-reload (see `sendHtml` below - no cache on the body).
19
19
  //
20
20
  // - When running from the dev checkout, the TypeScript source sits in
21
21
  // `src/` while the compiled JS lands in `dist/`. We prefer
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bajaclaw",
3
- "version": "0.15.0",
3
+ "version": "0.15.2",
4
4
  "description": "BajaClaw - autonomous agents on your terms",
5
5
  "type": "module",
6
6
  "bajaclaw": {
@@ -1,106 +1,111 @@
1
1
  ---
2
2
  name: setup-discord
3
3
  description: Wire up a bidirectional Discord chat bridge between the user and the agent
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  tools: [Bash, Read, Write, Edit]
6
6
  triggers: ["setup discord", "help me with discord", "connect discord", "discord bot", "add discord", "discord setup", "discord chat", "talk to you on discord"]
7
7
  effort: medium
8
8
  ---
9
9
 
10
- ## ⚠️ NON-NEGOTIABLE RULE: NEVER ASK "WHAT DO YOU WANT TO USE IT FOR?"
10
+ ## Non-negotiable rule: never ask "what do you want to use it for"
11
11
 
12
- When the user says **anything** that triggers this skill - "set up
13
- discord", "connect discord", "discord bot", "talk to you on discord",
14
- etc. - the intent is **always the same**: a **two-way chat bridge**
15
- so the user can message you in a Discord channel and you reply there.
12
+ When the user triggers this skill - "set up discord", "connect
13
+ discord", "discord bot" - the intent is **always the same**: a
14
+ two-way chat bridge. Do not ask:
16
15
 
17
- You **must not** ask any of these:
18
16
  - "What do you want to use Discord for?"
19
17
  - "Notifications or something else?"
20
18
  - "What should the bot do in the channel?"
21
- - Any other meta-question about intent.
22
19
 
23
- Just wire it up. If the user specifically says they want something
24
- different, ADJUST then. Otherwise: collect credentials, run the
25
- commands, confirm.
20
+ Wire it up. If they want something specific, they will say so.
21
+ Otherwise: silence, collect credentials, run the commands.
26
22
 
27
- ## Execution plan
23
+ ## Step 1 - Collect credentials
28
24
 
29
- You have `Bash`, `Read`, `Write`, `Edit` tools. Permission prompts are
30
- auto-approved. Do the work.
31
-
32
- ### Step 1 - Collect credentials from the user
33
-
34
- Tell the user exactly three things:
25
+ Discord needs three values. Tell the user exactly this:
35
26
 
36
27
  ```
37
- To wire up a Discord chat with me, I need three things. Steps:
28
+ Three steps to get what I need:
38
29
 
39
- 1) Go to https://discord.com/developers/applications
40
- New Application name it create "Bot" tab → Reset Token → copy.
41
- Under "Privileged Gateway Intents", enable "MESSAGE CONTENT INTENT".
30
+ 1) https://discord.com/developers/applications
31
+ -> New Application -> name it -> Create -> "Bot" tab ->
32
+ Reset Token -> copy.
33
+ Under "Privileged Gateway Intents", enable MESSAGE CONTENT INTENT.
42
34
 
43
- 2) In OAuth2 URL Generator, tick `bot` + `applications.commands`
44
- plus "Send Messages" + "Read Message History". Visit the generated
45
- URL to add the bot to your server.
35
+ 2) OAuth2 -> URL Generator: tick `bot` + `applications.commands`,
36
+ plus "Send Messages" and "Read Message History". Visit the
37
+ generated URL to add the bot to your server.
46
38
 
47
- 3) In Discord, Settings Advanced Developer Mode ON.
48
- Then right-click the channel you want the bot in Copy Channel ID.
49
- And right-click your own avatar Copy User ID.
39
+ 3) Discord -> Settings -> Advanced -> Developer Mode ON.
40
+ Right-click the channel you want the bot in -> Copy Channel ID.
41
+ Right-click your own avatar -> Copy User ID.
50
42
 
51
- Paste the three values: bot token, channel id, your user id.
43
+ Paste three values: bot token, channel id, your user id.
52
44
  ```
53
45
 
54
46
  Wait for all three. Don't proceed partial.
55
47
 
56
- ### Step 2 - Wire the channel
48
+ ## Step 2 - Wire the channel (auto-fixes missing deps)
57
49
 
58
50
  ```bash
59
- bajaclaw channel add <profile> discord --token <TOKEN> --channel-id <CHANNEL_ID> --user-id <USER_ID>
51
+ profile="${BAJACLAW_PROFILE:-default}"
52
+
53
+ if ! bajaclaw channel add "$profile" discord --token "$TOKEN" --channel-id "$CHANNEL_ID" --user-id "$USER_ID" 2>/tmp/bc-dc-err; then
54
+ if grep -q "Cannot find module" /tmp/bc-dc-err || grep -q "discord.js" /tmp/bc-dc-err; then
55
+ echo "Missing optional dep; rebuilding bajaclaw..."
56
+ npm install -g bajaclaw --force
57
+ bajaclaw channel add "$profile" discord --token "$TOKEN" --channel-id "$CHANNEL_ID" --user-id "$USER_ID"
58
+ else
59
+ cat /tmp/bc-dc-err >&2
60
+ exit 1
61
+ fi
62
+ fi
60
63
  ```
61
64
 
62
- The `--user-id` gets added to the allowlist so only messages from
63
- that sender are routed to the agent.
65
+ `--force` refreshes bajaclaw's install and pulls in `discord.js`
66
+ (which is in `optionalDependencies`). Runs only if the adapter
67
+ actually failed to load.
64
68
 
65
- Verify:
69
+ ## Step 3 - Start the daemon
66
70
 
67
71
  ```bash
68
- bajaclaw channel list <profile>
72
+ bajaclaw daemon start "$profile"
69
73
  ```
70
74
 
71
- ### Step 3 - Ensure the dep is present
72
-
73
- ```bash
74
- npm install -g discord.js
75
- ```
75
+ Dashboard boots in-process.
76
76
 
77
- ### Step 4 - Start the gateway
77
+ ## Step 4 - Verify + invite the user to test
78
78
 
79
79
  ```bash
80
- bajaclaw daemon start <profile>
80
+ bajaclaw channel list "$profile"
81
+ bajaclaw daemon status "$profile"
81
82
  ```
82
83
 
83
- ### Step 5 - Confirm and invite a test message
84
+ Tell the user:
84
85
 
85
- Say: "Done. Go to the channel you added me to and send any message -
86
- I'll reply there."
86
+ > Done. Send any message in the channel you added me to and I'll
87
+ > reply. First response may take a few seconds while the first
88
+ > cycle boots.
87
89
 
88
- ## Verification checklist
90
+ ## Verification
89
91
 
90
- - `bajaclaw channel list <profile>` shows a `discord` entry with the
91
- token masked and the allowlist containing the user id.
92
- - `bajaclaw daemon status <profile>` shows `running`.
93
- - A test message in the channel appears as `gateway.discord.msg` in
94
- `bajaclaw daemon logs <profile> --lines 30`.
95
- - The user sees the bot reply within ~10s.
92
+ - `bajaclaw channel list "$profile"` shows the discord row with
93
+ masked token and the allowlist containing the user id.
94
+ - `bajaclaw daemon status "$profile"` shows `running (pid N)`.
95
+ - A test message appears in `bajaclaw daemon logs "$profile"
96
+ --lines 30` as a `gateway.discord.msg` entry.
97
+ - The bot reply appears in the channel within ~10s.
96
98
 
97
- ## Pitfalls (to anticipate, not pre-ask)
99
+ ## Pitfalls
98
100
 
99
- - If MESSAGE CONTENT INTENT is off in the portal, message bodies are
100
- empty and the bot can't respond to content. Ask them to re-check
101
- only if they report it's "not picking up messages."
102
- - If the bot isn't in the server, the OAuth2 invite URL step was
103
- missed - walk them through it if needed.
104
- - To include DMs, remove the `channelId` filter from the config or
101
+ - **MESSAGE CONTENT INTENT off.** Message bodies arrive empty;
102
+ bot can't respond. Re-check the portal only if the user reports
103
+ "not picking up messages".
104
+ - **Bot not in server.** The OAuth2 invite URL step was skipped.
105
+ Walk them through it.
106
+ - **DMs.** To enable, remove the channelId filter from config or
105
107
  set it to the user's DM channel id.
106
- - Don't echo the token back after it's in config.json.
108
+ - **Never echo the token** once it's in config.json.
109
+ - **Developer Portal is manual.** There's no API to create Discord
110
+ applications for the user. The surrounding setup is fluid, but
111
+ this step remains human.
@@ -1,117 +1,116 @@
1
1
  ---
2
2
  name: setup-telegram
3
3
  description: Wire up a bidirectional Telegram chat bridge between the user and the agent
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  tools: [Bash, Read, Write, Edit]
6
6
  triggers: ["setup telegram", "help me with telegram", "connect telegram", "telegram bot", "add telegram", "telegram setup", "telegram chat", "message you on phone", "phone chat", "mobile chat"]
7
7
  effort: medium
8
8
  ---
9
9
 
10
- ## ⚠️ NON-NEGOTIABLE RULE: NEVER ASK "WHAT DO YOU WANT TO USE IT FOR?"
10
+ ## Non-negotiable rule: never ask "what do you want to use it for"
11
11
 
12
- When the user says **anything** that triggers this skill - "set up
13
- telegram", "connect telegram", "telegram bot", "talk to you on my
14
- phone", "message you from my phone", etc. - the intent is **always
15
- the same**: a **two-way chat bridge** so the user can message you from
16
- Telegram and you reply in the same thread.
12
+ When the user triggers this skill - "set up telegram", "connect
13
+ telegram", "telegram bot", "talk to you on my phone" - the intent
14
+ is **always the same**: a two-way chat bridge. Do not ask:
17
15
 
18
- You **must not** ask any of these:
19
16
  - "What do you want to use Telegram for?"
20
17
  - "Notifications, commands, or something else?"
21
18
  - "What should this bot do?"
22
- - Any other meta-question about intent.
23
19
 
24
- The user already told you - they want to chat. Just wire it up.
20
+ Wire it up. If they want something specific (e.g. "only alerts"),
21
+ they will say so. Otherwise: silence, collect credentials, run
22
+ the commands.
25
23
 
26
- If they specifically say they want something different (e.g.
27
- "I want it for error alerts only"), ADJUST then. Otherwise: silence,
28
- collect credentials, run the commands.
24
+ ## Step 1 - Collect credentials
29
25
 
30
- ## Execution plan
31
-
32
- You have `Bash`, `Read`, `Write`, `Edit` tools. Permission prompts are
33
- auto-approved by BajaClaw's backend invocation. Just do the work.
34
-
35
- ### Step 1 - Collect credentials from the user
36
-
37
- Tell the user exactly two things to get:
26
+ Telegram requires two things. Tell the user exactly this:
38
27
 
39
28
  ```
40
- To wire up a Telegram chat with me, I need:
29
+ I need two things from Telegram:
41
30
 
42
31
  1) A bot token from @BotFather
43
- In Telegram, message @BotFather /newbot follow the prompts
44
- copy the token (looks like 123456789:ABCdef...).
32
+ In Telegram: message @BotFather -> /newbot -> follow the prompts
33
+ -> copy the token (looks like 123456789:ABCdef...).
45
34
 
46
35
  2) Your numeric Telegram user ID from @userinfobot
47
- Message @userinfobot copy the number it replies with.
36
+ In Telegram: message @userinfobot -> copy the number it replies
37
+ with.
48
38
 
49
- Paste both here and I'll wire it up.
39
+ Paste both and I'll handle the rest.
50
40
  ```
51
41
 
52
- Wait for the user to reply with the token + user id. Don't proceed
53
- without both - without the user id the allowlist is empty and no
54
- messages will route through.
42
+ Don't proceed without both. Without the user id, the allowlist is
43
+ empty and no messages route through.
55
44
 
56
- ### Step 2 - Wire the channel
45
+ ## Step 2 - Wire the channel (auto-fixes missing deps)
57
46
 
58
- Once you have both values, run:
47
+ Run this first, inside a try/catch shell pattern. If it succeeds,
48
+ skip to step 3. If it fails because a module is missing, run the
49
+ fix and retry:
59
50
 
60
51
  ```bash
61
- bajaclaw channel add <profile> telegram --token <TOKEN> --user-id <USER_ID>
52
+ profile="${BAJACLAW_PROFILE:-default}"
53
+
54
+ # First attempt
55
+ if ! bajaclaw channel add "$profile" telegram --token "$TOKEN" --user-id "$USER_ID" 2>/tmp/bc-tg-err; then
56
+ if grep -q "Cannot find module" /tmp/bc-tg-err || grep -q "node-telegram-bot-api" /tmp/bc-tg-err; then
57
+ echo "Missing optional dep; rebuilding bajaclaw..."
58
+ npm install -g bajaclaw --force
59
+ # Retry after the rebuild
60
+ bajaclaw channel add "$profile" telegram --token "$TOKEN" --user-id "$USER_ID"
61
+ else
62
+ cat /tmp/bc-tg-err >&2
63
+ exit 1
64
+ fi
65
+ fi
62
66
  ```
63
67
 
64
- Where `<profile>` is the currently active profile (default: `default`
65
- unless BAJACLAW_PROFILE is set to something else in the environment).
66
- The `--user-id` gets added to the telegram allowlist so only messages
67
- from that sender are routed to the agent.
68
+ The `--force` flag refreshes bajaclaw's whole install, including
69
+ `optionalDependencies` (`node-telegram-bot-api`, `discord.js`). Only
70
+ runs when the adapter actually failed to load - no-op otherwise.
68
71
 
69
- Then verify:
72
+ ## Step 3 - Start the daemon
70
73
 
71
74
  ```bash
72
- bajaclaw channel list <profile>
75
+ bajaclaw daemon start "$profile"
73
76
  ```
74
77
 
75
- ### Step 3 - Ensure the dep is present
76
-
77
- The adapter uses `node-telegram-bot-api` (optional dependency). Check
78
- if it's installed; if not, install it globally:
79
-
80
- ```bash
81
- npm install -g node-telegram-bot-api
82
- ```
78
+ The daemon hosts the Telegram adapter that polls for messages. It
79
+ also boots the dashboard in-process.
83
80
 
84
- ### Step 4 - Start the gateway
81
+ ## Step 4 - Verify and invite the user to test
85
82
 
86
83
  ```bash
87
- bajaclaw daemon start <profile>
84
+ bajaclaw channel list "$profile" # expect one telegram row
85
+ bajaclaw daemon status "$profile" # expect "running"
88
86
  ```
89
87
 
90
- The daemon hosts the telegram adapter that polls for messages.
91
-
92
- ### Step 5 - Confirm and invite the user to test
93
-
94
- Say something like: "Done. Open Telegram, send any message to the bot
95
- (it'll be named whatever you picked in @BotFather), and I'll reply."
96
-
97
- ## Verification checklist
98
-
99
- - `bajaclaw channel list <profile>` shows a `telegram` entry with the
100
- token set (printed as `***…<last 4 chars>`) and the allowlist
101
- containing the user's numeric id.
102
- - `bajaclaw daemon status <profile>` shows `running`.
103
- - Sending a message from Telegram lands in `bajaclaw daemon logs
104
- <profile> --lines 30` as a `gateway.telegram.msg` entry.
105
- - The user sees a reply in the Telegram thread (may take a few seconds
106
- for the cycle to run on first message).
107
-
108
- ## Pitfalls (to anticipate, not pre-ask)
109
-
110
- - Bot cannot DM the user first - the user must message the bot first
111
- OR add the bot to a group. Tell the user this only if they report
112
- "I don't see anything happen."
113
- - If the token is wrong: `gateway.telegram.error` will appear in the
114
- daemon log within ~10 seconds. Ask them to re-check the token.
115
- - Never echo the token back in the chat once it's in config.json.
116
- - `bajaclaw uninstall --keep-data` preserves the channel config;
117
- full uninstall removes it.
88
+ Then tell the user:
89
+
90
+ > Done. Open Telegram, send any message to the bot (the name you
91
+ > picked in @BotFather), and I'll reply. The first reply may take
92
+ > a few seconds while the first cycle boots.
93
+
94
+ ## Verification
95
+
96
+ - `bajaclaw channel list "$profile"` shows the telegram row with
97
+ token shown as `***…<last 4>` and the allowlist containing the
98
+ user's numeric id.
99
+ - `bajaclaw daemon status "$profile"` shows `running (pid N)`.
100
+ - Sending a message from Telegram lands in
101
+ `bajaclaw daemon logs "$profile" --lines 30` as a
102
+ `gateway.telegram.msg` entry.
103
+ - The user sees a reply in the Telegram thread.
104
+
105
+ ## Pitfalls
106
+
107
+ - **Bot cannot DM the user first.** The user must message the bot
108
+ first (or add it to a group). Tell the user only if they report
109
+ "nothing happens" after step 4.
110
+ - **Wrong token:** a `gateway.telegram.error` entry appears in the
111
+ daemon log within ~10 seconds. Ask the user to re-check the token.
112
+ - **Never echo the token** back in chat once it's in config.json.
113
+ Refer to it as "the token you gave me".
114
+ - **BotFather is manual.** There's no API to create bots for the
115
+ user - they must do it themselves. The skill makes the surrounding
116
+ setup fluid, but this step remains human.