@langchain/langgraph-sdk 1.12.3 → 1.12.5
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/client/stream/handles/subagents.cjs +9 -2
- package/dist/client/stream/handles/subagents.cjs.map +1 -1
- package/dist/client/stream/handles/subagents.d.cts.map +1 -1
- package/dist/client/stream/handles/subagents.d.ts.map +1 -1
- package/dist/client/stream/handles/subagents.js +10 -3
- package/dist/client/stream/handles/subagents.js.map +1 -1
- package/dist/client/stream/handles/subgraphs.cjs +24 -2
- package/dist/client/stream/handles/subgraphs.cjs.map +1 -1
- package/dist/client/stream/handles/subgraphs.d.cts.map +1 -1
- package/dist/client/stream/handles/subgraphs.d.ts.map +1 -1
- package/dist/client/stream/handles/subgraphs.js +24 -3
- package/dist/client/stream/handles/subgraphs.js.map +1 -1
- package/dist/client/stream/index.cjs +17 -7
- package/dist/client/stream/index.cjs.map +1 -1
- package/dist/client/stream/index.d.cts.map +1 -1
- package/dist/client/stream/index.d.ts.map +1 -1
- package/dist/client/stream/index.js +17 -7
- package/dist/client/stream/index.js.map +1 -1
- package/dist/client/stream/messages.cjs +43 -0
- package/dist/client/stream/messages.cjs.map +1 -1
- package/dist/client/stream/messages.d.cts +8 -0
- package/dist/client/stream/messages.d.cts.map +1 -1
- package/dist/client/stream/messages.d.ts +8 -0
- package/dist/client/stream/messages.d.ts.map +1 -1
- package/dist/client/stream/messages.js +43 -0
- package/dist/client/stream/messages.js.map +1 -1
- package/dist/client/stream/transport/http.cjs +1 -12
- package/dist/client/stream/transport/http.cjs.map +1 -1
- package/dist/client/stream/transport/http.d.cts.map +1 -1
- package/dist/client/stream/transport/http.d.ts.map +1 -1
- package/dist/client/stream/transport/http.js +1 -12
- package/dist/client/stream/transport/http.js.map +1 -1
- package/dist/client/stream/transport/utils.cjs +12 -0
- package/dist/client/stream/transport/utils.cjs.map +1 -1
- package/dist/client/stream/transport/utils.js +12 -1
- package/dist/client/stream/transport/utils.js.map +1 -1
- package/dist/client/stream/transport/websocket.cjs +33 -3
- package/dist/client/stream/transport/websocket.cjs.map +1 -1
- package/dist/client/stream/transport/websocket.d.cts +4 -1
- package/dist/client/stream/transport/websocket.d.cts.map +1 -1
- package/dist/client/stream/transport/websocket.d.ts +4 -1
- package/dist/client/stream/transport/websocket.d.ts.map +1 -1
- package/dist/client/stream/transport/websocket.js +34 -4
- package/dist/client/stream/transport/websocket.js.map +1 -1
- package/dist/stream/controller.cjs +94 -3
- package/dist/stream/controller.cjs.map +1 -1
- package/dist/stream/controller.d.cts.map +1 -1
- package/dist/stream/controller.d.ts.map +1 -1
- package/dist/stream/controller.js +94 -3
- package/dist/stream/controller.js.map +1 -1
- package/dist/stream/discovery/namespace-from-history.cjs +1 -1
- package/dist/stream/discovery/namespace-from-history.cjs.map +1 -1
- package/dist/stream/discovery/namespace-from-history.js +1 -1
- package/dist/stream/discovery/namespace-from-history.js.map +1 -1
- package/dist/stream/lifecycle-loading-tracker.cjs +5 -0
- package/dist/stream/lifecycle-loading-tracker.cjs.map +1 -1
- package/dist/stream/lifecycle-loading-tracker.js +5 -0
- package/dist/stream/lifecycle-loading-tracker.js.map +1 -1
- package/dist/stream/projections/messages.cjs +45 -12
- package/dist/stream/projections/messages.cjs.map +1 -1
- package/dist/stream/projections/messages.js +45 -12
- package/dist/stream/projections/messages.js.map +1 -1
- package/dist/stream/root-message-projection.cjs +71 -8
- package/dist/stream/root-message-projection.cjs.map +1 -1
- package/dist/stream/root-message-projection.js +71 -8
- package/dist/stream/root-message-projection.js.map +1 -1
- package/dist/stream/submit-coordinator.cjs +7 -2
- package/dist/stream/submit-coordinator.cjs.map +1 -1
- package/dist/stream/submit-coordinator.js +7 -2
- package/dist/stream/submit-coordinator.js.map +1 -1
- package/dist/ui/manager.cjs +1 -1
- package/dist/ui/manager.cjs.map +1 -1
- package/dist/ui/manager.d.cts.map +1 -1
- package/dist/ui/manager.d.ts.map +1 -1
- package/dist/ui/manager.js +1 -1
- package/dist/ui/manager.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.cts","names":[],"sources":["../../src/stream/controller.ts"],"mappings":";;;;;;;;;;;;;;AA6KA;;cAAa,kBAAA,WAA6B,OAAA;;AAwC1C;;;;;;;;;;;;cAAa,gBAAA,4BACgB,MAAA,8EAEO,MAAA;EAAA;WAEzB,SAAA,EAAW,WAAA,CAAY,YAAA,CAAa,SAAA,EAAW,aAAA;EAAA,SAC/C,aAAA,EAAe,WAAA,CAAY,WAAA;EAAA,SAC3B,aAAA,EAAe,WAAA,CAAY,WAAA;EAAA,SAC3B,mBAAA,EAAqB,WAAA,CAAY,iBAAA;EAAA,SACjC,oBAAA,EAAsB,WAAA,CAAY,kBAAA;EAAA,SAClC,UAAA,EAAY,WAAA,CAAY,uBAAA,CAAwB,SAAA;EAAA,SAChD,QAAA,EAAU,eAAA;
|
|
1
|
+
{"version":3,"file":"controller.d.cts","names":[],"sources":["../../src/stream/controller.ts"],"mappings":";;;;;;;;;;;;;;AA6KA;;cAAa,kBAAA,WAA6B,OAAA;;AAwC1C;;;;;;;;;;;;cAAa,gBAAA,4BACgB,MAAA,8EAEO,MAAA;EAAA;WAEzB,SAAA,EAAW,WAAA,CAAY,YAAA,CAAa,SAAA,EAAW,aAAA;EAAA,SAC/C,aAAA,EAAe,WAAA,CAAY,WAAA;EAAA,SAC3B,aAAA,EAAe,WAAA,CAAY,WAAA;EAAA,SAC3B,mBAAA,EAAqB,WAAA,CAAY,iBAAA;EAAA,SACjC,oBAAA,EAAsB,WAAA,CAAY,kBAAA;EAAA,SAClC,UAAA,EAAY,WAAA,CAAY,uBAAA,CAAwB,SAAA;EAAA,SAChD,QAAA,EAAU,eAAA;EAmL0B;;;;;EAA7C,WAAA,CAAY,OAAA,EAAS,uBAAA,CAAwB,SAAA;EAi2BF;;;;;;;EAAA,IA3tBvC,gBAAA,CAAA,GAAoB,OAAA;EA44BS;;;;;;;;EAn1B3B,OAAA,CAAQ,QAAA,mBAA2B,OAAA;EAqkCpB;;;;;;;;;;;;;;EAzqBf,wBAAA,CAAyB,UAAA,WAAqB,OAAA;EAnxB5B;;;;;;;;EAuhClB,MAAA,CACJ,KAAA,WACA,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,gBAAA,IACxC,OAAA;EAvhC4B;;;;;;EAiiCzB,IAAA,CAAK,OAAA,GAAU,iBAAA,GAAoB,OAAA;EA/hCtB;;;;EA2jCb,UAAA,CAAA,GAAc,OAAA;EAlwBhB;;;;;;;;;;;EAq0BE,YAAA,CAAa,EAAA,WAAa,OAAA;EA1GW;;;;EAkHrC,UAAA,CAAA,GAAc,OAAA;EAvGT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoKL,OAAA,CACJ,QAAA,WACA,OAAA,GAAU,oBAAA,CAAqB,gBAAA,IAC9B,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiHG,UAAA,CACJ,aAAA,EAAe,MAAA,mBACf,OAAA,GAAU,uBAAA,CAAwB,gBAAA,IACjC,OAAA;;;;EA4DG,OAAA,CAAA,GAAW,OAAA;;;;;;;;;;;;;;;;EAyBjB,QAAA,CAAA;;;;;;EA4BA,SAAA,CAAA,GAAa,YAAA;;;;;;;;EAWb,eAAA,CACE,QAAA,GAAW,MAAA,EAAQ,YAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","names":[],"sources":["../../src/stream/controller.ts"],"mappings":";;;;;;;;;;;;;;;;cA6Ka,kBAAA,WAA6B,OAAA;;;;AAwC1C;;;;;;;;;;cAAa,gBAAA,4BACgB,MAAA,8EAEO,MAAA;EAAA;WAEzB,SAAA,EAAW,WAAA,CAAY,YAAA,CAAa,SAAA,EAAW,aAAA;EAAA,SAC/C,aAAA,EAAe,WAAA,CAAY,WAAA;EAAA,SAC3B,aAAA,EAAe,WAAA,CAAY,WAAA;EAAA,SAC3B,mBAAA,EAAqB,WAAA,CAAY,iBAAA;EAAA,SACjC,oBAAA,EAAsB,WAAA,CAAY,kBAAA;EAAA,SAClC,UAAA,EAAY,WAAA,CAAY,uBAAA,CAAwB,SAAA;EAAA,SAChD,QAAA,EAAU,eAAA;EADE;;;;;
|
|
1
|
+
{"version":3,"file":"controller.d.ts","names":[],"sources":["../../src/stream/controller.ts"],"mappings":";;;;;;;;;;;;;;;;cA6Ka,kBAAA,WAA6B,OAAA;;;;AAwC1C;;;;;;;;;;cAAa,gBAAA,4BACgB,MAAA,8EAEO,MAAA;EAAA;WAEzB,SAAA,EAAW,WAAA,CAAY,YAAA,CAAa,SAAA,EAAW,aAAA;EAAA,SAC/C,aAAA,EAAe,WAAA,CAAY,WAAA;EAAA,SAC3B,aAAA,EAAe,WAAA,CAAY,WAAA;EAAA,SAC3B,mBAAA,EAAqB,WAAA,CAAY,iBAAA;EAAA,SACjC,oBAAA,EAAsB,WAAA,CAAY,kBAAA;EAAA,SAClC,UAAA,EAAY,WAAA,CAAY,uBAAA,CAAwB,SAAA;EAAA,SAChD,QAAA,EAAU,eAAA;EADE;;;;;EAoLrB,WAAA,CAAY,OAAA,EAAS,uBAAA,CAAwB,SAAA;EA2lBO;;;;;;;EAAA,IArdhD,gBAAA,CAAA,GAAoB,OAAA;EAq0BQ;;;;;;;;EA5wB1B,OAAA,CAAQ,QAAA,mBAA2B,OAAA;EAogCxB;;;;;;;;;;;;;;EAxmBX,wBAAA,CAAyB,UAAA,WAAqB,OAAA;EApxBI;;;;;;;;EAwhClD,MAAA,CACJ,KAAA,WACA,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,gBAAA,IACxC,OAAA;EAxhCuC;;;;;;EAkiCpC,IAAA,CAAK,OAAA,GAAU,iBAAA,GAAoB,OAAA;EAhiCgB;;;;EA4jCnD,UAAA,CAAA,GAAc,OAAA;EAx4ByB;;;;;;;;;;;EA28BvC,YAAA,CAAa,EAAA,WAAa,OAAA;EA1GpB;;;;EAkHN,UAAA,CAAA,GAAc,OAAA;EAvGd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoKA,OAAA,CACJ,QAAA,WACA,OAAA,GAAU,oBAAA,CAAqB,gBAAA,IAC9B,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiHG,UAAA,CACJ,aAAA,EAAe,MAAA,mBACf,OAAA,GAAU,uBAAA,CAAwB,gBAAA,IACjC,OAAA;;;;EA4DG,OAAA,CAAA,GAAW,OAAA;;;;;;;;;;;;;;;;EAyBjB,QAAA,CAAA;;;;;;EA4BA,SAAA,CAAA,GAAa,YAAA;;;;;;;;EAWb,eAAA,CACE,QAAA,GAAW,MAAA,EAAQ,YAAA;AAAA"}
|
|
@@ -171,6 +171,14 @@ var StreamController = class {
|
|
|
171
171
|
*/
|
|
172
172
|
#hydratedActiveInterruptIds = null;
|
|
173
173
|
/**
|
|
174
|
+
* Creation time of the checkpoint the latest {@link hydrate} seeded
|
|
175
|
+
* from. A new stream subscription replays the thread's retained
|
|
176
|
+
* history, and events produced before this moment are already part of
|
|
177
|
+
* the seed: applying them again rewinds `messages`, `values` and
|
|
178
|
+
* `toolCalls` to older turns and then rebuilds them.
|
|
179
|
+
*/
|
|
180
|
+
#hydratedCheckpointTime;
|
|
181
|
+
/**
|
|
174
182
|
* Highest event sequence already applied when the latest run command
|
|
175
183
|
* was accepted. Interrupts outside the hydrate-time allowlist remain
|
|
176
184
|
* filtered through this sequence, while newer events are live output
|
|
@@ -242,6 +250,16 @@ var StreamController = class {
|
|
|
242
250
|
#rootEventListeners = /* @__PURE__ */ new Set();
|
|
243
251
|
#rootBus;
|
|
244
252
|
#activeRunId;
|
|
253
|
+
/**
|
|
254
|
+
* Run id `run.start` returned for the in-flight local `submit()`. Kept
|
|
255
|
+
* apart from {@link #activeRunId}, which a rolled-back submit's late
|
|
256
|
+
* response can still overwrite.
|
|
257
|
+
*/
|
|
258
|
+
#submittedRunId;
|
|
259
|
+
/** `true` from a local run's dispatch until its `run.start` answers. */
|
|
260
|
+
#submittedRunIdPending = false;
|
|
261
|
+
/** One per armed terminal wait: re-runs the lifecycle events it held until `run.start` answered. */
|
|
262
|
+
#heldLifecycleReleases = /* @__PURE__ */ new Set();
|
|
245
263
|
#localRunDepth = 0;
|
|
246
264
|
/**
|
|
247
265
|
* `true` once a root `values` event has been applied for the current
|
|
@@ -301,7 +319,8 @@ var StreamController = class {
|
|
|
301
319
|
this.#lifecycleLoading = new LifecycleLoadingTracker({
|
|
302
320
|
store: this.rootStore,
|
|
303
321
|
isDisposed: () => this.#disposed,
|
|
304
|
-
onSettled: () => this.#submitter.scheduleQueueDrainOnObservedIdle()
|
|
322
|
+
onSettled: () => this.#submitter.scheduleQueueDrainOnObservedIdle(),
|
|
323
|
+
ignore: (event) => this.#submittedRunMatch(event) != null
|
|
305
324
|
});
|
|
306
325
|
this.messageMetadataStore = this.#messageMetadata.store;
|
|
307
326
|
this.queueStore = new StreamStore(EMPTY_QUEUE);
|
|
@@ -336,6 +355,11 @@ var StreamController = class {
|
|
|
336
355
|
this.#pendingHydrationInterruptEvents = [];
|
|
337
356
|
},
|
|
338
357
|
onRunStart: () => this.#markLocalRunStart(),
|
|
358
|
+
onRunStartReturned: (runId) => {
|
|
359
|
+
this.#submittedRunId = runId;
|
|
360
|
+
this.#submittedRunIdPending = false;
|
|
361
|
+
for (const release of [...this.#heldLifecycleReleases]) release();
|
|
362
|
+
},
|
|
339
363
|
onRunCreated: (runId) => {
|
|
340
364
|
this.#advanceInterruptReplayBarrier();
|
|
341
365
|
this.#notifyCreated(runId);
|
|
@@ -495,6 +519,8 @@ var StreamController = class {
|
|
|
495
519
|
if (this.#disposed || this.#currentThreadId !== hydratedThreadId) return;
|
|
496
520
|
threadExists = state != null;
|
|
497
521
|
threadActive = isThreadStateActive(state);
|
|
522
|
+
const checkpointTime = Date.parse(state?.created_at ?? "");
|
|
523
|
+
this.#hydratedCheckpointTime = Number.isNaN(checkpointTime) ? void 0 : checkpointTime;
|
|
498
524
|
this.#missingThreadIds.delete(hydratedThreadId);
|
|
499
525
|
if (state?.values != null) {
|
|
500
526
|
/**
|
|
@@ -533,6 +559,11 @@ var StreamController = class {
|
|
|
533
559
|
const seedMessages = state.values[this.#messagesKey];
|
|
534
560
|
if (Array.isArray(seedMessages)) {
|
|
535
561
|
this.#subagents.seedFromCheckpointMessages(seedMessages);
|
|
562
|
+
const finishedToolCalls = seedToolCallsFromMessages(ROOT_NAMESPACE, ensureMessageInstances(seedMessages)).filter((toolCall) => toolCall.status === "finished");
|
|
563
|
+
if (finishedToolCalls.length > 0) this.rootStore.setState((s) => ({
|
|
564
|
+
...s,
|
|
565
|
+
toolCalls: finishedToolCalls.reduce((toolCalls, toolCall) => upsertToolCall(toolCalls, toolCall), s.toolCalls)
|
|
566
|
+
}));
|
|
536
567
|
/**
|
|
537
568
|
* An idle (finished) thread defers its root SSE pump; the first
|
|
538
569
|
* `submit()` brings it up and the transport replays the finished
|
|
@@ -560,7 +591,7 @@ var StreamController = class {
|
|
|
560
591
|
*/
|
|
561
592
|
const unpersisted = this.#messageMetadata.unpersistedOptimisticIds();
|
|
562
593
|
if (unpersisted.size > 0) {
|
|
563
|
-
this.#rootMessages.
|
|
594
|
+
this.#rootMessages.dropMessages(unpersisted);
|
|
564
595
|
this.#messageMetadata.forget(unpersisted);
|
|
565
596
|
}
|
|
566
597
|
/**
|
|
@@ -912,6 +943,13 @@ var StreamController = class {
|
|
|
912
943
|
if (options?.cancel ?? true) {
|
|
913
944
|
const threadId = this.#currentThreadId;
|
|
914
945
|
const runId = this.#activeRunId;
|
|
946
|
+
if (runId != null && this.rootStore.getSnapshot().isLoading) {
|
|
947
|
+
const dropped = this.#rootMessages.closeRun({
|
|
948
|
+
sync: true,
|
|
949
|
+
unfinishedOnly: true
|
|
950
|
+
});
|
|
951
|
+
if (dropped.size > 0) this.#messageMetadata.forget(dropped);
|
|
952
|
+
}
|
|
915
953
|
if (threadId != null && runId != null) try {
|
|
916
954
|
await this.#options.client.runs.cancel(threadId, runId);
|
|
917
955
|
} catch {}
|
|
@@ -927,9 +965,12 @@ var StreamController = class {
|
|
|
927
965
|
}
|
|
928
966
|
#markLocalRunStart() {
|
|
929
967
|
this.#localRunDepth += 1;
|
|
968
|
+
this.#submittedRunId = void 0;
|
|
969
|
+
this.#submittedRunIdPending = true;
|
|
930
970
|
}
|
|
931
971
|
#markLocalRunEnd() {
|
|
932
972
|
this.#localRunDepth = Math.max(0, this.#localRunDepth - 1);
|
|
973
|
+
if (this.#localRunDepth === 0) this.#submittedRunIdPending = false;
|
|
933
974
|
}
|
|
934
975
|
#notifyCreated(runId) {
|
|
935
976
|
this.#activeRunId = runId;
|
|
@@ -1347,6 +1388,7 @@ var StreamController = class {
|
|
|
1347
1388
|
this.#localRunDepth = 0;
|
|
1348
1389
|
this.#messageMetadata.reset();
|
|
1349
1390
|
this.#hydratedActiveInterruptIds = null;
|
|
1391
|
+
this.#hydratedCheckpointTime = void 0;
|
|
1350
1392
|
this.#interruptReplayThroughSeq = void 0;
|
|
1351
1393
|
this.#pendingHydrationInterruptEvents = [];
|
|
1352
1394
|
this.#discardPendingInterruptEvents();
|
|
@@ -1586,6 +1628,8 @@ var StreamController = class {
|
|
|
1586
1628
|
if (this.#rootEventListeners.size > 0) for (const listener of this.#rootEventListeners) try {
|
|
1587
1629
|
listener(event);
|
|
1588
1630
|
} catch {}
|
|
1631
|
+
const floor = this.#hydratedCheckpointTime;
|
|
1632
|
+
if (floor != null && event.params.timestamp < floor) return;
|
|
1589
1633
|
/**
|
|
1590
1634
|
* `messages` and `tools` events are emitted under a node's
|
|
1591
1635
|
* namespace — for a typical StateGraph the LLM's token deltas
|
|
@@ -1661,7 +1705,32 @@ var StreamController = class {
|
|
|
1661
1705
|
this.#recordInterrupt(event);
|
|
1662
1706
|
return;
|
|
1663
1707
|
}
|
|
1664
|
-
if (event.method === "lifecycle")
|
|
1708
|
+
if (event.method === "lifecycle") {
|
|
1709
|
+
/**
|
|
1710
|
+
* Root lifecycle transitions are observed elsewhere
|
|
1711
|
+
* (#awaitTerminal) to unblock `submit`. Here they drop a closed
|
|
1712
|
+
* run's never-checkpointed messages.
|
|
1713
|
+
*/
|
|
1714
|
+
const lifecycle = event.params.data;
|
|
1715
|
+
const dropped = this.#rootMessages.applyLifecycle(lifecycle?.event);
|
|
1716
|
+
if (dropped.size > 0) this.#messageMetadata.forget(dropped);
|
|
1717
|
+
}
|
|
1718
|
+
}
|
|
1719
|
+
/**
|
|
1720
|
+
* How a lifecycle event relates to the run a local `submit()` started.
|
|
1721
|
+
* New subscriptions replay earlier runs' terminals, and accepting one
|
|
1722
|
+
* would end the submitted run early: `"other"` marks those, `"pending"`
|
|
1723
|
+
* an event that names a run before `run.start` has answered. `undefined`
|
|
1724
|
+
* when it can't be told apart (no submit in flight, no run named, or no
|
|
1725
|
+
* run id returned).
|
|
1726
|
+
*/
|
|
1727
|
+
#submittedRunMatch(event) {
|
|
1728
|
+
if (event.method !== "lifecycle" || this.#localRunDepth === 0) return;
|
|
1729
|
+
const runId = synthesizedEventRunId(event.event_id);
|
|
1730
|
+
if (runId == null) return void 0;
|
|
1731
|
+
if (this.#submittedRunIdPending) return "pending";
|
|
1732
|
+
if (this.#submittedRunId == null) return void 0;
|
|
1733
|
+
return runId === this.#submittedRunId ? void 0 : "other";
|
|
1665
1734
|
}
|
|
1666
1735
|
/**
|
|
1667
1736
|
* Merge a `values` payload into root values and root messages.
|
|
@@ -2007,9 +2076,12 @@ var StreamController = class {
|
|
|
2007
2076
|
return new Promise((resolve) => {
|
|
2008
2077
|
let settled = false;
|
|
2009
2078
|
let sawRunning = false;
|
|
2079
|
+
const held = [];
|
|
2080
|
+
const heldReleases = this.#heldLifecycleReleases;
|
|
2010
2081
|
function finish(result) {
|
|
2011
2082
|
if (settled) return;
|
|
2012
2083
|
settled = true;
|
|
2084
|
+
heldReleases.delete(releaseHeld);
|
|
2013
2085
|
unsubscribeRoot?.();
|
|
2014
2086
|
unsubscribeThread?.();
|
|
2015
2087
|
unsubscribeError?.();
|
|
@@ -2021,6 +2093,12 @@ var StreamController = class {
|
|
|
2021
2093
|
if (settled) return;
|
|
2022
2094
|
if (event.method !== "lifecycle") return;
|
|
2023
2095
|
if (!isRootNamespace(event.params.namespace)) return;
|
|
2096
|
+
const match = this.#submittedRunMatch(event);
|
|
2097
|
+
if (match === "other") return;
|
|
2098
|
+
if (match === "pending") {
|
|
2099
|
+
held.push(event);
|
|
2100
|
+
return;
|
|
2101
|
+
}
|
|
2024
2102
|
const lifecycle = event.params.data;
|
|
2025
2103
|
if (lifecycle?.event === "running") {
|
|
2026
2104
|
sawRunning = true;
|
|
@@ -2036,6 +2114,10 @@ var StreamController = class {
|
|
|
2036
2114
|
setTimeout(() => finish({ event: "interrupted" }), 0);
|
|
2037
2115
|
}
|
|
2038
2116
|
};
|
|
2117
|
+
const releaseHeld = () => {
|
|
2118
|
+
for (const event of held.splice(0)) onEvent(event);
|
|
2119
|
+
};
|
|
2120
|
+
heldReleases.add(releaseHeld);
|
|
2039
2121
|
const unsubscribeRoot = this.#rootBus.subscribe(onEvent);
|
|
2040
2122
|
const unsubscribeThread = this.#thread?.onEvent(onEvent);
|
|
2041
2123
|
const unsubscribeError = this.#thread?.onError((error) => finish({
|
|
@@ -2130,6 +2212,15 @@ function collectActiveInterruptsFromTasks(tasks) {
|
|
|
2130
2212
|
activeIds
|
|
2131
2213
|
};
|
|
2132
2214
|
}
|
|
2215
|
+
/**
|
|
2216
|
+
* Run id from a `synth:<run_id>:...` event id, the form the agent server
|
|
2217
|
+
* uses for events it synthesizes such as root `lifecycle`. Events carry no
|
|
2218
|
+
* run id field.
|
|
2219
|
+
*/
|
|
2220
|
+
function synthesizedEventRunId(eventId) {
|
|
2221
|
+
if (eventId == null || !eventId.startsWith("synth:")) return void 0;
|
|
2222
|
+
return eventId.split(":")[1] || void 0;
|
|
2223
|
+
}
|
|
2133
2224
|
//#endregion
|
|
2134
2225
|
export { ROOT_PUMP_CHANNELS, StreamController };
|
|
2135
2226
|
|