@voicethere/agent 0.2.12 → 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 +181 -48
- 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 +80 -25
- package/dist/runtime.js.map +1 -1
- package/dist/session-serial-queue.d.ts +49 -3
- package/dist/session-serial-queue.d.ts.map +1 -1
- package/dist/session-serial-queue.js +122 -11
- package/dist/session-serial-queue.js.map +1 -1
- package/package.json +4 -4
package/dist/agent.js
CHANGED
|
@@ -6,25 +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
|
-
|
|
15
|
-
|
|
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);
|
|
16
73
|
}
|
|
17
74
|
});
|
|
18
|
-
|
|
75
|
+
captured.tail = settled;
|
|
76
|
+
return settled;
|
|
19
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
|
+
*/
|
|
20
83
|
clear(sessionId) {
|
|
21
|
-
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);
|
|
22
89
|
}
|
|
23
90
|
clearAll() {
|
|
24
|
-
this.
|
|
91
|
+
for (const sessionId of [...this.sessions.keys()]) {
|
|
92
|
+
this.clear(sessionId);
|
|
93
|
+
}
|
|
25
94
|
}
|
|
26
95
|
hasPending(sessionId) {
|
|
27
|
-
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;
|
|
28
125
|
}
|
|
29
126
|
};
|
|
30
127
|
|
|
@@ -46,7 +143,9 @@ function parseDataChannelPayload(raw) {
|
|
|
46
143
|
}
|
|
47
144
|
var peerEnvBySessionId = /* @__PURE__ */ new Map();
|
|
48
145
|
var endedSessionIds = /* @__PURE__ */ new Set();
|
|
146
|
+
var sessionExecutionContext = new AsyncLocalStorage();
|
|
49
147
|
var agentLogSessionContext = new AsyncLocalStorage();
|
|
148
|
+
var inboundQueueAuthority = null;
|
|
50
149
|
var childUnhandledRejectionGuardInstalled = false;
|
|
51
150
|
function normalizeRejectionReason(reason) {
|
|
52
151
|
return reason instanceof Error ? reason : new Error(String(reason));
|
|
@@ -58,13 +157,17 @@ function installChildUnhandledRejectionGuard() {
|
|
|
58
157
|
childUnhandledRejectionGuardInstalled = true;
|
|
59
158
|
process.on("unhandledRejection", (reason) => {
|
|
60
159
|
const err = normalizeRejectionReason(reason);
|
|
61
|
-
const
|
|
160
|
+
const store = sessionExecutionContext.getStore();
|
|
161
|
+
const sessionId = store?.sessionId ?? agentLogSessionContext.getStore() ?? "";
|
|
162
|
+
if (!allowOutboundForSession(sessionId || void 0)) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
62
165
|
agentLog(
|
|
63
166
|
"error",
|
|
64
167
|
`unhandledRejection: ${err.message}`,
|
|
65
168
|
sessionId || void 0
|
|
66
169
|
);
|
|
67
|
-
|
|
170
|
+
sendParentMessage({
|
|
68
171
|
type: "agent_error",
|
|
69
172
|
sessionId,
|
|
70
173
|
message: err.message,
|
|
@@ -72,6 +175,25 @@ function installChildUnhandledRejectionGuard() {
|
|
|
72
175
|
});
|
|
73
176
|
});
|
|
74
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
|
+
}
|
|
75
197
|
function parseBooleanEnv(value, defaultValue) {
|
|
76
198
|
if (value === void 0) return defaultValue;
|
|
77
199
|
const normalized = value.trim().toLowerCase();
|
|
@@ -112,7 +234,7 @@ async function handleParentMessage(message, handlers) {
|
|
|
112
234
|
sessionId: message.sessionId,
|
|
113
235
|
env: message.env
|
|
114
236
|
});
|
|
115
|
-
|
|
237
|
+
sendParentMessage({
|
|
116
238
|
type: "session_start_ack",
|
|
117
239
|
sessionId: message.sessionId
|
|
118
240
|
});
|
|
@@ -161,38 +283,50 @@ async function handleParentMessage(message, handlers) {
|
|
|
161
283
|
function defineAgent(handlers) {
|
|
162
284
|
installChildUnhandledRejectionGuard();
|
|
163
285
|
const inboundBySession = new SessionSerialQueue();
|
|
286
|
+
inboundQueueAuthority = inboundBySession;
|
|
164
287
|
const agentStartReady = runAgentStartHook(handlers);
|
|
165
288
|
process.on("message", (message) => {
|
|
166
289
|
if (!isParentMessage(message)) return;
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
178
|
-
const env = peerEnvBySessionId.get(message.sessionId) ?? buildIdleEnv(message.sessionId);
|
|
179
|
-
await runErrorHook(handlers, {
|
|
180
|
-
sessionId: message.sessionId,
|
|
181
|
-
projectId: env.PROJECT_ID,
|
|
182
|
-
buildId: env.BUILD_ID,
|
|
183
|
-
env,
|
|
184
|
-
error: err,
|
|
185
|
-
customerContext: parseCustomerContext(env.AGENT_CUSTOMER_CONTEXT)
|
|
186
|
-
});
|
|
187
|
-
process.send?.({
|
|
188
|
-
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
|
+
{
|
|
189
300
|
sessionId: message.sessionId,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
+
);
|
|
196
330
|
});
|
|
197
331
|
}
|
|
198
332
|
async function runAgentStartHook(handlers) {
|
|
@@ -204,7 +338,7 @@ async function runAgentStartHook(handlers) {
|
|
|
204
338
|
} catch (error) {
|
|
205
339
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
206
340
|
agentLog("error", `onAgentStart failed: ${err.message}`);
|
|
207
|
-
|
|
341
|
+
sendParentMessage({
|
|
208
342
|
type: "agent_error",
|
|
209
343
|
sessionId: "",
|
|
210
344
|
message: err.message,
|
|
@@ -240,7 +374,7 @@ async function runIdleTimeoutHook(handlers, message) {
|
|
|
240
374
|
message.sessionId
|
|
241
375
|
);
|
|
242
376
|
if (!onIdleTimeout) {
|
|
243
|
-
|
|
377
|
+
sendParentMessage({
|
|
244
378
|
type: "idle_timeout_done",
|
|
245
379
|
sessionId: message.sessionId
|
|
246
380
|
});
|
|
@@ -267,7 +401,7 @@ async function runIdleTimeoutHook(handlers, message) {
|
|
|
267
401
|
error = hookError instanceof Error ? hookError.message : String(hookError);
|
|
268
402
|
agentLog("error", `onIdleTimeout failed: ${error}`, message.sessionId);
|
|
269
403
|
}
|
|
270
|
-
|
|
404
|
+
sendParentMessage({
|
|
271
405
|
type: "idle_timeout_done",
|
|
272
406
|
sessionId: message.sessionId,
|
|
273
407
|
error
|
|
@@ -287,11 +421,10 @@ function buildIdleEnv(sessionId) {
|
|
|
287
421
|
};
|
|
288
422
|
}
|
|
289
423
|
function speak(sessionId, text) {
|
|
290
|
-
|
|
291
|
-
process.send?.({ type: "speak", sessionId, text });
|
|
424
|
+
sendParentMessage({ type: "speak", sessionId, text });
|
|
292
425
|
}
|
|
293
426
|
function sendToClient(sessionId, payload) {
|
|
294
|
-
|
|
427
|
+
sendParentMessage({ type: "send_to_client", sessionId, payload });
|
|
295
428
|
}
|
|
296
429
|
var AGENT_LOG_MESSAGE_MAX_CHARS = 2048;
|
|
297
430
|
var AGENT_LOG_FIELDS_MAX_CHARS = 8192;
|
|
@@ -324,7 +457,7 @@ function sanitizeAgentLogFields(fields) {
|
|
|
324
457
|
}
|
|
325
458
|
}
|
|
326
459
|
function buildAgentLogPayload(level, message, fields, sessionId) {
|
|
327
|
-
const resolvedSessionId = sessionId ?? agentLogSessionContext.getStore();
|
|
460
|
+
const resolvedSessionId = sessionId ?? sessionExecutionContext.getStore()?.sessionId ?? agentLogSessionContext.getStore();
|
|
328
461
|
const sanitizedFields = fields ? sanitizeAgentLogFields(fields) : void 0;
|
|
329
462
|
return {
|
|
330
463
|
type: "log",
|
|
@@ -346,7 +479,7 @@ function agentLog(level, message, fieldsOrSessionId, sessionId) {
|
|
|
346
479
|
} else {
|
|
347
480
|
resolvedSessionId = sessionId;
|
|
348
481
|
}
|
|
349
|
-
|
|
482
|
+
sendParentMessage(
|
|
350
483
|
buildAgentLogPayload(level, message, fields, resolvedSessionId)
|
|
351
484
|
);
|
|
352
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":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -23,10 +23,18 @@ 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;
|
|
30
38
|
/** Idempotent: at most one child-process `unhandledRejection` listener. */
|
|
31
39
|
let childUnhandledRejectionGuardInstalled = false;
|
|
32
40
|
function normalizeRejectionReason(reason) {
|
|
@@ -46,9 +54,13 @@ function installChildUnhandledRejectionGuard() {
|
|
|
46
54
|
childUnhandledRejectionGuardInstalled = true;
|
|
47
55
|
process.on("unhandledRejection", (reason) => {
|
|
48
56
|
const err = normalizeRejectionReason(reason);
|
|
49
|
-
const
|
|
57
|
+
const store = sessionExecutionContext.getStore();
|
|
58
|
+
const sessionId = store?.sessionId ?? agentLogSessionContext.getStore() ?? "";
|
|
59
|
+
if (!allowOutboundForSession(sessionId || undefined)) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
50
62
|
agentLog("error", `unhandledRejection: ${err.message}`, sessionId || undefined);
|
|
51
|
-
|
|
63
|
+
sendParentMessage({
|
|
52
64
|
type: "agent_error",
|
|
53
65
|
sessionId,
|
|
54
66
|
message: err.message,
|
|
@@ -56,6 +68,40 @@ function installChildUnhandledRejectionGuard() {
|
|
|
56
68
|
});
|
|
57
69
|
});
|
|
58
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
|
+
}
|
|
59
105
|
function parseBooleanEnv(value, defaultValue) {
|
|
60
106
|
if (value === undefined)
|
|
61
107
|
return defaultValue;
|
|
@@ -95,7 +141,7 @@ async function handleParentMessage(message, handlers) {
|
|
|
95
141
|
sessionId: message.sessionId,
|
|
96
142
|
env: message.env,
|
|
97
143
|
});
|
|
98
|
-
|
|
144
|
+
sendParentMessage({
|
|
99
145
|
type: "session_start_ack",
|
|
100
146
|
sessionId: message.sessionId,
|
|
101
147
|
});
|
|
@@ -153,18 +199,26 @@ async function handleParentMessage(message, handlers) {
|
|
|
153
199
|
export function defineAgent(handlers) {
|
|
154
200
|
installChildUnhandledRejectionGuard();
|
|
155
201
|
const inboundBySession = new SessionSerialQueue();
|
|
202
|
+
inboundQueueAuthority = inboundBySession;
|
|
156
203
|
const agentStartReady = runAgentStartHook(handlers);
|
|
157
204
|
process.on("message", (message) => {
|
|
158
205
|
if (!isParentMessage(message))
|
|
159
206
|
return;
|
|
160
|
-
|
|
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) => {
|
|
161
216
|
await agentStartReady;
|
|
162
|
-
await
|
|
217
|
+
await sessionExecutionContext.run({
|
|
218
|
+
sessionId: message.sessionId,
|
|
219
|
+
generation: context.generation,
|
|
220
|
+
}, async () => agentLogSessionContext.run(message.sessionId, async () => {
|
|
163
221
|
try {
|
|
164
|
-
if (message.type === "session_end") {
|
|
165
|
-
endedSessionIds.add(message.sessionId);
|
|
166
|
-
inboundBySession.clear(message.sessionId);
|
|
167
|
-
}
|
|
168
222
|
await handleParentMessage(message, handlers);
|
|
169
223
|
}
|
|
170
224
|
catch (error) {
|
|
@@ -179,14 +233,14 @@ export function defineAgent(handlers) {
|
|
|
179
233
|
error: err,
|
|
180
234
|
customerContext: parseCustomerContext(env.AGENT_CUSTOMER_CONTEXT),
|
|
181
235
|
});
|
|
182
|
-
|
|
236
|
+
sendParentMessage({
|
|
183
237
|
type: "agent_error",
|
|
184
238
|
sessionId: message.sessionId,
|
|
185
239
|
message: err.message,
|
|
186
240
|
stack: err.stack,
|
|
187
241
|
});
|
|
188
242
|
}
|
|
189
|
-
});
|
|
243
|
+
}));
|
|
190
244
|
});
|
|
191
245
|
});
|
|
192
246
|
}
|
|
@@ -201,7 +255,7 @@ async function runAgentStartHook(handlers) {
|
|
|
201
255
|
catch (error) {
|
|
202
256
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
203
257
|
agentLog("error", `onAgentStart failed: ${err.message}`);
|
|
204
|
-
|
|
258
|
+
sendParentMessage({
|
|
205
259
|
type: "agent_error",
|
|
206
260
|
sessionId: "",
|
|
207
261
|
message: err.message,
|
|
@@ -238,7 +292,7 @@ async function runIdleTimeoutHook(handlers, message) {
|
|
|
238
292
|
const onIdleTimeout = handlers.onIdleTimeout;
|
|
239
293
|
agentLog("info", `idle_timeout ipc received (maxGraceMs=${message.maxGraceMs}, onIdleTimeout=${typeof onIdleTimeout === "function"})`, message.sessionId);
|
|
240
294
|
if (!onIdleTimeout) {
|
|
241
|
-
|
|
295
|
+
sendParentMessage({
|
|
242
296
|
type: "idle_timeout_done",
|
|
243
297
|
sessionId: message.sessionId,
|
|
244
298
|
});
|
|
@@ -263,7 +317,7 @@ async function runIdleTimeoutHook(handlers, message) {
|
|
|
263
317
|
error = hookError instanceof Error ? hookError.message : String(hookError);
|
|
264
318
|
agentLog("error", `onIdleTimeout failed: ${error}`, message.sessionId);
|
|
265
319
|
}
|
|
266
|
-
|
|
320
|
+
sendParentMessage({
|
|
267
321
|
type: "idle_timeout_done",
|
|
268
322
|
sessionId: message.sessionId,
|
|
269
323
|
error,
|
|
@@ -286,21 +340,20 @@ function buildIdleEnv(sessionId) {
|
|
|
286
340
|
export function resetAgentIpcStateForTests() {
|
|
287
341
|
endedSessionIds.clear();
|
|
288
342
|
peerEnvBySessionId.clear();
|
|
343
|
+
inboundQueueAuthority = null;
|
|
289
344
|
}
|
|
290
345
|
/** Ask the runner parent to synthesize speech for the session. */
|
|
291
346
|
export function speak(sessionId, text) {
|
|
292
|
-
|
|
293
|
-
return;
|
|
294
|
-
process.send?.({ type: "speak", sessionId, text });
|
|
347
|
+
sendParentMessage({ type: "speak", sessionId, text });
|
|
295
348
|
}
|
|
296
349
|
/** Send a JSON payload to the browser peer via the runner parent. */
|
|
297
350
|
export function sendToClient(sessionId, payload) {
|
|
298
|
-
|
|
351
|
+
sendParentMessage({ type: "send_to_client", sessionId, payload });
|
|
299
352
|
}
|
|
300
353
|
/** Send raw bytes to the browser peer via the runner parent. */
|
|
301
354
|
export function sendBinaryToClient(sessionId, data, channel = "sync") {
|
|
302
355
|
const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
303
|
-
|
|
356
|
+
sendParentMessage({
|
|
304
357
|
type: "send_binary_to_client",
|
|
305
358
|
sessionId,
|
|
306
359
|
data: buffer,
|
|
@@ -318,7 +371,7 @@ export function sendBinaryToClient(sessionId, data, channel = "sync") {
|
|
|
318
371
|
export function broadCastBinaryToClients(data, sessionIds, channel = "sync") {
|
|
319
372
|
const buffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
320
373
|
for (const sessionId of sessionIds) {
|
|
321
|
-
|
|
374
|
+
sendParentMessage({
|
|
322
375
|
type: "send_binary_to_client",
|
|
323
376
|
sessionId,
|
|
324
377
|
data: buffer,
|
|
@@ -364,7 +417,9 @@ function sanitizeAgentLogFields(fields) {
|
|
|
364
417
|
}
|
|
365
418
|
}
|
|
366
419
|
function buildAgentLogPayload(level, message, fields, sessionId) {
|
|
367
|
-
const resolvedSessionId = sessionId ??
|
|
420
|
+
const resolvedSessionId = sessionId ??
|
|
421
|
+
sessionExecutionContext.getStore()?.sessionId ??
|
|
422
|
+
agentLogSessionContext.getStore();
|
|
368
423
|
const sanitizedFields = fields ? sanitizeAgentLogFields(fields) : undefined;
|
|
369
424
|
return {
|
|
370
425
|
type: "log",
|
|
@@ -388,11 +443,11 @@ export function agentLog(level, message, fieldsOrSessionId, sessionId) {
|
|
|
388
443
|
else {
|
|
389
444
|
resolvedSessionId = sessionId;
|
|
390
445
|
}
|
|
391
|
-
|
|
446
|
+
sendParentMessage(buildAgentLogPayload(level, message, fields, resolvedSessionId));
|
|
392
447
|
}
|
|
393
448
|
/** Ask the runner to disconnect a browser peer (customer-initiated). */
|
|
394
449
|
export function disconnectClient(sessionId, options) {
|
|
395
|
-
|
|
450
|
+
sendParentMessage({
|
|
396
451
|
type: "disconnect_client",
|
|
397
452
|
sessionId,
|
|
398
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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"}
|
|
@@ -3,13 +3,59 @@
|
|
|
3
3
|
* sessionId is processed strictly in enqueue order (no overlapping handlers).
|
|
4
4
|
*
|
|
5
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
|
|
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.
|
|
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.
|
|
7
31
|
*/
|
|
32
|
+
export type SessionSerialTask = (signal: AbortSignal, context: SessionSerialTaskContext) => void | Promise<void>;
|
|
8
33
|
export declare class SessionSerialQueue {
|
|
9
|
-
private readonly
|
|
10
|
-
|
|
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
|
+
*/
|
|
11
48
|
clear(sessionId: string): void;
|
|
12
49
|
clearAll(): void;
|
|
13
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;
|
|
14
60
|
}
|
|
15
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
|
|
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"}
|
|
@@ -3,31 +3,142 @@
|
|
|
3
3
|
* sessionId is processed strictly in enqueue order (no overlapping handlers).
|
|
4
4
|
*
|
|
5
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
|
|
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.
|
|
7
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
|
+
}
|
|
8
27
|
export class SessionSerialQueue {
|
|
9
|
-
|
|
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
|
+
*/
|
|
10
36
|
enqueue(sessionId, task) {
|
|
11
|
-
const
|
|
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;
|
|
12
43
|
const settled = previous
|
|
13
44
|
.catch(() => undefined)
|
|
14
|
-
.then(() =>
|
|
15
|
-
.
|
|
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
|
+
})
|
|
16
78
|
.finally(() => {
|
|
17
|
-
|
|
18
|
-
|
|
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);
|
|
19
87
|
}
|
|
20
88
|
});
|
|
21
|
-
|
|
89
|
+
captured.tail = settled;
|
|
90
|
+
return settled;
|
|
22
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
|
+
*/
|
|
23
97
|
clear(sessionId) {
|
|
24
|
-
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);
|
|
25
105
|
}
|
|
26
106
|
clearAll() {
|
|
27
|
-
this.
|
|
107
|
+
for (const sessionId of [...this.sessions.keys()]) {
|
|
108
|
+
this.clear(sessionId);
|
|
109
|
+
}
|
|
28
110
|
}
|
|
29
111
|
hasPending(sessionId) {
|
|
30
|
-
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;
|
|
31
142
|
}
|
|
32
143
|
}
|
|
33
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",
|