bajaclaw 0.19.14 → 0.20.0

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.19.14
10
+ autonomous agents on your terms · MIT · v0.20.0
11
11
  ```
12
12
 
13
13
  ## What BajaClaw is
package/dist/agent.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type NarrationUpdate } from "./progress-narrator.js";
1
2
  import type { AgentConfig, ChatTurn } from "./types.js";
2
3
  export interface CycleInput {
3
4
  profile: string;
@@ -7,6 +8,7 @@ export interface CycleInput {
7
8
  sessionHistory?: ChatTurn[];
8
9
  attachments?: string[];
9
10
  onPartialText?: (delta: string, accumulated: string) => void;
11
+ onNarration?: (u: NarrationUpdate) => void;
10
12
  }
11
13
  export interface CycleOutput {
12
14
  cycleId: number;
@@ -24,6 +26,7 @@ export interface CycleOutput {
24
26
  command?: string[];
25
27
  error?: string;
26
28
  source?: string;
29
+ narrationSummary?: string;
27
30
  }
28
31
  export declare function runCycle(input: CycleInput): Promise<CycleOutput>;
29
32
  interface AssembleInput {
@@ -35,8 +38,6 @@ interface AssembleInput {
35
38
  heartbeat: string;
36
39
  skills: string;
37
40
  recentChat?: string;
38
- progressInstructions?: string;
39
41
  }
40
- export declare function buildProgressInstructions(): string;
41
42
  export declare function assemblePrompt(input: AssembleInput): string;
42
43
  export type { AgentConfig };
package/dist/agent.js CHANGED
@@ -28,10 +28,11 @@ import { shouldCompact, compact as compactMemory } from "./memory/compact.js";
28
28
  import { loadAllSkills } from "./skills/loader.js";
29
29
  import { matchSkills } from "./skills/matcher.js";
30
30
  import { synthesize as synthesizeSkill } from "./skills/auto-skiller.js";
31
- import { broadcastToProfile } from "./channels/gateway.js";
31
+ import { broadcastToProfile, openProgressMessage, editProgressMessage, deleteProgressMessage, } from "./channels/gateway.js";
32
32
  import { buildMcpConfig } from "./mcp/consumer.js";
33
33
  import { pickModel, budgetFor } from "./model-picker.js";
34
34
  import { serialize } from "./concurrency.js";
35
+ import { ProgressNarrator } from "./progress-narrator.js";
35
36
  export async function runCycle(input) {
36
37
  // Serialize cycles per-profile within this process. Prevents the HTTP
37
38
  // API from spawning parallel `claude` subprocesses under load.
@@ -103,31 +104,22 @@ async function runCycleInner(input) {
103
104
  // that takes precedence.
104
105
  const sessionHistory = input.sessionHistory
105
106
  ?? (popped?.source ? loadSourceHistory(db, popped.source, popped.id, 8) : undefined);
106
- // Live-feedback policy. For sonnet/opus cycles that originate
107
- // from a channel (telegram, discord), the agent gets a prompt
108
- // block telling it to call `bajaclaw say "..."` for intake + mid-
109
- // flight progress. Skipped for haiku (short+trivial tasks stay
110
- // snappy) and heartbeat cycles. Also skipped on dry runs.
107
+ // Source routing.
111
108
  const source = popped?.source;
112
- const channelSource = source && (source.startsWith("telegram:") || source.startsWith("discord:"));
113
- const liveFeedback = !isHeartbeat
114
- && !input.dryRun
115
- && channelSource
116
- && (picked.tier === "sonnet" || picked.tier === "opus");
117
- // No separate intake-ack backend call. The older design fired a
118
- // haiku pass before the main cycle to produce a quick "got it"
119
- // reply; it had two problems: (1) the haiku didn't get session
120
- // history, so follow-up messages got clueless replies ("which
121
- // model for what part?"), and (2) the user saw two messages per
122
- // task - the ack AND the main reply - which felt like spam.
123
- // Instead, the progress-instructions block below tells the main
124
- // agent (which HAS full session history) to emit its own plan
125
- // ack via `bajaclaw say` as its first action on multi-part
126
- // tasks. One cycle, one voice, one source of truth.
109
+ const editableSource = Boolean(source) && (source.startsWith("telegram:") || source.startsWith("discord:"));
110
+ const iMessageSource = Boolean(source) && source.startsWith("imessage:");
111
+ // Mid-cycle narration. Driven by cfg.verbosity ("off" | "medium" | "full"),
112
+ // runs entirely in BajaClaw (no extra prompt tokens, no agent output
113
+ // tokens). See progress-narrator.ts.
114
+ // - Telegram / Discord: open a single progress message, edit in place.
115
+ // - iMessage: no edit API - collect a summary and prepend to final reply.
116
+ // - In-process callers (chat REPL, dashboard): route to input.onNarration.
117
+ // - Dry runs and heartbeat cycles: no narration.
118
+ const verbosity = cfg.verbosity ?? "medium";
119
+ const narrateEnabled = verbosity !== "off" && !isHeartbeat && !input.dryRun;
127
120
  const prompt = assemblePrompt({
128
121
  task,
129
122
  attachments,
130
- progressInstructions: liveFeedback ? buildProgressInstructions() : "",
131
123
  memories: memories
132
124
  .map((m) => `- [${m.kind}] ${m.content.slice(0, budget.memoryCharsEach)}`)
133
125
  .join("\n"),
@@ -155,16 +147,15 @@ async function runCycleInner(input) {
155
147
  // claude's --effort level is the real knob for "how much runway
156
148
  // does the agent get". No --max-turns flag exists in claude CLI;
157
149
  // `effort: "max"` gives the biggest internal turn budget.
158
- // Env vars injected into the spawned claude subprocess so the
159
- // agent can call `bajaclaw say "..."` from its Bash tool without
160
- // us having to template them into the prompt. The `say` command
161
- // POSTs to the dashboard's /api/progress endpoint running in the
162
- // daemon, which forwards to the channel.
150
+ // Env vars injected into the spawned claude subprocess. BAJACLAW_SOURCE
151
+ // is still set for channel cycles so manual callers of `bajaclaw say`
152
+ // inside skills have somewhere to route; the main progress path is
153
+ // now orchestrator-driven (progress-narrator.ts) and doesn't need it.
163
154
  const spawnEnv = {
164
155
  BAJACLAW_PROFILE: input.profile,
165
156
  BAJACLAW_DASHBOARD_PORT: String(cfg.dashboardPort ?? 7337),
166
157
  };
167
- if (liveFeedback && source)
158
+ if (source && (editableSource || iMessageSource))
168
159
  spawnEnv.BAJACLAW_SOURCE = source;
169
160
  const opts = {
170
161
  model: picked.model,
@@ -195,13 +186,61 @@ async function runCycleInner(input) {
195
186
  else
196
187
  log.warn("snapshot.pre.fail", { cycleId, error: r.error });
197
188
  }
198
- // Stream when the caller asked for partial-text callbacks;
199
- // otherwise fall through to the blocking JSON path so the rest
200
- // of the codebase (channels, dashboard, HTTP API) stays unchanged.
201
- const result = input.onPartialText
202
- ? await runStream(prompt, opts, { onPartialText: input.onPartialText })
189
+ // Mid-cycle narrator. Built after the prompt is assembled so the
190
+ // initial skill list can be seeded. Passes events from runStream
191
+ // to the narrator; live updates route to the right sink.
192
+ let progressHandle = null;
193
+ let narrator = null;
194
+ if (narrateEnabled) {
195
+ // Pick the live sink based on the cycle's source.
196
+ let liveSink;
197
+ if (editableSource && source) {
198
+ // Open a single progress message on Telegram / Discord; we
199
+ // edit it in place as the narrator reports tool use. Null
200
+ // handle (adapter refused / not loaded) means the open failed
201
+ // and we degrade silently to no live narration.
202
+ progressHandle = await openProgressMessage(input.profile, source, verbosity === "full" ? "🔄 starting" : "🔄 starting");
203
+ if (progressHandle) {
204
+ const srcRef = source;
205
+ const handleRef = progressHandle;
206
+ liveSink = (u) => {
207
+ void editProgressMessage(input.profile, srcRef, handleRef, formatLiveBody(u));
208
+ };
209
+ }
210
+ }
211
+ else if (input.onNarration) {
212
+ // In-process caller (chat REPL, dashboard chat). Route to
213
+ // their callback verbatim - they pick the rendering.
214
+ liveSink = input.onNarration;
215
+ }
216
+ // iMessage and no-source cycles: no live sink. The summary is
217
+ // prepended to the final reply below.
218
+ narrator = new ProgressNarrator({ verbosity, onUpdate: liveSink });
219
+ for (const s of matched)
220
+ narrator.addSkill(s.name);
221
+ }
222
+ // Stream when the caller asked for partial-text callbacks OR when
223
+ // narration is enabled (narrator needs tool_use events). Falls
224
+ // back to the blocking JSON path for dry runs, heartbeats, and
225
+ // other non-interactive cycles to keep them lean.
226
+ const useStream = Boolean(input.onPartialText) || narrator !== null;
227
+ const result = useStream
228
+ ? await runStream(prompt, opts, {
229
+ onPartialText: input.onPartialText,
230
+ onEvent: narrator ? (ev) => narrator.handleEvent(ev) : undefined,
231
+ })
203
232
  : await runOnce(prompt, opts);
204
233
  const finished = new Date().toISOString();
234
+ // Finalize the narrator: flush any debounced update and clean up
235
+ // the progress message so the final reply stands alone.
236
+ if (narrator)
237
+ narrator.finalize();
238
+ if (progressHandle && source) {
239
+ // Best-effort delete so the final reply doesn't trail a stale
240
+ // progress line. If the delete fails (rate limit, already gone),
241
+ // the user just sees both messages - not broken, just noisier.
242
+ await deleteProgressMessage(input.profile, source, progressHandle);
243
+ }
205
244
  // Optional post-snapshot. Captures the diff for later inspection
206
245
  // even when the user never rewinds.
207
246
  let postSha = null;
@@ -217,6 +256,7 @@ async function runCycleInner(input) {
217
256
  db.prepare("UPDATE cycles SET pre_sha=?, post_sha=?, snapshot_root=? WHERE id=?")
218
257
  .run(preSha, postSha, snapshotRoot, cycleId);
219
258
  }
259
+ const narrationSummary = narrator?.summary() ?? "";
220
260
  if (!result.ok) {
221
261
  recordFailure(db);
222
262
  db.prepare("UPDATE cycles SET finished_at=?, status=?, error=?, response_preview=? WHERE id=?").run(finished, "error", result.error ?? "unknown", result.text.slice(0, 500), cycleId);
@@ -235,6 +275,7 @@ async function runCycleInner(input) {
235
275
  command: result.command,
236
276
  error: result.error,
237
277
  source: popped?.source,
278
+ narrationSummary: narrationSummary || undefined,
238
279
  };
239
280
  }
240
281
  recordSuccess(db);
@@ -276,10 +317,17 @@ async function runCycleInner(input) {
276
317
  }
277
318
  }
278
319
  log.info("cycle.ok", { cycleId, costUsd: result.costUsd, turns: result.turns });
320
+ // iMessage cannot edit sent messages, so we prepend a short
321
+ // narration summary to the final reply instead. On other sources
322
+ // the live progress message already showed this; repeating it
323
+ // would be spammy.
324
+ const outText = (iMessageSource && narrationSummary)
325
+ ? `${narrationSummary}\n\n${result.text}`
326
+ : result.text;
279
327
  return {
280
328
  cycleId,
281
329
  ok: true,
282
- text: result.text,
330
+ text: outText,
283
331
  costUsd: result.costUsd,
284
332
  inputTokens: result.inputTokens,
285
333
  outputTokens: result.outputTokens,
@@ -291,12 +339,22 @@ async function runCycleInner(input) {
291
339
  prompt,
292
340
  command: result.command,
293
341
  source: popped?.source,
342
+ narrationSummary: narrationSummary || undefined,
294
343
  };
295
344
  }
296
345
  finally {
297
346
  db.close();
298
347
  }
299
348
  }
349
+ /** Format a narrator update for an edit-in-place progress message.
350
+ * Prefixes a subtle header so the user understands what the live
351
+ * message is, keeps the full body below. Short bodies render clean
352
+ * in both Telegram and Discord. */
353
+ function formatLiveBody(u) {
354
+ if (!u.body)
355
+ return "🔄 working";
356
+ return `🔄 working\n\n${u.body}`;
357
+ }
300
358
  function formatRecentChat(history) {
301
359
  if (!history || history.length === 0)
302
360
  return "";
@@ -366,53 +424,6 @@ function loadSystemDocs(profile) {
366
424
  heartbeat: read("HEARTBEAT.md"),
367
425
  };
368
426
  }
369
- export function buildProgressInstructions() {
370
- return `# Side-channel chat tool (do not let this distract from the actual task)
371
-
372
- CRITICAL: Your job is to fully complete the task in "# Current Task" below. If it has multiple parts (a AND b AND c), finish all of them before your final reply. Do not stop halfway and summarize, do not defer parts to a follow-up, do not treat the chat as a substitute for doing the work.
373
-
374
- You have one extra tool: \`bajaclaw say "<short text>"\` via your Bash tool. It sends a line to the user's chat mid-flight without blocking or ending the typing indicator.
375
-
376
- ## When to send the first ping (plan ack)
377
-
378
- ONLY if the task is genuinely multi-part or will take noticeable time to complete. Examples:
379
- - "add X, then test Y, then ship Z"
380
- - "investigate this bug, find the root cause, and fix it"
381
- - "scaffold a new agent named Shirty, run the dev server, tell me when ready"
382
-
383
- For multi-part tasks: before your first real tool call, send ONE short ping acknowledging the plan in your own voice. Natural, under 20 words. Look at Recent Chat to understand what the user means (e.g. if they say "that" or "the model", figure out what they're referring to from context).
384
-
385
- For single-question tasks, do NOT ack. The typing indicator is enough; go straight to your final reply. Examples that need NO ack:
386
- - "what model are you using?"
387
- - "is the server up?"
388
- - "summarize what you just did"
389
-
390
- ## When to send mid-flight pings
391
-
392
- Only for genuine milestones on long tasks:
393
- - You hit something unexpected the user should know ("heads up, migration is dirty, fixing first")
394
- - A long step is about to start and silence would look like a hang ("running the full test suite")
395
- - You crossed a real phase boundary ("scaffolding done, wiring up the handler")
396
-
397
- ## When to stay quiet
398
-
399
- - Announcing what you're about to do ("on it!", "starting now", "let me take a look"). Just do it.
400
- - Every tool call, file edit, or search.
401
- - Thinking out loud.
402
- - Short or simple tasks.
403
- - Filling silence when you don't have something real to say.
404
-
405
- Hard cap: at most 3 \`bajaclaw say\` calls per cycle (including the plan ack if you send one). Zero is fine. If you're tempted to ping a fourth time, you're chatting instead of working - stop and finish the task.
406
-
407
- ## Style for pings
408
-
409
- - Under 20 words, one line of prose
410
- - Same voice as your final reply
411
- - No "Update:", "Status:", "Plan:" prefixes - just say the thing
412
- - No em dashes, no emojis
413
-
414
- Your final reply at cycle end is the deliverable. It must cover every part the user asked about: findings, results, file paths, errors, whatever they need. Pings are bonuses on top of that, never a replacement.`;
415
- }
416
427
  export function assemblePrompt(input) {
417
428
  const sections = [];
418
429
  if (input.soulMd.trim())
@@ -421,8 +432,6 @@ export function assemblePrompt(input) {
421
432
  sections.push(`# Operating Guide\n${input.agentMd.trim()}`);
422
433
  if (input.heartbeat.trim())
423
434
  sections.push(`# Heartbeat Schedule\n${input.heartbeat.trim()}`);
424
- if (input.progressInstructions?.trim())
425
- sections.push(input.progressInstructions.trim());
426
435
  if (input.memories.trim())
427
436
  sections.push(`# Recalled Memories\n${input.memories.trim()}`);
428
437
  if (input.skills.trim())
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
1
  export type ChannelKind = "telegram" | "discord" | "imessage";
2
+ export type ProgressHandle = {
3
+ messageId: string | number;
4
+ } | null;
2
5
  /** Start all configured channel adapters for a profile. Returns once
3
6
  * adapters are wired; they then run in the background for the lifetime
4
7
  * of the process. Idempotent: re-running swaps adapters in place. */
@@ -40,6 +43,12 @@ export declare function endTyping(source: string): void;
40
43
  * clears typing. No-ops if source is not a channel or no adapter is
41
44
  * registered. */
42
45
  export declare function sendProgressToSource(profile: string, source: string, text: string): Promise<void>;
46
+ /** Open an edit-in-place progress message for the narrator.
47
+ * Returns null when the adapter does not support edits (iMessage)
48
+ * or is not loaded; callers must fall back to the summary path. */
49
+ export declare function openProgressMessage(profile: string, source: string, initialText: string): Promise<ProgressHandle>;
50
+ export declare function editProgressMessage(profile: string, source: string, handle: ProgressHandle, text: string): Promise<void>;
51
+ export declare function deleteProgressMessage(profile: string, source: string, handle: ProgressHandle): Promise<void>;
43
52
  /** Send a proactive notification to all active channels for a profile.
44
53
  * Uses the last seen chat/channel ID per adapter. No-ops if no messages
45
54
  * have arrived yet (no chatId to target). Fire-and-forget. */
@@ -262,6 +262,63 @@ export async function sendProgressToSource(profile, source, text) {
262
262
  return;
263
263
  await a.send(id, text);
264
264
  }
265
+ /** Open an edit-in-place progress message for the narrator.
266
+ * Returns null when the adapter does not support edits (iMessage)
267
+ * or is not loaded; callers must fall back to the summary path. */
268
+ export async function openProgressMessage(profile, source, initialText) {
269
+ const colon = source.indexOf(":");
270
+ if (colon < 0)
271
+ return null;
272
+ const kind = source.slice(0, colon);
273
+ const id = source.slice(colon + 1);
274
+ if (kind !== "telegram" && kind !== "discord" && kind !== "imessage")
275
+ return null;
276
+ const a = adapters.get(key(profile, kind));
277
+ if (!a || !a.openProgressMessage)
278
+ return null;
279
+ try {
280
+ return await a.openProgressMessage(id, initialText);
281
+ }
282
+ catch {
283
+ return null;
284
+ }
285
+ }
286
+ export async function editProgressMessage(profile, source, handle, text) {
287
+ if (!handle)
288
+ return;
289
+ const colon = source.indexOf(":");
290
+ if (colon < 0)
291
+ return;
292
+ const kind = source.slice(0, colon);
293
+ const id = source.slice(colon + 1);
294
+ if (kind !== "telegram" && kind !== "discord" && kind !== "imessage")
295
+ return;
296
+ const a = adapters.get(key(profile, kind));
297
+ if (!a || !a.editProgressMessage)
298
+ return;
299
+ try {
300
+ await a.editProgressMessage(id, handle, text);
301
+ }
302
+ catch { /* swallow: edits are best-effort */ }
303
+ }
304
+ export async function deleteProgressMessage(profile, source, handle) {
305
+ if (!handle)
306
+ return;
307
+ const colon = source.indexOf(":");
308
+ if (colon < 0)
309
+ return;
310
+ const kind = source.slice(0, colon);
311
+ const id = source.slice(colon + 1);
312
+ if (kind !== "telegram" && kind !== "discord" && kind !== "imessage")
313
+ return;
314
+ const a = adapters.get(key(profile, kind));
315
+ if (!a || !a.deleteProgressMessage)
316
+ return;
317
+ try {
318
+ await a.deleteProgressMessage(id, handle);
319
+ }
320
+ catch { /* swallow */ }
321
+ }
265
322
  /** Send a proactive notification to all active channels for a profile.
266
323
  * Uses the last seen chat/channel ID per adapter. No-ops if no messages
267
324
  * have arrived yet (no chatId to target). Fire-and-forget. */
@@ -453,6 +510,39 @@ async function startTelegram(profile, c, log) {
453
510
  await bot.sendDocument(Number(chatId), path, caption ? { caption } : {});
454
511
  }
455
512
  },
513
+ openProgressMessage: async (chatId, initialText) => {
514
+ // Telegram rejects empty messages. Fall back to a thin marker so
515
+ // the handle is valid and editProgressMessage can replace it.
516
+ const body = initialText.trim().length > 0 ? initialText : "…";
517
+ const msg = await bot.sendMessage(Number(chatId), body);
518
+ return { messageId: msg.message_id };
519
+ },
520
+ editProgressMessage: async (chatId, handle, text) => {
521
+ if (!handle)
522
+ return;
523
+ const body = text.trim().length > 0 ? text : "…";
524
+ try {
525
+ await bot.editMessageText(body, {
526
+ chat_id: Number(chatId),
527
+ message_id: Number(handle.messageId),
528
+ });
529
+ }
530
+ catch (e) {
531
+ // Telegram throws on "message is not modified" (no-op edits)
532
+ // and on rate limit. Both are non-fatal for a progress UI.
533
+ const msg = e.message ?? "";
534
+ if (!/not modified|Too Many Requests/i.test(msg))
535
+ throw e;
536
+ }
537
+ },
538
+ deleteProgressMessage: async (chatId, handle) => {
539
+ if (!handle)
540
+ return;
541
+ try {
542
+ await bot.deleteMessage(Number(chatId), Number(handle.messageId));
543
+ }
544
+ catch { /* ignore */ }
545
+ },
456
546
  startTyping: (chatId) => {
457
547
  // Telegram's typing indicator auto-clears after 5s, so re-send
458
548
  // every 4s until stopped. `sendChatAction` errors are swallowed
@@ -549,6 +639,41 @@ async function startDiscord(profile, c, log) {
549
639
  await ch.send(text);
550
640
  }
551
641
  },
642
+ openProgressMessage: async (channelId, initialText) => {
643
+ const ch = await client.channels.fetch(String(channelId));
644
+ if (!ch || !("send" in ch) || typeof ch.send !== "function")
645
+ return null;
646
+ const body = initialText.trim().length > 0 ? initialText : "…";
647
+ const sent = await ch.send(body);
648
+ return { messageId: sent.id };
649
+ },
650
+ editProgressMessage: async (channelId, handle, text) => {
651
+ if (!handle)
652
+ return;
653
+ const ch = await client.channels.fetch(String(channelId));
654
+ if (!ch || !("messages" in ch))
655
+ return;
656
+ try {
657
+ const m = await ch
658
+ .messages.fetch(String(handle.messageId));
659
+ const body = text.trim().length > 0 ? text : "…";
660
+ await m.edit(body);
661
+ }
662
+ catch { /* rate-limited or gone - ignore */ }
663
+ },
664
+ deleteProgressMessage: async (channelId, handle) => {
665
+ if (!handle)
666
+ return;
667
+ const ch = await client.channels.fetch(String(channelId));
668
+ if (!ch || !("messages" in ch))
669
+ return;
670
+ try {
671
+ const m = await ch
672
+ .messages.fetch(String(handle.messageId));
673
+ await m.delete();
674
+ }
675
+ catch { /* ignore */ }
676
+ },
552
677
  sendFile: async (channelId, path, caption) => {
553
678
  const ch = await client.channels.fetch(String(channelId));
554
679
  if (ch && "send" in ch && typeof ch.send === "function") {