@koda-sl/baker-bridge 0.39.14 → 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.
- package/README.md +40 -11
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +1 -1
- package/dist/hono/agent-session.d.ts +67 -0
- package/dist/hono/agent-session.d.ts.map +1 -0
- package/dist/hono/agent-session.js +235 -0
- package/dist/hono/agent-session.js.map +1 -0
- package/dist/hono/agent-session.test.d.ts +2 -0
- package/dist/hono/agent-session.test.d.ts.map +1 -0
- package/dist/hono/agent-session.test.js +297 -0
- package/dist/hono/agent-session.test.js.map +1 -0
- package/dist/hono/agent.d.ts +19 -43
- package/dist/hono/agent.d.ts.map +1 -1
- package/dist/hono/agent.js +152 -481
- package/dist/hono/agent.js.map +1 -1
- package/dist/hono/agent.test.js +209 -59
- package/dist/hono/agent.test.js.map +1 -1
- package/dist/hono/attachments.d.ts +0 -9
- package/dist/hono/attachments.d.ts.map +1 -1
- package/dist/hono/attachments.js +35 -31
- package/dist/hono/attachments.js.map +1 -1
- package/dist/hono/bridge-job.d.ts +129 -0
- package/dist/hono/bridge-job.d.ts.map +1 -0
- package/dist/hono/bridge-job.js +399 -0
- package/dist/hono/bridge-job.js.map +1 -0
- package/dist/hono/bridge-job.test.d.ts +2 -0
- package/dist/hono/bridge-job.test.d.ts.map +1 -0
- package/dist/hono/bridge-job.test.js +563 -0
- package/dist/hono/bridge-job.test.js.map +1 -0
- package/dist/hono/convex.d.ts +2 -8
- package/dist/hono/convex.d.ts.map +1 -1
- package/dist/hono/convex.js +76 -185
- package/dist/hono/convex.js.map +1 -1
- package/dist/hono/relay.d.ts +101 -0
- package/dist/hono/relay.d.ts.map +1 -0
- package/dist/hono/relay.js +205 -0
- package/dist/hono/relay.js.map +1 -0
- package/dist/hono/relay.test.d.ts +2 -0
- package/dist/hono/relay.test.d.ts.map +1 -0
- package/dist/hono/relay.test.js +225 -0
- package/dist/hono/relay.test.js.map +1 -0
- package/dist/hono/repo-context.d.ts.map +1 -1
- package/dist/hono/repo-context.js +5 -5
- package/dist/hono/repo-context.js.map +1 -1
- package/dist/hono/runtime-files.d.ts +58 -0
- package/dist/hono/runtime-files.d.ts.map +1 -0
- package/dist/hono/runtime-files.js +82 -0
- package/dist/hono/runtime-files.js.map +1 -0
- package/dist/hono/runtime-files.test.d.ts +2 -0
- package/dist/hono/runtime-files.test.d.ts.map +1 -0
- package/dist/hono/runtime-files.test.js +43 -0
- package/dist/hono/runtime-files.test.js.map +1 -0
- package/dist/hono/sandbox-content.d.ts +43 -0
- package/dist/hono/sandbox-content.d.ts.map +1 -0
- package/dist/hono/sandbox-content.js +136 -0
- package/dist/hono/sandbox-content.js.map +1 -0
- package/dist/hono/sandbox-content.test.d.ts +2 -0
- package/dist/hono/sandbox-content.test.d.ts.map +1 -0
- package/dist/hono/sandbox-content.test.js +107 -0
- package/dist/hono/sandbox-content.test.js.map +1 -0
- package/dist/hono/server.d.ts +6 -1
- package/dist/hono/server.d.ts.map +1 -1
- package/dist/hono/server.js +45 -120
- package/dist/hono/server.js.map +1 -1
- package/dist/hono/server.test.js +2 -4
- package/dist/hono/server.test.js.map +1 -1
- package/dist/hono/session-continuity.d.ts +31 -0
- package/dist/hono/session-continuity.d.ts.map +1 -0
- package/dist/hono/session-continuity.integration.test.d.ts +2 -0
- package/dist/hono/session-continuity.integration.test.d.ts.map +1 -0
- package/dist/hono/session-continuity.integration.test.js +435 -0
- package/dist/hono/session-continuity.integration.test.js.map +1 -0
- package/dist/hono/session-continuity.js +91 -0
- package/dist/hono/session-continuity.js.map +1 -0
- package/dist/hono/session-store.d.ts +17 -3
- package/dist/hono/session-store.d.ts.map +1 -1
- package/dist/hono/session-store.js +56 -13
- package/dist/hono/session-store.js.map +1 -1
- package/package.json +6 -4
package/README.md
CHANGED
|
@@ -112,9 +112,10 @@ Convex action ──POST /message/async──▶ Bridge AgentSession
|
|
|
112
112
|
- **Stop button** flips the thread to `cancelled` via Convex first (UI is
|
|
113
113
|
freed immediately) and best-effort POSTs `/message/abort` to kill the SDK.
|
|
114
114
|
- **AskUserQuestion** posts `/api/chat/input-request` and blocks until the
|
|
115
|
-
dashboard answers via Convex action → bridge `/answer-question
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
dashboard answers via Convex action → bridge `/answer-question`, with a 15m
|
|
116
|
+
bridge-side timeout so unanswered questions do not leave runs hanging forever.
|
|
117
|
+
Convex persists the answer before proxying it so a bridge restart does not
|
|
118
|
+
erase the user's response.
|
|
118
119
|
- **Turn Result changes and output guards** use Claude Agent SDK structured
|
|
119
120
|
output. Convex sends the current accumulated `chat.changes` snapshot as
|
|
120
121
|
context; the bridge asks the SDK for the full satisfied-artifact snapshot and
|
|
@@ -129,7 +130,7 @@ Convex action ──POST /message/async──▶ Bridge AgentSession
|
|
|
129
130
|
Summary.
|
|
130
131
|
- **Context source diagnostics** go to `/api/chat/context` so support can tell
|
|
131
132
|
whether a turn used `local_resume`, `rehydrated_missing_session`,
|
|
132
|
-
`rehydrated_invalid_resume`, or `
|
|
133
|
+
`rehydrated_invalid_resume`, or hit `rehydration_failed`.
|
|
133
134
|
|
|
134
135
|
## Attachment validation
|
|
135
136
|
|
|
@@ -159,8 +160,8 @@ oversized images still block the commit.
|
|
|
159
160
|
## Resilience
|
|
160
161
|
|
|
161
162
|
- All Convex POSTs retry 3× with exponential backoff (1s, 2s, 4s).
|
|
162
|
-
- Persistent failures of
|
|
163
|
-
|
|
163
|
+
- Persistent failures of non-silent Convex callbacks are appended to
|
|
164
|
+
`~/.baker/relay-errors.jsonl` for post-mortem.
|
|
164
165
|
- The SDK iterator is wrapped in a 30 min watchdog: if no event arrives for
|
|
165
166
|
that long, the run is aborted and the thread is marked errored.
|
|
166
167
|
- A 45s heartbeat keeps the Convex thread alive during long tool executions
|
|
@@ -169,9 +170,16 @@ oversized images still block the commit.
|
|
|
169
170
|
`~/.baker/relay-errors.jsonl` with the thread and turn ids for diagnosis.
|
|
170
171
|
- The session registry evicts entries idle for >24h to bound memory.
|
|
171
172
|
- Convex dispatches include a bounded rendered current-thread history snapshot.
|
|
172
|
-
The bridge uses
|
|
173
|
-
persisted transcript when the session
|
|
174
|
-
resume is retried at most once before surfacing an error.
|
|
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
|
|
175
183
|
metadata is rendered by Convex, capped, and counted against the same
|
|
176
184
|
deterministic history budget.
|
|
177
185
|
- Each dispatched turn carries an explicit `turnId`; bridge callbacks preserve
|
|
@@ -197,13 +205,34 @@ returned in the dispatch response besides 202.
|
|
|
197
205
|
|
|
198
206
|
- **One session per thread** — `getOrCreateSession(threadId)` ensures every
|
|
199
207
|
message on the same thread shares an `AgentSession`. Multi-turn context uses
|
|
200
|
-
`~/.baker/sessions/<threadId>.json` as the fast path
|
|
201
|
-
|
|
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.
|
|
202
212
|
- **Run-token cancellation** — each call to `sendAndStream` mints a Symbol; if
|
|
203
213
|
the symbol changes (abort, replace) the run cleans up and exits without
|
|
204
214
|
writing further. No globally-mutable abort flag.
|
|
205
215
|
- **Single-writer to Convex** — there is no parallel WebSocket. Convex is the
|
|
206
216
|
only place the UI reads state from, eliminating dual-write races.
|
|
217
|
+
- **Relay-owned callbacks** — stream preview buffering, callback ordering, heartbeat
|
|
218
|
+
delivery, and completion drain behavior live behind the Relay module so callback
|
|
219
|
+
behavior is tested at the Bridge-to-Convex seam.
|
|
220
|
+
- **Bridge Job execution** — one dispatched turn is executed by the Bridge Job
|
|
221
|
+
executor, which owns prompt preparation, SDK query/resume fallback, message
|
|
222
|
+
consumption, AskUserQuestion blocking, output guards, and final outcome
|
|
223
|
+
classification while `AgentSession` stays focused on thread continuity and
|
|
224
|
+
active-run replacement.
|
|
225
|
+
- **Agent Session coordination** — per-thread sessions own active Bridge Job
|
|
226
|
+
replacement/drain, abort propagation, pending AskUserQuestion answers, and
|
|
227
|
+
idle eviction while preserving the public `/message/*` and `/answer-question`
|
|
228
|
+
endpoint behavior.
|
|
229
|
+
- **Sandbox Content API** — local file-backed `/company`, `/brand`, `/knowledge`,
|
|
230
|
+
`/landings`, `/documents`, and `/flows` endpoints share one content module for
|
|
231
|
+
slug/path safety, markdown cleanup, flow encryption/decryption, and document
|
|
232
|
+
format lookup while keeping HTTP response shapes unchanged.
|
|
233
|
+
- **Bridge Local Runtime Files** — session continuity, attachments, Relay Error
|
|
234
|
+
logs, and sandbox content roots derive their filesystem locations from one
|
|
235
|
+
runtime-files module, keeping production paths stable while tests use temp roots.
|
|
207
236
|
|
|
208
237
|
## Development
|
|
209
238
|
|
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.
|
|
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
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { BridgeJob, BridgeJobControls, BridgeJobOutcome } from "./bridge-job.ts";
|
|
2
|
+
type AskUserAnswer = {
|
|
3
|
+
toolUseId: string;
|
|
4
|
+
answers: Record<string, string>;
|
|
5
|
+
};
|
|
6
|
+
export type AgentSessionExecutor = {
|
|
7
|
+
execute(job: BridgeJob, controls: BridgeJobControls): Promise<BridgeJobOutcome>;
|
|
8
|
+
};
|
|
9
|
+
type AgentSessionDependencies = {
|
|
10
|
+
createExecutor(): AgentSessionExecutor;
|
|
11
|
+
complete(outcome: BridgeJobOutcome, job: BridgeJob, runToken: symbol): Promise<void>;
|
|
12
|
+
heartbeat(job: BridgeJob): Promise<void>;
|
|
13
|
+
beforeReplace?(): Promise<void>;
|
|
14
|
+
replaceTimeoutMs?: number;
|
|
15
|
+
heartbeatIntervalMs?: number;
|
|
16
|
+
sdkWatchdogMs?: number;
|
|
17
|
+
watchdogIntervalMs?: number;
|
|
18
|
+
now?: () => number;
|
|
19
|
+
};
|
|
20
|
+
export declare class AgentSession {
|
|
21
|
+
readonly threadId: string;
|
|
22
|
+
private readonly dependencies;
|
|
23
|
+
private readonly pendingQuestions;
|
|
24
|
+
private activeRun;
|
|
25
|
+
private continuityRun;
|
|
26
|
+
private activeAbort;
|
|
27
|
+
private streamingPromise;
|
|
28
|
+
private latestStartSequence;
|
|
29
|
+
private readonly suppressedCompletionRuns;
|
|
30
|
+
lastUsedAt: number;
|
|
31
|
+
constructor(threadId: string, dependencies: AgentSessionDependencies);
|
|
32
|
+
start(job: BridgeJob): Promise<void>;
|
|
33
|
+
abort(): symbol | null;
|
|
34
|
+
private drainPreviousStreamForReplacement;
|
|
35
|
+
private previousStreamTimeout;
|
|
36
|
+
answer(input: AskUserAnswer): boolean;
|
|
37
|
+
isContinuityMutationCurrent(runToken: symbol): boolean;
|
|
38
|
+
markContinuityCommitted(runToken: symbol): void;
|
|
39
|
+
private abortForReplacement;
|
|
40
|
+
private abortRun;
|
|
41
|
+
private abortCurrentRun;
|
|
42
|
+
private run;
|
|
43
|
+
private clearRunState;
|
|
44
|
+
}
|
|
45
|
+
type AgentSessionRegistryDependencies<TSession extends {
|
|
46
|
+
lastUsedAt: number;
|
|
47
|
+
abort(): unknown;
|
|
48
|
+
}> = {
|
|
49
|
+
createSession(threadId: string): TSession | Promise<TSession>;
|
|
50
|
+
idleTtlMs: number;
|
|
51
|
+
now?: () => number;
|
|
52
|
+
};
|
|
53
|
+
export declare class AgentSessionRegistry<TSession extends {
|
|
54
|
+
lastUsedAt: number;
|
|
55
|
+
abort(): unknown;
|
|
56
|
+
} = AgentSession> {
|
|
57
|
+
private readonly sessions;
|
|
58
|
+
private readonly pendingSessions;
|
|
59
|
+
private readonly dependencies;
|
|
60
|
+
constructor(dependencies: AgentSessionRegistryDependencies<TSession>);
|
|
61
|
+
get(threadId: string): Promise<TSession>;
|
|
62
|
+
abort(threadId: string): boolean;
|
|
63
|
+
sweepIdle(now?: number): void;
|
|
64
|
+
has(threadId: string): boolean;
|
|
65
|
+
}
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=agent-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/hono/agent-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
const DEFAULT_REPLACE_TIMEOUT_MS = 30_000;
|
|
2
|
+
const DEFAULT_HEARTBEAT_INTERVAL_MS = 45_000;
|
|
3
|
+
const DEFAULT_SDK_WATCHDOG_MS = 30 * 60 * 1000;
|
|
4
|
+
const DEFAULT_WATCHDOG_INTERVAL_MS = 30_000;
|
|
5
|
+
export class AgentSession {
|
|
6
|
+
threadId;
|
|
7
|
+
dependencies;
|
|
8
|
+
pendingQuestions = new Map();
|
|
9
|
+
activeRun = null;
|
|
10
|
+
continuityRun = null;
|
|
11
|
+
activeAbort = null;
|
|
12
|
+
streamingPromise = null;
|
|
13
|
+
latestStartSequence = 0;
|
|
14
|
+
suppressedCompletionRuns = new Set();
|
|
15
|
+
lastUsedAt;
|
|
16
|
+
constructor(threadId, dependencies) {
|
|
17
|
+
this.threadId = threadId;
|
|
18
|
+
this.dependencies = dependencies;
|
|
19
|
+
this.lastUsedAt = (dependencies.now ?? Date.now)();
|
|
20
|
+
}
|
|
21
|
+
async start(job) {
|
|
22
|
+
const startSequence = ++this.latestStartSequence;
|
|
23
|
+
if (this.streamingPromise) {
|
|
24
|
+
await this.drainPreviousStreamForReplacement();
|
|
25
|
+
if (startSequence !== this.latestStartSequence) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const runPromise = this.run(job);
|
|
30
|
+
this.streamingPromise = runPromise;
|
|
31
|
+
try {
|
|
32
|
+
await runPromise;
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
if (this.streamingPromise === runPromise) {
|
|
36
|
+
this.streamingPromise = null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
abort() {
|
|
41
|
+
return this.abortCurrentRun();
|
|
42
|
+
}
|
|
43
|
+
async drainPreviousStreamForReplacement() {
|
|
44
|
+
const previousPromise = this.streamingPromise;
|
|
45
|
+
if (!previousPromise) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const continuityRunToReplace = this.continuityRun;
|
|
49
|
+
const shouldClearContinuity = continuityRunToReplace !== null;
|
|
50
|
+
if (continuityRunToReplace) {
|
|
51
|
+
this.suppressedCompletionRuns.add(continuityRunToReplace);
|
|
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));
|
|
74
|
+
}
|
|
75
|
+
answer(input) {
|
|
76
|
+
const pending = this.pendingQuestions.get(input.toolUseId);
|
|
77
|
+
if (!pending) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
pending.resolve(input.answers);
|
|
81
|
+
this.pendingQuestions.delete(input.toolUseId);
|
|
82
|
+
return true;
|
|
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
|
+
}
|
|
118
|
+
async run(job) {
|
|
119
|
+
const runToken = Symbol("agent-run");
|
|
120
|
+
this.activeRun = runToken;
|
|
121
|
+
this.continuityRun = runToken;
|
|
122
|
+
this.lastUsedAt = (this.dependencies.now ?? Date.now)();
|
|
123
|
+
const abortController = new AbortController();
|
|
124
|
+
this.activeAbort = abortController;
|
|
125
|
+
let lastEventAt = (this.dependencies.now ?? Date.now)();
|
|
126
|
+
const heartbeat = setInterval(() => void this.dependencies.heartbeat(job), this.dependencies.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS).unref();
|
|
127
|
+
const watchdog = setInterval(() => {
|
|
128
|
+
const now = (this.dependencies.now ?? Date.now)();
|
|
129
|
+
if (now - lastEventAt <= (this.dependencies.sdkWatchdogMs ?? DEFAULT_SDK_WATCHDOG_MS)) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
console.error(`[AgentSession] watchdog: no SDK event for ${this.dependencies.sdkWatchdogMs ?? DEFAULT_SDK_WATCHDOG_MS}ms — aborting thread ${this.threadId}`);
|
|
133
|
+
this.abortRun(runToken);
|
|
134
|
+
}, this.dependencies.watchdogIntervalMs ?? DEFAULT_WATCHDOG_INTERVAL_MS).unref();
|
|
135
|
+
try {
|
|
136
|
+
let outcome;
|
|
137
|
+
try {
|
|
138
|
+
outcome = await this.dependencies.createExecutor().execute(job, {
|
|
139
|
+
runToken,
|
|
140
|
+
abortSignal: abortController.signal,
|
|
141
|
+
abortController,
|
|
142
|
+
pendingQuestions: this.pendingQuestions,
|
|
143
|
+
markEvent: () => {
|
|
144
|
+
lastEventAt = (this.dependencies.now ?? Date.now)();
|
|
145
|
+
this.lastUsedAt = lastEventAt;
|
|
146
|
+
},
|
|
147
|
+
isActive: () => this.activeRun === runToken,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
outcome =
|
|
152
|
+
this.activeRun === runToken
|
|
153
|
+
? { kind: "errored", costUsd: 0, errors: [errorMessage(error)] }
|
|
154
|
+
: { kind: "cancelled", costUsd: 0 };
|
|
155
|
+
}
|
|
156
|
+
if (outcome.kind === "cancelled" || this.activeRun !== runToken) {
|
|
157
|
+
if (!this.suppressedCompletionRuns.has(runToken)) {
|
|
158
|
+
await this.dependencies.complete({ kind: "cancelled", costUsd: outcome.costUsd, model: outcome.model }, job, runToken);
|
|
159
|
+
}
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
await this.dependencies.complete(outcome, job, runToken);
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
clearInterval(heartbeat);
|
|
166
|
+
clearInterval(watchdog);
|
|
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;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
export class AgentSessionRegistry {
|
|
184
|
+
sessions = new Map();
|
|
185
|
+
pendingSessions = new Map();
|
|
186
|
+
dependencies;
|
|
187
|
+
constructor(dependencies) {
|
|
188
|
+
this.dependencies = dependencies;
|
|
189
|
+
}
|
|
190
|
+
async get(threadId) {
|
|
191
|
+
const existing = this.sessions.get(threadId);
|
|
192
|
+
if (existing) {
|
|
193
|
+
existing.lastUsedAt = (this.dependencies.now ?? Date.now)();
|
|
194
|
+
return existing;
|
|
195
|
+
}
|
|
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
|
+
}
|
|
212
|
+
}
|
|
213
|
+
abort(threadId) {
|
|
214
|
+
const session = this.sessions.get(threadId);
|
|
215
|
+
if (!session) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
return Boolean(session.abort());
|
|
219
|
+
}
|
|
220
|
+
sweepIdle(now = (this.dependencies.now ?? Date.now)()) {
|
|
221
|
+
const cutoff = now - this.dependencies.idleTtlMs;
|
|
222
|
+
for (const [threadId, session] of this.sessions) {
|
|
223
|
+
if (session.lastUsedAt < cutoff) {
|
|
224
|
+
this.sessions.delete(threadId);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
has(threadId) {
|
|
229
|
+
return this.sessions.has(threadId);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function errorMessage(error) {
|
|
233
|
+
return error instanceof Error ? error.message : String(error);
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=agent-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/hono/agent-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-session.test.d.ts","sourceRoot":"","sources":["../../src/hono/agent-session.test.ts"],"names":[],"mappings":""}
|