@koda-sl/baker-bridge 0.51.0-dev.ce05c9a2 → 0.51.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
@@ -167,14 +167,17 @@ Convex action ──POST /message/async──▶ Bridge AgentSession
167
167
  plan file path under `~/.claude/plans/`, falling back to the latest
168
168
  `current-*.md` file. Shares the 15m timeout.
169
169
  - **Spawned-agent activity** is tracked from the Agent SDK's task lifecycle
170
- system messages (`task_started` / `task_notification` / `task_updated`). Only
171
- subagent tasks are surfaced (shell/monitor/workflow and `skip_transcript`
172
- tasks are ignored); on every change the current turn's list of agents and
173
- their status (`working` / `done` / `error` / `stopped`) is POSTed to
174
- `/api/chat/agent-activity`. Convex persists it on the thread so the dashboard
175
- can pin a status card at the bottom of the chat even after the spawning
176
- messages scroll away; the terminal `/api/chat/complete` settles any agent
177
- still marked `working`.
170
+ system messages (`task_started` / `task_progress` / `task_notification` /
171
+ `task_updated`). Only subagent tasks are surfaced (shell/monitor/workflow and
172
+ `skip_transcript` tasks are ignored); on every change the current turn's list
173
+ of agents and their status (`working` / `done` / `error` / `stopped`) is
174
+ POSTed to `/api/chat/agent-activity`. Each working agent also carries a live
175
+ "what it's doing now" hint from `task_progress` the raw `last_tool_name`
176
+ (the dashboard maps it to a friendly label) and the SDK's progress `summary`
177
+ cleared when the agent settles. Convex persists the list on the thread so the
178
+ dashboard can pin a status card at the bottom of the chat even after the
179
+ spawning messages scroll away; the terminal `/api/chat/complete` settles any
180
+ agent still marked `working`.
178
181
  - **Chat Changes are synced by the scaffold watcher**, not by the bridge. The
179
182
  workspace git watcher POSTs artifact changes to `/api/chats/changes` as the
180
183
  agent works; the bridge's `/api/chat/complete` callback carries only cost,
@@ -5,6 +5,10 @@ export type AgentTask = {
5
5
  status: AgentTaskStatus;
6
6
  startedAt: number;
7
7
  endedAt?: number;
8
+ /** Raw name of the tool the agent last used — the dashboard maps it to a label. */
9
+ lastTool?: string;
10
+ /** The agent's own short progress note, when the SDK provides one. */
11
+ activity?: string;
8
12
  };
9
13
  /**
10
14
  * Applies one SDK message to the turn's agent-task list. Returns the updated
@@ -1 +1 @@
1
- {"version":3,"file":"agent-tasks.d.ts","sourceRoot":"","sources":["../../src/hono/agent-tasks.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AA4CF;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,CAwB/G"}
1
+ {"version":3,"file":"agent-tasks.d.ts","sourceRoot":"","sources":["../../src/hono/agent-tasks.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAoEF;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,CA0B/G"}
@@ -26,7 +26,24 @@ function settle(tasks, taskId, status, now) {
26
26
  return null;
27
27
  }
28
28
  const next = [...tasks];
29
- next[index] = { ...current, status, endedAt: now };
29
+ // Drop the live activity a settled agent isn't "doing" anything anymore.
30
+ next[index] = { ...current, status, endedAt: now, lastTool: undefined, activity: undefined };
31
+ return next;
32
+ }
33
+ function progress(tasks, taskId, patch) {
34
+ const index = tasks.findIndex((task) => task.taskId === taskId);
35
+ const current = index === -1 ? undefined : tasks[index];
36
+ if (!current || current.status !== "working") {
37
+ return null;
38
+ }
39
+ // A progress message may carry only one of the two fields; keep the other.
40
+ const lastTool = patch.lastTool ?? current.lastTool;
41
+ const activity = patch.activity ?? current.activity;
42
+ if (lastTool === current.lastTool && activity === current.activity) {
43
+ return null;
44
+ }
45
+ const next = [...tasks];
46
+ next[index] = { ...current, lastTool, activity };
30
47
  return next;
31
48
  }
32
49
  /**
@@ -39,24 +56,36 @@ export function applyTaskLifecycleMessage(tasks, message, now) {
39
56
  if (!msg || msg.type !== "system" || typeof msg.task_id !== "string") {
40
57
  return null;
41
58
  }
42
- if (msg.subtype === "task_started") {
43
- if (!isSubagentStart(msg) || typeof msg.description !== "string" || msg.description.length === 0) {
44
- return null;
59
+ const taskId = msg.task_id;
60
+ switch (msg.subtype) {
61
+ case "task_started":
62
+ return applyTaskStarted(tasks, msg, taskId, now);
63
+ case "task_progress":
64
+ return progress(tasks, taskId, {
65
+ lastTool: nonEmptyString(msg.last_tool_name),
66
+ activity: nonEmptyString(msg.summary),
67
+ });
68
+ case "task_notification": {
69
+ const status = typeof msg.status === "string" ? NOTIFICATION_STATUS[msg.status] : undefined;
70
+ return status ? settle(tasks, taskId, status, now) : null;
45
71
  }
46
- if (tasks.some((task) => task.taskId === msg.task_id)) {
47
- return null;
72
+ case "task_updated": {
73
+ // Only terminal patches move the pinned card; running/paused churn is noise.
74
+ const status = typeof msg.patch?.status === "string" ? UPDATE_STATUS[msg.patch.status] : undefined;
75
+ return status ? settle(tasks, taskId, status, now) : null;
48
76
  }
49
- return [...tasks, { taskId: msg.task_id, description: msg.description, status: "working", startedAt: now }];
50
- }
51
- if (msg.subtype === "task_notification") {
52
- const status = typeof msg.status === "string" ? NOTIFICATION_STATUS[msg.status] : undefined;
53
- return status ? settle(tasks, msg.task_id, status, now) : null;
77
+ default:
78
+ return null;
54
79
  }
55
- if (msg.subtype === "task_updated") {
56
- // Only terminal patches move the pinned card; running/paused churn is noise.
57
- const status = typeof msg.patch?.status === "string" ? UPDATE_STATUS[msg.patch.status] : undefined;
58
- return status ? settle(tasks, msg.task_id, status, now) : null;
80
+ }
81
+ function nonEmptyString(value) {
82
+ return typeof value === "string" && value.length > 0 ? value : undefined;
83
+ }
84
+ function applyTaskStarted(tasks, msg, taskId, now) {
85
+ const description = nonEmptyString(msg.description);
86
+ if (!isSubagentStart(msg) || !description || tasks.some((task) => task.taskId === taskId)) {
87
+ return null;
59
88
  }
60
- return null;
89
+ return [...tasks, { taskId, description, status: "working", startedAt: now }];
61
90
  }
62
91
  //# sourceMappingURL=agent-tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-tasks.js","sourceRoot":"","sources":["../../src/hono/agent-tasks.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,+BAA+B;AAwB/B,MAAM,mBAAmB,GAAoC;IAC3D,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,aAAa,GAAoC;IACrD,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,SAAS,eAAe,CAAC,GAAyB;IAChD,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC;AACjH,CAAC;AAED,SAAS,MAAM,CAAC,KAAkB,EAAE,MAAc,EAAE,MAAuB,EAAE,GAAW;IACtF,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAkB,EAAE,OAAgB,EAAE,GAAW;IACzF,MAAM,GAAG,GAAG,OAAsC,CAAC;IACnD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjG,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9G,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,mBAAmB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACnC,6EAA6E;QAC7E,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnG,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"agent-tasks.js","sourceRoot":"","sources":["../../src/hono/agent-tasks.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,68 @@ describe("applyTaskLifecycleMessage", () => {
27
27
  const tasks = [{ taskId: "t1", description: "Task t1", status: "working", startedAt: 100 }];
28
28
  expect(applyTaskLifecycleMessage(tasks, started("t1"), 200)).toBe(null);
29
29
  });
30
+ it("records live activity from task_progress on a working task", () => {
31
+ const tasks = [{ taskId: "t1", description: "Task t1", status: "working", startedAt: 100 }];
32
+ const withTool = applyTaskLifecycleMessage(tasks, {
33
+ type: "system",
34
+ subtype: "task_progress",
35
+ task_id: "t1",
36
+ last_tool_name: "Read",
37
+ summary: "Reading COMPANY.md",
38
+ }, 200);
39
+ expect(withTool?.[0]).toEqual(expect.objectContaining({ taskId: "t1", lastTool: "Read", activity: "Reading COMPANY.md" }));
40
+ });
41
+ it("keeps the prior activity field when a progress message omits it", () => {
42
+ const tasks = [
43
+ {
44
+ taskId: "t1",
45
+ description: "Task t1",
46
+ status: "working",
47
+ startedAt: 100,
48
+ lastTool: "Read",
49
+ activity: "Reading",
50
+ },
51
+ ];
52
+ const next = applyTaskLifecycleMessage(tasks, { type: "system", subtype: "task_progress", task_id: "t1", last_tool_name: "Grep" }, 200);
53
+ expect(next?.[0]).toEqual(expect.objectContaining({ lastTool: "Grep", activity: "Reading" }));
54
+ });
55
+ it("ignores progress with no change and progress for non-working or unknown tasks", () => {
56
+ const tasks = [
57
+ {
58
+ taskId: "t1",
59
+ description: "Task t1",
60
+ status: "working",
61
+ startedAt: 100,
62
+ lastTool: "Read",
63
+ activity: "Reading",
64
+ },
65
+ { taskId: "t2", description: "Task t2", status: "done", startedAt: 100, endedAt: 150 },
66
+ ];
67
+ const same = {
68
+ type: "system",
69
+ subtype: "task_progress",
70
+ task_id: "t1",
71
+ last_tool_name: "Read",
72
+ summary: "Reading",
73
+ };
74
+ expect(applyTaskLifecycleMessage(tasks, same, 200)).toBe(null);
75
+ expect(applyTaskLifecycleMessage(tasks, { type: "system", subtype: "task_progress", task_id: "t2", last_tool_name: "Bash" }, 200)).toBe(null);
76
+ expect(applyTaskLifecycleMessage(tasks, { type: "system", subtype: "task_progress", task_id: "t9", last_tool_name: "Bash" }, 200)).toBe(null);
77
+ });
78
+ it("clears live activity when a task settles", () => {
79
+ const tasks = [
80
+ {
81
+ taskId: "t1",
82
+ description: "Task t1",
83
+ status: "working",
84
+ startedAt: 100,
85
+ lastTool: "Read",
86
+ activity: "Reading",
87
+ },
88
+ ];
89
+ const next = applyTaskLifecycleMessage(tasks, { type: "system", subtype: "task_notification", task_id: "t1", status: "completed" }, 300);
90
+ expect(next?.[0]).toEqual({ taskId: "t1", description: "Task t1", status: "done", startedAt: 100, endedAt: 300 });
91
+ });
30
92
  it("settles tasks from task_notification statuses", () => {
31
93
  const tasks = [{ taskId: "t1", description: "Task t1", status: "working", startedAt: 100 }];
32
94
  const notification = { type: "system", subtype: "task_notification", task_id: "t1", status: "completed" };
@@ -1 +1 @@
1
- {"version":3,"file":"agent-tasks.test.js","sourceRoot":"","sources":["../../src/hono/agent-tasks.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-tasks.test.js","sourceRoot":"","sources":["../../src/hono/agent-tasks.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAkB,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,SAAS,OAAO,CAAC,MAAc,EAAE,SAAS,GAA4B,EAAE;IACtE,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,QAAQ,MAAM,EAAE;QAC7B,aAAa,EAAE,iBAAiB;QAChC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,yBAAyB,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAE/D,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,yBAAyB,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAC9G,IAAI,CACL,CAAC;QACF,MAAM,CAAC,yBAAyB,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,IAAI,GAAG,yBAAyB,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAEpH,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,KAAK,GAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAEzG,MAAM,CAAC,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,KAAK,GAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACzG,MAAM,QAAQ,GAAG,yBAAyB,CACxC,KAAK,EACL;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,MAAM;YACtB,OAAO,EAAE,oBAAoB;SAC9B,EACD,GAAG,CACJ,CAAC;QAEF,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAC3B,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAC5F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,KAAK,GAAgB;YACzB;gBACE,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,SAAS;gBACtB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,SAAS;aACpB;SACF,CAAC;QACF,MAAM,IAAI,GAAG,yBAAyB,CACpC,KAAK,EACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,EACnF,GAAG,CACJ,CAAC;QAEF,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,KAAK,GAAgB;YACzB;gBACE,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,SAAS;gBACtB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,SAAS;aACpB;YACD,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;SACvF,CAAC;QACF,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,MAAM;YACtB,OAAO,EAAE,SAAS;SACnB,CAAC;QAEF,MAAM,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,CACJ,yBAAyB,CACvB,KAAK,EACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,EACnF,GAAG,CACJ,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CACJ,yBAAyB,CACvB,KAAK,EACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,EACnF,GAAG,CACJ,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,KAAK,GAAgB;YACzB;gBACE,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,SAAS;gBACtB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,SAAS;aACpB;SACF,CAAC;QACF,MAAM,IAAI,GAAG,yBAAyB,CACpC,KAAK,EACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,EACpF,GAAG,CACJ,CAAC;QAEF,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACpH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,KAAK,GAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACzG,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAE1G,MAAM,CAAC,yBAAyB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAClE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;SACvF,CAAC,CAAC;QACH,MAAM,CAAC,yBAAyB,CAAC,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChH,MAAM,CAAC,yBAAyB,CAAC,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,KAAK,GAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAEzG,MAAM,CACJ,yBAAyB,CACvB,KAAK,EACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EACvF,GAAG,CACJ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CACf,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChB,MAAM,CACJ,yBAAyB,CACvB,KAAK,EACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EACxF,GAAG,CACJ,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,CACJ,yBAAyB,CACvB,EAAE,EACF,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,EACpF,GAAG,CACJ,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CAAC,yBAAyB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,CAAC,yBAAyB,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koda-sl/baker-bridge",
3
- "version": "0.51.0-dev.ce05c9a2",
3
+ "version": "0.51.0",
4
4
  "description": "HTTP server wrapping the Claude Agent SDK. Persists chat events to Convex; the dashboard subscribes via Convex realtime",
5
5
  "license": "MIT",
6
6
  "type": "module",