@koda-sl/baker-bridge 0.35.2 → 0.37.0-dev.c223fbd9

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.
@@ -1,14 +1,21 @@
1
1
  import { query } from "@anthropic-ai/claude-agent-sdk";
2
2
  import { buildAttachmentPromptSuffix, downloadAttachments } from "./attachments.js";
3
- import { postToConvex } from "./convex.js";
3
+ import { clearStreamBuffer, enqueueStreamingTools, enqueueStreamText, flushStream, postEvent, postInputRequest, postInputResolved, postRouterSample, signalComplete, } from "./convex.js";
4
4
  import { selectModel } from "./model-router.js";
5
5
  import { loadSessionId, saveSessionId } from "./session-store.js";
6
6
  // ---------------------------------------------------------------------------
7
- // AgentSession — wraps query() with resume for multi-turn
8
- //
9
- // One session per thread. The first message creates a fresh query().
10
- // Subsequent messages create a new query() with `resume: sessionId`
11
- // so the conversation context carries over between turns.
7
+ // Tunables
8
+ // ---------------------------------------------------------------------------
9
+ /** No SDK output for this long declare the agent stalled and abort. */
10
+ const SDK_WATCHDOG_MS = 5 * 60 * 1000;
11
+ /** Max wait for a previous in-flight run to drain when a new chat arrives. */
12
+ const REPLACE_STREAM_TIMEOUT_MS = 30_000;
13
+ /** Drop sessions that haven't been touched for this long (memory bound). */
14
+ const SESSION_IDLE_TTL_MS = 24 * 60 * 60 * 1000;
15
+ /** How often the eviction sweeper runs. */
16
+ const SESSION_SWEEP_INTERVAL_MS = 60 * 60 * 1000;
17
+ // ---------------------------------------------------------------------------
18
+ // AgentSession — one per thread, persists across messages so SDK resume works.
12
19
  // ---------------------------------------------------------------------------
13
20
  class AgentSession {
14
21
  threadId;
@@ -16,132 +23,305 @@ class AgentSession {
16
23
  pendingQuestions = new Map();
17
24
  handlerCtx;
18
25
  options;
26
+ /** Identity token for the currently-running stream. abort() nulls this; if a
27
+ * later check sees a different value, the run knows it was abandoned. This
28
+ * replaces a global `aborted` flag whose reset-on-entry was racy. */
29
+ activeRun = null;
30
+ activeAbort = null;
31
+ streamingPromise = null;
32
+ replacingStream = false;
33
+ currentTurnTools = [];
34
+ model;
35
+ lastUsedAt = Date.now();
19
36
  constructor(threadId) {
20
37
  this.threadId = threadId;
21
- this.handlerCtx = { threadId, pendingQuestions: this.pendingQuestions, onInputRequest: null };
38
+ this.handlerCtx = { threadId, pendingQuestions: this.pendingQuestions };
22
39
  this.options = buildSessionOptions(this.handlerCtx);
23
40
  }
24
- /** Restore a previously persisted session ID (e.g. loaded from disk after restart). */
41
+ /** Cancel any in-flight run. The next status check inside runStream will trip. */
42
+ abort() {
43
+ this.activeRun = null;
44
+ if (this.activeAbort) {
45
+ this.activeAbort.abort();
46
+ this.activeAbort = null;
47
+ }
48
+ // Reject any pending questions so handleAskUserQuestion unblocks.
49
+ for (const [id, p] of this.pendingQuestions) {
50
+ this.pendingQuestions.delete(id);
51
+ // Fire-and-forget: the rejection will be caught by the SDK or AgentSession error path.
52
+ try {
53
+ p.resolve({});
54
+ }
55
+ catch {
56
+ // ignore
57
+ }
58
+ }
59
+ }
25
60
  setSessionId(id) {
26
61
  this.sessionId = id;
27
62
  }
28
- async sendAndStream(content, callbacks, attachments) {
63
+ resolveQuestion(toolUseId, answers) {
64
+ const pending = this.pendingQuestions.get(toolUseId);
65
+ if (!pending) {
66
+ return false;
67
+ }
68
+ pending.resolve(answers);
69
+ this.pendingQuestions.delete(toolUseId);
70
+ return true;
71
+ }
72
+ async sendAndStream(content, attachments) {
73
+ if (this.streamingPromise) {
74
+ this.replacingStream = true;
75
+ this.abort();
76
+ try {
77
+ await Promise.race([
78
+ this.streamingPromise,
79
+ new Promise((_, reject) => setTimeout(() => reject(new Error("previous stream timed out")), REPLACE_STREAM_TIMEOUT_MS)),
80
+ ]);
81
+ }
82
+ catch (err) {
83
+ console.error(`[AgentSession] previous stream did not drain on thread ${this.threadId} — forcing reset:`, err instanceof Error ? err.message : err);
84
+ }
85
+ finally {
86
+ this.streamingPromise = null;
87
+ this.replacingStream = false;
88
+ }
89
+ }
90
+ this.streamingPromise = this.runStream(content, attachments);
91
+ try {
92
+ await this.streamingPromise;
93
+ }
94
+ finally {
95
+ this.streamingPromise = null;
96
+ }
97
+ }
98
+ async runStream(content, attachments) {
99
+ const runToken = Symbol("agent-run");
100
+ this.activeRun = runToken;
101
+ this.lastUsedAt = Date.now();
102
+ this.currentTurnTools = [];
29
103
  let costUsd = 0;
30
- let model;
31
- this.handlerCtx.onInputRequest = callbacks.onInputRequest;
104
+ this.model = undefined;
32
105
  try {
33
- // Download attachments to local filesystem and append paths to prompt
34
- let prompt = content;
35
- if (attachments && attachments.length > 0) {
36
- const paths = await downloadAttachments(attachments);
37
- prompt += buildAttachmentPromptSuffix(paths);
106
+ const prepared = await this.preparePrompt(content, attachments, runToken);
107
+ if (!prepared) {
108
+ await this.completeWithCancel(0);
109
+ return;
38
110
  }
39
- const routerResult = await selectModel(prompt);
40
- model = routerResult.model;
41
- callbacks.onModelSelected?.(model);
42
- callbacks.onRouterSample?.(model, routerResult.messages);
43
- const opts = { ...this.options, model, ...(this.sessionId && { resume: this.sessionId }) };
44
- const q = query({ prompt, options: opts });
45
- for await (const msg of q) {
46
- // Capture session ID for resuming subsequent turns
47
- if (msg.session_id) {
48
- this.sessionId = msg.session_id;
49
- void saveSessionId(this.threadId, msg.session_id);
111
+ this.model = prepared.model;
112
+ void postRouterSample(this.threadId, prepared.model, prepared.routerMessages);
113
+ this.activeAbort = new AbortController();
114
+ const opts = {
115
+ ...this.options,
116
+ model: prepared.model,
117
+ abortController: this.activeAbort,
118
+ ...(this.sessionId && { resume: this.sessionId }),
119
+ };
120
+ const q = query({ prompt: prepared.prompt, options: opts });
121
+ let lastEventAt = Date.now();
122
+ const watchdog = setInterval(() => {
123
+ if (Date.now() - lastEventAt > SDK_WATCHDOG_MS) {
124
+ console.error(`[AgentSession] watchdog: no SDK event for ${SDK_WATCHDOG_MS}ms — aborting thread ${this.threadId}`);
125
+ clearInterval(watchdog);
126
+ this.activeAbort?.abort();
50
127
  }
51
- callbacks.onMessage(msg);
52
- if (msg.type === "result") {
53
- costUsd = msg.total_cost_usd;
128
+ }, 30_000).unref();
129
+ try {
130
+ for await (const msg of q) {
131
+ lastEventAt = Date.now();
132
+ this.lastUsedAt = lastEventAt;
133
+ if (this.activeRun !== runToken) {
134
+ break;
135
+ }
136
+ if (msg.session_id) {
137
+ this.sessionId = msg.session_id;
138
+ void saveSessionId(this.threadId, msg.session_id);
139
+ }
140
+ await this.handleMessage(msg);
141
+ if (msg.type === "result") {
142
+ costUsd = msg.total_cost_usd;
143
+ }
54
144
  }
55
145
  }
146
+ finally {
147
+ clearInterval(watchdog);
148
+ }
149
+ this.activeAbort = null;
150
+ if (this.activeRun !== runToken) {
151
+ await this.completeWithCancel(costUsd);
152
+ return;
153
+ }
56
154
  if (this.pendingQuestions.size > 0) {
57
155
  console.warn(`[AgentSession] SDK completed but ${String(this.pendingQuestions.size)} question(s) still pending on thread ${this.threadId}`);
58
156
  }
59
- callbacks.onComplete(costUsd, false, undefined, model);
157
+ await signalComplete(this.threadId, costUsd, false, undefined, this.model);
60
158
  }
61
159
  catch (error) {
62
- const message = error instanceof Error ? error.message : "Unknown error";
63
- console.error("Agent session error:", message);
64
- if (this.pendingQuestions.size > 0) {
65
- console.warn(`[AgentSession] SDK errored with ${String(this.pendingQuestions.size)} question(s) still pending on thread ${this.threadId}`);
160
+ await this.completeWithError(costUsd, error, runToken);
161
+ }
162
+ }
163
+ handleStreamEvent(event) {
164
+ if (event.type === "message_start") {
165
+ this.currentTurnTools = [];
166
+ return;
167
+ }
168
+ if (event.type === "content_block_start") {
169
+ this.handleContentBlockStart(event);
170
+ return;
171
+ }
172
+ if (event.type === "content_block_delta") {
173
+ const delta = event.delta;
174
+ if (delta?.type === "text_delta" && typeof delta.text === "string") {
175
+ enqueueStreamText(this.threadId, delta.text);
66
176
  }
67
- callbacks.onComplete(costUsd, true, [message], model);
68
177
  }
69
178
  }
70
- resolveQuestion(toolUseId, answers) {
71
- const pending = this.pendingQuestions.get(toolUseId);
72
- if (!pending) {
73
- return false;
179
+ handleContentBlockStart(event) {
180
+ const block = event.content_block;
181
+ if (block?.type !== "tool_use") {
182
+ return;
74
183
  }
75
- pending.resolve(answers);
76
- this.pendingQuestions.delete(toolUseId);
77
- return true;
184
+ const tool = {
185
+ toolUseId: block.id ?? "",
186
+ toolName: block.name ?? "",
187
+ startedAt: Date.now(),
188
+ };
189
+ if (block.input && typeof block.input === "object") {
190
+ tool.input = block.input;
191
+ }
192
+ this.currentTurnTools = [...this.currentTurnTools, tool];
193
+ enqueueStreamingTools(this.threadId, this.currentTurnTools);
194
+ }
195
+ async handleMessage(msg) {
196
+ if (msg.type === "stream_event") {
197
+ const event = msg.event;
198
+ if (event) {
199
+ this.handleStreamEvent(event);
200
+ }
201
+ return;
202
+ }
203
+ if (msg.type === "assistant") {
204
+ // Persisted message — the mutation clears streamingState, so the UI snaps
205
+ // from preview to persisted text in a single Convex update.
206
+ this.currentTurnTools = [];
207
+ await postEvent(this.threadId, msg, this.model);
208
+ }
209
+ // system / result messages are not persisted; result.cost_usd is captured above.
210
+ }
211
+ async preparePrompt(content, attachments, runToken) {
212
+ let prompt = content;
213
+ if (attachments && attachments.length > 0) {
214
+ const paths = await downloadAttachments(attachments);
215
+ prompt += buildAttachmentPromptSuffix(paths);
216
+ }
217
+ if (this.activeRun !== runToken) {
218
+ return null;
219
+ }
220
+ const routerResult = await selectModel(prompt);
221
+ if (this.activeRun !== runToken) {
222
+ return null;
223
+ }
224
+ return { prompt, model: routerResult.model, routerMessages: routerResult.messages };
225
+ }
226
+ async completeWithCancel(costUsd) {
227
+ // Don't fire signalComplete if we're being replaced by another stream — the
228
+ // new stream's signalComplete will run instead, and the cancelThread mutation
229
+ // already flipped the thread. (Convex completeThread is idempotent regardless.)
230
+ await flushStream(this.threadId);
231
+ clearStreamBuffer(this.threadId);
232
+ if (this.replacingStream) {
233
+ return;
234
+ }
235
+ await signalComplete(this.threadId, costUsd, true, ["Cancelled by user"], this.model);
236
+ }
237
+ async completeWithError(costUsd, error, runToken) {
238
+ this.activeAbort = null;
239
+ if (this.activeRun !== runToken) {
240
+ await this.completeWithCancel(costUsd);
241
+ return;
242
+ }
243
+ const message = error instanceof Error ? error.message : "Unknown error";
244
+ console.error("Agent session error:", message);
245
+ if (this.pendingQuestions.size > 0) {
246
+ console.warn(`[AgentSession] SDK errored with ${String(this.pendingQuestions.size)} question(s) still pending on thread ${this.threadId}`);
247
+ }
248
+ await signalComplete(this.threadId, costUsd, true, [message], this.model);
78
249
  }
79
250
  }
80
- // ---------------------------------------------------------------------------
81
- // Session registry — shared across WS and async paths
82
- // ---------------------------------------------------------------------------
83
- const sessions = new Map();
84
251
  async function handleAskUserQuestion(input, toolUseID, ctx, signal) {
85
252
  console.warn(`[AskUserQuestion] blocking for ${toolUseID} on thread ${ctx.threadId}`);
86
- ctx.onInputRequest?.(toolUseID, input.questions);
87
- const posted = await postToConvex("/api/chat/input-request", {
88
- threadId: ctx.threadId,
89
- toolUseId: toolUseID,
90
- questions: input.questions,
91
- });
253
+ const posted = await postInputRequest(ctx.threadId, toolUseID, input.questions);
92
254
  if (!posted) {
93
255
  console.error(`[AskUserQuestion] failed to post input-request for ${toolUseID} — frontend may not show question UI`);
94
256
  }
95
257
  const answers = await new Promise((resolve, reject) => {
96
258
  if (signal?.aborted) {
97
- console.warn(`[AskUserQuestion] ${toolUseID} signal already aborted`);
98
259
  reject(new Error("AskUserQuestion aborted before awaiting answer"));
99
260
  return;
100
261
  }
101
262
  ctx.pendingQuestions.set(toolUseID, { resolve });
102
263
  signal?.addEventListener("abort", () => {
103
264
  ctx.pendingQuestions.delete(toolUseID);
104
- console.warn(`[AskUserQuestion] ${toolUseID} aborted by SDK signal`);
105
265
  reject(new Error("AskUserQuestion aborted"));
106
266
  }, { once: true });
107
267
  });
108
268
  console.warn(`[AskUserQuestion] ${toolUseID} answered, resuming`);
109
- void postToConvex("/api/chat/input-resolved", { threadId: ctx.threadId });
269
+ void postInputResolved(ctx.threadId);
110
270
  return {
111
271
  behavior: "allow",
112
272
  updatedInput: { questions: input.questions, answers },
113
273
  };
114
274
  }
115
- const toolHandlers = {
116
- AskUserQuestion: handleAskUserQuestion,
117
- };
118
- /**
119
- * Build SDK options with settingSources, cwd, and canUseTool dispatcher.
120
- * No permissionMode — the CLI routes every tool through canUseTool via
121
- * --permission-prompt-tool stdio. Our callback returns "allow" for
122
- * everything except AskUserQuestion (which awaits user answers).
123
- */
275
+ // ---------------------------------------------------------------------------
276
+ // SDK Options factory
277
+ // ---------------------------------------------------------------------------
124
278
  function buildSessionOptions(handlerCtx) {
125
279
  return {
126
280
  cwd: process.cwd(),
127
281
  settingSources: ["project"],
128
282
  includePartialMessages: true,
129
- canUseTool: async (toolName, input, opts) => {
130
- const handler = toolHandlers[toolName];
131
- if (handler) {
132
- return await handler(input, opts.toolUseID, handlerCtx, opts.signal);
283
+ canUseTool: (toolName, input, opts) => {
284
+ if (toolName === "AskUserQuestion") {
285
+ return handleAskUserQuestion(input, opts.toolUseID, handlerCtx, opts.signal);
133
286
  }
134
- return { behavior: "allow", updatedInput: input };
287
+ return Promise.resolve({ behavior: "allow", updatedInput: input });
135
288
  },
136
289
  };
137
290
  }
138
- /**
139
- * Get or create a session for a thread. All code paths (WS, async) MUST use
140
- * this function so every message on the same thread hits the same session.
141
- *
142
- * On cache miss, attempts to load a persisted sessionId from disk so that
143
- * conversation context survives bridge restarts (e.g. after sandbox pause/resume).
144
- */
291
+ // ---------------------------------------------------------------------------
292
+ // Session registry bounded by TTL eviction so a long-lived bridge can't leak.
293
+ // ---------------------------------------------------------------------------
294
+ const sessions = new Map();
295
+ setInterval(() => {
296
+ const cutoff = Date.now() - SESSION_IDLE_TTL_MS;
297
+ for (const [id, session] of sessions) {
298
+ if (session.lastUsedAt < cutoff) {
299
+ sessions.delete(id);
300
+ }
301
+ }
302
+ }, SESSION_SWEEP_INTERVAL_MS).unref();
303
+ export async function getOrCreateSession(threadId) {
304
+ const existing = sessions.get(threadId);
305
+ if (existing) {
306
+ existing.lastUsedAt = Date.now();
307
+ return existing;
308
+ }
309
+ const session = new AgentSession(threadId);
310
+ const savedSessionId = await loadSessionId(threadId);
311
+ if (savedSessionId) {
312
+ session.setSessionId(savedSessionId);
313
+ }
314
+ sessions.set(threadId, session);
315
+ return session;
316
+ }
317
+ export function abortSession(threadId) {
318
+ const session = sessions.get(threadId);
319
+ if (!session) {
320
+ return false;
321
+ }
322
+ session.abort();
323
+ return true;
324
+ }
145
325
  // ---------------------------------------------------------------------------
146
326
  // Slash commands — cached introspection of available skills
147
327
  // ---------------------------------------------------------------------------
@@ -172,17 +352,4 @@ export async function getSlashCommands() {
172
352
  pendingFetch = null;
173
353
  }
174
354
  }
175
- export async function getOrCreateSession(threadId) {
176
- const existing = sessions.get(threadId);
177
- if (existing) {
178
- return existing;
179
- }
180
- const session = new AgentSession(threadId);
181
- const savedSessionId = await loadSessionId(threadId);
182
- if (savedSessionId) {
183
- session.setSessionId(savedSessionId);
184
- }
185
- sessions.set(threadId, session);
186
- return session;
187
- }
188
355
  //# sourceMappingURL=agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/hono/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/hono/agent.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,8 @@
1
1
  import type { AsyncMessageRequest } from "./types.ts";
2
+ /**
3
+ * Process a chat message dispatched via /message/async. The session writes
4
+ * stream deltas, persisted events, and completion directly to Convex; nothing
5
+ * needs to be returned because Convex is the source of truth for the UI.
6
+ */
2
7
  export declare function processAsync(request: AsyncMessageRequest): Promise<void>;
3
8
  //# sourceMappingURL=callback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../src/hono/callback.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD9E"}
1
+ {"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../src/hono/callback.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E"}
@@ -1,55 +1,12 @@
1
1
  import { getOrCreateSession } from "./agent.js";
2
- import { clearPostedUuids, isAlreadyPosted, postToConvex } from "./convex.js";
2
+ /**
3
+ * Process a chat message dispatched via /message/async. The session writes
4
+ * stream deltas, persisted events, and completion directly to Convex; nothing
5
+ * needs to be returned because Convex is the source of truth for the UI.
6
+ */
3
7
  export async function processAsync(request) {
4
8
  const { prompt, threadId, attachments } = request;
5
- // Use the shared registry — same session across async and WS paths
6
9
  const session = await getOrCreateSession(threadId);
7
- let selectedModel;
8
- try {
9
- await session.sendAndStream(prompt, {
10
- onModelSelected: (m) => {
11
- selectedModel = m;
12
- },
13
- onRouterSample: (model, messages) => {
14
- void postToConvex("/api/chat/router-sample", {
15
- threadId,
16
- model,
17
- messages: JSON.stringify(messages),
18
- });
19
- },
20
- onMessage: (msg) => {
21
- if (msg.type !== "stream_event") {
22
- if (isAlreadyPosted(threadId, msg)) {
23
- return;
24
- }
25
- void postToConvex("/api/chat/event", {
26
- threadId,
27
- event: msg,
28
- ...(selectedModel && { model: selectedModel }),
29
- });
30
- }
31
- },
32
- onInputRequest: () => {
33
- // Convex notification is handled inside handleAskUserQuestion directly
34
- },
35
- onComplete: async (costUsd, isError, errors, model) => {
36
- clearPostedUuids(threadId);
37
- const ok = await postToConvex("/api/chat/complete", {
38
- threadId,
39
- isError,
40
- costUsd,
41
- ...(errors && { errors }),
42
- ...(model && { model }),
43
- });
44
- if (!ok) {
45
- console.error(`Thread ${threadId} completion callback failed — message may be stuck until cron cleanup`);
46
- }
47
- },
48
- }, attachments);
49
- }
50
- catch (err) {
51
- clearPostedUuids(threadId);
52
- throw err;
53
- }
10
+ await session.sendAndStream(prompt, attachments);
54
11
  }
55
12
  //# sourceMappingURL=callback.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"callback.js","sourceRoot":"","sources":["../../src/hono/callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG9E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAClD,mEAAmE;IACnE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,aAAiC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,aAAa,CACzB,MAAM,EACN;YACE,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;gBACrB,aAAa,GAAG,CAAC,CAAC;YACpB,CAAC;YACD,cAAc,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAClC,KAAK,YAAY,CAAC,yBAAyB,EAAE;oBAC3C,QAAQ;oBACR,KAAK;oBACL,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;YACD,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;gBACjB,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBAChC,IAAI,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;wBACnC,OAAO;oBACT,CAAC;oBACD,KAAK,YAAY,CAAC,iBAAiB,EAAE;wBACnC,QAAQ;wBACR,KAAK,EAAE,GAAG;wBACV,GAAG,CAAC,aAAa,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;qBAC/C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,cAAc,EAAE,GAAG,EAAE;gBACnB,uEAAuE;YACzE,CAAC;YACD,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBACpD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAC3B,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,oBAAoB,EAAE;oBAClD,QAAQ;oBACR,OAAO;oBACP,OAAO;oBACP,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;oBACzB,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;iBACxB,CAAC,CAAC;gBACH,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,OAAO,CAAC,KAAK,CAAC,UAAU,QAAQ,uEAAuE,CAAC,CAAC;gBAC3G,CAAC;YACH,CAAC;SACF,EACD,WAAW,CACZ,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"callback.js","sourceRoot":"","sources":["../../src/hono/callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACnD,CAAC"}
@@ -1,7 +1,30 @@
1
1
  import type { SDKMessage } from "@anthropic-ai/claude-agent-sdk";
2
- /** Clear tracked UUIDs for a thread (call on completion to avoid memory leaks). */
3
- export declare function clearPostedUuids(threadId: string): void;
4
- /** Skip posting if this event's UUID was already sent. Returns true if duplicate. */
5
- export declare function isAlreadyPosted(threadId: string, message: SDKMessage): boolean;
6
- export declare function postToConvex(path: string, body: Record<string, unknown>, retries?: number): Promise<boolean>;
2
+ interface StreamingTool {
3
+ toolUseId: string;
4
+ toolName: string;
5
+ input?: Record<string, unknown>;
6
+ startedAt: number;
7
+ }
8
+ export declare function enqueueStreamText(threadId: string, delta: string): void;
9
+ export declare function enqueueStreamingTools(threadId: string, tools: StreamingTool[]): void;
10
+ /** Force-drain the buffer to Convex and wait for the round-trip. */
11
+ export declare function flushStream(threadId: string): Promise<void>;
12
+ /** Drop any buffered preview without flushing — call after stream end. */
13
+ export declare function clearStreamBuffer(threadId: string): void;
14
+ /**
15
+ * Persist an assistant event. Drains any in-flight stream preview first so
16
+ * Convex sees [..stream..][event] in order; the mutation clears streamingState
17
+ * inline so the UI snaps from preview to persisted text without a flicker.
18
+ *
19
+ * Non-assistant events (system, result) are not persisted.
20
+ */
21
+ export declare function postEvent(threadId: string, message: SDKMessage, model?: string): Promise<boolean>;
22
+ export declare function postRouterSample(threadId: string, model: string, messages: Array<{
23
+ role: string;
24
+ content: string;
25
+ }>): Promise<void>;
26
+ export declare function postInputRequest(threadId: string, toolUseId: string, questions: unknown): Promise<boolean>;
27
+ export declare function postInputResolved(threadId: string): Promise<boolean>;
28
+ export declare function signalComplete(threadId: string, costUsd: number, isError: boolean, errors?: string[], model?: string): Promise<boolean>;
29
+ export {};
7
30
  //# sourceMappingURL=convex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"convex.d.ts","sourceRoot":"","sources":["../../src/hono/convex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAiEjE,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAG9E;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CA4C7G"}
1
+ {"version":3,"file":"convex.d.ts","sourceRoot":"","sources":["../../src/hono/convex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AA0HjE,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAiED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAWvE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI,CAIpF;AAED,oEAAoE;AACpE,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWjE;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMxD;AAMD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUvG;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACjD,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1G;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpE;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAUlB"}