@langchain/langgraph-sdk 1.11.2 → 1.12.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.
Files changed (52) hide show
  1. package/dist/client/base.cjs +7 -0
  2. package/dist/client/base.cjs.map +1 -1
  3. package/dist/client/base.d.cts.map +1 -1
  4. package/dist/client/base.d.ts.map +1 -1
  5. package/dist/client/base.js +7 -0
  6. package/dist/client/base.js.map +1 -1
  7. package/dist/stream/controller.cjs +39 -10
  8. package/dist/stream/controller.cjs.map +1 -1
  9. package/dist/stream/controller.d.cts +7 -6
  10. package/dist/stream/controller.d.cts.map +1 -1
  11. package/dist/stream/controller.d.ts +7 -6
  12. package/dist/stream/controller.d.ts.map +1 -1
  13. package/dist/stream/controller.js +37 -8
  14. package/dist/stream/controller.js.map +1 -1
  15. package/dist/stream/dispatch-config.cjs +23 -0
  16. package/dist/stream/dispatch-config.cjs.map +1 -0
  17. package/dist/stream/dispatch-config.js +23 -0
  18. package/dist/stream/dispatch-config.js.map +1 -0
  19. package/dist/stream/index.d.cts +1 -1
  20. package/dist/stream/index.d.ts +1 -1
  21. package/dist/stream/lifecycle-loading-tracker.cjs +8 -0
  22. package/dist/stream/lifecycle-loading-tracker.cjs.map +1 -1
  23. package/dist/stream/lifecycle-loading-tracker.js +8 -0
  24. package/dist/stream/lifecycle-loading-tracker.js.map +1 -1
  25. package/dist/stream/queue-adapter-agent-server.cjs +204 -0
  26. package/dist/stream/queue-adapter-agent-server.cjs.map +1 -0
  27. package/dist/stream/queue-adapter-agent-server.js +203 -0
  28. package/dist/stream/queue-adapter-agent-server.js.map +1 -0
  29. package/dist/stream/queue-adapter-local.cjs +50 -0
  30. package/dist/stream/queue-adapter-local.cjs.map +1 -0
  31. package/dist/stream/queue-adapter-local.js +49 -0
  32. package/dist/stream/queue-adapter-local.js.map +1 -0
  33. package/dist/stream/queue-adapter.cjs +7 -0
  34. package/dist/stream/queue-adapter.cjs.map +1 -0
  35. package/dist/stream/{submit-coordinator.d.cts → queue-adapter.d.cts} +6 -9
  36. package/dist/stream/queue-adapter.d.cts.map +1 -0
  37. package/dist/stream/queue-adapter.d.ts +24 -0
  38. package/dist/stream/queue-adapter.d.ts.map +1 -0
  39. package/dist/stream/queue-adapter.js +7 -0
  40. package/dist/stream/queue-adapter.js.map +1 -0
  41. package/dist/stream/submit-coordinator.cjs +82 -86
  42. package/dist/stream/submit-coordinator.cjs.map +1 -1
  43. package/dist/stream/submit-coordinator.d.ts +1 -26
  44. package/dist/stream/submit-coordinator.js +82 -85
  45. package/dist/stream/submit-coordinator.js.map +1 -1
  46. package/dist/stream/types.d.cts +25 -4
  47. package/dist/stream/types.d.cts.map +1 -1
  48. package/dist/stream/types.d.ts +25 -4
  49. package/dist/stream/types.d.ts.map +1 -1
  50. package/package.json +1 -1
  51. package/dist/stream/submit-coordinator.d.cts.map +0 -1
  52. 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 "./submit-coordinator.cjs";
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
- * Today this only removes the entry from the client-side mirror —
104
- * once the server exposes queue cancel (roadmap A0.3) the
105
- * controller will additionally issue a cancel call against the
106
- * active transport.
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. Server-side cancel arrives with A0.3.
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;EAiyBF;;;;;;;EAAA,IAtqBvC,gBAAA,CAAA,GAAoB,OAAA;EA20BS;;;;;;;;EAlxB3B,OAAA,CAAQ,QAAA,mBAA2B,OAAA;EAogCpB;;;;;;;;;;;;;;EA7pBf,wBAAA,CAAyB,UAAA,WAAqB,OAAA;EAjsB5B;;;;;;;;EAq8BlB,MAAA,CACJ,KAAA,WACA,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,gBAAA,IACxC,OAAA;EAr8B4B;;;;;;EA+8BzB,IAAA,CAAK,OAAA,GAAU,iBAAA,GAAoB,OAAA;EA78BtB;;;;EAi+Bb,UAAA,CAAA,GAAc,OAAA;EArsBhB;;;;;;;;;;;EAqwBE,YAAA,CAAa,EAAA,WAAa,OAAA;EA/FW;;;EAsGrC,UAAA,CAAA,GAAc,OAAA;EA3FC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwJf,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
+ {"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 "./submit-coordinator.js";
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
- * Today this only removes the entry from the client-side mirror —
104
- * once the server exposes queue cancel (roadmap A0.3) the
105
- * controller will additionally issue a cancel call against the
106
- * active transport.
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. Server-side cancel arrives with A0.3.
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":";;;;;;;;;;;;;;;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;EAAA;;;;;EAiKnB,WAAA,CAAY,OAAA,EAAS,uBAAA,CAAwB,SAAA;EAiyBb;;;;;;;EAAA,IAtqB5B,gBAAA,CAAA,GAAoB,OAAA;EA4wBJ;;;;;;;;EAntBd,OAAA,CAAQ,QAAA,mBAA2B,OAAA;EAw/B5B;;;;;;;;;;;;;;EAjpBP,wBAAA,CAAyB,UAAA,WAAqB,OAAA;EAjsB3C;;;;;;;;EAq8BH,MAAA,CACJ,KAAA,WACA,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,gBAAA,IACxC,OAAA;EAr8BM;;;;;;EA+8BH,IAAA,CAAK,OAAA,GAAU,iBAAA,GAAoB,OAAA;EA78BhC;;;;EAi+BH,UAAA,CAAA,GAAc,OAAA;EAh0BR;;;;;;;;;;;EAg4BN,YAAA,CAAa,EAAA,WAAa,OAAA;EA/FA;;;EAsG1B,UAAA,CAAA,GAAc,OAAA;EA3Fd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwJA,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
+ {"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, SubmitCoordinator } from "./submit-coordinator.js";
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) thread.startLifecycleWatcher();
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
- * Today this only removes the entry from the client-side mirror —
940
- * once the server exposes queue cancel (roadmap A0.3) the
941
- * controller will additionally issue a cancel call against the
942
- * active transport.
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. Server-side cancel arrives with A0.3.
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 {}