@koda-sl/baker-bridge 0.39.20 → 0.39.24-dev.b4473486

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.
Files changed (34) hide show
  1. package/README.md +15 -6
  2. package/dist/cli.d.ts +1 -1
  3. package/dist/cli.js +1 -1
  4. package/dist/hono/agent-session.d.ts +17 -5
  5. package/dist/hono/agent-session.d.ts.map +1 -1
  6. package/dist/hono/agent-session.js +108 -38
  7. package/dist/hono/agent-session.js.map +1 -1
  8. package/dist/hono/agent-session.test.js +147 -1
  9. package/dist/hono/agent-session.test.js.map +1 -1
  10. package/dist/hono/agent.d.ts +12 -5
  11. package/dist/hono/agent.d.ts.map +1 -1
  12. package/dist/hono/agent.js +79 -29
  13. package/dist/hono/agent.js.map +1 -1
  14. package/dist/hono/agent.test.js +209 -59
  15. package/dist/hono/agent.test.js.map +1 -1
  16. package/dist/hono/bridge-job.d.ts +29 -20
  17. package/dist/hono/bridge-job.d.ts.map +1 -1
  18. package/dist/hono/bridge-job.js +199 -126
  19. package/dist/hono/bridge-job.js.map +1 -1
  20. package/dist/hono/bridge-job.test.js +296 -65
  21. package/dist/hono/bridge-job.test.js.map +1 -1
  22. package/dist/hono/session-continuity.d.ts +31 -0
  23. package/dist/hono/session-continuity.d.ts.map +1 -0
  24. package/dist/hono/session-continuity.integration.test.d.ts +2 -0
  25. package/dist/hono/session-continuity.integration.test.d.ts.map +1 -0
  26. package/dist/hono/session-continuity.integration.test.js +435 -0
  27. package/dist/hono/session-continuity.integration.test.js.map +1 -0
  28. package/dist/hono/session-continuity.js +91 -0
  29. package/dist/hono/session-continuity.js.map +1 -0
  30. package/dist/hono/session-store.d.ts +17 -3
  31. package/dist/hono/session-store.d.ts.map +1 -1
  32. package/dist/hono/session-store.js +52 -14
  33. package/dist/hono/session-store.js.map +1 -1
  34. package/package.json +6 -4
package/README.md CHANGED
@@ -130,7 +130,7 @@ Convex action ──POST /message/async──▶ Bridge AgentSession
130
130
  Summary.
131
131
  - **Context source diagnostics** go to `/api/chat/context` so support can tell
132
132
  whether a turn used `local_resume`, `rehydrated_missing_session`,
133
- `rehydrated_invalid_resume`, or `rehydrated_repaired_tool_state`.
133
+ `rehydrated_invalid_resume`, or hit `rehydration_failed`.
134
134
 
135
135
  ## Attachment validation
136
136
 
@@ -170,9 +170,16 @@ oversized images still block the commit.
170
170
  `~/.baker/relay-errors.jsonl` with the thread and turn ids for diagnosis.
171
171
  - The session registry evicts entries idle for >24h to bound memory.
172
172
  - Convex dispatches include a bounded rendered current-thread history snapshot.
173
- The bridge uses the local SDK session id when valid, but falls back to this
174
- persisted transcript when the session file is missing or invalid; invalid
175
- resume is retried at most once before surfacing an error. Prior attachment
173
+ The bridge uses a local clean Claude session boundary when valid, but falls
174
+ back to this persisted transcript when the session boundary is missing or
175
+ invalid; invalid resume is retried at most once before surfacing an error.
176
+ Session ids observed before a non-error final SDK result are treated as
177
+ in-progress only and are never persisted as resumable state. Session-boundary
178
+ save/clear mutations are fenced to active runs and reconciled by generation,
179
+ so stale aborts or delayed cleanup from replaced runs cannot delete a newer
180
+ clean boundary. Session creation and replacement are single-flight per thread,
181
+ so concurrent dispatches cannot split continuity across duplicate runtime
182
+ sessions or let a stale watchdog abort the current replacement. Prior attachment
176
183
  metadata is rendered by Convex, capped, and counted against the same
177
184
  deterministic history budget.
178
185
  - Each dispatched turn carries an explicit `turnId`; bridge callbacks preserve
@@ -198,8 +205,10 @@ returned in the dispatch response besides 202.
198
205
 
199
206
  - **One session per thread** — `getOrCreateSession(threadId)` ensures every
200
207
  message on the same thread shares an `AgentSession`. Multi-turn context uses
201
- `~/.baker/sessions/<threadId>.json` as the fast path and Convex persisted
202
- current-thread history as the fallback when local continuity is unavailable.
208
+ `~/.baker/sessions/<threadId>.json` as the fast path only after Bridge has
209
+ persisted a v2 clean Claude session boundary. Convex persisted current-thread
210
+ history remains the fallback when local continuity is unavailable or legacy
211
+ `{ "sessionId": "..." }` files are encountered.
203
212
  - **Run-token cancellation** — each call to `sendAndStream` mints a Symbol; if
204
213
  the symbol changes (abort, replace) the run cleans up and exits without
205
214
  writing further. No globally-mutable abort flag.
package/dist/cli.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  declare const args: string[];
3
3
  declare const command: string;
4
- declare const VERSION = "0.39.12";
4
+ declare const VERSION = "0.39.24";
5
5
  declare function printUsage(): void;
6
6
  declare function main(): Promise<void>;
7
7
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.js CHANGED
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  const args = process.argv.slice(2);
4
4
  const command = args[0];
5
- const VERSION = "0.39.12";
5
+ const VERSION = "0.39.24";
6
6
  function printUsage() {
7
7
  console.error("Usage: baker-bridge <command>");
8
8
  console.error("");
@@ -8,8 +8,9 @@ export type AgentSessionExecutor = {
8
8
  };
9
9
  type AgentSessionDependencies = {
10
10
  createExecutor(): AgentSessionExecutor;
11
- complete(outcome: BridgeJobOutcome, job: BridgeJob): Promise<void>;
11
+ complete(outcome: BridgeJobOutcome, job: BridgeJob, runToken: symbol): Promise<void>;
12
12
  heartbeat(job: BridgeJob): Promise<void>;
13
+ beforeReplace?(): Promise<void>;
13
14
  replaceTimeoutMs?: number;
14
15
  heartbeatIntervalMs?: number;
15
16
  sdkWatchdogMs?: number;
@@ -21,19 +22,29 @@ export declare class AgentSession {
21
22
  private readonly dependencies;
22
23
  private readonly pendingQuestions;
23
24
  private activeRun;
25
+ private continuityRun;
24
26
  private activeAbort;
25
27
  private streamingPromise;
26
- private replacingStream;
28
+ private latestStartSequence;
29
+ private readonly suppressedCompletionRuns;
27
30
  lastUsedAt: number;
28
31
  constructor(threadId: string, dependencies: AgentSessionDependencies);
29
32
  start(job: BridgeJob): Promise<void>;
30
- abort(): void;
33
+ abort(): symbol | null;
34
+ private drainPreviousStreamForReplacement;
35
+ private previousStreamTimeout;
31
36
  answer(input: AskUserAnswer): boolean;
37
+ isContinuityMutationCurrent(runToken: symbol): boolean;
38
+ markContinuityCommitted(runToken: symbol): void;
39
+ private abortForReplacement;
40
+ private abortRun;
41
+ private abortCurrentRun;
32
42
  private run;
43
+ private clearRunState;
33
44
  }
34
45
  type AgentSessionRegistryDependencies<TSession extends {
35
46
  lastUsedAt: number;
36
- abort(): void;
47
+ abort(): unknown;
37
48
  }> = {
38
49
  createSession(threadId: string): TSession | Promise<TSession>;
39
50
  idleTtlMs: number;
@@ -41,9 +52,10 @@ type AgentSessionRegistryDependencies<TSession extends {
41
52
  };
42
53
  export declare class AgentSessionRegistry<TSession extends {
43
54
  lastUsedAt: number;
44
- abort(): void;
55
+ abort(): unknown;
45
56
  } = AgentSession> {
46
57
  private readonly sessions;
58
+ private readonly pendingSessions;
47
59
  private readonly dependencies;
48
60
  constructor(dependencies: AgentSessionRegistryDependencies<TSession>);
49
61
  get(threadId: string): Promise<TSession>;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/hono/agent-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAC;AAOvG,KAAK,aAAa,GAAG;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACjF,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,cAAc,IAAI,oBAAoB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,YAAY;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IACxD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsC;IACvE,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,eAAe,CAAS;IAChC,UAAU,EAAE,MAAM,CAAC;gBAEP,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,wBAAwB;IAM9D,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC1C,KAAK,IAAI,IAAI;IAYb,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;YAUvB,GAAG;CA2DlB;AAED,KAAK,gCAAgC,CAAC,QAAQ,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,IAAI,IAAI,CAAA;CAAE,IAAI;IAC9F,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,oBAAoB,CAAC,QAAQ,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,IAAI,IAAI,CAAA;CAAE,GAAG,YAAY;IACrG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;gBAE9D,YAAY,EAAE,gCAAgC,CAAC,QAAQ,CAAC;IAI9D,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAW9C,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAShC,SAAS,CAAC,GAAG,SAAwC,GAAG,IAAI;IAS5D,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAG/B"}
1
+ {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/hono/agent-session.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,11 @@ export class AgentSession {
7
7
  dependencies;
8
8
  pendingQuestions = new Map();
9
9
  activeRun = null;
10
+ continuityRun = null;
10
11
  activeAbort = null;
11
12
  streamingPromise = null;
12
- replacingStream = false;
13
+ latestStartSequence = 0;
14
+ suppressedCompletionRuns = new Set();
13
15
  lastUsedAt;
14
16
  constructor(threadId, dependencies) {
15
17
  this.threadId = threadId;
@@ -17,24 +19,11 @@ export class AgentSession {
17
19
  this.lastUsedAt = (dependencies.now ?? Date.now)();
18
20
  }
19
21
  async start(job) {
22
+ const startSequence = ++this.latestStartSequence;
20
23
  if (this.streamingPromise) {
21
- const previousPromise = this.streamingPromise;
22
- this.replacingStream = true;
23
- this.abort();
24
- try {
25
- await Promise.race([
26
- previousPromise,
27
- new Promise((_, reject) => setTimeout(() => reject(new Error("previous stream timed out")), this.dependencies.replaceTimeoutMs ?? DEFAULT_REPLACE_TIMEOUT_MS)),
28
- ]);
29
- }
30
- catch (err) {
31
- console.error(`[AgentSession] previous stream did not drain on thread ${this.threadId} — forcing reset:`, err instanceof Error ? err.message : err);
32
- }
33
- finally {
34
- if (this.streamingPromise === previousPromise) {
35
- this.streamingPromise = null;
36
- }
37
- this.replacingStream = false;
24
+ await this.drainPreviousStreamForReplacement();
25
+ if (startSequence !== this.latestStartSequence) {
26
+ return;
38
27
  }
39
28
  }
40
29
  const runPromise = this.run(job);
@@ -49,15 +38,39 @@ export class AgentSession {
49
38
  }
50
39
  }
51
40
  abort() {
52
- this.activeRun = null;
53
- if (this.activeAbort) {
54
- this.activeAbort.abort();
55
- this.activeAbort = null;
41
+ return this.abortCurrentRun();
42
+ }
43
+ async drainPreviousStreamForReplacement() {
44
+ const previousPromise = this.streamingPromise;
45
+ if (!previousPromise) {
46
+ return;
56
47
  }
57
- for (const [id, pending] of this.pendingQuestions) {
58
- this.pendingQuestions.delete(id);
59
- pending.reject(new Error("AskUserQuestion aborted"));
48
+ const continuityRunToReplace = this.continuityRun;
49
+ const shouldClearContinuity = continuityRunToReplace !== null;
50
+ if (continuityRunToReplace) {
51
+ this.suppressedCompletionRuns.add(continuityRunToReplace);
60
52
  }
53
+ this.abortForReplacement();
54
+ if (shouldClearContinuity) {
55
+ await this.dependencies.beforeReplace?.();
56
+ }
57
+ try {
58
+ await Promise.race([previousPromise, this.previousStreamTimeout()]);
59
+ }
60
+ catch (err) {
61
+ console.error(`[AgentSession] previous stream did not drain on thread ${this.threadId} — forcing reset:`, err instanceof Error ? err.message : err);
62
+ }
63
+ finally {
64
+ if (this.streamingPromise === previousPromise) {
65
+ this.streamingPromise = null;
66
+ }
67
+ if (shouldClearContinuity) {
68
+ await this.dependencies.beforeReplace?.();
69
+ }
70
+ }
71
+ }
72
+ previousStreamTimeout() {
73
+ return new Promise((_, reject) => setTimeout(() => reject(new Error("previous stream timed out")), this.dependencies.replaceTimeoutMs ?? DEFAULT_REPLACE_TIMEOUT_MS));
61
74
  }
62
75
  answer(input) {
63
76
  const pending = this.pendingQuestions.get(input.toolUseId);
@@ -68,9 +81,44 @@ export class AgentSession {
68
81
  this.pendingQuestions.delete(input.toolUseId);
69
82
  return true;
70
83
  }
84
+ isContinuityMutationCurrent(runToken) {
85
+ return this.continuityRun === runToken;
86
+ }
87
+ markContinuityCommitted(runToken) {
88
+ if (this.continuityRun === runToken) {
89
+ this.continuityRun = null;
90
+ }
91
+ }
92
+ abortForReplacement() {
93
+ const abortedRun = this.abortCurrentRun();
94
+ if (abortedRun) {
95
+ this.suppressedCompletionRuns.add(abortedRun);
96
+ }
97
+ return abortedRun;
98
+ }
99
+ abortRun(runToken) {
100
+ if (this.activeRun !== runToken) {
101
+ return null;
102
+ }
103
+ return this.abortCurrentRun();
104
+ }
105
+ abortCurrentRun() {
106
+ const abortedRun = this.activeRun;
107
+ this.activeRun = null;
108
+ if (this.activeAbort) {
109
+ this.activeAbort.abort();
110
+ this.activeAbort = null;
111
+ }
112
+ for (const [id, pending] of this.pendingQuestions) {
113
+ this.pendingQuestions.delete(id);
114
+ pending.reject(new Error("AskUserQuestion aborted"));
115
+ }
116
+ return abortedRun;
117
+ }
71
118
  async run(job) {
72
119
  const runToken = Symbol("agent-run");
73
120
  this.activeRun = runToken;
121
+ this.continuityRun = runToken;
74
122
  this.lastUsedAt = (this.dependencies.now ?? Date.now)();
75
123
  const abortController = new AbortController();
76
124
  this.activeAbort = abortController;
@@ -82,7 +130,7 @@ export class AgentSession {
82
130
  return;
83
131
  }
84
132
  console.error(`[AgentSession] watchdog: no SDK event for ${this.dependencies.sdkWatchdogMs ?? DEFAULT_SDK_WATCHDOG_MS}ms — aborting thread ${this.threadId}`);
85
- this.abort();
133
+ this.abortRun(runToken);
86
134
  }, this.dependencies.watchdogIntervalMs ?? DEFAULT_WATCHDOG_INTERVAL_MS).unref();
87
135
  try {
88
136
  let outcome;
@@ -106,25 +154,35 @@ export class AgentSession {
106
154
  : { kind: "cancelled", costUsd: 0 };
107
155
  }
108
156
  if (outcome.kind === "cancelled" || this.activeRun !== runToken) {
109
- const replacedByAnotherRun = this.replacingStream || this.activeRun !== null;
110
- if (!replacedByAnotherRun) {
111
- await this.dependencies.complete({ kind: "cancelled", costUsd: outcome.costUsd, model: outcome.model }, job);
157
+ if (!this.suppressedCompletionRuns.has(runToken)) {
158
+ await this.dependencies.complete({ kind: "cancelled", costUsd: outcome.costUsd, model: outcome.model }, job, runToken);
112
159
  }
113
160
  return;
114
161
  }
115
- await this.dependencies.complete(outcome, job);
162
+ await this.dependencies.complete(outcome, job, runToken);
116
163
  }
117
164
  finally {
118
165
  clearInterval(heartbeat);
119
166
  clearInterval(watchdog);
120
- if (this.activeAbort === abortController) {
121
- this.activeAbort = null;
122
- }
167
+ this.suppressedCompletionRuns.delete(runToken);
168
+ this.clearRunState(runToken, abortController);
169
+ }
170
+ }
171
+ clearRunState(runToken, abortController) {
172
+ if (this.activeAbort === abortController) {
173
+ this.activeAbort = null;
174
+ }
175
+ if (this.activeRun === runToken) {
176
+ this.activeRun = null;
177
+ }
178
+ if (this.continuityRun === runToken) {
179
+ this.continuityRun = null;
123
180
  }
124
181
  }
125
182
  }
126
183
  export class AgentSessionRegistry {
127
184
  sessions = new Map();
185
+ pendingSessions = new Map();
128
186
  dependencies;
129
187
  constructor(dependencies) {
130
188
  this.dependencies = dependencies;
@@ -135,17 +193,29 @@ export class AgentSessionRegistry {
135
193
  existing.lastUsedAt = (this.dependencies.now ?? Date.now)();
136
194
  return existing;
137
195
  }
138
- const session = await this.dependencies.createSession(threadId);
139
- this.sessions.set(threadId, session);
140
- return session;
196
+ const pending = this.pendingSessions.get(threadId);
197
+ if (pending) {
198
+ const session = await pending;
199
+ session.lastUsedAt = (this.dependencies.now ?? Date.now)();
200
+ return session;
201
+ }
202
+ const pendingSession = Promise.resolve(this.dependencies.createSession(threadId));
203
+ this.pendingSessions.set(threadId, pendingSession);
204
+ try {
205
+ const session = await pendingSession;
206
+ this.sessions.set(threadId, session);
207
+ return session;
208
+ }
209
+ finally {
210
+ this.pendingSessions.delete(threadId);
211
+ }
141
212
  }
142
213
  abort(threadId) {
143
214
  const session = this.sessions.get(threadId);
144
215
  if (!session) {
145
216
  return false;
146
217
  }
147
- session.abort();
148
- return true;
218
+ return Boolean(session.abort());
149
219
  }
150
220
  sweepIdle(now = (this.dependencies.now ?? Date.now)()) {
151
221
  const cutoff = now - this.dependencies.idleTtlMs;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/hono/agent-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/hono/agent-session.ts"],"names":[],"mappings":"AAEA,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAC7C,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/C,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAuB5C,MAAM,OAAO,YAAY;IACd,QAAQ,CAAS;IACT,YAAY,CAA2B;IACvC,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/D,SAAS,GAAkB,IAAI,CAAC;IAChC,aAAa,GAAkB,IAAI,CAAC;IACpC,WAAW,GAA2B,IAAI,CAAC;IAC3C,gBAAgB,GAAyB,IAAI,CAAC;IAC9C,mBAAmB,GAAG,CAAC,CAAC;IACf,wBAAwB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9D,UAAU,CAAS;IAEnB,YAAY,QAAgB,EAAE,YAAsC;QAClE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAc;QACxB,MAAM,aAAa,GAAG,EAAE,IAAI,CAAC,mBAAmB,CAAC;QACjD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,iCAAiC,EAAE,CAAC;YAC/C,IAAI,aAAa,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC/C,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,UAAU,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;gBACzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,iCAAiC;QAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC;QAClD,MAAM,qBAAqB,GAAG,sBAAsB,KAAK,IAAI,CAAC;QAC9D,IAAI,sBAAsB,EAAE,CAAC;YAC3B,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,qBAAqB,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,0DAA0D,IAAI,CAAC,QAAQ,mBAAmB,EAC1F,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,gBAAgB,KAAK,eAAe,EAAE,CAAC;gBAC9C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC/B,CAAC;YACD,IAAI,qBAAqB,EAAE,CAAC;gBAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,qBAAqB;QAC3B,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CACR,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,EACpD,IAAI,CAAC,YAAY,CAAC,gBAAgB,IAAI,0BAA0B,CACjE,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAoB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2BAA2B,CAAC,QAAgB;QAC1C,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC;IACzC,CAAC;IAED,uBAAuB,CAAC,QAAgB;QACtC,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,mBAAmB;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,QAAQ,CAAC,QAAgB;QAC/B,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAEO,eAAe;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAClD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,GAAG,CAAC,GAAc;QAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC;QACnC,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,WAAW,CAC3B,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,EAC3C,IAAI,CAAC,YAAY,CAAC,mBAAmB,IAAI,6BAA6B,CACvE,CAAC,KAAK,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,GAAG,GAAG,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,uBAAuB,CAAC,EAAE,CAAC;gBACtF,OAAO;YACT,CAAC;YACD,OAAO,CAAC,KAAK,CACX,6CAA6C,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,uBAAuB,wBAAwB,IAAI,CAAC,QAAQ,EAAE,CAC/I,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,IAAI,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;QAEjF,IAAI,CAAC;YACH,IAAI,OAAyB,CAAC;YAC9B,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;oBAC9D,QAAQ;oBACR,WAAW,EAAE,eAAe,CAAC,MAAM;oBACnC,eAAe;oBACf,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,SAAS,EAAE,GAAG,EAAE;wBACd,WAAW,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBACpD,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC;oBAChC,CAAC;oBACD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ;iBAC5C,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,IAAI,CAAC,SAAS,KAAK,QAAQ;wBACzB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;wBAChE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAC1C,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAChE,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjD,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAC9B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EACrE,GAAG,EACH,QAAQ,CACT,CAAC;gBACJ,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3D,CAAC;gBAAS,CAAC;YACT,aAAa,CAAC,SAAS,CAAC,CAAC;YACzB,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,QAAgB,EAAE,eAAgC;QACtE,IAAI,IAAI,CAAC,WAAW,KAAK,eAAe,EAAE,CAAC;YACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;CACF;AAQD,MAAM,OAAO,oBAAoB;IACd,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IACvC,eAAe,GAAG,IAAI,GAAG,EAA6B,CAAC;IACvD,YAAY,CAA6C;IAE1E,YAAY,YAAwD;QAClE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,QAAgB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5D,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrC,OAAO,OAAO,CAAC;QACjB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAgB;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;QACnD,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QACjD,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChD,IAAI,OAAO,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;CACF;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { describe, expect, it } from "vitest";
1
+ import { describe, expect, it, vi } from "vitest";
2
2
  import { AgentSession, AgentSessionRegistry } from "./agent-session.js";
3
3
  function deferred() {
4
4
  let resolve;
@@ -71,6 +71,130 @@ describe("AgentSession", () => {
71
71
  { turnId: "turn_2", outcome: { kind: "completed", costUsd: 0.5, model: "claude-opus-4-6" } },
72
72
  ]);
73
73
  });
74
+ it("runs only the latest replacement when multiple prompts arrive before the first drain finishes", async () => {
75
+ const firstDrain = deferred();
76
+ const executedTurns = [];
77
+ const completions = [];
78
+ const session = new AgentSession("thread_1", {
79
+ createExecutor: () => ({
80
+ execute(job) {
81
+ executedTurns.push(job.turnId);
82
+ if (job.turnId === "turn_1") {
83
+ return firstDrain.promise;
84
+ }
85
+ return Promise.resolve({ kind: "completed", costUsd: job.turnId === "turn_2" ? 0.2 : 0.3 });
86
+ },
87
+ }),
88
+ complete: (outcome, job) => {
89
+ completions.push({ turnId: job.turnId, outcome });
90
+ return Promise.resolve();
91
+ },
92
+ heartbeat: () => Promise.resolve(),
93
+ replaceTimeoutMs: 100,
94
+ });
95
+ const first = session.start({ threadId: "thread_1", turnId: "turn_1", prompt: "first" });
96
+ await Promise.resolve();
97
+ const second = session.start({ threadId: "thread_1", turnId: "turn_2", prompt: "second" });
98
+ await Promise.resolve();
99
+ const third = session.start({ threadId: "thread_1", turnId: "turn_3", prompt: "third" });
100
+ await Promise.resolve();
101
+ firstDrain.resolve({ kind: "cancelled", costUsd: 0.1 });
102
+ await expect(Promise.all([first, second, third])).resolves.toEqual([undefined, undefined, undefined]);
103
+ expect(executedTurns).toEqual(["turn_1", "turn_3"]);
104
+ expect(completions).toEqual([{ turnId: "turn_3", outcome: { kind: "completed", costUsd: 0.3 } }]);
105
+ });
106
+ it("clears continuity before replacing a watchdog-aborted run that has not drained", async () => {
107
+ vi.useFakeTimers();
108
+ try {
109
+ const firstDrain = deferred();
110
+ const executedTurns = [];
111
+ const completions = [];
112
+ let beforeReplaceCalls = 0;
113
+ const session = new AgentSession("thread_1", {
114
+ createExecutor: () => ({
115
+ execute(job) {
116
+ executedTurns.push(job.turnId);
117
+ if (job.turnId === "turn_1") {
118
+ return firstDrain.promise;
119
+ }
120
+ return Promise.resolve({ kind: "completed", costUsd: 0.2 });
121
+ },
122
+ }),
123
+ complete: (outcome, job) => {
124
+ completions.push({ turnId: job.turnId, outcome });
125
+ return Promise.resolve();
126
+ },
127
+ heartbeat: () => Promise.resolve(),
128
+ beforeReplace: () => {
129
+ beforeReplaceCalls += 1;
130
+ return Promise.resolve();
131
+ },
132
+ replaceTimeoutMs: 1,
133
+ sdkWatchdogMs: 1,
134
+ watchdogIntervalMs: 1,
135
+ });
136
+ const first = session.start({ threadId: "thread_1", turnId: "turn_1", prompt: "first" });
137
+ await Promise.resolve();
138
+ await vi.advanceTimersByTimeAsync(2);
139
+ const replacement = session.start({ threadId: "thread_1", turnId: "turn_2", prompt: "replacement" });
140
+ await vi.advanceTimersByTimeAsync(1);
141
+ await replacement;
142
+ firstDrain.resolve({ kind: "cancelled", costUsd: 0.1 });
143
+ await first;
144
+ expect(executedTurns).toEqual(["turn_1", "turn_2"]);
145
+ expect(beforeReplaceCalls).toBeGreaterThan(0);
146
+ expect(completions).toEqual([{ turnId: "turn_2", outcome: { kind: "completed", costUsd: 0.2 } }]);
147
+ }
148
+ finally {
149
+ vi.useRealTimers();
150
+ }
151
+ });
152
+ it("keeps a stale watchdog from aborting the current replacement", async () => {
153
+ vi.useFakeTimers();
154
+ try {
155
+ const firstDrain = deferred();
156
+ const currentDrain = deferred();
157
+ const abortedTurns = [];
158
+ const executedTurns = [];
159
+ const completions = [];
160
+ const session = new AgentSession("thread_1", {
161
+ createExecutor: () => ({
162
+ execute(job, controls) {
163
+ executedTurns.push(job.turnId);
164
+ controls.abortSignal.addEventListener("abort", () => abortedTurns.push(job.turnId), { once: true });
165
+ if (job.turnId === "turn_1") {
166
+ return firstDrain.promise;
167
+ }
168
+ return currentDrain.promise;
169
+ },
170
+ }),
171
+ complete: (outcome, job) => {
172
+ completions.push({ turnId: job.turnId, outcome });
173
+ return Promise.resolve();
174
+ },
175
+ heartbeat: () => Promise.resolve(),
176
+ replaceTimeoutMs: 1,
177
+ sdkWatchdogMs: 10,
178
+ watchdogIntervalMs: 1,
179
+ });
180
+ const first = session.start({ threadId: "thread_1", turnId: "turn_1", prompt: "first" });
181
+ await Promise.resolve();
182
+ const replacement = session.start({ threadId: "thread_1", turnId: "turn_2", prompt: "replacement" });
183
+ await vi.advanceTimersByTimeAsync(1);
184
+ await Promise.resolve();
185
+ expect(executedTurns).toEqual(["turn_1", "turn_2"]);
186
+ await vi.advanceTimersByTimeAsync(10);
187
+ expect(abortedTurns).toEqual(["turn_1"]);
188
+ currentDrain.resolve({ kind: "completed", costUsd: 0.4 });
189
+ await replacement;
190
+ firstDrain.resolve({ kind: "cancelled", costUsd: 0.1 });
191
+ await first;
192
+ expect(completions).toEqual([{ turnId: "turn_2", outcome: { kind: "completed", costUsd: 0.4 } }]);
193
+ }
194
+ finally {
195
+ vi.useRealTimers();
196
+ }
197
+ });
74
198
  it("aborts a Bridge Job when the SDK watchdog expires", async () => {
75
199
  const completions = [];
76
200
  const abortedTurns = [];
@@ -126,6 +250,28 @@ describe("AgentSession", () => {
126
250
  });
127
251
  });
128
252
  describe("AgentSessionRegistry", () => {
253
+ it("returns the same session while first creation is still loading", async () => {
254
+ const creationAllowed = deferred();
255
+ let createCalls = 0;
256
+ const registry = new AgentSessionRegistry({
257
+ createSession: async (threadId) => {
258
+ createCalls += 1;
259
+ await creationAllowed.promise;
260
+ return new AgentSession(threadId, {
261
+ createExecutor: () => ({ execute: () => Promise.resolve({ kind: "completed", costUsd: 0 }) }),
262
+ complete: () => Promise.resolve(),
263
+ heartbeat: () => Promise.resolve(),
264
+ });
265
+ },
266
+ idleTtlMs: 100,
267
+ });
268
+ const first = registry.get("thread_1");
269
+ const second = registry.get("thread_1");
270
+ creationAllowed.resolve(undefined);
271
+ const [firstSession, secondSession] = await Promise.all([first, second]);
272
+ expect(createCalls).toBe(1);
273
+ expect(firstSession).toBe(secondSession);
274
+ });
129
275
  it("evicts only sessions idle beyond the TTL", async () => {
130
276
  let now = 1_000;
131
277
  const registry = new AgentSessionRegistry({
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session.test.js","sourceRoot":"","sources":["../../src/hono/agent-session.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-session.test.js","sourceRoot":"","sources":["../../src/hono/agent-session.test.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,28 @@
1
1
  import type { SlashCommand } from "@anthropic-ai/claude-agent-sdk";
2
+ import { type ClaudeSessionBoundary } from "./session-store.ts";
2
3
  import type { ChatAttachment, ChatChange, DispatchHistorySnapshot } from "./types.ts";
3
4
  export declare function buildRehydratedPrompt(content: string, history?: DispatchHistorySnapshot): string;
4
5
  export declare function isResumeSessionError(error: unknown): boolean;
5
- export declare function isRecoverableToolUseConcurrencyError(error: unknown): boolean;
6
6
  declare class BridgeRuntimeSession {
7
7
  readonly threadId: string;
8
- private sessionId;
8
+ private boundary;
9
9
  private model;
10
+ private continuityGeneration;
10
11
  private readonly agentSession;
11
- constructor(threadId: string);
12
+ constructor(threadId: string, initialBoundary?: ClaudeSessionBoundary);
12
13
  get lastUsedAt(): number;
13
14
  set lastUsedAt(value: number);
14
- abort(): void;
15
- setSessionId(id: string): void;
15
+ abort(): boolean;
16
16
  resolveQuestion(toolUseId: string, answers: Record<string, string>): boolean;
17
17
  sendAndStream(content: string, attachments: ChatAttachment[] | undefined, history: DispatchHistorySnapshot | undefined, turnId: string, currentChanges?: ChatChange[]): Promise<void>;
18
18
  private createBridgeJobExecutor;
19
+ private saveBoundaryForRun;
20
+ private clearBoundaryForRun;
21
+ private clearCommittedBoundary;
22
+ private commitBoundary;
23
+ private nextContinuityGeneration;
24
+ private persistBoundarySnapshot;
25
+ private reconcilePersistedBoundaryAfter;
19
26
  private completeBridgeJobOutcome;
20
27
  private completeWithCancel;
21
28
  }