@voicethere/agent 0.2.11 → 0.2.13
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/dist/agent.js +205 -47
- package/dist/runner.d.ts +1 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +1 -1
- package/dist/runner.js.map +1 -1
- package/dist/runtime.d.ts +9 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +108 -23
- package/dist/runtime.js.map +1 -1
- package/dist/session-serial-queue.d.ts +51 -2
- package/dist/session-serial-queue.d.ts.map +1 -1
- package/dist/session-serial-queue.js +127 -10
- package/dist/session-serial-queue.js.map +1 -1
- package/package.json +4 -4
package/dist/agent.js
CHANGED
|
@@ -6,26 +6,122 @@ const require = createRequire(import.meta.url);
|
|
|
6
6
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
7
|
|
|
8
8
|
// src/session-serial-queue.ts
|
|
9
|
+
var SessionSerialQueueCancellationError = class extends Error {
|
|
10
|
+
constructor(sessionId, generation) {
|
|
11
|
+
super(
|
|
12
|
+
`session serial queue cancelled (sessionId=${sessionId}, generation=${generation})`
|
|
13
|
+
);
|
|
14
|
+
this.sessionId = sessionId;
|
|
15
|
+
this.generation = generation;
|
|
16
|
+
this.name = "SessionSerialQueueCancellationError";
|
|
17
|
+
}
|
|
18
|
+
code = "SESSION_SERIAL_QUEUE_CANCELLED";
|
|
19
|
+
};
|
|
9
20
|
var SessionSerialQueue = class {
|
|
10
|
-
|
|
21
|
+
sessions = /* @__PURE__ */ new Map();
|
|
22
|
+
/** Monotonic token source — never reused across clear/enqueue cycles. */
|
|
23
|
+
nextGeneration = 1;
|
|
24
|
+
/**
|
|
25
|
+
* Enqueue work for `sessionId`. Returns a promise that settles when this
|
|
26
|
+
* task finishes, is skipped as stale, or is cancelled by {@link clear}.
|
|
27
|
+
* Fire-and-forget callers may ignore the return value (compat).
|
|
28
|
+
*/
|
|
11
29
|
enqueue(sessionId, task) {
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
30
|
+
const state = this.ensureState(sessionId);
|
|
31
|
+
const captured = state;
|
|
32
|
+
const generation = captured.generation;
|
|
33
|
+
captured.pending += 1;
|
|
34
|
+
const previous = captured.tail;
|
|
35
|
+
let taskAbort = null;
|
|
36
|
+
const settled = previous.catch(() => void 0).then(async () => {
|
|
37
|
+
if (this.sessions.get(sessionId) !== captured) {
|
|
38
|
+
return "cancelled";
|
|
39
|
+
}
|
|
40
|
+
const abort = new AbortController();
|
|
41
|
+
taskAbort = abort;
|
|
42
|
+
captured.abort = abort;
|
|
43
|
+
const context = {
|
|
44
|
+
sessionId,
|
|
45
|
+
generation,
|
|
46
|
+
signal: abort.signal
|
|
47
|
+
};
|
|
48
|
+
try {
|
|
49
|
+
await Promise.resolve(
|
|
50
|
+
task(abort.signal, context)
|
|
51
|
+
);
|
|
52
|
+
if (this.sessions.get(sessionId) !== captured) {
|
|
53
|
+
return "cancelled";
|
|
54
|
+
}
|
|
55
|
+
return "completed";
|
|
56
|
+
} catch (error) {
|
|
57
|
+
if (abort.signal.aborted || this.sessions.get(sessionId) !== captured || error instanceof SessionSerialQueueCancellationError) {
|
|
58
|
+
return "cancelled";
|
|
59
|
+
}
|
|
60
|
+
return "failed";
|
|
61
|
+
} finally {
|
|
62
|
+
if (captured.abort === abort) {
|
|
63
|
+
captured.abort = null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}).finally(() => {
|
|
67
|
+
captured.pending = Math.max(0, captured.pending - 1);
|
|
68
|
+
if (taskAbort && captured.abort === taskAbort) {
|
|
69
|
+
captured.abort = null;
|
|
70
|
+
}
|
|
71
|
+
if (captured.pending === 0 && this.sessions.get(sessionId) === captured) {
|
|
72
|
+
this.sessions.delete(sessionId);
|
|
17
73
|
}
|
|
18
74
|
});
|
|
19
|
-
|
|
75
|
+
captured.tail = settled;
|
|
76
|
+
return settled;
|
|
20
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Invalidate queued + running work for `sessionId`. Aborts the live AbortSignal,
|
|
80
|
+
* drops the map entry, and leaves a fresh identity for the next enqueue.
|
|
81
|
+
* Old in-flight `finally` blocks only touch their captured state object.
|
|
82
|
+
*/
|
|
21
83
|
clear(sessionId) {
|
|
22
|
-
this.
|
|
84
|
+
const old = this.sessions.get(sessionId);
|
|
85
|
+
if (!old) return;
|
|
86
|
+
old.abort?.abort();
|
|
87
|
+
old.abort = null;
|
|
88
|
+
this.sessions.delete(sessionId);
|
|
23
89
|
}
|
|
24
90
|
clearAll() {
|
|
25
|
-
this.
|
|
91
|
+
for (const sessionId of [...this.sessions.keys()]) {
|
|
92
|
+
this.clear(sessionId);
|
|
93
|
+
}
|
|
26
94
|
}
|
|
27
95
|
hasPending(sessionId) {
|
|
28
|
-
return this.
|
|
96
|
+
return (this.sessions.get(sessionId)?.pending ?? 0) > 0;
|
|
97
|
+
}
|
|
98
|
+
/** Live generation token for a session, or `undefined` when idle/cleared. */
|
|
99
|
+
generationOf(sessionId) {
|
|
100
|
+
return this.sessions.get(sessionId)?.generation;
|
|
101
|
+
}
|
|
102
|
+
/** True when `generation` is the live map entry for `sessionId`. */
|
|
103
|
+
isCurrentGeneration(sessionId, generation) {
|
|
104
|
+
return this.sessions.get(sessionId)?.generation === generation;
|
|
105
|
+
}
|
|
106
|
+
/** True when a live queue row exists for the session. */
|
|
107
|
+
isLive(sessionId) {
|
|
108
|
+
return this.sessions.has(sessionId);
|
|
109
|
+
}
|
|
110
|
+
/** Live queue rows (tests: unique-ID churn must not grow this unbounded). */
|
|
111
|
+
get activeSessionCount() {
|
|
112
|
+
return this.sessions.size;
|
|
113
|
+
}
|
|
114
|
+
ensureState(sessionId) {
|
|
115
|
+
const existing = this.sessions.get(sessionId);
|
|
116
|
+
if (existing) return existing;
|
|
117
|
+
const created = {
|
|
118
|
+
generation: this.nextGeneration++,
|
|
119
|
+
tail: Promise.resolve(),
|
|
120
|
+
abort: null,
|
|
121
|
+
pending: 0
|
|
122
|
+
};
|
|
123
|
+
this.sessions.set(sessionId, created);
|
|
124
|
+
return created;
|
|
29
125
|
}
|
|
30
126
|
};
|
|
31
127
|
|
|
@@ -47,7 +143,57 @@ function parseDataChannelPayload(raw) {
|
|
|
47
143
|
}
|
|
48
144
|
var peerEnvBySessionId = /* @__PURE__ */ new Map();
|
|
49
145
|
var endedSessionIds = /* @__PURE__ */ new Set();
|
|
146
|
+
var sessionExecutionContext = new AsyncLocalStorage();
|
|
50
147
|
var agentLogSessionContext = new AsyncLocalStorage();
|
|
148
|
+
var inboundQueueAuthority = null;
|
|
149
|
+
var childUnhandledRejectionGuardInstalled = false;
|
|
150
|
+
function normalizeRejectionReason(reason) {
|
|
151
|
+
return reason instanceof Error ? reason : new Error(String(reason));
|
|
152
|
+
}
|
|
153
|
+
function installChildUnhandledRejectionGuard() {
|
|
154
|
+
if (childUnhandledRejectionGuardInstalled) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
childUnhandledRejectionGuardInstalled = true;
|
|
158
|
+
process.on("unhandledRejection", (reason) => {
|
|
159
|
+
const err = normalizeRejectionReason(reason);
|
|
160
|
+
const store = sessionExecutionContext.getStore();
|
|
161
|
+
const sessionId = store?.sessionId ?? agentLogSessionContext.getStore() ?? "";
|
|
162
|
+
if (!allowOutboundForSession(sessionId || void 0)) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
agentLog(
|
|
166
|
+
"error",
|
|
167
|
+
`unhandledRejection: ${err.message}`,
|
|
168
|
+
sessionId || void 0
|
|
169
|
+
);
|
|
170
|
+
sendParentMessage({
|
|
171
|
+
type: "agent_error",
|
|
172
|
+
sessionId,
|
|
173
|
+
message: err.message,
|
|
174
|
+
stack: err.stack
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
function allowOutboundForSession(sessionId) {
|
|
179
|
+
if (!sessionId) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
const store = sessionExecutionContext.getStore();
|
|
183
|
+
const queue = inboundQueueAuthority;
|
|
184
|
+
if (store && store.sessionId === sessionId) {
|
|
185
|
+
if (!queue) return !endedSessionIds.has(sessionId);
|
|
186
|
+
return queue.isCurrentGeneration(sessionId, store.generation);
|
|
187
|
+
}
|
|
188
|
+
if (endedSessionIds.has(sessionId)) return false;
|
|
189
|
+
if (!queue) return true;
|
|
190
|
+
return queue.isLive(sessionId);
|
|
191
|
+
}
|
|
192
|
+
function sendParentMessage(message) {
|
|
193
|
+
const sessionId = message && typeof message === "object" && "sessionId" in message && typeof message.sessionId === "string" ? message.sessionId : void 0;
|
|
194
|
+
if (!allowOutboundForSession(sessionId)) return;
|
|
195
|
+
process.send?.(message);
|
|
196
|
+
}
|
|
51
197
|
function parseBooleanEnv(value, defaultValue) {
|
|
52
198
|
if (value === void 0) return defaultValue;
|
|
53
199
|
const normalized = value.trim().toLowerCase();
|
|
@@ -88,7 +234,7 @@ async function handleParentMessage(message, handlers) {
|
|
|
88
234
|
sessionId: message.sessionId,
|
|
89
235
|
env: message.env
|
|
90
236
|
});
|
|
91
|
-
|
|
237
|
+
sendParentMessage({
|
|
92
238
|
type: "session_start_ack",
|
|
93
239
|
sessionId: message.sessionId
|
|
94
240
|
});
|
|
@@ -135,39 +281,52 @@ async function handleParentMessage(message, handlers) {
|
|
|
135
281
|
}
|
|
136
282
|
}
|
|
137
283
|
function defineAgent(handlers) {
|
|
284
|
+
installChildUnhandledRejectionGuard();
|
|
138
285
|
const inboundBySession = new SessionSerialQueue();
|
|
286
|
+
inboundQueueAuthority = inboundBySession;
|
|
139
287
|
const agentStartReady = runAgentStartHook(handlers);
|
|
140
288
|
process.on("message", (message) => {
|
|
141
289
|
if (!isParentMessage(message)) return;
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
153
|
-
const env = peerEnvBySessionId.get(message.sessionId) ?? buildIdleEnv(message.sessionId);
|
|
154
|
-
await runErrorHook(handlers, {
|
|
155
|
-
sessionId: message.sessionId,
|
|
156
|
-
projectId: env.PROJECT_ID,
|
|
157
|
-
buildId: env.BUILD_ID,
|
|
158
|
-
env,
|
|
159
|
-
error: err,
|
|
160
|
-
customerContext: parseCustomerContext(env.AGENT_CUSTOMER_CONTEXT)
|
|
161
|
-
});
|
|
162
|
-
process.send?.({
|
|
163
|
-
type: "agent_error",
|
|
290
|
+
if (message.type === "session_end") {
|
|
291
|
+
endedSessionIds.add(message.sessionId);
|
|
292
|
+
inboundBySession.clear(message.sessionId);
|
|
293
|
+
}
|
|
294
|
+
inboundBySession.enqueue(
|
|
295
|
+
message.sessionId,
|
|
296
|
+
async (_signal, context) => {
|
|
297
|
+
await agentStartReady;
|
|
298
|
+
await sessionExecutionContext.run(
|
|
299
|
+
{
|
|
164
300
|
sessionId: message.sessionId,
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
301
|
+
generation: context.generation
|
|
302
|
+
},
|
|
303
|
+
async () => agentLogSessionContext.run(message.sessionId, async () => {
|
|
304
|
+
try {
|
|
305
|
+
await handleParentMessage(message, handlers);
|
|
306
|
+
} catch (error) {
|
|
307
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
308
|
+
const env = peerEnvBySessionId.get(message.sessionId) ?? buildIdleEnv(message.sessionId);
|
|
309
|
+
await runErrorHook(handlers, {
|
|
310
|
+
sessionId: message.sessionId,
|
|
311
|
+
projectId: env.PROJECT_ID,
|
|
312
|
+
buildId: env.BUILD_ID,
|
|
313
|
+
env,
|
|
314
|
+
error: err,
|
|
315
|
+
customerContext: parseCustomerContext(
|
|
316
|
+
env.AGENT_CUSTOMER_CONTEXT
|
|
317
|
+
)
|
|
318
|
+
});
|
|
319
|
+
sendParentMessage({
|
|
320
|
+
type: "agent_error",
|
|
321
|
+
sessionId: message.sessionId,
|
|
322
|
+
message: err.message,
|
|
323
|
+
stack: err.stack
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
})
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
);
|
|
171
330
|
});
|
|
172
331
|
}
|
|
173
332
|
async function runAgentStartHook(handlers) {
|
|
@@ -179,7 +338,7 @@ async function runAgentStartHook(handlers) {
|
|
|
179
338
|
} catch (error) {
|
|
180
339
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
181
340
|
agentLog("error", `onAgentStart failed: ${err.message}`);
|
|
182
|
-
|
|
341
|
+
sendParentMessage({
|
|
183
342
|
type: "agent_error",
|
|
184
343
|
sessionId: "",
|
|
185
344
|
message: err.message,
|
|
@@ -215,7 +374,7 @@ async function runIdleTimeoutHook(handlers, message) {
|
|
|
215
374
|
message.sessionId
|
|
216
375
|
);
|
|
217
376
|
if (!onIdleTimeout) {
|
|
218
|
-
|
|
377
|
+
sendParentMessage({
|
|
219
378
|
type: "idle_timeout_done",
|
|
220
379
|
sessionId: message.sessionId
|
|
221
380
|
});
|
|
@@ -242,7 +401,7 @@ async function runIdleTimeoutHook(handlers, message) {
|
|
|
242
401
|
error = hookError instanceof Error ? hookError.message : String(hookError);
|
|
243
402
|
agentLog("error", `onIdleTimeout failed: ${error}`, message.sessionId);
|
|
244
403
|
}
|
|
245
|
-
|
|
404
|
+
sendParentMessage({
|
|
246
405
|
type: "idle_timeout_done",
|
|
247
406
|
sessionId: message.sessionId,
|
|
248
407
|
error
|
|
@@ -262,11 +421,10 @@ function buildIdleEnv(sessionId) {
|
|
|
262
421
|
};
|
|
263
422
|
}
|
|
264
423
|
function speak(sessionId, text) {
|
|
265
|
-
|
|
266
|
-
process.send?.({ type: "speak", sessionId, text });
|
|
424
|
+
sendParentMessage({ type: "speak", sessionId, text });
|
|
267
425
|
}
|
|
268
426
|
function sendToClient(sessionId, payload) {
|
|
269
|
-
|
|
427
|
+
sendParentMessage({ type: "send_to_client", sessionId, payload });
|
|
270
428
|
}
|
|
271
429
|
var AGENT_LOG_MESSAGE_MAX_CHARS = 2048;
|
|
272
430
|
var AGENT_LOG_FIELDS_MAX_CHARS = 8192;
|
|
@@ -299,7 +457,7 @@ function sanitizeAgentLogFields(fields) {
|
|
|
299
457
|
}
|
|
300
458
|
}
|
|
301
459
|
function buildAgentLogPayload(level, message, fields, sessionId) {
|
|
302
|
-
const resolvedSessionId = sessionId ?? agentLogSessionContext.getStore();
|
|
460
|
+
const resolvedSessionId = sessionId ?? sessionExecutionContext.getStore()?.sessionId ?? agentLogSessionContext.getStore();
|
|
303
461
|
const sanitizedFields = fields ? sanitizeAgentLogFields(fields) : void 0;
|
|
304
462
|
return {
|
|
305
463
|
type: "log",
|
|
@@ -321,7 +479,7 @@ function agentLog(level, message, fieldsOrSessionId, sessionId) {
|
|
|
321
479
|
} else {
|
|
322
480
|
resolvedSessionId = sessionId;
|
|
323
481
|
}
|
|
324
|
-
|
|
482
|
+
sendParentMessage(
|
|
325
483
|
buildAgentLogPayload(level, message, fields, resolvedSessionId)
|
|
326
484
|
);
|
|
327
485
|
}
|
package/dist/runner.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { buildChildExecArgv, collectAllowFsReadDirs, } from "./sandbox/sandbox.js";
|
|
2
2
|
export { resolveBundlePath, startSandboxedChild, type SandboxedChild, type StartSandboxedChildOptions, } from "./sandbox/start-child.js";
|
|
3
|
-
export { SessionSerialQueue } from "./session-serial-queue.js";
|
|
3
|
+
export { SessionSerialQueue, SessionSerialQueueCancellationError, type SessionSerialTask, type SessionSerialTaskContext, } from "./session-serial-queue.js";
|
|
4
4
|
//# sourceMappingURL=runner.d.ts.map
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,0BAA0B,GAChC,MAAM,0BAA0B,CAAC;AAElC,OAAO,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,0BAA0B,GAChC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,mCAAmC,EACnC,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,2BAA2B,CAAC"}
|
package/dist/runner.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { buildChildExecArgv, collectAllowFsReadDirs, } from "./sandbox/sandbox.js";
|
|
2
2
|
export { resolveBundlePath, startSandboxedChild, } from "./sandbox/start-child.js";
|
|
3
|
-
export { SessionSerialQueue } from "./session-serial-queue.js";
|
|
3
|
+
export { SessionSerialQueue, SessionSerialQueueCancellationError, } from "./session-serial-queue.js";
|
|
4
4
|
//# sourceMappingURL=runner.js.map
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAGpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAGpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,mCAAmC,GAGpC,MAAM,2BAA2B,CAAC"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -77,6 +77,15 @@ export interface AgentErrorContext {
|
|
|
77
77
|
error: Error;
|
|
78
78
|
customerContext?: Record<string, unknown>;
|
|
79
79
|
}
|
|
80
|
+
export type SessionExecutionStore = {
|
|
81
|
+
sessionId: string;
|
|
82
|
+
generation: number;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* True when outbound IPC/logs for `sessionId` are allowed under the current
|
|
86
|
+
* generation-aware ALS + live queue state.
|
|
87
|
+
*/
|
|
88
|
+
export declare function allowOutboundForSession(sessionId?: string): boolean;
|
|
80
89
|
/**
|
|
81
90
|
* Register IPC handlers for a customer agent child process.
|
|
82
91
|
* Call once at bundle entry; runner parent sends {@link ParentToChildMessage} events.
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,KAAK,EACV,aAAa,EAEb,eAAe,EAEhB,MAAM,eAAe,CAAC;AAGvB,eAAO,MAAM,oCAAoC,2CACP,CAAC;AAC3C,eAAO,MAAM,+BAA+B,sCACP,CAAC;AAGtC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,qEAAqE;IACrE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,sDAAsD;IACtD,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,6EAA6E;IAC7E,aAAa,CAAC,EAAE,CACd,GAAG,EAAE,kBAAkB,EACvB,KAAK,EAAE,WAAW,KACf,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,oDAAoD;IACpD,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,6DAA6D;IAC7D,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AA2BD,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA0DF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAenE;AAqHD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CA2DzD;AAsHD,qFAAqF;AACrF,wBAAgB,0BAA0B,IAAI,IAAI,CAIjD;AAED,kEAAkE;AAClE,wBAAgB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAE3D;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAEtE;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GAAG,UAAU,EACzB,OAAO,GAAE,eAAwB,GAChC,IAAI,CAQN;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,GAAG,UAAU,EACzB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,GAAE,eAAwB,GAChC,IAAI,CAUN;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,IAAI,CAIN;AA4DD,0FAA0F;AAC1F,wBAAgB,QAAQ,CACtB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAAC;AACR,wBAAgB,QAAQ,CACtB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAAC;AAwBR,wEAAwE;AACxE,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,IAAI,CAMN;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAM7D"}
|
package/dist/runtime.js
CHANGED
|
@@ -23,10 +23,85 @@ function parseDataChannelPayload(raw) {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
const peerEnvBySessionId = new Map();
|
|
26
|
-
/** Sessions that received `session_end`; `speak()` becomes a no-op. */
|
|
26
|
+
/** Sessions that received `session_end`; `speak()` becomes a no-op when no live gen. */
|
|
27
27
|
const endedSessionIds = new Set();
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Generation-aware execution context for inbound handlers. Outbound helpers
|
|
30
|
+
* (`speak`, `sendToClient`, …) consult this so a late old-generation callback
|
|
31
|
+
* cannot emit after `clear` / session-id reuse.
|
|
32
|
+
*/
|
|
33
|
+
const sessionExecutionContext = new AsyncLocalStorage();
|
|
34
|
+
/** @deprecated Prefer {@link sessionExecutionContext}; kept for log session id. */
|
|
29
35
|
const agentLogSessionContext = new AsyncLocalStorage();
|
|
36
|
+
/** Live inbound queue for the child process (set by {@link defineAgent}). */
|
|
37
|
+
let inboundQueueAuthority = null;
|
|
38
|
+
/** Idempotent: at most one child-process `unhandledRejection` listener. */
|
|
39
|
+
let childUnhandledRejectionGuardInstalled = false;
|
|
40
|
+
function normalizeRejectionReason(reason) {
|
|
41
|
+
return reason instanceof Error ? reason : new Error(String(reason));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Once-per-process safety net for detached customer promises (fire-and-forget
|
|
45
|
+
* work outside awaited handlers). Awaited handler failures stay reported only by
|
|
46
|
+
* the try/catch in {@link defineAgent} — this listener must not double-report those.
|
|
47
|
+
*
|
|
48
|
+
* Does not install `uncaughtException` (a corrupted child must still exit).
|
|
49
|
+
*/
|
|
50
|
+
function installChildUnhandledRejectionGuard() {
|
|
51
|
+
if (childUnhandledRejectionGuardInstalled) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
childUnhandledRejectionGuardInstalled = true;
|
|
55
|
+
process.on("unhandledRejection", (reason) => {
|
|
56
|
+
const err = normalizeRejectionReason(reason);
|
|
57
|
+
const store = sessionExecutionContext.getStore();
|
|
58
|
+
const sessionId = store?.sessionId ?? agentLogSessionContext.getStore() ?? "";
|
|
59
|
+
if (!allowOutboundForSession(sessionId || undefined)) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
agentLog("error", `unhandledRejection: ${err.message}`, sessionId || undefined);
|
|
63
|
+
sendParentMessage({
|
|
64
|
+
type: "agent_error",
|
|
65
|
+
sessionId,
|
|
66
|
+
message: err.message,
|
|
67
|
+
stack: err.stack,
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* True when outbound IPC/logs for `sessionId` are allowed under the current
|
|
73
|
+
* generation-aware ALS + live queue state.
|
|
74
|
+
*/
|
|
75
|
+
export function allowOutboundForSession(sessionId) {
|
|
76
|
+
if (!sessionId) {
|
|
77
|
+
// Process-wide logs without a session are always allowed.
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
const store = sessionExecutionContext.getStore();
|
|
81
|
+
const queue = inboundQueueAuthority;
|
|
82
|
+
if (store && store.sessionId === sessionId) {
|
|
83
|
+
if (!queue)
|
|
84
|
+
return !endedSessionIds.has(sessionId);
|
|
85
|
+
return queue.isCurrentGeneration(sessionId, store.generation);
|
|
86
|
+
}
|
|
87
|
+
// No ALS (or cross-session target): require a live generation and not ended.
|
|
88
|
+
if (endedSessionIds.has(sessionId))
|
|
89
|
+
return false;
|
|
90
|
+
if (!queue)
|
|
91
|
+
return true;
|
|
92
|
+
return queue.isLive(sessionId);
|
|
93
|
+
}
|
|
94
|
+
function sendParentMessage(message) {
|
|
95
|
+
const sessionId = message &&
|
|
96
|
+
typeof message === "object" &&
|
|
97
|
+
"sessionId" in message &&
|
|
98
|
+
typeof message.sessionId === "string"
|
|
99
|
+
? message.sessionId
|
|
100
|
+
: undefined;
|
|
101
|
+
if (!allowOutboundForSession(sessionId))
|
|
102
|
+
return;
|
|
103
|
+
process.send?.(message);
|
|
104
|
+
}
|
|
30
105
|
function parseBooleanEnv(value, defaultValue) {
|
|
31
106
|
if (value === undefined)
|
|
32
107
|
return defaultValue;
|
|
@@ -66,7 +141,7 @@ async function handleParentMessage(message, handlers) {
|
|
|
66
141
|
sessionId: message.sessionId,
|
|
67
142
|
env: message.env,
|
|
68
143
|
});
|
|
69
|
-
|
|
144
|
+
sendParentMessage({
|
|
70
145
|
type: "session_start_ack",
|
|
71
146
|
sessionId: message.sessionId,
|
|
72
147
|
});
|
|
@@ -122,19 +197,28 @@ async function handleParentMessage(message, handlers) {
|
|
|
122
197
|
* is processed (session IPC waits on that gate).
|
|
123
198
|
*/
|
|
124
199
|
export function defineAgent(handlers) {
|
|
200
|
+
installChildUnhandledRejectionGuard();
|
|
125
201
|
const inboundBySession = new SessionSerialQueue();
|
|
202
|
+
inboundQueueAuthority = inboundBySession;
|
|
126
203
|
const agentStartReady = runAgentStartHook(handlers);
|
|
127
204
|
process.on("message", (message) => {
|
|
128
205
|
if (!isParentMessage(message))
|
|
129
206
|
return;
|
|
130
|
-
|
|
207
|
+
// Invalidate immediately on arrival — do not wait behind queued work that
|
|
208
|
+
// must be cancelled. session_end then enqueues on a fresh generation.
|
|
209
|
+
if (message.type === "session_end") {
|
|
210
|
+
endedSessionIds.add(message.sessionId);
|
|
211
|
+
inboundBySession.clear(message.sessionId);
|
|
212
|
+
}
|
|
213
|
+
// session_start after end always materializes a new generation via enqueue
|
|
214
|
+
// on an empty/cleared map entry (clear left no tombstone).
|
|
215
|
+
inboundBySession.enqueue(message.sessionId, async (_signal, context) => {
|
|
131
216
|
await agentStartReady;
|
|
132
|
-
await
|
|
217
|
+
await sessionExecutionContext.run({
|
|
218
|
+
sessionId: message.sessionId,
|
|
219
|
+
generation: context.generation,
|
|
220
|
+
}, async () => agentLogSessionContext.run(message.sessionId, async () => {
|
|
133
221
|
try {
|
|
134
|
-
if (message.type === "session_end") {
|
|
135
|
-
endedSessionIds.add(message.sessionId);
|
|
136
|
-
inboundBySession.clear(message.sessionId);
|
|
137
|
-
}
|
|
138
222
|
await handleParentMessage(message, handlers);
|
|
139
223
|
}
|
|
140
224
|
catch (error) {
|
|
@@ -149,14 +233,14 @@ export function defineAgent(handlers) {
|
|
|
149
233
|
error: err,
|
|
150
234
|
customerContext: parseCustomerContext(env.AGENT_CUSTOMER_CONTEXT),
|
|
151
235
|
});
|
|
152
|
-
|
|
236
|
+
sendParentMessage({
|
|
153
237
|
type: "agent_error",
|
|
154
238
|
sessionId: message.sessionId,
|
|
155
239
|
message: err.message,
|
|
156
240
|
stack: err.stack,
|
|
157
241
|
});
|
|
158
242
|
}
|
|
159
|
-
});
|
|
243
|
+
}));
|
|
160
244
|
});
|
|
161
245
|
});
|
|
162
246
|
}
|
|
@@ -171,7 +255,7 @@ async function runAgentStartHook(handlers) {
|
|
|
171
255
|
catch (error) {
|
|
172
256
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
173
257
|
agentLog("error", `onAgentStart failed: ${err.message}`);
|
|
174
|
-
|
|
258
|
+
sendParentMessage({
|
|
175
259
|
type: "agent_error",
|
|
176
260
|
sessionId: "",
|
|
177
261
|
message: err.message,
|
|
@@ -208,7 +292,7 @@ async function runIdleTimeoutHook(handlers, message) {
|
|
|
208
292
|
const onIdleTimeout = handlers.onIdleTimeout;
|
|
209
293
|
agentLog("info", `idle_timeout ipc received (maxGraceMs=${message.maxGraceMs}, onIdleTimeout=${typeof onIdleTimeout === "function"})`, message.sessionId);
|
|
210
294
|
if (!onIdleTimeout) {
|
|
211
|
-
|
|
295
|
+
sendParentMessage({
|
|
212
296
|
type: "idle_timeout_done",
|
|
213
297
|
sessionId: message.sessionId,
|
|
214
298
|
});
|
|
@@ -233,7 +317,7 @@ async function runIdleTimeoutHook(handlers, message) {
|
|
|
233
317
|
error = hookError instanceof Error ? hookError.message : String(hookError);
|
|
234
318
|
agentLog("error", `onIdleTimeout failed: ${error}`, message.sessionId);
|
|
235
319
|
}
|
|
236
|
-
|
|
320
|
+
sendParentMessage({
|
|
237
321
|
type: "idle_timeout_done",
|
|
238
322
|
sessionId: message.sessionId,
|
|
239
323
|
error,
|
|
@@ -256,21 +340,20 @@ function buildIdleEnv(sessionId) {
|
|
|
256
340
|
export function resetAgentIpcStateForTests() {
|
|
257
341
|
endedSessionIds.clear();
|
|
258
342
|
peerEnvBySessionId.clear();
|
|
343
|
+
inboundQueueAuthority = null;
|
|
259
344
|
}
|
|
260
345
|
/** Ask the runner parent to synthesize speech for the session. */
|
|
261
346
|
export function speak(sessionId, text) {
|
|
262
|
-
|
|
263
|
-
return;
|
|
264
|
-
process.send?.({ type: "speak", sessionId, text });
|
|
347
|
+
sendParentMessage({ type: "speak", sessionId, text });
|
|
265
348
|
}
|
|
266
349
|
/** Send a JSON payload to the browser peer via the runner parent. */
|
|
267
350
|
export function sendToClient(sessionId, payload) {
|
|
268
|
-
|
|
351
|
+
sendParentMessage({ type: "send_to_client", sessionId, payload });
|
|
269
352
|
}
|
|
270
353
|
/** Send raw bytes to the browser peer via the runner parent. */
|
|
271
354
|
export function sendBinaryToClient(sessionId, data, channel = "sync") {
|
|
272
355
|
const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
273
|
-
|
|
356
|
+
sendParentMessage({
|
|
274
357
|
type: "send_binary_to_client",
|
|
275
358
|
sessionId,
|
|
276
359
|
data: buffer,
|
|
@@ -288,7 +371,7 @@ export function sendBinaryToClient(sessionId, data, channel = "sync") {
|
|
|
288
371
|
export function broadCastBinaryToClients(data, sessionIds, channel = "sync") {
|
|
289
372
|
const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
290
373
|
for (const sessionId of sessionIds) {
|
|
291
|
-
|
|
374
|
+
sendParentMessage({
|
|
292
375
|
type: "send_binary_to_client",
|
|
293
376
|
sessionId,
|
|
294
377
|
data: buffer,
|
|
@@ -334,7 +417,9 @@ function sanitizeAgentLogFields(fields) {
|
|
|
334
417
|
}
|
|
335
418
|
}
|
|
336
419
|
function buildAgentLogPayload(level, message, fields, sessionId) {
|
|
337
|
-
const resolvedSessionId = sessionId ??
|
|
420
|
+
const resolvedSessionId = sessionId ??
|
|
421
|
+
sessionExecutionContext.getStore()?.sessionId ??
|
|
422
|
+
agentLogSessionContext.getStore();
|
|
338
423
|
const sanitizedFields = fields ? sanitizeAgentLogFields(fields) : undefined;
|
|
339
424
|
return {
|
|
340
425
|
type: "log",
|
|
@@ -358,11 +443,11 @@ export function agentLog(level, message, fieldsOrSessionId, sessionId) {
|
|
|
358
443
|
else {
|
|
359
444
|
resolvedSessionId = sessionId;
|
|
360
445
|
}
|
|
361
|
-
|
|
446
|
+
sendParentMessage(buildAgentLogPayload(level, message, fields, resolvedSessionId));
|
|
362
447
|
}
|
|
363
448
|
/** Ask the runner to disconnect a browser peer (customer-initiated). */
|
|
364
449
|
export function disconnectClient(sessionId, options) {
|
|
365
|
-
|
|
450
|
+
sendParentMessage({
|
|
366
451
|
type: "disconnect_client",
|
|
367
452
|
sessionId,
|
|
368
453
|
reason: options?.reason,
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,61 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-session FIFO task chain. Different sessionIds run independently; the same
|
|
3
3
|
* sessionId is processed strictly in enqueue order (no overlapping handlers).
|
|
4
|
+
*
|
|
5
|
+
* Task rejections are consumed at the queue tail so they do not surface as
|
|
6
|
+
* process `unhandledRejection` events. Later same-session tasks still run
|
|
7
|
+
* unless {@link clear} invalidated the generation.
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle ordering:
|
|
10
|
+
* 1. `clear(sessionId)` aborts the live state and removes it from the map.
|
|
11
|
+
* 2. Each live row has a unique monotonic generation token (global counter).
|
|
12
|
+
* 3. Old task `finally` only mutates the captured state object; it deletes the
|
|
13
|
+
* map entry only when `sessions.get(id) === captured` and pending is 0.
|
|
14
|
+
* 4. No per-session tombstone / generations map — idle unique IDs leave no residue.
|
|
4
15
|
*/
|
|
16
|
+
export declare class SessionSerialQueueCancellationError extends Error {
|
|
17
|
+
readonly sessionId: string;
|
|
18
|
+
readonly generation: number;
|
|
19
|
+
readonly code: "SESSION_SERIAL_QUEUE_CANCELLED";
|
|
20
|
+
constructor(sessionId: string, generation: number);
|
|
21
|
+
}
|
|
22
|
+
/** Context for generation-aware tasks (second enqueue argument; optional). */
|
|
23
|
+
export type SessionSerialTaskContext = {
|
|
24
|
+
sessionId: string;
|
|
25
|
+
generation: number;
|
|
26
|
+
signal: AbortSignal;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Tasks may observe AbortSignal (compat first arg) and optional context.
|
|
30
|
+
* Zero-arg / signal-only callbacks remain supported.
|
|
31
|
+
*/
|
|
32
|
+
export type SessionSerialTask = (signal: AbortSignal, context: SessionSerialTaskContext) => void | Promise<void>;
|
|
5
33
|
export declare class SessionSerialQueue {
|
|
6
|
-
private readonly
|
|
7
|
-
|
|
34
|
+
private readonly sessions;
|
|
35
|
+
/** Monotonic token source — never reused across clear/enqueue cycles. */
|
|
36
|
+
private nextGeneration;
|
|
37
|
+
/**
|
|
38
|
+
* Enqueue work for `sessionId`. Returns a promise that settles when this
|
|
39
|
+
* task finishes, is skipped as stale, or is cancelled by {@link clear}.
|
|
40
|
+
* Fire-and-forget callers may ignore the return value (compat).
|
|
41
|
+
*/
|
|
42
|
+
enqueue(sessionId: string, task: SessionSerialTask | ((signal: AbortSignal) => void | Promise<void>) | (() => void | Promise<void>)): Promise<"completed" | "cancelled" | "failed">;
|
|
43
|
+
/**
|
|
44
|
+
* Invalidate queued + running work for `sessionId`. Aborts the live AbortSignal,
|
|
45
|
+
* drops the map entry, and leaves a fresh identity for the next enqueue.
|
|
46
|
+
* Old in-flight `finally` blocks only touch their captured state object.
|
|
47
|
+
*/
|
|
8
48
|
clear(sessionId: string): void;
|
|
9
49
|
clearAll(): void;
|
|
10
50
|
hasPending(sessionId: string): boolean;
|
|
51
|
+
/** Live generation token for a session, or `undefined` when idle/cleared. */
|
|
52
|
+
generationOf(sessionId: string): number | undefined;
|
|
53
|
+
/** True when `generation` is the live map entry for `sessionId`. */
|
|
54
|
+
isCurrentGeneration(sessionId: string, generation: number): boolean;
|
|
55
|
+
/** True when a live queue row exists for the session. */
|
|
56
|
+
isLive(sessionId: string): boolean;
|
|
57
|
+
/** Live queue rows (tests: unique-ID churn must not grow this unbounded). */
|
|
58
|
+
get activeSessionCount(): number;
|
|
59
|
+
private ensureState;
|
|
11
60
|
}
|
|
12
61
|
//# sourceMappingURL=session-serial-queue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-serial-queue.d.ts","sourceRoot":"","sources":["../src/session-serial-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"session-serial-queue.d.ts","sourceRoot":"","sources":["../src/session-serial-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,qBAAa,mCAAoC,SAAQ,KAAK;IAI1D,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM;IAJ7B,QAAQ,CAAC,IAAI,EAAG,gCAAgC,CAAU;gBAG/C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM;CAO9B;AAED,8EAA8E;AAC9E,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,wBAAwB,KAC9B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAS1B,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,yEAAyE;IACzE,OAAO,CAAC,cAAc,CAAK;IAE3B;;;;OAIG;IACH,OAAO,CACL,SAAS,EAAE,MAAM,EACjB,IAAI,EACA,iBAAiB,GACjB,CAAC,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAC/C,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAC/B,OAAO,CAAC,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;IAmEhD;;;;OAIG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAS9B,QAAQ,IAAI,IAAI;IAMhB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,6EAA6E;IAC7E,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAInD,oEAAoE;IACpE,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAInE,yDAAyD;IACzD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIlC,6EAA6E;IAC7E,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED,OAAO,CAAC,WAAW;CAapB"}
|
|
@@ -1,27 +1,144 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-session FIFO task chain. Different sessionIds run independently; the same
|
|
3
3
|
* sessionId is processed strictly in enqueue order (no overlapping handlers).
|
|
4
|
+
*
|
|
5
|
+
* Task rejections are consumed at the queue tail so they do not surface as
|
|
6
|
+
* process `unhandledRejection` events. Later same-session tasks still run
|
|
7
|
+
* unless {@link clear} invalidated the generation.
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle ordering:
|
|
10
|
+
* 1. `clear(sessionId)` aborts the live state and removes it from the map.
|
|
11
|
+
* 2. Each live row has a unique monotonic generation token (global counter).
|
|
12
|
+
* 3. Old task `finally` only mutates the captured state object; it deletes the
|
|
13
|
+
* map entry only when `sessions.get(id) === captured` and pending is 0.
|
|
14
|
+
* 4. No per-session tombstone / generations map — idle unique IDs leave no residue.
|
|
4
15
|
*/
|
|
16
|
+
export class SessionSerialQueueCancellationError extends Error {
|
|
17
|
+
sessionId;
|
|
18
|
+
generation;
|
|
19
|
+
code = "SESSION_SERIAL_QUEUE_CANCELLED";
|
|
20
|
+
constructor(sessionId, generation) {
|
|
21
|
+
super(`session serial queue cancelled (sessionId=${sessionId}, generation=${generation})`);
|
|
22
|
+
this.sessionId = sessionId;
|
|
23
|
+
this.generation = generation;
|
|
24
|
+
this.name = "SessionSerialQueueCancellationError";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
5
27
|
export class SessionSerialQueue {
|
|
6
|
-
|
|
28
|
+
sessions = new Map();
|
|
29
|
+
/** Monotonic token source — never reused across clear/enqueue cycles. */
|
|
30
|
+
nextGeneration = 1;
|
|
31
|
+
/**
|
|
32
|
+
* Enqueue work for `sessionId`. Returns a promise that settles when this
|
|
33
|
+
* task finishes, is skipped as stale, or is cancelled by {@link clear}.
|
|
34
|
+
* Fire-and-forget callers may ignore the return value (compat).
|
|
35
|
+
*/
|
|
7
36
|
enqueue(sessionId, task) {
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
37
|
+
const state = this.ensureState(sessionId);
|
|
38
|
+
const captured = state;
|
|
39
|
+
const generation = captured.generation;
|
|
40
|
+
captured.pending += 1;
|
|
41
|
+
const previous = captured.tail;
|
|
42
|
+
let taskAbort = null;
|
|
43
|
+
const settled = previous
|
|
44
|
+
.catch(() => undefined)
|
|
45
|
+
.then(async () => {
|
|
46
|
+
if (this.sessions.get(sessionId) !== captured) {
|
|
47
|
+
return "cancelled";
|
|
48
|
+
}
|
|
49
|
+
const abort = new AbortController();
|
|
50
|
+
taskAbort = abort;
|
|
51
|
+
captured.abort = abort;
|
|
52
|
+
const context = {
|
|
53
|
+
sessionId,
|
|
54
|
+
generation,
|
|
55
|
+
signal: abort.signal,
|
|
56
|
+
};
|
|
57
|
+
try {
|
|
58
|
+
await Promise.resolve(task(abort.signal, context));
|
|
59
|
+
if (this.sessions.get(sessionId) !== captured) {
|
|
60
|
+
return "cancelled";
|
|
61
|
+
}
|
|
62
|
+
return "completed";
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (abort.signal.aborted ||
|
|
66
|
+
this.sessions.get(sessionId) !== captured ||
|
|
67
|
+
error instanceof SessionSerialQueueCancellationError) {
|
|
68
|
+
return "cancelled";
|
|
69
|
+
}
|
|
70
|
+
return "failed";
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
if (captured.abort === abort) {
|
|
74
|
+
captured.abort = null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
.finally(() => {
|
|
79
|
+
// Only the captured state identity may be mutated by this task.
|
|
80
|
+
captured.pending = Math.max(0, captured.pending - 1);
|
|
81
|
+
if (taskAbort && captured.abort === taskAbort) {
|
|
82
|
+
captured.abort = null;
|
|
83
|
+
}
|
|
84
|
+
if (captured.pending === 0 &&
|
|
85
|
+
this.sessions.get(sessionId) === captured) {
|
|
86
|
+
this.sessions.delete(sessionId);
|
|
13
87
|
}
|
|
14
88
|
});
|
|
15
|
-
|
|
89
|
+
captured.tail = settled;
|
|
90
|
+
return settled;
|
|
16
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Invalidate queued + running work for `sessionId`. Aborts the live AbortSignal,
|
|
94
|
+
* drops the map entry, and leaves a fresh identity for the next enqueue.
|
|
95
|
+
* Old in-flight `finally` blocks only touch their captured state object.
|
|
96
|
+
*/
|
|
17
97
|
clear(sessionId) {
|
|
18
|
-
this.
|
|
98
|
+
const old = this.sessions.get(sessionId);
|
|
99
|
+
if (!old)
|
|
100
|
+
return;
|
|
101
|
+
old.abort?.abort();
|
|
102
|
+
old.abort = null;
|
|
103
|
+
// Remove live identity — do not mutate old.generation / splice into old row.
|
|
104
|
+
this.sessions.delete(sessionId);
|
|
19
105
|
}
|
|
20
106
|
clearAll() {
|
|
21
|
-
this.
|
|
107
|
+
for (const sessionId of [...this.sessions.keys()]) {
|
|
108
|
+
this.clear(sessionId);
|
|
109
|
+
}
|
|
22
110
|
}
|
|
23
111
|
hasPending(sessionId) {
|
|
24
|
-
return this.
|
|
112
|
+
return (this.sessions.get(sessionId)?.pending ?? 0) > 0;
|
|
113
|
+
}
|
|
114
|
+
/** Live generation token for a session, or `undefined` when idle/cleared. */
|
|
115
|
+
generationOf(sessionId) {
|
|
116
|
+
return this.sessions.get(sessionId)?.generation;
|
|
117
|
+
}
|
|
118
|
+
/** True when `generation` is the live map entry for `sessionId`. */
|
|
119
|
+
isCurrentGeneration(sessionId, generation) {
|
|
120
|
+
return this.sessions.get(sessionId)?.generation === generation;
|
|
121
|
+
}
|
|
122
|
+
/** True when a live queue row exists for the session. */
|
|
123
|
+
isLive(sessionId) {
|
|
124
|
+
return this.sessions.has(sessionId);
|
|
125
|
+
}
|
|
126
|
+
/** Live queue rows (tests: unique-ID churn must not grow this unbounded). */
|
|
127
|
+
get activeSessionCount() {
|
|
128
|
+
return this.sessions.size;
|
|
129
|
+
}
|
|
130
|
+
ensureState(sessionId) {
|
|
131
|
+
const existing = this.sessions.get(sessionId);
|
|
132
|
+
if (existing)
|
|
133
|
+
return existing;
|
|
134
|
+
const created = {
|
|
135
|
+
generation: this.nextGeneration++,
|
|
136
|
+
tail: Promise.resolve(),
|
|
137
|
+
abort: null,
|
|
138
|
+
pending: 0,
|
|
139
|
+
};
|
|
140
|
+
this.sessions.set(sessionId, created);
|
|
141
|
+
return created;
|
|
25
142
|
}
|
|
26
143
|
}
|
|
27
144
|
//# sourceMappingURL=session-serial-queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-serial-queue.js","sourceRoot":"","sources":["../src/session-serial-queue.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session-serial-queue.js","sourceRoot":"","sources":["../src/session-serial-queue.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voicethere/agent",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"description": "VoiceThere customer agent SDK — IPC types and runtime helpers for sandboxed child bundles",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -75,9 +75,9 @@
|
|
|
75
75
|
"@node-webrtc-rust/sdk": ">=0.6.5"
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
|
-
"@node-webrtc-rust/helpers": "^0.6.
|
|
79
|
-
"@node-webrtc-rust/sdk": "0.6.
|
|
80
|
-
"@node-webrtc-rust/signaling": "0.6.
|
|
78
|
+
"@node-webrtc-rust/helpers": "^0.6.17",
|
|
79
|
+
"@node-webrtc-rust/sdk": "0.6.17",
|
|
80
|
+
"@node-webrtc-rust/signaling": "0.6.17",
|
|
81
81
|
"@types/node": "^22.10.0",
|
|
82
82
|
"http-server": "^14.1.1",
|
|
83
83
|
"ioredis": "^5.11.1",
|