@langchain/langgraph-sdk 1.11.1 → 1.12.0-rc.0
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/base.cjs +7 -0
- package/dist/client/base.cjs.map +1 -1
- package/dist/client/base.d.cts.map +1 -1
- package/dist/client/base.d.ts.map +1 -1
- package/dist/client/base.js +7 -0
- package/dist/client/base.js.map +1 -1
- package/dist/client/stream/messages.cjs +54 -17
- package/dist/client/stream/messages.cjs.map +1 -1
- package/dist/client/stream/messages.d.cts +3 -0
- package/dist/client/stream/messages.d.cts.map +1 -1
- package/dist/client/stream/messages.d.ts +3 -0
- package/dist/client/stream/messages.d.ts.map +1 -1
- package/dist/client/stream/messages.js +54 -17
- package/dist/client/stream/messages.js.map +1 -1
- package/dist/stream/assembled-to-message.cjs +42 -8
- package/dist/stream/assembled-to-message.cjs.map +1 -1
- package/dist/stream/assembled-to-message.d.cts +11 -0
- package/dist/stream/assembled-to-message.d.cts.map +1 -1
- package/dist/stream/assembled-to-message.d.ts +11 -0
- package/dist/stream/assembled-to-message.d.ts.map +1 -1
- package/dist/stream/assembled-to-message.js +42 -8
- package/dist/stream/assembled-to-message.js.map +1 -1
- package/dist/stream/controller.cjs +39 -10
- package/dist/stream/controller.cjs.map +1 -1
- package/dist/stream/controller.d.cts +7 -6
- package/dist/stream/controller.d.cts.map +1 -1
- package/dist/stream/controller.d.ts +7 -6
- package/dist/stream/controller.d.ts.map +1 -1
- package/dist/stream/controller.js +37 -8
- package/dist/stream/controller.js.map +1 -1
- package/dist/stream/dispatch-config.cjs +23 -0
- package/dist/stream/dispatch-config.cjs.map +1 -0
- package/dist/stream/dispatch-config.js +23 -0
- package/dist/stream/dispatch-config.js.map +1 -0
- package/dist/stream/index.d.cts +1 -1
- package/dist/stream/index.d.ts +1 -1
- package/dist/stream/lifecycle-loading-tracker.cjs +8 -0
- package/dist/stream/lifecycle-loading-tracker.cjs.map +1 -1
- package/dist/stream/lifecycle-loading-tracker.js +8 -0
- package/dist/stream/lifecycle-loading-tracker.js.map +1 -1
- package/dist/stream/queue-adapter-agent-server.cjs +204 -0
- package/dist/stream/queue-adapter-agent-server.cjs.map +1 -0
- package/dist/stream/queue-adapter-agent-server.js +203 -0
- package/dist/stream/queue-adapter-agent-server.js.map +1 -0
- package/dist/stream/queue-adapter-local.cjs +50 -0
- package/dist/stream/queue-adapter-local.cjs.map +1 -0
- package/dist/stream/queue-adapter-local.js +49 -0
- package/dist/stream/queue-adapter-local.js.map +1 -0
- package/dist/stream/queue-adapter.cjs +7 -0
- package/dist/stream/queue-adapter.cjs.map +1 -0
- package/dist/stream/{submit-coordinator.d.cts → queue-adapter.d.cts} +6 -9
- package/dist/stream/queue-adapter.d.cts.map +1 -0
- package/dist/stream/queue-adapter.d.ts +24 -0
- package/dist/stream/queue-adapter.d.ts.map +1 -0
- package/dist/stream/queue-adapter.js +7 -0
- package/dist/stream/queue-adapter.js.map +1 -0
- package/dist/stream/submit-coordinator.cjs +82 -86
- package/dist/stream/submit-coordinator.cjs.map +1 -1
- package/dist/stream/submit-coordinator.d.ts +1 -26
- package/dist/stream/submit-coordinator.js +82 -85
- package/dist/stream/submit-coordinator.js.map +1 -1
- package/dist/stream/types.d.cts +25 -4
- package/dist/stream/types.d.cts.map +1 -1
- package/dist/stream/types.d.ts +25 -4
- package/dist/stream/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/stream/submit-coordinator.d.cts.map +0 -1
- package/dist/stream/submit-coordinator.d.ts.map +0 -1
|
@@ -5,7 +5,7 @@ import { ChannelRegistry } from "./channel-registry.cjs";
|
|
|
5
5
|
import { SubagentMap } from "./discovery/subagents.cjs";
|
|
6
6
|
import { SubgraphByNodeMap, SubgraphMap } from "./discovery/subgraphs.cjs";
|
|
7
7
|
import { MessageMetadata as MessageMetadata$1, MessageMetadataMap } from "./message-metadata-tracker.cjs";
|
|
8
|
-
import { SubmissionQueueEntry, SubmissionQueueSnapshot } from "./
|
|
8
|
+
import { SubmissionQueueEntry, SubmissionQueueSnapshot } from "./queue-adapter.cjs";
|
|
9
9
|
import { Channel } from "@langchain/protocol";
|
|
10
10
|
|
|
11
11
|
//#region src/stream/controller.d.ts
|
|
@@ -100,16 +100,17 @@ declare class StreamController<StateType extends object = Record<string, unknown
|
|
|
100
100
|
* Cancel a queued submission by id. Returns `true` when the entry
|
|
101
101
|
* was found and removed, `false` otherwise.
|
|
102
102
|
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
103
|
+
* Removes the client-side entry either way; also issues a server-side
|
|
104
|
+
* cancel when the configured queue adapter is server-backed (see
|
|
105
|
+
* `AgentServerAdapter.serverQueue`). A no-op for the default,
|
|
106
|
+
* client-only adapter.
|
|
107
107
|
*
|
|
108
108
|
* @param id - Client-side queue entry id to remove.
|
|
109
109
|
*/
|
|
110
110
|
cancelQueued(id: string): Promise<boolean>;
|
|
111
111
|
/**
|
|
112
|
-
* Drop every queued submission.
|
|
112
|
+
* Drop every queued submission. Cancels the underlying server-side
|
|
113
|
+
* runs too when the configured queue adapter is server-backed.
|
|
113
114
|
*/
|
|
114
115
|
clearQueue(): Promise<void>;
|
|
115
116
|
/**
|
|
@@ -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;EAiK0B;;;;;EAA7C,WAAA,CAAY,OAAA,EAAS,uBAAA,CAAwB,SAAA;
|
|
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;EAiK0B;;;;;EAA7C,WAAA,CAAY,OAAA,EAAS,uBAAA,CAAwB,SAAA;EAm0BF;;;;;;;EAAA,IArsBvC,gBAAA,CAAA,GAAoB,OAAA;EA22BS;;;;;;;;EAlzB3B,OAAA,CAAQ,QAAA,mBAA2B,OAAA;EAoiCpB;;;;;;;;;;;;;;EA9pBf,wBAAA,CAAyB,UAAA,WAAqB,OAAA;EAnuB5B;;;;;;;;EAu+BlB,MAAA,CACJ,KAAA,WACA,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,gBAAA,IACxC,OAAA;EAv+B4B;;;;;;EAi/BzB,IAAA,CAAK,OAAA,GAAU,iBAAA,GAAoB,OAAA;EA/+BtB;;;;EAmgCb,UAAA,CAAA,GAAc,OAAA;EApuBhB;;;;;;;;;;;EAoyBE,YAAA,CAAa,EAAA,WAAa,OAAA;EA/FW;;;;EAuGrC,UAAA,CAAA,GAAc,OAAA;EA5FT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyJL,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"}
|
|
@@ -5,7 +5,7 @@ import { ChannelRegistry } from "./channel-registry.js";
|
|
|
5
5
|
import { SubagentMap } from "./discovery/subagents.js";
|
|
6
6
|
import { SubgraphByNodeMap, SubgraphMap } from "./discovery/subgraphs.js";
|
|
7
7
|
import { MessageMetadata as MessageMetadata$1, MessageMetadataMap } from "./message-metadata-tracker.js";
|
|
8
|
-
import { SubmissionQueueEntry, SubmissionQueueSnapshot } from "./
|
|
8
|
+
import { SubmissionQueueEntry, SubmissionQueueSnapshot } from "./queue-adapter.js";
|
|
9
9
|
import { Channel } from "@langchain/protocol";
|
|
10
10
|
|
|
11
11
|
//#region src/stream/controller.d.ts
|
|
@@ -100,16 +100,17 @@ declare class StreamController<StateType extends object = Record<string, unknown
|
|
|
100
100
|
* Cancel a queued submission by id. Returns `true` when the entry
|
|
101
101
|
* was found and removed, `false` otherwise.
|
|
102
102
|
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
103
|
+
* Removes the client-side entry either way; also issues a server-side
|
|
104
|
+
* cancel when the configured queue adapter is server-backed (see
|
|
105
|
+
* `AgentServerAdapter.serverQueue`). A no-op for the default,
|
|
106
|
+
* client-only adapter.
|
|
107
107
|
*
|
|
108
108
|
* @param id - Client-side queue entry id to remove.
|
|
109
109
|
*/
|
|
110
110
|
cancelQueued(id: string): Promise<boolean>;
|
|
111
111
|
/**
|
|
112
|
-
* Drop every queued submission.
|
|
112
|
+
* Drop every queued submission. Cancels the underlying server-side
|
|
113
|
+
* runs too when the configured queue adapter is server-backed.
|
|
113
114
|
*/
|
|
114
115
|
clearQueue(): Promise<void>;
|
|
115
116
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","names":[],"sources":["../../src/stream/controller.ts"],"mappings":"
|
|
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;;;;;EAkKrB,WAAA,CAAY,OAAA,EAAS,uBAAA,CAAwB,SAAA;EA6jBO;;;;;;;EAAA,IA/bhD,gBAAA,CAAA,GAAoB,OAAA;EAoyBQ;;;;;;;;EA3uB1B,OAAA,CAAQ,QAAA,mBAA2B,OAAA;EAm+BxB;;;;;;;;;;;;;;EA7lBX,wBAAA,CAAyB,UAAA,WAAqB,OAAA;EApuBI;;;;;;;;EAw+BlD,MAAA,CACJ,KAAA,WACA,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,gBAAA,IACxC,OAAA;EAx+BuC;;;;;;EAk/BpC,IAAA,CAAK,OAAA,GAAU,iBAAA,GAAoB,OAAA;EAh/BgB;;;;EAogCnD,UAAA,CAAA,GAAc,OAAA;EAl2ByB;;;;;;;;;;;EAk6BvC,YAAA,CAAa,EAAA,WAAa,OAAA;EA/FpB;;;;EAuGN,UAAA,CAAA,GAAc,OAAA;EA5Fd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyJA,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"}
|
|
@@ -15,7 +15,8 @@ import { MessageMetadataTracker } from "./message-metadata-tracker.js";
|
|
|
15
15
|
import { LifecycleLoadingTracker } from "./lifecycle-loading-tracker.js";
|
|
16
16
|
import { RootMessageProjection } from "./root-message-projection.js";
|
|
17
17
|
import { prepareOptimisticInput, serializeUpdateMessages } from "./optimistic-input.js";
|
|
18
|
-
import { EMPTY_QUEUE
|
|
18
|
+
import { EMPTY_QUEUE } from "./queue-adapter.js";
|
|
19
|
+
import { SubmitCoordinator } from "./submit-coordinator.js";
|
|
19
20
|
import { reconcileToolCallsFromMessages, seedToolCallsFromMessages, upsertToolCall } from "./tool-calls.js";
|
|
20
21
|
import { v7 } from "@langchain/core/utils/uuid";
|
|
21
22
|
import "@langchain/core/messages";
|
|
@@ -299,7 +300,8 @@ var StreamController = class {
|
|
|
299
300
|
});
|
|
300
301
|
this.#lifecycleLoading = new LifecycleLoadingTracker({
|
|
301
302
|
store: this.rootStore,
|
|
302
|
-
isDisposed: () => this.#disposed
|
|
303
|
+
isDisposed: () => this.#disposed,
|
|
304
|
+
onSettled: () => this.#submitter.scheduleQueueDrainOnObservedIdle()
|
|
303
305
|
});
|
|
304
306
|
this.messageMetadataStore = this.#messageMetadata.store;
|
|
305
307
|
this.queueStore = new StreamStore(EMPTY_QUEUE);
|
|
@@ -487,6 +489,7 @@ var StreamController = class {
|
|
|
487
489
|
let threadExists = false;
|
|
488
490
|
let threadMissing = false;
|
|
489
491
|
let threadActive = true;
|
|
492
|
+
let hasActiveInterrupts = false;
|
|
490
493
|
try {
|
|
491
494
|
const state = await this.#fetchHydrationState();
|
|
492
495
|
if (this.#disposed || this.#currentThreadId !== hydratedThreadId) return;
|
|
@@ -574,6 +577,7 @@ var StreamController = class {
|
|
|
574
577
|
if (Array.isArray(state?.tasks)) {
|
|
575
578
|
const generationAtFetch = this.#submitGeneration;
|
|
576
579
|
const { activeInterrupts, activeIds } = collectActiveInterruptsFromTasks(state.tasks);
|
|
580
|
+
hasActiveInterrupts = activeInterrupts.length > 0;
|
|
577
581
|
for (const id of activeIds) this.#resolvedInterrupts.delete(id);
|
|
578
582
|
this.rootStore.setState((s) => ({
|
|
579
583
|
...s,
|
|
@@ -630,6 +634,15 @@ var StreamController = class {
|
|
|
630
634
|
*/
|
|
631
635
|
const thread = this.#ensureThread(hydratedThreadId, !threadActive);
|
|
632
636
|
/**
|
|
637
|
+
* Picks up runs pending from before this page load, or another tab.
|
|
638
|
+
* Fire-and-forget. Must run after `#ensureThread` above, not before:
|
|
639
|
+
* `AgentServerQueueAdapter`'s own `getThread` callback also calls
|
|
640
|
+
* `#ensureThread(threadId, true)`, which would otherwise create
|
|
641
|
+
* `#thread` with the pump deferred before the line above decides it
|
|
642
|
+
* should be eager.
|
|
643
|
+
*/
|
|
644
|
+
this.#submitter.hydrateQueue(hydratedThreadId);
|
|
645
|
+
/**
|
|
633
646
|
* Start the wildcard lifecycle watcher up-front for existing,
|
|
634
647
|
* active threads. The root content pump runs at `depth: 1`, which
|
|
635
648
|
* covers root-namespace and one-deep events but not arbitrarily-
|
|
@@ -644,7 +657,21 @@ var StreamController = class {
|
|
|
644
657
|
* against a not-yet-existent thread; `submitRun` / `respondInput`
|
|
645
658
|
* call `startLifecycleWatcher` on first submission instead.
|
|
646
659
|
*/
|
|
647
|
-
if (threadExists && threadActive)
|
|
660
|
+
if (threadExists && threadActive) {
|
|
661
|
+
thread.startLifecycleWatcher();
|
|
662
|
+
/**
|
|
663
|
+
* Seed `isLoading` from the checkpoint itself, not just a live
|
|
664
|
+
* lifecycle event: a subscriber that joins after a foreign run's
|
|
665
|
+
* own `running` event already fired would otherwise never observe
|
|
666
|
+
* it. Excludes a thread merely parked at an interrupt — that's
|
|
667
|
+
* waiting on a human, not "loading", matching
|
|
668
|
+
* `LifecycleLoadingTracker`'s own `interrupted → isLoading = false`.
|
|
669
|
+
*/
|
|
670
|
+
if (threadActive && !hasActiveInterrupts) this.rootStore.setState((s) => s.isLoading ? s : {
|
|
671
|
+
...s,
|
|
672
|
+
isLoading: true
|
|
673
|
+
});
|
|
674
|
+
}
|
|
648
675
|
if (threadExists) {
|
|
649
676
|
/**
|
|
650
677
|
* Seed subgraph discovery and promote subagent execution
|
|
@@ -936,10 +963,10 @@ var StreamController = class {
|
|
|
936
963
|
* Cancel a queued submission by id. Returns `true` when the entry
|
|
937
964
|
* was found and removed, `false` otherwise.
|
|
938
965
|
*
|
|
939
|
-
*
|
|
940
|
-
*
|
|
941
|
-
*
|
|
942
|
-
*
|
|
966
|
+
* Removes the client-side entry either way; also issues a server-side
|
|
967
|
+
* cancel when the configured queue adapter is server-backed (see
|
|
968
|
+
* `AgentServerAdapter.serverQueue`). A no-op for the default,
|
|
969
|
+
* client-only adapter.
|
|
943
970
|
*
|
|
944
971
|
* @param id - Client-side queue entry id to remove.
|
|
945
972
|
*/
|
|
@@ -947,7 +974,8 @@ var StreamController = class {
|
|
|
947
974
|
return this.#submitter.cancelQueued(id);
|
|
948
975
|
}
|
|
949
976
|
/**
|
|
950
|
-
* Drop every queued submission.
|
|
977
|
+
* Drop every queued submission. Cancels the underlying server-side
|
|
978
|
+
* runs too when the configured queue adapter is server-backed.
|
|
951
979
|
*/
|
|
952
980
|
async clearQueue() {
|
|
953
981
|
await this.#submitter.clearQueue();
|
|
@@ -1323,6 +1351,7 @@ var StreamController = class {
|
|
|
1323
1351
|
this.#pendingHydrationInterruptEvents = [];
|
|
1324
1352
|
this.#discardPendingInterruptEvents();
|
|
1325
1353
|
this.queueStore.setState(() => EMPTY_QUEUE);
|
|
1354
|
+
this.#submitter.detachQueue();
|
|
1326
1355
|
try {
|
|
1327
1356
|
await subscription?.unsubscribe();
|
|
1328
1357
|
} catch {}
|