@langchain/langgraph-sdk 1.8.9 → 1.9.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/README.md +90 -43
- package/dist/client/assistants/index.cjs +180 -0
- package/dist/client/assistants/index.cjs.map +1 -0
- package/dist/client/assistants/index.d.cts +155 -0
- package/dist/client/assistants/index.d.cts.map +1 -0
- package/dist/client/assistants/index.d.ts +155 -0
- package/dist/client/assistants/index.d.ts.map +1 -0
- package/dist/client/assistants/index.js +180 -0
- package/dist/client/assistants/index.js.map +1 -0
- package/dist/client/base.cjs +190 -0
- package/dist/client/base.cjs.map +1 -0
- package/dist/client/base.d.cts +84 -0
- package/dist/client/base.d.cts.map +1 -0
- package/dist/client/base.d.ts +84 -0
- package/dist/client/base.d.ts.map +1 -0
- package/dist/client/base.js +188 -0
- package/dist/client/base.js.map +1 -0
- package/dist/client/crons/index.cjs +159 -0
- package/dist/client/crons/index.cjs.map +1 -0
- package/dist/client/crons/index.d.cts +71 -0
- package/dist/client/crons/index.d.cts.map +1 -0
- package/dist/client/crons/index.d.ts +71 -0
- package/dist/client/crons/index.d.ts.map +1 -0
- package/dist/client/crons/index.js +159 -0
- package/dist/client/crons/index.js.map +1 -0
- package/dist/client/index.cjs +84 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +63 -0
- package/dist/client/index.d.cts.map +1 -0
- package/dist/client/index.d.ts +63 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +83 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/runs/index.cjs +275 -0
- package/dist/client/runs/index.cjs.map +1 -0
- package/dist/client/runs/index.d.cts +123 -0
- package/dist/client/runs/index.d.cts.map +1 -0
- package/dist/client/runs/index.d.ts +123 -0
- package/dist/client/runs/index.d.ts.map +1 -0
- package/dist/client/runs/index.js +275 -0
- package/dist/client/runs/index.js.map +1 -0
- package/dist/client/store/index.cjs +128 -0
- package/dist/client/store/index.cjs.map +1 -0
- package/dist/client/store/index.d.cts +75 -0
- package/dist/client/store/index.d.cts.map +1 -0
- package/dist/client/store/index.d.ts +75 -0
- package/dist/client/store/index.d.ts.map +1 -0
- package/dist/client/store/index.js +128 -0
- package/dist/client/store/index.js.map +1 -0
- package/dist/client/stream/error.cjs +18 -0
- package/dist/client/stream/error.cjs.map +1 -0
- package/dist/client/stream/error.d.cts +14 -0
- package/dist/client/stream/error.d.cts.map +1 -0
- package/dist/client/stream/error.d.ts +14 -0
- package/dist/client/stream/error.d.ts.map +1 -0
- package/dist/client/stream/error.js +18 -0
- package/dist/client/stream/error.js.map +1 -0
- package/dist/client/stream/handles/index.cjs +3 -0
- package/dist/client/stream/handles/index.d.ts +3 -0
- package/dist/client/stream/handles/index.js +4 -0
- package/dist/client/stream/handles/subagents.cjs +263 -0
- package/dist/client/stream/handles/subagents.cjs.map +1 -0
- package/dist/client/stream/handles/subagents.d.cts +45 -0
- package/dist/client/stream/handles/subagents.d.cts.map +1 -0
- package/dist/client/stream/handles/subagents.d.ts +45 -0
- package/dist/client/stream/handles/subagents.d.ts.map +1 -0
- package/dist/client/stream/handles/subagents.js +262 -0
- package/dist/client/stream/handles/subagents.js.map +1 -0
- package/dist/client/stream/handles/subgraphs.cjs +352 -0
- package/dist/client/stream/handles/subgraphs.cjs.map +1 -0
- package/dist/client/stream/handles/subgraphs.d.cts +82 -0
- package/dist/client/stream/handles/subgraphs.d.cts.map +1 -0
- package/dist/client/stream/handles/subgraphs.d.ts +82 -0
- package/dist/client/stream/handles/subgraphs.d.ts.map +1 -0
- package/dist/client/stream/handles/subgraphs.js +351 -0
- package/dist/client/stream/handles/subgraphs.js.map +1 -0
- package/dist/client/stream/handles/tools.cjs +92 -0
- package/dist/client/stream/handles/tools.cjs.map +1 -0
- package/dist/client/stream/handles/tools.d.cts +26 -0
- package/dist/client/stream/handles/tools.d.cts.map +1 -0
- package/dist/client/stream/handles/tools.d.ts +26 -0
- package/dist/client/stream/handles/tools.d.ts.map +1 -0
- package/dist/client/stream/handles/tools.js +92 -0
- package/dist/client/stream/handles/tools.js.map +1 -0
- package/dist/client/stream/index.cjs +1368 -0
- package/dist/client/stream/index.cjs.map +1 -0
- package/dist/client/stream/index.d.cts +238 -0
- package/dist/client/stream/index.d.cts.map +1 -0
- package/dist/client/stream/index.d.ts +238 -0
- package/dist/client/stream/index.d.ts.map +1 -0
- package/dist/client/stream/index.js +1367 -0
- package/dist/client/stream/index.js.map +1 -0
- package/dist/client/stream/media.cjs +506 -0
- package/dist/client/stream/media.cjs.map +1 -0
- package/dist/client/stream/media.d.cts +164 -0
- package/dist/client/stream/media.d.cts.map +1 -0
- package/dist/client/stream/media.d.ts +164 -0
- package/dist/client/stream/media.d.ts.map +1 -0
- package/dist/client/stream/media.js +505 -0
- package/dist/client/stream/media.js.map +1 -0
- package/dist/client/stream/messages.cjs +635 -0
- package/dist/client/stream/messages.cjs.map +1 -0
- package/dist/client/stream/messages.d.cts +139 -0
- package/dist/client/stream/messages.d.cts.map +1 -0
- package/dist/client/stream/messages.d.ts +139 -0
- package/dist/client/stream/messages.d.ts.map +1 -0
- package/dist/client/stream/messages.js +631 -0
- package/dist/client/stream/messages.js.map +1 -0
- package/dist/client/stream/multi-cursor-buffer.cjs +55 -0
- package/dist/client/stream/multi-cursor-buffer.cjs.map +1 -0
- package/dist/client/stream/multi-cursor-buffer.js +55 -0
- package/dist/client/stream/multi-cursor-buffer.js.map +1 -0
- package/dist/client/stream/subscription.cjs +85 -0
- package/dist/client/stream/subscription.cjs.map +1 -0
- package/dist/client/stream/subscription.d.cts +22 -0
- package/dist/client/stream/subscription.d.cts.map +1 -0
- package/dist/client/stream/subscription.d.ts +22 -0
- package/dist/client/stream/subscription.d.ts.map +1 -0
- package/dist/client/stream/subscription.js +84 -0
- package/dist/client/stream/subscription.js.map +1 -0
- package/dist/client/stream/transport/agent-server.cjs +45 -0
- package/dist/client/stream/transport/agent-server.cjs.map +1 -0
- package/dist/client/stream/transport/agent-server.d.cts +39 -0
- package/dist/client/stream/transport/agent-server.d.cts.map +1 -0
- package/dist/client/stream/transport/agent-server.d.ts +39 -0
- package/dist/client/stream/transport/agent-server.d.ts.map +1 -0
- package/dist/client/stream/transport/agent-server.js +45 -0
- package/dist/client/stream/transport/agent-server.js.map +1 -0
- package/dist/client/stream/transport/constants.cjs +10 -0
- package/dist/client/stream/transport/constants.cjs.map +1 -0
- package/dist/client/stream/transport/constants.js +10 -0
- package/dist/client/stream/transport/constants.js.map +1 -0
- package/dist/client/stream/transport/decoder.cjs +115 -0
- package/dist/client/stream/transport/decoder.cjs.map +1 -0
- package/dist/client/stream/transport/decoder.js +114 -0
- package/dist/client/stream/transport/decoder.js.map +1 -0
- package/dist/client/stream/transport/http.cjs +183 -0
- package/dist/client/stream/transport/http.cjs.map +1 -0
- package/dist/client/stream/transport/http.d.cts +45 -0
- package/dist/client/stream/transport/http.d.cts.map +1 -0
- package/dist/client/stream/transport/http.d.ts +45 -0
- package/dist/client/stream/transport/http.d.ts.map +1 -0
- package/dist/client/stream/transport/http.js +183 -0
- package/dist/client/stream/transport/http.js.map +1 -0
- package/dist/client/stream/transport/index.cjs +3 -0
- package/dist/client/stream/transport/index.js +4 -0
- package/dist/client/stream/transport/queue.cjs +55 -0
- package/dist/client/stream/transport/queue.cjs.map +1 -0
- package/dist/client/stream/transport/queue.js +55 -0
- package/dist/client/stream/transport/queue.js.map +1 -0
- package/dist/client/stream/transport/stream.cjs +79 -0
- package/dist/client/stream/transport/stream.cjs.map +1 -0
- package/dist/client/stream/transport/stream.js +79 -0
- package/dist/client/stream/transport/stream.js.map +1 -0
- package/dist/client/stream/transport/types.d.cts +29 -0
- package/dist/client/stream/transport/types.d.cts.map +1 -0
- package/dist/client/stream/transport/types.d.ts +29 -0
- package/dist/client/stream/transport/types.d.ts.map +1 -0
- package/dist/client/stream/transport/utils.cjs +45 -0
- package/dist/client/stream/transport/utils.cjs.map +1 -0
- package/dist/client/stream/transport/utils.js +39 -0
- package/dist/client/stream/transport/utils.js.map +1 -0
- package/dist/client/stream/transport/websocket.cjs +155 -0
- package/dist/client/stream/transport/websocket.cjs.map +1 -0
- package/dist/client/stream/transport/websocket.d.cts +36 -0
- package/dist/client/stream/transport/websocket.d.cts.map +1 -0
- package/dist/client/stream/transport/websocket.d.ts +36 -0
- package/dist/client/stream/transport/websocket.d.ts.map +1 -0
- package/dist/client/stream/transport/websocket.js +155 -0
- package/dist/client/stream/transport/websocket.js.map +1 -0
- package/dist/client/stream/transport.d.cts +104 -0
- package/dist/client/stream/transport.d.cts.map +1 -0
- package/dist/client/stream/transport.d.ts +104 -0
- package/dist/client/stream/transport.d.ts.map +1 -0
- package/dist/client/stream/types.d.cts +208 -0
- package/dist/client/stream/types.d.cts.map +1 -0
- package/dist/client/stream/types.d.ts +208 -0
- package/dist/client/stream/types.d.ts.map +1 -0
- package/dist/client/threads/index.cjs +271 -0
- package/dist/client/threads/index.cjs.map +1 -0
- package/dist/client/threads/index.d.cts +235 -0
- package/dist/client/threads/index.d.cts.map +1 -0
- package/dist/client/threads/index.d.ts +235 -0
- package/dist/client/threads/index.d.ts.map +1 -0
- package/dist/client/threads/index.js +270 -0
- package/dist/client/threads/index.js.map +1 -0
- package/dist/client/ui-internal/index.cjs +29 -0
- package/dist/client/ui-internal/index.cjs.map +1 -0
- package/dist/client/ui-internal/index.d.cts +11 -0
- package/dist/client/ui-internal/index.d.cts.map +1 -0
- package/dist/client/ui-internal/index.d.ts +11 -0
- package/dist/client/ui-internal/index.d.ts.map +1 -0
- package/dist/client/ui-internal/index.js +29 -0
- package/dist/client/ui-internal/index.js.map +1 -0
- package/dist/client.cjs +35 -1308
- package/dist/client.d.cts +19 -857
- package/dist/client.d.ts +19 -857
- package/dist/client.js +16 -1301
- package/dist/index.cjs +25 -4
- package/dist/index.d.cts +15 -3
- package/dist/index.d.ts +15 -3
- package/dist/index.js +14 -3
- package/dist/react/stream.cjs.map +1 -1
- package/dist/react/stream.custom.cjs +1 -1
- package/dist/react/stream.custom.js +1 -1
- package/dist/react/stream.d.cts +2 -1
- package/dist/react/stream.d.cts.map +1 -1
- package/dist/react/stream.d.ts +2 -1
- package/dist/react/stream.d.ts.map +1 -1
- package/dist/react/stream.js.map +1 -1
- package/dist/react/stream.lgp.cjs +8 -6
- package/dist/react/stream.lgp.cjs.map +1 -1
- package/dist/react/stream.lgp.js +6 -4
- package/dist/react/stream.lgp.js.map +1 -1
- package/dist/react/types.d.cts +1 -1
- package/dist/react/types.d.ts +1 -1
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react-ui/server/server.cjs +1 -1
- package/dist/react-ui/server/server.cjs.map +1 -1
- package/dist/react-ui/server/server.js +1 -1
- package/dist/react-ui/server/server.js.map +1 -1
- package/dist/react-ui/types.cjs.map +1 -1
- package/dist/react-ui/types.d.cts +1 -1
- package/dist/react-ui/types.d.cts.map +1 -1
- package/dist/react-ui/types.d.ts +1 -1
- package/dist/react-ui/types.d.ts.map +1 -1
- package/dist/react-ui/types.js.map +1 -1
- package/dist/stream/assembled-to-message.cjs +121 -0
- package/dist/stream/assembled-to-message.cjs.map +1 -0
- package/dist/stream/assembled-to-message.d.cts +35 -0
- package/dist/stream/assembled-to-message.d.cts.map +1 -0
- package/dist/stream/assembled-to-message.d.ts +35 -0
- package/dist/stream/assembled-to-message.d.ts.map +1 -0
- package/dist/stream/assembled-to-message.js +119 -0
- package/dist/stream/assembled-to-message.js.map +1 -0
- package/dist/stream/channel-registry.cjs +224 -0
- package/dist/stream/channel-registry.cjs.map +1 -0
- package/dist/stream/channel-registry.d.cts +102 -0
- package/dist/stream/channel-registry.d.cts.map +1 -0
- package/dist/stream/channel-registry.d.ts +102 -0
- package/dist/stream/channel-registry.d.ts.map +1 -0
- package/dist/stream/channel-registry.js +224 -0
- package/dist/stream/channel-registry.js.map +1 -0
- package/dist/stream/constants.cjs +11 -0
- package/dist/stream/constants.cjs.map +1 -0
- package/dist/stream/constants.d.cts +10 -0
- package/dist/stream/constants.d.cts.map +1 -0
- package/dist/stream/constants.d.ts +10 -0
- package/dist/stream/constants.d.ts.map +1 -0
- package/dist/stream/constants.js +11 -0
- package/dist/stream/constants.js.map +1 -0
- package/dist/stream/controller.cjs +933 -0
- package/dist/stream/controller.cjs.map +1 -0
- package/dist/stream/controller.d.cts +135 -0
- package/dist/stream/controller.d.cts.map +1 -0
- package/dist/stream/controller.d.ts +135 -0
- package/dist/stream/controller.d.ts.map +1 -0
- package/dist/stream/controller.js +910 -0
- package/dist/stream/controller.js.map +1 -0
- package/dist/stream/discovery/index.d.ts +2 -0
- package/dist/stream/discovery/subagents.cjs +235 -0
- package/dist/stream/discovery/subagents.cjs.map +1 -0
- package/dist/stream/discovery/subagents.d.cts +18 -0
- package/dist/stream/discovery/subagents.d.cts.map +1 -0
- package/dist/stream/discovery/subagents.d.ts +18 -0
- package/dist/stream/discovery/subagents.d.ts.map +1 -0
- package/dist/stream/discovery/subagents.js +235 -0
- package/dist/stream/discovery/subagents.js.map +1 -0
- package/dist/stream/discovery/subgraphs.cjs +153 -0
- package/dist/stream/discovery/subgraphs.cjs.map +1 -0
- package/dist/stream/discovery/subgraphs.d.cts +19 -0
- package/dist/stream/discovery/subgraphs.d.cts.map +1 -0
- package/dist/stream/discovery/subgraphs.d.ts +19 -0
- package/dist/stream/discovery/subgraphs.d.ts.map +1 -0
- package/dist/stream/discovery/subgraphs.js +153 -0
- package/dist/stream/discovery/subgraphs.js.map +1 -0
- package/dist/stream/index.cjs +36 -0
- package/dist/stream/index.d.cts +25 -0
- package/dist/stream/index.d.ts +25 -0
- package/dist/stream/index.js +16 -0
- package/dist/stream/lifecycle-loading-tracker.cjs +83 -0
- package/dist/stream/lifecycle-loading-tracker.cjs.map +1 -0
- package/dist/stream/lifecycle-loading-tracker.js +83 -0
- package/dist/stream/lifecycle-loading-tracker.js.map +1 -0
- package/dist/stream/message-metadata-tracker.cjs +165 -0
- package/dist/stream/message-metadata-tracker.cjs.map +1 -0
- package/dist/stream/message-metadata-tracker.d.cts +24 -0
- package/dist/stream/message-metadata-tracker.d.cts.map +1 -0
- package/dist/stream/message-metadata-tracker.d.ts +24 -0
- package/dist/stream/message-metadata-tracker.d.ts.map +1 -0
- package/dist/stream/message-metadata-tracker.js +165 -0
- package/dist/stream/message-metadata-tracker.js.map +1 -0
- package/dist/stream/message-reconciliation.cjs +118 -0
- package/dist/stream/message-reconciliation.cjs.map +1 -0
- package/dist/stream/message-reconciliation.js +115 -0
- package/dist/stream/message-reconciliation.js.map +1 -0
- package/dist/stream/namespace.cjs +54 -0
- package/dist/stream/namespace.cjs.map +1 -0
- package/dist/stream/namespace.js +49 -0
- package/dist/stream/namespace.js.map +1 -0
- package/dist/stream/projections/channel.cjs +53 -0
- package/dist/stream/projections/channel.cjs.map +1 -0
- package/dist/stream/projections/channel.d.cts +22 -0
- package/dist/stream/projections/channel.d.cts.map +1 -0
- package/dist/stream/projections/channel.d.ts +22 -0
- package/dist/stream/projections/channel.d.ts.map +1 -0
- package/dist/stream/projections/channel.js +53 -0
- package/dist/stream/projections/channel.js.map +1 -0
- package/dist/stream/projections/extension.cjs +29 -0
- package/dist/stream/projections/extension.cjs.map +1 -0
- package/dist/stream/projections/extension.d.cts +7 -0
- package/dist/stream/projections/extension.d.cts.map +1 -0
- package/dist/stream/projections/extension.d.ts +7 -0
- package/dist/stream/projections/extension.d.ts.map +1 -0
- package/dist/stream/projections/extension.js +29 -0
- package/dist/stream/projections/extension.js.map +1 -0
- package/dist/stream/projections/index.cjs +6 -0
- package/dist/stream/projections/index.d.ts +6 -0
- package/dist/stream/projections/index.js +7 -0
- package/dist/stream/projections/media.cjs +81 -0
- package/dist/stream/projections/media.cjs.map +1 -0
- package/dist/stream/projections/media.d.cts +18 -0
- package/dist/stream/projections/media.d.cts.map +1 -0
- package/dist/stream/projections/media.d.ts +18 -0
- package/dist/stream/projections/media.d.ts.map +1 -0
- package/dist/stream/projections/media.js +78 -0
- package/dist/stream/projections/media.js.map +1 -0
- package/dist/stream/projections/messages.cjs +121 -0
- package/dist/stream/projections/messages.cjs.map +1 -0
- package/dist/stream/projections/messages.d.cts +8 -0
- package/dist/stream/projections/messages.d.cts.map +1 -0
- package/dist/stream/projections/messages.d.ts +8 -0
- package/dist/stream/projections/messages.d.ts.map +1 -0
- package/dist/stream/projections/messages.js +121 -0
- package/dist/stream/projections/messages.js.map +1 -0
- package/dist/stream/projections/runtime.cjs +44 -0
- package/dist/stream/projections/runtime.cjs.map +1 -0
- package/dist/stream/projections/runtime.js +44 -0
- package/dist/stream/projections/runtime.js.map +1 -0
- package/dist/stream/projections/tool-calls.cjs +50 -0
- package/dist/stream/projections/tool-calls.cjs.map +1 -0
- package/dist/stream/projections/tool-calls.d.cts +8 -0
- package/dist/stream/projections/tool-calls.d.cts.map +1 -0
- package/dist/stream/projections/tool-calls.d.ts +8 -0
- package/dist/stream/projections/tool-calls.d.ts.map +1 -0
- package/dist/stream/projections/tool-calls.js +50 -0
- package/dist/stream/projections/tool-calls.js.map +1 -0
- package/dist/stream/projections/values.cjs +52 -0
- package/dist/stream/projections/values.cjs.map +1 -0
- package/dist/stream/projections/values.d.cts +7 -0
- package/dist/stream/projections/values.d.cts.map +1 -0
- package/dist/stream/projections/values.d.ts +6 -0
- package/dist/stream/projections/values.d.ts.map +1 -0
- package/dist/stream/projections/values.js +52 -0
- package/dist/stream/projections/values.js.map +1 -0
- package/dist/stream/root-message-projection.cjs +256 -0
- package/dist/stream/root-message-projection.cjs.map +1 -0
- package/dist/stream/root-message-projection.js +256 -0
- package/dist/stream/root-message-projection.js.map +1 -0
- package/dist/stream/store.cjs +32 -0
- package/dist/stream/store.cjs.map +1 -0
- package/dist/stream/store.d.cts +37 -0
- package/dist/stream/store.d.cts.map +1 -0
- package/dist/stream/store.d.ts +37 -0
- package/dist/stream/store.d.ts.map +1 -0
- package/dist/stream/store.js +32 -0
- package/dist/stream/store.js.map +1 -0
- package/dist/stream/submit-coordinator.cjs +399 -0
- package/dist/stream/submit-coordinator.cjs.map +1 -0
- package/dist/stream/submit-coordinator.d.cts +27 -0
- package/dist/stream/submit-coordinator.d.cts.map +1 -0
- package/dist/stream/submit-coordinator.d.ts +27 -0
- package/dist/stream/submit-coordinator.d.ts.map +1 -0
- package/dist/stream/submit-coordinator.js +397 -0
- package/dist/stream/submit-coordinator.js.map +1 -0
- package/dist/stream/tool-calls.cjs +15 -0
- package/dist/stream/tool-calls.cjs.map +1 -0
- package/dist/stream/tool-calls.js +15 -0
- package/dist/stream/tool-calls.js.map +1 -0
- package/dist/stream/types-inference.d.cts +43 -0
- package/dist/stream/types-inference.d.cts.map +1 -0
- package/dist/stream/types-inference.d.ts +43 -0
- package/dist/stream/types-inference.d.ts.map +1 -0
- package/dist/stream/types.d.cts +354 -0
- package/dist/stream/types.d.cts.map +1 -0
- package/dist/stream/types.d.ts +354 -0
- package/dist/stream/types.d.ts.map +1 -0
- package/dist/types.d.cts +2 -1
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/index.cjs +1 -1
- package/dist/ui/index.d.cts +3 -3
- package/dist/ui/index.d.ts +3 -3
- package/dist/ui/index.js +1 -1
- package/dist/ui/manager.cjs +2 -2
- package/dist/ui/manager.cjs.map +1 -1
- package/dist/ui/manager.d.cts +1 -0
- package/dist/ui/manager.d.cts.map +1 -1
- package/dist/ui/manager.d.ts +1 -0
- package/dist/ui/manager.d.ts.map +1 -1
- package/dist/ui/manager.js +2 -2
- package/dist/ui/manager.js.map +1 -1
- package/dist/ui/messages.cjs +50 -7
- package/dist/ui/messages.cjs.map +1 -1
- package/dist/ui/messages.d.cts.map +1 -1
- package/dist/ui/messages.d.ts.map +1 -1
- package/dist/ui/messages.js +51 -9
- package/dist/ui/messages.js.map +1 -1
- package/dist/ui/orchestrator-custom.cjs +1 -1
- package/dist/ui/orchestrator-custom.js +1 -1
- package/dist/ui/orchestrator.cjs +4 -3
- package/dist/ui/orchestrator.cjs.map +1 -1
- package/dist/ui/orchestrator.d.cts +1 -1
- package/dist/ui/orchestrator.d.cts.map +1 -1
- package/dist/ui/orchestrator.d.ts +1 -1
- package/dist/ui/orchestrator.d.ts.map +1 -1
- package/dist/ui/orchestrator.js +4 -3
- package/dist/ui/orchestrator.js.map +1 -1
- package/dist/ui/stream/agent.d.cts +1 -1
- package/dist/ui/stream/agent.d.cts.map +1 -1
- package/dist/ui/stream/agent.d.ts +1 -1
- package/dist/ui/stream/agent.d.ts.map +1 -1
- package/dist/ui/stream/base.d.cts +7 -6
- package/dist/ui/stream/base.d.cts.map +1 -1
- package/dist/ui/stream/base.d.ts +7 -6
- package/dist/ui/stream/base.d.ts.map +1 -1
- package/dist/ui/stream/deep-agent.d.cts +1 -1
- package/dist/ui/stream/deep-agent.d.cts.map +1 -1
- package/dist/ui/stream/deep-agent.d.ts +1 -1
- package/dist/ui/stream/deep-agent.d.ts.map +1 -1
- package/dist/ui/stream/index.d.cts +4 -4
- package/dist/ui/stream/index.d.cts.map +1 -1
- package/dist/ui/stream/index.d.ts +4 -4
- package/dist/ui/stream/index.d.ts.map +1 -1
- package/dist/ui/types.d.cts +3 -2
- package/dist/ui/types.d.cts.map +1 -1
- package/dist/ui/types.d.ts +2 -1
- package/dist/ui/types.d.ts.map +1 -1
- package/package.json +18 -8
- package/dist/client.cjs.map +0 -1
- package/dist/client.d.cts.map +0 -1
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subgraphs.cjs","names":["#session","#messagesIterable","MultiCursorBuffer","StreamingMessageAssembler","#startProjection","#valuesProjection","#outputPromise","#toolCallsIterable","ToolCallAssembler","#subgraphsIterable","#subagentsIterable","#ensureMediaDispatcher","#audioBuffer","#imagesBuffer","#videoBuffer","#filesBuffer","#mediaDispatcherStarted","MediaAssembler","#source","#parentNamespace","#discovered","#pendingToolStarts","#pendingToolCallHandles","#queue","#waiters","#processToolEvent","#sourcePump","#processEvent","#emit","#closed","#start"],"sources":["../../../../src/client/stream/handles/subgraphs.ts"],"sourcesContent":["import type {\n Channel,\n Event,\n LifecycleCause,\n LifecycleEvent,\n MessagesEvent,\n SubscribeParams,\n ToolsEvent,\n ValuesEvent,\n} from \"@langchain/protocol\";\nimport type { SubscriptionHandle } from \"../index.js\";\nimport { MultiCursorBuffer } from \"../multi-cursor-buffer.js\";\nimport { StreamingMessageAssembler } from \"../messages.js\";\nimport type { StreamingMessage, StreamingMessageHandle } from \"../messages.js\";\nimport { ToolCallAssembler } from \"./tools.js\";\nimport type { AssembledToolCall } from \"./tools.js\";\nimport { MediaAssembler } from \"../media.js\";\nimport type {\n AudioMedia,\n FileMedia,\n ImageMedia,\n VideoMedia,\n} from \"../media.js\";\nimport type {\n EventForChannel,\n EventForChannels,\n SubscribeOptions,\n YieldForChannel,\n YieldForChannels,\n} from \"../types.js\";\nimport type { SubagentHandle } from \"./subagents.js\";\n\n/**\n * Minimal subscription surface that {@link SubgraphHandle} and\n * {@link SubagentHandle} delegate to. Typed to match the\n * `Session.subscribe` raw-channel overloads without importing the\n * full `Session` class (avoids circular dependency).\n */\nexport interface Subscribable {\n subscribe<TChannel extends Channel>(\n channel: TChannel,\n options?: SubscribeOptions\n ): Promise<\n SubscriptionHandle<EventForChannel<TChannel>, YieldForChannel<TChannel>>\n >;\n subscribe<const TChannels extends readonly Channel[]>(\n channels: TChannels,\n options?: SubscribeOptions\n ): Promise<\n SubscriptionHandle<EventForChannels<TChannels>, YieldForChannels<TChannels>>\n >;\n subscribe(params: SubscribeParams): Promise<SubscriptionHandle<Event>>;\n}\n\n/**\n * Discovered subgraph within a streaming session.\n *\n * Mirrors the in-process `SubgraphRunStream` pattern: each subgraph\n * has `name`, `index`, `namespace`, and lazy getters for projections\n * scoped to this subgraph's namespace.\n *\n * ```ts\n * for await (const sub of session.subgraphs) {\n * for await (const msg of sub.messages) { ... }\n * const state = await sub.output;\n * }\n * ```\n */\nexport class SubgraphHandle {\n readonly name: string;\n readonly index: number;\n readonly namespace: string[];\n /**\n * Non-empty when upstream attached a `cause` to this subgraph's\n * `lifecycle.started` event. Population is product-specific and\n * performed by stream transformers on the runtime side (e.g.\n * deepagents' `SubagentTransformer` emits\n * `{ type: \"toolCall\", tool_call_id }`). Generic clients should\n * treat `cause.type` as an open enum — the protocol allows future\n * variants (`send`, `edge`, ...) to be forwarded verbatim without\n * a SDK bump.\n */\n readonly cause?: LifecycleCause;\n readonly graphName?: string;\n /**\n * Raw `tool-started` event that triggered this subgraph, when\n * `cause.type === \"toolCall\"` and the matching event has been\n * observed on the `tools` channel.\n */\n toolStartedEvent?: ToolsEvent;\n readonly #session: Subscribable;\n\n #messagesIterable?: AsyncIterable<StreamingMessage>;\n #valuesProjection?: AsyncIterable<unknown> & PromiseLike<unknown>;\n #toolCallsIterable?: AsyncIterable<AssembledToolCall>;\n #subgraphsIterable?: AsyncIterable<SubgraphHandle>;\n #subagentsIterable?: AsyncIterable<SubagentHandle>;\n #outputPromise?: Promise<unknown>;\n\n #mediaDispatcherStarted = false;\n #audioBuffer?: MultiCursorBuffer<AudioMedia>;\n #imagesBuffer?: MultiCursorBuffer<ImageMedia>;\n #videoBuffer?: MultiCursorBuffer<VideoMedia>;\n #filesBuffer?: MultiCursorBuffer<FileMedia>;\n\n constructor(\n name: string,\n index: number,\n namespace: string[],\n session: Subscribable,\n options?: {\n cause?: LifecycleCause;\n graphName?: string;\n toolStartedEvent?: ToolsEvent;\n }\n ) {\n this.name = name;\n this.index = index;\n this.namespace = namespace;\n this.cause = options?.cause;\n this.graphName = options?.graphName;\n this.toolStartedEvent = options?.toolStartedEvent;\n this.#session = session;\n }\n\n get messages(): AsyncIterable<StreamingMessageHandle> {\n if (this.#messagesIterable) return this.#messagesIterable;\n const buffer = new MultiCursorBuffer<StreamingMessage>();\n this.#messagesIterable = buffer;\n const assembler = new StreamingMessageAssembler();\n void this.#startProjection(\n [\"messages\"],\n (event) => {\n if (event.method !== \"messages\") return;\n const msg = assembler.consume(event as MessagesEvent);\n if (msg) buffer.push(msg);\n },\n () => buffer.close()\n );\n return buffer;\n }\n\n get values(): AsyncIterable<unknown> & PromiseLike<unknown> {\n if (this.#valuesProjection) return this.#valuesProjection;\n const buffer = new MultiCursorBuffer<unknown>();\n let lastValue: unknown;\n let resolveOutput!: (value: unknown) => void;\n const outputPromise = new Promise<unknown>((resolve) => {\n resolveOutput = resolve;\n });\n this.#outputPromise = outputPromise;\n const projection = Object.assign(buffer, {\n then: <TResult1 = unknown, TResult2 = never>(\n onfulfilled?:\n | ((value: unknown) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?:\n | ((reason: unknown) => TResult2 | PromiseLike<TResult2>)\n | null\n ): Promise<TResult1 | TResult2> =>\n outputPromise.then(onfulfilled, onrejected),\n }) as AsyncIterable<unknown> & PromiseLike<unknown>;\n this.#valuesProjection = projection;\n void this.#startProjection(\n [\"values\"],\n (event) => {\n if (event.method !== \"values\") return;\n const data = (event as ValuesEvent).params.data;\n lastValue = data;\n buffer.push(data);\n },\n () => {\n resolveOutput(lastValue);\n buffer.close();\n }\n );\n return projection;\n }\n\n get toolCalls(): AsyncIterable<AssembledToolCall> {\n if (this.#toolCallsIterable) return this.#toolCallsIterable;\n const buffer = new MultiCursorBuffer<AssembledToolCall>();\n this.#toolCallsIterable = buffer;\n const assembler = new ToolCallAssembler();\n void this.#startProjection(\n [\"tools\"],\n (event) => {\n if (event.method !== \"tools\") return;\n const tc = assembler.consume(event as ToolsEvent);\n if (tc) buffer.push(tc);\n },\n () => buffer.close()\n );\n return buffer;\n }\n\n get subgraphs(): AsyncIterable<SubgraphHandle> {\n if (this.#subgraphsIterable) return this.#subgraphsIterable;\n const buffer = new MultiCursorBuffer<SubgraphHandle>();\n this.#subgraphsIterable = buffer;\n void (async () => {\n const rawHandle = await this.#session.subscribe({\n channels: [\"lifecycle\", \"tools\"],\n namespaces: [this.namespace],\n });\n const discovery = new SubgraphDiscoveryHandle(\n rawHandle,\n this.#session,\n this.namespace\n );\n for await (const sub of discovery) {\n buffer.push(sub);\n }\n buffer.close();\n })();\n return buffer;\n }\n\n get subagents(): AsyncIterable<SubagentHandle> {\n if (this.#subagentsIterable) return this.#subagentsIterable;\n const buffer = new MultiCursorBuffer<SubagentHandle>();\n this.#subagentsIterable = buffer;\n void (async () => {\n const rawHandle = await this.#session.subscribe({\n channels: [\"tools\", \"lifecycle\"],\n namespaces: [this.namespace],\n });\n const { SubagentDiscoveryHandle: Discovery } =\n await import(\"./subagents.js\");\n const discovery = new Discovery(rawHandle, this.#session);\n for await (const sub of discovery) {\n buffer.push(sub);\n }\n buffer.close();\n })();\n return buffer;\n }\n\n get audio(): AsyncIterable<AudioMedia> {\n this.#ensureMediaDispatcher();\n return this.#audioBuffer!;\n }\n\n get images(): AsyncIterable<ImageMedia> {\n this.#ensureMediaDispatcher();\n return this.#imagesBuffer!;\n }\n\n get video(): AsyncIterable<VideoMedia> {\n this.#ensureMediaDispatcher();\n return this.#videoBuffer!;\n }\n\n get files(): AsyncIterable<FileMedia> {\n this.#ensureMediaDispatcher();\n return this.#filesBuffer!;\n }\n\n get output(): Promise<unknown> {\n void this.values;\n return this.#outputPromise!;\n }\n\n #ensureMediaDispatcher(): void {\n if (this.#mediaDispatcherStarted) return;\n this.#mediaDispatcherStarted = true;\n const audio = new MultiCursorBuffer<AudioMedia>();\n const images = new MultiCursorBuffer<ImageMedia>();\n const video = new MultiCursorBuffer<VideoMedia>();\n const files = new MultiCursorBuffer<FileMedia>();\n this.#audioBuffer = audio;\n this.#imagesBuffer = images;\n this.#videoBuffer = video;\n this.#filesBuffer = files;\n const assembler = new MediaAssembler({\n onAudio: (m: AudioMedia) => audio.push(m),\n onImage: (m: ImageMedia) => images.push(m),\n onVideo: (m: VideoMedia) => video.push(m),\n onFile: (m: FileMedia) => files.push(m),\n });\n void this.#startProjection(\n [\"messages\"],\n (event) => {\n if (event.method !== \"messages\") return;\n assembler.consume(event as MessagesEvent);\n },\n () => {\n assembler.close();\n audio.close();\n images.close();\n video.close();\n files.close();\n }\n );\n }\n\n /**\n * Create a raw channel subscription scoped to this subgraph's namespace.\n */\n subscribe<TChannel extends Channel>(\n channel: TChannel,\n options?: SubscribeOptions\n ): Promise<\n SubscriptionHandle<EventForChannel<TChannel>, YieldForChannel<TChannel>>\n >;\n subscribe<const TChannels extends readonly Channel[]>(\n channels: TChannels,\n options?: SubscribeOptions\n ): Promise<\n SubscriptionHandle<EventForChannels<TChannels>, YieldForChannels<TChannels>>\n >;\n subscribe(params: SubscribeParams): Promise<SubscriptionHandle<Event>>;\n subscribe(\n paramsOrChannels: SubscribeParams | Channel | string | readonly Channel[],\n options: SubscribeOptions = {}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n if (\n typeof paramsOrChannels === \"object\" &&\n !Array.isArray(paramsOrChannels) &&\n \"channels\" in paramsOrChannels\n ) {\n return this.#session.subscribe({\n ...paramsOrChannels,\n namespaces: paramsOrChannels.namespaces ?? [this.namespace],\n });\n }\n\n return this.#session.subscribe(paramsOrChannels as Channel, {\n ...options,\n namespaces: options.namespaces ?? [this.namespace],\n });\n }\n\n async #startProjection(\n channels: Channel[],\n onEvent: (event: Event) => void,\n onDone: () => void\n ): Promise<void> {\n try {\n const rawHandle = await this.#session.subscribe({\n channels,\n namespaces: [this.namespace],\n });\n for await (const event of rawHandle) {\n onEvent(event);\n }\n } finally {\n onDone();\n }\n }\n}\n\n/**\n * Async iterable that yields {@link SubgraphHandle} instances as new\n * subgraph namespaces are discovered from `lifecycle` events.\n *\n * Mirrors the in-process `run.subgraphs` pattern. A new subgraph is\n * discovered when a `lifecycle` event with `event: \"started\"` is\n * received at a namespace depth of exactly `parentDepth + 1`.\n */\nexport class SubgraphDiscoveryHandle implements AsyncIterable<SubgraphHandle> {\n readonly #source: SubscriptionHandle<Event>;\n readonly #session: Subscribable;\n readonly #parentNamespace: string[];\n readonly #discovered = new Set<string>();\n readonly #pendingToolStarts = new Map<string, ToolsEvent>();\n readonly #pendingToolCallHandles = new Map<string, SubgraphHandle>();\n readonly #queue: SubgraphHandle[] = [];\n readonly #waiters: Array<(value: IteratorResult<SubgraphHandle>) => void> =\n [];\n #sourcePump?: Promise<void>;\n #closed = false;\n\n constructor(\n source: SubscriptionHandle<Event>,\n session: Subscribable,\n parentNamespace: string[] = []\n ) {\n this.#source = source;\n this.#session = session;\n this.#parentNamespace = parentNamespace;\n }\n\n #emit(handle: SubgraphHandle): void {\n const waiter = this.#waiters.shift();\n if (waiter) {\n waiter({ done: false, value: handle });\n } else {\n this.#queue.push(handle);\n }\n }\n\n #processToolEvent(event: Event): boolean {\n if (event.method !== \"tools\") return false;\n const tools = event as ToolsEvent;\n const data = tools.params.data as Record<string, unknown>;\n if (data.event !== \"tool-started\") return true;\n\n const toolCallId = data.tool_call_id as string | undefined;\n if (!toolCallId) return true;\n\n const pendingHandle = this.#pendingToolCallHandles.get(toolCallId);\n if (pendingHandle) {\n pendingHandle.toolStartedEvent = tools;\n this.#pendingToolCallHandles.delete(toolCallId);\n return true;\n }\n\n this.#pendingToolStarts.set(toolCallId, tools);\n return true;\n }\n\n #processEvent(event: Event): SubgraphHandle | undefined {\n if (this.#processToolEvent(event)) return undefined;\n if (event.method !== \"lifecycle\") return undefined;\n const lifecycle = event as LifecycleEvent;\n if (lifecycle.params.data.event !== \"started\") return undefined;\n\n const ns = event.params.namespace;\n if (ns.length !== this.#parentNamespace.length + 1) return undefined;\n\n const isChild = this.#parentNamespace.every((seg, i) => ns[i] === seg);\n if (!isChild) return undefined;\n\n const nsKey = ns.join(\"/\");\n if (this.#discovered.has(nsKey)) return undefined;\n this.#discovered.add(nsKey);\n\n const lastSegment = ns[ns.length - 1] ?? \"\";\n const colonIdx = lastSegment.lastIndexOf(\":\");\n let name: string;\n let index: number;\n if (colonIdx >= 0) {\n name = lastSegment.slice(0, colonIdx);\n const suffix = lastSegment.slice(colonIdx + 1);\n index = /^\\d+$/.test(suffix) ? Number(suffix) : 0;\n } else {\n name = lastSegment;\n index = 0;\n }\n\n const data = lifecycle.params.data as unknown as Record<string, unknown>;\n const cause =\n data.cause && typeof data.cause === \"object\"\n ? (data.cause as LifecycleCause)\n : undefined;\n let toolStartedEvent: ToolsEvent | undefined;\n if (cause?.type === \"toolCall\") {\n const toolCallId = (cause as { tool_call_id?: string }).tool_call_id;\n if (toolCallId) {\n toolStartedEvent = this.#pendingToolStarts.get(toolCallId);\n this.#pendingToolStarts.delete(toolCallId);\n }\n }\n\n const handle = new SubgraphHandle(name, index, [...ns], this.#session, {\n cause,\n graphName: data.graph_name as string | undefined,\n toolStartedEvent,\n });\n if (cause?.type === \"toolCall\" && toolStartedEvent == null) {\n const toolCallId = (cause as { tool_call_id?: string }).tool_call_id;\n if (toolCallId) this.#pendingToolCallHandles.set(toolCallId, handle);\n }\n return handle;\n }\n\n #start(): void {\n if (this.#sourcePump) return;\n this.#sourcePump = (async () => {\n for await (const event of this.#source) {\n const handle = this.#processEvent(event);\n if (!handle) continue;\n this.#emit(handle);\n }\n this.#pendingToolStarts.clear();\n this.#pendingToolCallHandles.clear();\n this.#closed = true;\n while (this.#waiters.length > 0) {\n this.#waiters.shift()?.({ done: true, value: undefined });\n }\n })();\n }\n\n async close(): Promise<void> {\n this.#closed = true;\n await this.#source.unsubscribe();\n }\n\n [Symbol.asyncIterator](): AsyncIterator<SubgraphHandle> {\n this.#start();\n return {\n next: async () => {\n if (this.#queue.length > 0) {\n return { done: false, value: this.#queue.shift()! };\n }\n if (this.#closed) {\n return { done: true, value: undefined };\n }\n return await new Promise<IteratorResult<SubgraphHandle>>((resolve) => {\n this.#waiters.push(resolve);\n });\n },\n return: async () => {\n await this.close();\n return { done: true, value: undefined };\n },\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { AssembledToolCall } from "./tools.cjs";
|
|
2
|
+
import { StreamingMessageHandle } from "../messages.cjs";
|
|
3
|
+
import { AudioMedia, FileMedia, ImageMedia, VideoMedia } from "../media.cjs";
|
|
4
|
+
import { EventForChannel, EventForChannels, SubscribeOptions, YieldForChannel, YieldForChannels } from "../types.cjs";
|
|
5
|
+
import { SubagentHandle } from "./subagents.cjs";
|
|
6
|
+
import { SubscriptionHandle } from "../index.cjs";
|
|
7
|
+
import { Channel, Event, LifecycleCause, SubscribeParams, ToolsEvent } from "@langchain/protocol";
|
|
8
|
+
|
|
9
|
+
//#region src/client/stream/handles/subgraphs.d.ts
|
|
10
|
+
/**
|
|
11
|
+
* Minimal subscription surface that {@link SubgraphHandle} and
|
|
12
|
+
* {@link SubagentHandle} delegate to. Typed to match the
|
|
13
|
+
* `Session.subscribe` raw-channel overloads without importing the
|
|
14
|
+
* full `Session` class (avoids circular dependency).
|
|
15
|
+
*/
|
|
16
|
+
interface Subscribable {
|
|
17
|
+
subscribe<TChannel extends Channel>(channel: TChannel, options?: SubscribeOptions): Promise<SubscriptionHandle<EventForChannel<TChannel>, YieldForChannel<TChannel>>>;
|
|
18
|
+
subscribe<const TChannels extends readonly Channel[]>(channels: TChannels, options?: SubscribeOptions): Promise<SubscriptionHandle<EventForChannels<TChannels>, YieldForChannels<TChannels>>>;
|
|
19
|
+
subscribe(params: SubscribeParams): Promise<SubscriptionHandle<Event>>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Discovered subgraph within a streaming session.
|
|
23
|
+
*
|
|
24
|
+
* Mirrors the in-process `SubgraphRunStream` pattern: each subgraph
|
|
25
|
+
* has `name`, `index`, `namespace`, and lazy getters for projections
|
|
26
|
+
* scoped to this subgraph's namespace.
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* for await (const sub of session.subgraphs) {
|
|
30
|
+
* for await (const msg of sub.messages) { ... }
|
|
31
|
+
* const state = await sub.output;
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
declare class SubgraphHandle {
|
|
36
|
+
#private;
|
|
37
|
+
readonly name: string;
|
|
38
|
+
readonly index: number;
|
|
39
|
+
readonly namespace: string[];
|
|
40
|
+
/**
|
|
41
|
+
* Non-empty when upstream attached a `cause` to this subgraph's
|
|
42
|
+
* `lifecycle.started` event. Population is product-specific and
|
|
43
|
+
* performed by stream transformers on the runtime side (e.g.
|
|
44
|
+
* deepagents' `SubagentTransformer` emits
|
|
45
|
+
* `{ type: "toolCall", tool_call_id }`). Generic clients should
|
|
46
|
+
* treat `cause.type` as an open enum — the protocol allows future
|
|
47
|
+
* variants (`send`, `edge`, ...) to be forwarded verbatim without
|
|
48
|
+
* a SDK bump.
|
|
49
|
+
*/
|
|
50
|
+
readonly cause?: LifecycleCause;
|
|
51
|
+
readonly graphName?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Raw `tool-started` event that triggered this subgraph, when
|
|
54
|
+
* `cause.type === "toolCall"` and the matching event has been
|
|
55
|
+
* observed on the `tools` channel.
|
|
56
|
+
*/
|
|
57
|
+
toolStartedEvent?: ToolsEvent;
|
|
58
|
+
constructor(name: string, index: number, namespace: string[], session: Subscribable, options?: {
|
|
59
|
+
cause?: LifecycleCause;
|
|
60
|
+
graphName?: string;
|
|
61
|
+
toolStartedEvent?: ToolsEvent;
|
|
62
|
+
});
|
|
63
|
+
get messages(): AsyncIterable<StreamingMessageHandle>;
|
|
64
|
+
get values(): AsyncIterable<unknown> & PromiseLike<unknown>;
|
|
65
|
+
get toolCalls(): AsyncIterable<AssembledToolCall>;
|
|
66
|
+
get subgraphs(): AsyncIterable<SubgraphHandle>;
|
|
67
|
+
get subagents(): AsyncIterable<SubagentHandle>;
|
|
68
|
+
get audio(): AsyncIterable<AudioMedia>;
|
|
69
|
+
get images(): AsyncIterable<ImageMedia>;
|
|
70
|
+
get video(): AsyncIterable<VideoMedia>;
|
|
71
|
+
get files(): AsyncIterable<FileMedia>;
|
|
72
|
+
get output(): Promise<unknown>;
|
|
73
|
+
/**
|
|
74
|
+
* Create a raw channel subscription scoped to this subgraph's namespace.
|
|
75
|
+
*/
|
|
76
|
+
subscribe<TChannel extends Channel>(channel: TChannel, options?: SubscribeOptions): Promise<SubscriptionHandle<EventForChannel<TChannel>, YieldForChannel<TChannel>>>;
|
|
77
|
+
subscribe<const TChannels extends readonly Channel[]>(channels: TChannels, options?: SubscribeOptions): Promise<SubscriptionHandle<EventForChannels<TChannels>, YieldForChannels<TChannels>>>;
|
|
78
|
+
subscribe(params: SubscribeParams): Promise<SubscriptionHandle<Event>>;
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { SubgraphHandle, Subscribable };
|
|
82
|
+
//# sourceMappingURL=subgraphs.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subgraphs.d.cts","names":[],"sources":["../../../../src/client/stream/handles/subgraphs.ts"],"mappings":";;;;;;;;;;;AAsCA;;;;UAAiB,YAAA;EACf,SAAA,kBAA2B,OAAA,EACzB,OAAA,EAAS,QAAA,EACT,OAAA,GAAU,gBAAA,GACT,OAAA,CACD,kBAAA,CAAmB,eAAA,CAAgB,QAAA,GAAW,eAAA,CAAgB,QAAA;EAEhE,SAAA,kCAA2C,OAAA,IACzC,QAAA,EAAU,SAAA,EACV,OAAA,GAAU,gBAAA,GACT,OAAA,CACD,kBAAA,CAAmB,gBAAA,CAAiB,SAAA,GAAY,gBAAA,CAAiB,SAAA;EAEnE,SAAA,CAAU,MAAA,EAAQ,eAAA,GAAkB,OAAA,CAAQ,kBAAA,CAAmB,KAAA;AAAA;;;;;;;;;;;;;;;cAiBpD,cAAA;EAAA;WACF,IAAA;EAAA,SACA,KAAA;EAAA,SACA,SAAA;EAhCC;;;;;;;;;;EAAA,SA2CD,KAAA,GAAQ,cAAA;EAAA,SACR,SAAA;EAtCT;;;;;EA4CA,gBAAA,GAAmB,UAAA;EAgBnB,WAAA,CACE,IAAA,UACA,KAAA,UACA,SAAA,YACA,OAAA,EAAS,YAAA,EACT,OAAA;IACE,KAAA,GAAQ,cAAA;IACR,SAAA;IACA,gBAAA,GAAmB,UAAA;EAAA;EAAA,IAYnB,QAAA,CAAA,GAAY,aAAA,CAAc,sBAAA;EAAA,IAiB1B,MAAA,CAAA,GAAU,aAAA,YAAyB,WAAA;EAAA,IAqCnC,SAAA,CAAA,GAAa,aAAA,CAAc,iBAAA;EAAA,IAiB3B,SAAA,CAAA,GAAa,aAAA,CAAc,cAAA;EAAA,IAsB3B,SAAA,CAAA,GAAa,aAAA,CAAc,cAAA;EAAA,IAoB3B,KAAA,CAAA,GAAS,aAAA,CAAc,UAAA;EAAA,IAKvB,MAAA,CAAA,GAAU,aAAA,CAAc,UAAA;EAAA,IAKxB,KAAA,CAAA,GAAS,aAAA,CAAc,UAAA;EAAA,IAKvB,KAAA,CAAA,GAAS,aAAA,CAAc,SAAA;EAAA,IAKvB,MAAA,CAAA,GAAU,OAAA;EA9LH;;;EAuOX,SAAA,kBAA2B,OAAA,CAAA,CACzB,OAAA,EAAS,QAAA,EACT,OAAA,GAAU,gBAAA,GACT,OAAA,CACD,kBAAA,CAAmB,eAAA,CAAgB,QAAA,GAAW,eAAA,CAAgB,QAAA;EAEhE,SAAA,kCAA2C,OAAA,GAAA,CACzC,QAAA,EAAU,SAAA,EACV,OAAA,GAAU,gBAAA,GACT,OAAA,CACD,kBAAA,CAAmB,gBAAA,CAAiB,SAAA,GAAY,gBAAA,CAAiB,SAAA;EAEnE,SAAA,CAAU,MAAA,EAAQ,eAAA,GAAkB,OAAA,CAAQ,kBAAA,CAAmB,KAAA;AAAA"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { AssembledToolCall } from "./tools.js";
|
|
2
|
+
import { StreamingMessageHandle } from "../messages.js";
|
|
3
|
+
import { AudioMedia, FileMedia, ImageMedia, VideoMedia } from "../media.js";
|
|
4
|
+
import { EventForChannel, EventForChannels, SubscribeOptions, YieldForChannel, YieldForChannels } from "../types.js";
|
|
5
|
+
import { SubagentHandle } from "./subagents.js";
|
|
6
|
+
import { SubscriptionHandle } from "../index.js";
|
|
7
|
+
import { Channel, Event, LifecycleCause, SubscribeParams, ToolsEvent } from "@langchain/protocol";
|
|
8
|
+
|
|
9
|
+
//#region src/client/stream/handles/subgraphs.d.ts
|
|
10
|
+
/**
|
|
11
|
+
* Minimal subscription surface that {@link SubgraphHandle} and
|
|
12
|
+
* {@link SubagentHandle} delegate to. Typed to match the
|
|
13
|
+
* `Session.subscribe` raw-channel overloads without importing the
|
|
14
|
+
* full `Session` class (avoids circular dependency).
|
|
15
|
+
*/
|
|
16
|
+
interface Subscribable {
|
|
17
|
+
subscribe<TChannel extends Channel>(channel: TChannel, options?: SubscribeOptions): Promise<SubscriptionHandle<EventForChannel<TChannel>, YieldForChannel<TChannel>>>;
|
|
18
|
+
subscribe<const TChannels extends readonly Channel[]>(channels: TChannels, options?: SubscribeOptions): Promise<SubscriptionHandle<EventForChannels<TChannels>, YieldForChannels<TChannels>>>;
|
|
19
|
+
subscribe(params: SubscribeParams): Promise<SubscriptionHandle<Event>>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Discovered subgraph within a streaming session.
|
|
23
|
+
*
|
|
24
|
+
* Mirrors the in-process `SubgraphRunStream` pattern: each subgraph
|
|
25
|
+
* has `name`, `index`, `namespace`, and lazy getters for projections
|
|
26
|
+
* scoped to this subgraph's namespace.
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* for await (const sub of session.subgraphs) {
|
|
30
|
+
* for await (const msg of sub.messages) { ... }
|
|
31
|
+
* const state = await sub.output;
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
declare class SubgraphHandle {
|
|
36
|
+
#private;
|
|
37
|
+
readonly name: string;
|
|
38
|
+
readonly index: number;
|
|
39
|
+
readonly namespace: string[];
|
|
40
|
+
/**
|
|
41
|
+
* Non-empty when upstream attached a `cause` to this subgraph's
|
|
42
|
+
* `lifecycle.started` event. Population is product-specific and
|
|
43
|
+
* performed by stream transformers on the runtime side (e.g.
|
|
44
|
+
* deepagents' `SubagentTransformer` emits
|
|
45
|
+
* `{ type: "toolCall", tool_call_id }`). Generic clients should
|
|
46
|
+
* treat `cause.type` as an open enum — the protocol allows future
|
|
47
|
+
* variants (`send`, `edge`, ...) to be forwarded verbatim without
|
|
48
|
+
* a SDK bump.
|
|
49
|
+
*/
|
|
50
|
+
readonly cause?: LifecycleCause;
|
|
51
|
+
readonly graphName?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Raw `tool-started` event that triggered this subgraph, when
|
|
54
|
+
* `cause.type === "toolCall"` and the matching event has been
|
|
55
|
+
* observed on the `tools` channel.
|
|
56
|
+
*/
|
|
57
|
+
toolStartedEvent?: ToolsEvent;
|
|
58
|
+
constructor(name: string, index: number, namespace: string[], session: Subscribable, options?: {
|
|
59
|
+
cause?: LifecycleCause;
|
|
60
|
+
graphName?: string;
|
|
61
|
+
toolStartedEvent?: ToolsEvent;
|
|
62
|
+
});
|
|
63
|
+
get messages(): AsyncIterable<StreamingMessageHandle>;
|
|
64
|
+
get values(): AsyncIterable<unknown> & PromiseLike<unknown>;
|
|
65
|
+
get toolCalls(): AsyncIterable<AssembledToolCall>;
|
|
66
|
+
get subgraphs(): AsyncIterable<SubgraphHandle>;
|
|
67
|
+
get subagents(): AsyncIterable<SubagentHandle>;
|
|
68
|
+
get audio(): AsyncIterable<AudioMedia>;
|
|
69
|
+
get images(): AsyncIterable<ImageMedia>;
|
|
70
|
+
get video(): AsyncIterable<VideoMedia>;
|
|
71
|
+
get files(): AsyncIterable<FileMedia>;
|
|
72
|
+
get output(): Promise<unknown>;
|
|
73
|
+
/**
|
|
74
|
+
* Create a raw channel subscription scoped to this subgraph's namespace.
|
|
75
|
+
*/
|
|
76
|
+
subscribe<TChannel extends Channel>(channel: TChannel, options?: SubscribeOptions): Promise<SubscriptionHandle<EventForChannel<TChannel>, YieldForChannel<TChannel>>>;
|
|
77
|
+
subscribe<const TChannels extends readonly Channel[]>(channels: TChannels, options?: SubscribeOptions): Promise<SubscriptionHandle<EventForChannels<TChannels>, YieldForChannels<TChannels>>>;
|
|
78
|
+
subscribe(params: SubscribeParams): Promise<SubscriptionHandle<Event>>;
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { SubgraphHandle, Subscribable };
|
|
82
|
+
//# sourceMappingURL=subgraphs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subgraphs.d.ts","names":[],"sources":["../../../../src/client/stream/handles/subgraphs.ts"],"mappings":";;;;;;;;;;;AAsCA;;;;UAAiB,YAAA;EACf,SAAA,kBAA2B,OAAA,EACzB,OAAA,EAAS,QAAA,EACT,OAAA,GAAU,gBAAA,GACT,OAAA,CACD,kBAAA,CAAmB,eAAA,CAAgB,QAAA,GAAW,eAAA,CAAgB,QAAA;EAEhE,SAAA,kCAA2C,OAAA,IACzC,QAAA,EAAU,SAAA,EACV,OAAA,GAAU,gBAAA,GACT,OAAA,CACD,kBAAA,CAAmB,gBAAA,CAAiB,SAAA,GAAY,gBAAA,CAAiB,SAAA;EAEnE,SAAA,CAAU,MAAA,EAAQ,eAAA,GAAkB,OAAA,CAAQ,kBAAA,CAAmB,KAAA;AAAA;;;;;;;;;;;;;;;cAiBpD,cAAA;EAAA;WACF,IAAA;EAAA,SACA,KAAA;EAAA,SACA,SAAA;EAhCC;;;;;;;;;;EAAA,SA2CD,KAAA,GAAQ,cAAA;EAAA,SACR,SAAA;EAtCT;;;;;EA4CA,gBAAA,GAAmB,UAAA;EAgBnB,WAAA,CACE,IAAA,UACA,KAAA,UACA,SAAA,YACA,OAAA,EAAS,YAAA,EACT,OAAA;IACE,KAAA,GAAQ,cAAA;IACR,SAAA;IACA,gBAAA,GAAmB,UAAA;EAAA;EAAA,IAYnB,QAAA,CAAA,GAAY,aAAA,CAAc,sBAAA;EAAA,IAiB1B,MAAA,CAAA,GAAU,aAAA,YAAyB,WAAA;EAAA,IAqCnC,SAAA,CAAA,GAAa,aAAA,CAAc,iBAAA;EAAA,IAiB3B,SAAA,CAAA,GAAa,aAAA,CAAc,cAAA;EAAA,IAsB3B,SAAA,CAAA,GAAa,aAAA,CAAc,cAAA;EAAA,IAoB3B,KAAA,CAAA,GAAS,aAAA,CAAc,UAAA;EAAA,IAKvB,MAAA,CAAA,GAAU,aAAA,CAAc,UAAA;EAAA,IAKxB,KAAA,CAAA,GAAS,aAAA,CAAc,UAAA;EAAA,IAKvB,KAAA,CAAA,GAAS,aAAA,CAAc,SAAA;EAAA,IAKvB,MAAA,CAAA,GAAU,OAAA;EA9LH;;;EAuOX,SAAA,kBAA2B,OAAA,CAAA,CACzB,OAAA,EAAS,QAAA,EACT,OAAA,GAAU,gBAAA,GACT,OAAA,CACD,kBAAA,CAAmB,eAAA,CAAgB,QAAA,GAAW,eAAA,CAAgB,QAAA;EAEhE,SAAA,kCAA2C,OAAA,GAAA,CACzC,QAAA,EAAU,SAAA,EACV,OAAA,GAAU,gBAAA,GACT,OAAA,CACD,kBAAA,CAAmB,gBAAA,CAAiB,SAAA,GAAY,gBAAA,CAAiB,SAAA;EAEnE,SAAA,CAAU,MAAA,EAAQ,eAAA,GAAkB,OAAA,CAAQ,kBAAA,CAAmB,KAAA;AAAA"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { MultiCursorBuffer } from "../multi-cursor-buffer.js";
|
|
2
|
+
import { ToolCallAssembler } from "./tools.js";
|
|
3
|
+
import { StreamingMessageAssembler } from "../messages.js";
|
|
4
|
+
import { MediaAssembler } from "../media.js";
|
|
5
|
+
//#region src/client/stream/handles/subgraphs.ts
|
|
6
|
+
/**
|
|
7
|
+
* Discovered subgraph within a streaming session.
|
|
8
|
+
*
|
|
9
|
+
* Mirrors the in-process `SubgraphRunStream` pattern: each subgraph
|
|
10
|
+
* has `name`, `index`, `namespace`, and lazy getters for projections
|
|
11
|
+
* scoped to this subgraph's namespace.
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* for await (const sub of session.subgraphs) {
|
|
15
|
+
* for await (const msg of sub.messages) { ... }
|
|
16
|
+
* const state = await sub.output;
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
var SubgraphHandle = class {
|
|
21
|
+
name;
|
|
22
|
+
index;
|
|
23
|
+
namespace;
|
|
24
|
+
/**
|
|
25
|
+
* Non-empty when upstream attached a `cause` to this subgraph's
|
|
26
|
+
* `lifecycle.started` event. Population is product-specific and
|
|
27
|
+
* performed by stream transformers on the runtime side (e.g.
|
|
28
|
+
* deepagents' `SubagentTransformer` emits
|
|
29
|
+
* `{ type: "toolCall", tool_call_id }`). Generic clients should
|
|
30
|
+
* treat `cause.type` as an open enum — the protocol allows future
|
|
31
|
+
* variants (`send`, `edge`, ...) to be forwarded verbatim without
|
|
32
|
+
* a SDK bump.
|
|
33
|
+
*/
|
|
34
|
+
cause;
|
|
35
|
+
graphName;
|
|
36
|
+
/**
|
|
37
|
+
* Raw `tool-started` event that triggered this subgraph, when
|
|
38
|
+
* `cause.type === "toolCall"` and the matching event has been
|
|
39
|
+
* observed on the `tools` channel.
|
|
40
|
+
*/
|
|
41
|
+
toolStartedEvent;
|
|
42
|
+
#session;
|
|
43
|
+
#messagesIterable;
|
|
44
|
+
#valuesProjection;
|
|
45
|
+
#toolCallsIterable;
|
|
46
|
+
#subgraphsIterable;
|
|
47
|
+
#subagentsIterable;
|
|
48
|
+
#outputPromise;
|
|
49
|
+
#mediaDispatcherStarted = false;
|
|
50
|
+
#audioBuffer;
|
|
51
|
+
#imagesBuffer;
|
|
52
|
+
#videoBuffer;
|
|
53
|
+
#filesBuffer;
|
|
54
|
+
constructor(name, index, namespace, session, options) {
|
|
55
|
+
this.name = name;
|
|
56
|
+
this.index = index;
|
|
57
|
+
this.namespace = namespace;
|
|
58
|
+
this.cause = options?.cause;
|
|
59
|
+
this.graphName = options?.graphName;
|
|
60
|
+
this.toolStartedEvent = options?.toolStartedEvent;
|
|
61
|
+
this.#session = session;
|
|
62
|
+
}
|
|
63
|
+
get messages() {
|
|
64
|
+
if (this.#messagesIterable) return this.#messagesIterable;
|
|
65
|
+
const buffer = new MultiCursorBuffer();
|
|
66
|
+
this.#messagesIterable = buffer;
|
|
67
|
+
const assembler = new StreamingMessageAssembler();
|
|
68
|
+
this.#startProjection(["messages"], (event) => {
|
|
69
|
+
if (event.method !== "messages") return;
|
|
70
|
+
const msg = assembler.consume(event);
|
|
71
|
+
if (msg) buffer.push(msg);
|
|
72
|
+
}, () => buffer.close());
|
|
73
|
+
return buffer;
|
|
74
|
+
}
|
|
75
|
+
get values() {
|
|
76
|
+
if (this.#valuesProjection) return this.#valuesProjection;
|
|
77
|
+
const buffer = new MultiCursorBuffer();
|
|
78
|
+
let lastValue;
|
|
79
|
+
let resolveOutput;
|
|
80
|
+
const outputPromise = new Promise((resolve) => {
|
|
81
|
+
resolveOutput = resolve;
|
|
82
|
+
});
|
|
83
|
+
this.#outputPromise = outputPromise;
|
|
84
|
+
const projection = Object.assign(buffer, { then: (onfulfilled, onrejected) => outputPromise.then(onfulfilled, onrejected) });
|
|
85
|
+
this.#valuesProjection = projection;
|
|
86
|
+
this.#startProjection(["values"], (event) => {
|
|
87
|
+
if (event.method !== "values") return;
|
|
88
|
+
const data = event.params.data;
|
|
89
|
+
lastValue = data;
|
|
90
|
+
buffer.push(data);
|
|
91
|
+
}, () => {
|
|
92
|
+
resolveOutput(lastValue);
|
|
93
|
+
buffer.close();
|
|
94
|
+
});
|
|
95
|
+
return projection;
|
|
96
|
+
}
|
|
97
|
+
get toolCalls() {
|
|
98
|
+
if (this.#toolCallsIterable) return this.#toolCallsIterable;
|
|
99
|
+
const buffer = new MultiCursorBuffer();
|
|
100
|
+
this.#toolCallsIterable = buffer;
|
|
101
|
+
const assembler = new ToolCallAssembler();
|
|
102
|
+
this.#startProjection(["tools"], (event) => {
|
|
103
|
+
if (event.method !== "tools") return;
|
|
104
|
+
const tc = assembler.consume(event);
|
|
105
|
+
if (tc) buffer.push(tc);
|
|
106
|
+
}, () => buffer.close());
|
|
107
|
+
return buffer;
|
|
108
|
+
}
|
|
109
|
+
get subgraphs() {
|
|
110
|
+
if (this.#subgraphsIterable) return this.#subgraphsIterable;
|
|
111
|
+
const buffer = new MultiCursorBuffer();
|
|
112
|
+
this.#subgraphsIterable = buffer;
|
|
113
|
+
(async () => {
|
|
114
|
+
const discovery = new SubgraphDiscoveryHandle(await this.#session.subscribe({
|
|
115
|
+
channels: ["lifecycle", "tools"],
|
|
116
|
+
namespaces: [this.namespace]
|
|
117
|
+
}), this.#session, this.namespace);
|
|
118
|
+
for await (const sub of discovery) buffer.push(sub);
|
|
119
|
+
buffer.close();
|
|
120
|
+
})();
|
|
121
|
+
return buffer;
|
|
122
|
+
}
|
|
123
|
+
get subagents() {
|
|
124
|
+
if (this.#subagentsIterable) return this.#subagentsIterable;
|
|
125
|
+
const buffer = new MultiCursorBuffer();
|
|
126
|
+
this.#subagentsIterable = buffer;
|
|
127
|
+
(async () => {
|
|
128
|
+
const rawHandle = await this.#session.subscribe({
|
|
129
|
+
channels: ["tools", "lifecycle"],
|
|
130
|
+
namespaces: [this.namespace]
|
|
131
|
+
});
|
|
132
|
+
const { SubagentDiscoveryHandle: Discovery } = await import("./subagents.js");
|
|
133
|
+
const discovery = new Discovery(rawHandle, this.#session);
|
|
134
|
+
for await (const sub of discovery) buffer.push(sub);
|
|
135
|
+
buffer.close();
|
|
136
|
+
})();
|
|
137
|
+
return buffer;
|
|
138
|
+
}
|
|
139
|
+
get audio() {
|
|
140
|
+
this.#ensureMediaDispatcher();
|
|
141
|
+
return this.#audioBuffer;
|
|
142
|
+
}
|
|
143
|
+
get images() {
|
|
144
|
+
this.#ensureMediaDispatcher();
|
|
145
|
+
return this.#imagesBuffer;
|
|
146
|
+
}
|
|
147
|
+
get video() {
|
|
148
|
+
this.#ensureMediaDispatcher();
|
|
149
|
+
return this.#videoBuffer;
|
|
150
|
+
}
|
|
151
|
+
get files() {
|
|
152
|
+
this.#ensureMediaDispatcher();
|
|
153
|
+
return this.#filesBuffer;
|
|
154
|
+
}
|
|
155
|
+
get output() {
|
|
156
|
+
this.values;
|
|
157
|
+
return this.#outputPromise;
|
|
158
|
+
}
|
|
159
|
+
#ensureMediaDispatcher() {
|
|
160
|
+
if (this.#mediaDispatcherStarted) return;
|
|
161
|
+
this.#mediaDispatcherStarted = true;
|
|
162
|
+
const audio = new MultiCursorBuffer();
|
|
163
|
+
const images = new MultiCursorBuffer();
|
|
164
|
+
const video = new MultiCursorBuffer();
|
|
165
|
+
const files = new MultiCursorBuffer();
|
|
166
|
+
this.#audioBuffer = audio;
|
|
167
|
+
this.#imagesBuffer = images;
|
|
168
|
+
this.#videoBuffer = video;
|
|
169
|
+
this.#filesBuffer = files;
|
|
170
|
+
const assembler = new MediaAssembler({
|
|
171
|
+
onAudio: (m) => audio.push(m),
|
|
172
|
+
onImage: (m) => images.push(m),
|
|
173
|
+
onVideo: (m) => video.push(m),
|
|
174
|
+
onFile: (m) => files.push(m)
|
|
175
|
+
});
|
|
176
|
+
this.#startProjection(["messages"], (event) => {
|
|
177
|
+
if (event.method !== "messages") return;
|
|
178
|
+
assembler.consume(event);
|
|
179
|
+
}, () => {
|
|
180
|
+
assembler.close();
|
|
181
|
+
audio.close();
|
|
182
|
+
images.close();
|
|
183
|
+
video.close();
|
|
184
|
+
files.close();
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
subscribe(paramsOrChannels, options = {}) {
|
|
188
|
+
if (typeof paramsOrChannels === "object" && !Array.isArray(paramsOrChannels) && "channels" in paramsOrChannels) return this.#session.subscribe({
|
|
189
|
+
...paramsOrChannels,
|
|
190
|
+
namespaces: paramsOrChannels.namespaces ?? [this.namespace]
|
|
191
|
+
});
|
|
192
|
+
return this.#session.subscribe(paramsOrChannels, {
|
|
193
|
+
...options,
|
|
194
|
+
namespaces: options.namespaces ?? [this.namespace]
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
async #startProjection(channels, onEvent, onDone) {
|
|
198
|
+
try {
|
|
199
|
+
const rawHandle = await this.#session.subscribe({
|
|
200
|
+
channels,
|
|
201
|
+
namespaces: [this.namespace]
|
|
202
|
+
});
|
|
203
|
+
for await (const event of rawHandle) onEvent(event);
|
|
204
|
+
} finally {
|
|
205
|
+
onDone();
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Async iterable that yields {@link SubgraphHandle} instances as new
|
|
211
|
+
* subgraph namespaces are discovered from `lifecycle` events.
|
|
212
|
+
*
|
|
213
|
+
* Mirrors the in-process `run.subgraphs` pattern. A new subgraph is
|
|
214
|
+
* discovered when a `lifecycle` event with `event: "started"` is
|
|
215
|
+
* received at a namespace depth of exactly `parentDepth + 1`.
|
|
216
|
+
*/
|
|
217
|
+
var SubgraphDiscoveryHandle = class {
|
|
218
|
+
#source;
|
|
219
|
+
#session;
|
|
220
|
+
#parentNamespace;
|
|
221
|
+
#discovered = /* @__PURE__ */ new Set();
|
|
222
|
+
#pendingToolStarts = /* @__PURE__ */ new Map();
|
|
223
|
+
#pendingToolCallHandles = /* @__PURE__ */ new Map();
|
|
224
|
+
#queue = [];
|
|
225
|
+
#waiters = [];
|
|
226
|
+
#sourcePump;
|
|
227
|
+
#closed = false;
|
|
228
|
+
constructor(source, session, parentNamespace = []) {
|
|
229
|
+
this.#source = source;
|
|
230
|
+
this.#session = session;
|
|
231
|
+
this.#parentNamespace = parentNamespace;
|
|
232
|
+
}
|
|
233
|
+
#emit(handle) {
|
|
234
|
+
const waiter = this.#waiters.shift();
|
|
235
|
+
if (waiter) waiter({
|
|
236
|
+
done: false,
|
|
237
|
+
value: handle
|
|
238
|
+
});
|
|
239
|
+
else this.#queue.push(handle);
|
|
240
|
+
}
|
|
241
|
+
#processToolEvent(event) {
|
|
242
|
+
if (event.method !== "tools") return false;
|
|
243
|
+
const tools = event;
|
|
244
|
+
const data = tools.params.data;
|
|
245
|
+
if (data.event !== "tool-started") return true;
|
|
246
|
+
const toolCallId = data.tool_call_id;
|
|
247
|
+
if (!toolCallId) return true;
|
|
248
|
+
const pendingHandle = this.#pendingToolCallHandles.get(toolCallId);
|
|
249
|
+
if (pendingHandle) {
|
|
250
|
+
pendingHandle.toolStartedEvent = tools;
|
|
251
|
+
this.#pendingToolCallHandles.delete(toolCallId);
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
this.#pendingToolStarts.set(toolCallId, tools);
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
#processEvent(event) {
|
|
258
|
+
if (this.#processToolEvent(event)) return void 0;
|
|
259
|
+
if (event.method !== "lifecycle") return void 0;
|
|
260
|
+
const lifecycle = event;
|
|
261
|
+
if (lifecycle.params.data.event !== "started") return void 0;
|
|
262
|
+
const ns = event.params.namespace;
|
|
263
|
+
if (ns.length !== this.#parentNamespace.length + 1) return void 0;
|
|
264
|
+
if (!this.#parentNamespace.every((seg, i) => ns[i] === seg)) return void 0;
|
|
265
|
+
const nsKey = ns.join("/");
|
|
266
|
+
if (this.#discovered.has(nsKey)) return void 0;
|
|
267
|
+
this.#discovered.add(nsKey);
|
|
268
|
+
const lastSegment = ns[ns.length - 1] ?? "";
|
|
269
|
+
const colonIdx = lastSegment.lastIndexOf(":");
|
|
270
|
+
let name;
|
|
271
|
+
let index;
|
|
272
|
+
if (colonIdx >= 0) {
|
|
273
|
+
name = lastSegment.slice(0, colonIdx);
|
|
274
|
+
const suffix = lastSegment.slice(colonIdx + 1);
|
|
275
|
+
index = /^\d+$/.test(suffix) ? Number(suffix) : 0;
|
|
276
|
+
} else {
|
|
277
|
+
name = lastSegment;
|
|
278
|
+
index = 0;
|
|
279
|
+
}
|
|
280
|
+
const data = lifecycle.params.data;
|
|
281
|
+
const cause = data.cause && typeof data.cause === "object" ? data.cause : void 0;
|
|
282
|
+
let toolStartedEvent;
|
|
283
|
+
if (cause?.type === "toolCall") {
|
|
284
|
+
const toolCallId = cause.tool_call_id;
|
|
285
|
+
if (toolCallId) {
|
|
286
|
+
toolStartedEvent = this.#pendingToolStarts.get(toolCallId);
|
|
287
|
+
this.#pendingToolStarts.delete(toolCallId);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
const handle = new SubgraphHandle(name, index, [...ns], this.#session, {
|
|
291
|
+
cause,
|
|
292
|
+
graphName: data.graph_name,
|
|
293
|
+
toolStartedEvent
|
|
294
|
+
});
|
|
295
|
+
if (cause?.type === "toolCall" && toolStartedEvent == null) {
|
|
296
|
+
const toolCallId = cause.tool_call_id;
|
|
297
|
+
if (toolCallId) this.#pendingToolCallHandles.set(toolCallId, handle);
|
|
298
|
+
}
|
|
299
|
+
return handle;
|
|
300
|
+
}
|
|
301
|
+
#start() {
|
|
302
|
+
if (this.#sourcePump) return;
|
|
303
|
+
this.#sourcePump = (async () => {
|
|
304
|
+
for await (const event of this.#source) {
|
|
305
|
+
const handle = this.#processEvent(event);
|
|
306
|
+
if (!handle) continue;
|
|
307
|
+
this.#emit(handle);
|
|
308
|
+
}
|
|
309
|
+
this.#pendingToolStarts.clear();
|
|
310
|
+
this.#pendingToolCallHandles.clear();
|
|
311
|
+
this.#closed = true;
|
|
312
|
+
while (this.#waiters.length > 0) this.#waiters.shift()?.({
|
|
313
|
+
done: true,
|
|
314
|
+
value: void 0
|
|
315
|
+
});
|
|
316
|
+
})();
|
|
317
|
+
}
|
|
318
|
+
async close() {
|
|
319
|
+
this.#closed = true;
|
|
320
|
+
await this.#source.unsubscribe();
|
|
321
|
+
}
|
|
322
|
+
[Symbol.asyncIterator]() {
|
|
323
|
+
this.#start();
|
|
324
|
+
return {
|
|
325
|
+
next: async () => {
|
|
326
|
+
if (this.#queue.length > 0) return {
|
|
327
|
+
done: false,
|
|
328
|
+
value: this.#queue.shift()
|
|
329
|
+
};
|
|
330
|
+
if (this.#closed) return {
|
|
331
|
+
done: true,
|
|
332
|
+
value: void 0
|
|
333
|
+
};
|
|
334
|
+
return await new Promise((resolve) => {
|
|
335
|
+
this.#waiters.push(resolve);
|
|
336
|
+
});
|
|
337
|
+
},
|
|
338
|
+
return: async () => {
|
|
339
|
+
await this.close();
|
|
340
|
+
return {
|
|
341
|
+
done: true,
|
|
342
|
+
value: void 0
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
//#endregion
|
|
349
|
+
export { SubgraphDiscoveryHandle, SubgraphHandle };
|
|
350
|
+
|
|
351
|
+
//# sourceMappingURL=subgraphs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subgraphs.js","names":["#session","#messagesIterable","#startProjection","#valuesProjection","#outputPromise","#toolCallsIterable","#subgraphsIterable","#subagentsIterable","#ensureMediaDispatcher","#audioBuffer","#imagesBuffer","#videoBuffer","#filesBuffer","#mediaDispatcherStarted","#source","#parentNamespace","#discovered","#pendingToolStarts","#pendingToolCallHandles","#queue","#waiters","#processToolEvent","#sourcePump","#processEvent","#emit","#closed","#start"],"sources":["../../../../src/client/stream/handles/subgraphs.ts"],"sourcesContent":["import type {\n Channel,\n Event,\n LifecycleCause,\n LifecycleEvent,\n MessagesEvent,\n SubscribeParams,\n ToolsEvent,\n ValuesEvent,\n} from \"@langchain/protocol\";\nimport type { SubscriptionHandle } from \"../index.js\";\nimport { MultiCursorBuffer } from \"../multi-cursor-buffer.js\";\nimport { StreamingMessageAssembler } from \"../messages.js\";\nimport type { StreamingMessage, StreamingMessageHandle } from \"../messages.js\";\nimport { ToolCallAssembler } from \"./tools.js\";\nimport type { AssembledToolCall } from \"./tools.js\";\nimport { MediaAssembler } from \"../media.js\";\nimport type {\n AudioMedia,\n FileMedia,\n ImageMedia,\n VideoMedia,\n} from \"../media.js\";\nimport type {\n EventForChannel,\n EventForChannels,\n SubscribeOptions,\n YieldForChannel,\n YieldForChannels,\n} from \"../types.js\";\nimport type { SubagentHandle } from \"./subagents.js\";\n\n/**\n * Minimal subscription surface that {@link SubgraphHandle} and\n * {@link SubagentHandle} delegate to. Typed to match the\n * `Session.subscribe` raw-channel overloads without importing the\n * full `Session` class (avoids circular dependency).\n */\nexport interface Subscribable {\n subscribe<TChannel extends Channel>(\n channel: TChannel,\n options?: SubscribeOptions\n ): Promise<\n SubscriptionHandle<EventForChannel<TChannel>, YieldForChannel<TChannel>>\n >;\n subscribe<const TChannels extends readonly Channel[]>(\n channels: TChannels,\n options?: SubscribeOptions\n ): Promise<\n SubscriptionHandle<EventForChannels<TChannels>, YieldForChannels<TChannels>>\n >;\n subscribe(params: SubscribeParams): Promise<SubscriptionHandle<Event>>;\n}\n\n/**\n * Discovered subgraph within a streaming session.\n *\n * Mirrors the in-process `SubgraphRunStream` pattern: each subgraph\n * has `name`, `index`, `namespace`, and lazy getters for projections\n * scoped to this subgraph's namespace.\n *\n * ```ts\n * for await (const sub of session.subgraphs) {\n * for await (const msg of sub.messages) { ... }\n * const state = await sub.output;\n * }\n * ```\n */\nexport class SubgraphHandle {\n readonly name: string;\n readonly index: number;\n readonly namespace: string[];\n /**\n * Non-empty when upstream attached a `cause` to this subgraph's\n * `lifecycle.started` event. Population is product-specific and\n * performed by stream transformers on the runtime side (e.g.\n * deepagents' `SubagentTransformer` emits\n * `{ type: \"toolCall\", tool_call_id }`). Generic clients should\n * treat `cause.type` as an open enum — the protocol allows future\n * variants (`send`, `edge`, ...) to be forwarded verbatim without\n * a SDK bump.\n */\n readonly cause?: LifecycleCause;\n readonly graphName?: string;\n /**\n * Raw `tool-started` event that triggered this subgraph, when\n * `cause.type === \"toolCall\"` and the matching event has been\n * observed on the `tools` channel.\n */\n toolStartedEvent?: ToolsEvent;\n readonly #session: Subscribable;\n\n #messagesIterable?: AsyncIterable<StreamingMessage>;\n #valuesProjection?: AsyncIterable<unknown> & PromiseLike<unknown>;\n #toolCallsIterable?: AsyncIterable<AssembledToolCall>;\n #subgraphsIterable?: AsyncIterable<SubgraphHandle>;\n #subagentsIterable?: AsyncIterable<SubagentHandle>;\n #outputPromise?: Promise<unknown>;\n\n #mediaDispatcherStarted = false;\n #audioBuffer?: MultiCursorBuffer<AudioMedia>;\n #imagesBuffer?: MultiCursorBuffer<ImageMedia>;\n #videoBuffer?: MultiCursorBuffer<VideoMedia>;\n #filesBuffer?: MultiCursorBuffer<FileMedia>;\n\n constructor(\n name: string,\n index: number,\n namespace: string[],\n session: Subscribable,\n options?: {\n cause?: LifecycleCause;\n graphName?: string;\n toolStartedEvent?: ToolsEvent;\n }\n ) {\n this.name = name;\n this.index = index;\n this.namespace = namespace;\n this.cause = options?.cause;\n this.graphName = options?.graphName;\n this.toolStartedEvent = options?.toolStartedEvent;\n this.#session = session;\n }\n\n get messages(): AsyncIterable<StreamingMessageHandle> {\n if (this.#messagesIterable) return this.#messagesIterable;\n const buffer = new MultiCursorBuffer<StreamingMessage>();\n this.#messagesIterable = buffer;\n const assembler = new StreamingMessageAssembler();\n void this.#startProjection(\n [\"messages\"],\n (event) => {\n if (event.method !== \"messages\") return;\n const msg = assembler.consume(event as MessagesEvent);\n if (msg) buffer.push(msg);\n },\n () => buffer.close()\n );\n return buffer;\n }\n\n get values(): AsyncIterable<unknown> & PromiseLike<unknown> {\n if (this.#valuesProjection) return this.#valuesProjection;\n const buffer = new MultiCursorBuffer<unknown>();\n let lastValue: unknown;\n let resolveOutput!: (value: unknown) => void;\n const outputPromise = new Promise<unknown>((resolve) => {\n resolveOutput = resolve;\n });\n this.#outputPromise = outputPromise;\n const projection = Object.assign(buffer, {\n then: <TResult1 = unknown, TResult2 = never>(\n onfulfilled?:\n | ((value: unknown) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?:\n | ((reason: unknown) => TResult2 | PromiseLike<TResult2>)\n | null\n ): Promise<TResult1 | TResult2> =>\n outputPromise.then(onfulfilled, onrejected),\n }) as AsyncIterable<unknown> & PromiseLike<unknown>;\n this.#valuesProjection = projection;\n void this.#startProjection(\n [\"values\"],\n (event) => {\n if (event.method !== \"values\") return;\n const data = (event as ValuesEvent).params.data;\n lastValue = data;\n buffer.push(data);\n },\n () => {\n resolveOutput(lastValue);\n buffer.close();\n }\n );\n return projection;\n }\n\n get toolCalls(): AsyncIterable<AssembledToolCall> {\n if (this.#toolCallsIterable) return this.#toolCallsIterable;\n const buffer = new MultiCursorBuffer<AssembledToolCall>();\n this.#toolCallsIterable = buffer;\n const assembler = new ToolCallAssembler();\n void this.#startProjection(\n [\"tools\"],\n (event) => {\n if (event.method !== \"tools\") return;\n const tc = assembler.consume(event as ToolsEvent);\n if (tc) buffer.push(tc);\n },\n () => buffer.close()\n );\n return buffer;\n }\n\n get subgraphs(): AsyncIterable<SubgraphHandle> {\n if (this.#subgraphsIterable) return this.#subgraphsIterable;\n const buffer = new MultiCursorBuffer<SubgraphHandle>();\n this.#subgraphsIterable = buffer;\n void (async () => {\n const rawHandle = await this.#session.subscribe({\n channels: [\"lifecycle\", \"tools\"],\n namespaces: [this.namespace],\n });\n const discovery = new SubgraphDiscoveryHandle(\n rawHandle,\n this.#session,\n this.namespace\n );\n for await (const sub of discovery) {\n buffer.push(sub);\n }\n buffer.close();\n })();\n return buffer;\n }\n\n get subagents(): AsyncIterable<SubagentHandle> {\n if (this.#subagentsIterable) return this.#subagentsIterable;\n const buffer = new MultiCursorBuffer<SubagentHandle>();\n this.#subagentsIterable = buffer;\n void (async () => {\n const rawHandle = await this.#session.subscribe({\n channels: [\"tools\", \"lifecycle\"],\n namespaces: [this.namespace],\n });\n const { SubagentDiscoveryHandle: Discovery } =\n await import(\"./subagents.js\");\n const discovery = new Discovery(rawHandle, this.#session);\n for await (const sub of discovery) {\n buffer.push(sub);\n }\n buffer.close();\n })();\n return buffer;\n }\n\n get audio(): AsyncIterable<AudioMedia> {\n this.#ensureMediaDispatcher();\n return this.#audioBuffer!;\n }\n\n get images(): AsyncIterable<ImageMedia> {\n this.#ensureMediaDispatcher();\n return this.#imagesBuffer!;\n }\n\n get video(): AsyncIterable<VideoMedia> {\n this.#ensureMediaDispatcher();\n return this.#videoBuffer!;\n }\n\n get files(): AsyncIterable<FileMedia> {\n this.#ensureMediaDispatcher();\n return this.#filesBuffer!;\n }\n\n get output(): Promise<unknown> {\n void this.values;\n return this.#outputPromise!;\n }\n\n #ensureMediaDispatcher(): void {\n if (this.#mediaDispatcherStarted) return;\n this.#mediaDispatcherStarted = true;\n const audio = new MultiCursorBuffer<AudioMedia>();\n const images = new MultiCursorBuffer<ImageMedia>();\n const video = new MultiCursorBuffer<VideoMedia>();\n const files = new MultiCursorBuffer<FileMedia>();\n this.#audioBuffer = audio;\n this.#imagesBuffer = images;\n this.#videoBuffer = video;\n this.#filesBuffer = files;\n const assembler = new MediaAssembler({\n onAudio: (m: AudioMedia) => audio.push(m),\n onImage: (m: ImageMedia) => images.push(m),\n onVideo: (m: VideoMedia) => video.push(m),\n onFile: (m: FileMedia) => files.push(m),\n });\n void this.#startProjection(\n [\"messages\"],\n (event) => {\n if (event.method !== \"messages\") return;\n assembler.consume(event as MessagesEvent);\n },\n () => {\n assembler.close();\n audio.close();\n images.close();\n video.close();\n files.close();\n }\n );\n }\n\n /**\n * Create a raw channel subscription scoped to this subgraph's namespace.\n */\n subscribe<TChannel extends Channel>(\n channel: TChannel,\n options?: SubscribeOptions\n ): Promise<\n SubscriptionHandle<EventForChannel<TChannel>, YieldForChannel<TChannel>>\n >;\n subscribe<const TChannels extends readonly Channel[]>(\n channels: TChannels,\n options?: SubscribeOptions\n ): Promise<\n SubscriptionHandle<EventForChannels<TChannels>, YieldForChannels<TChannels>>\n >;\n subscribe(params: SubscribeParams): Promise<SubscriptionHandle<Event>>;\n subscribe(\n paramsOrChannels: SubscribeParams | Channel | string | readonly Channel[],\n options: SubscribeOptions = {}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n if (\n typeof paramsOrChannels === \"object\" &&\n !Array.isArray(paramsOrChannels) &&\n \"channels\" in paramsOrChannels\n ) {\n return this.#session.subscribe({\n ...paramsOrChannels,\n namespaces: paramsOrChannels.namespaces ?? [this.namespace],\n });\n }\n\n return this.#session.subscribe(paramsOrChannels as Channel, {\n ...options,\n namespaces: options.namespaces ?? [this.namespace],\n });\n }\n\n async #startProjection(\n channels: Channel[],\n onEvent: (event: Event) => void,\n onDone: () => void\n ): Promise<void> {\n try {\n const rawHandle = await this.#session.subscribe({\n channels,\n namespaces: [this.namespace],\n });\n for await (const event of rawHandle) {\n onEvent(event);\n }\n } finally {\n onDone();\n }\n }\n}\n\n/**\n * Async iterable that yields {@link SubgraphHandle} instances as new\n * subgraph namespaces are discovered from `lifecycle` events.\n *\n * Mirrors the in-process `run.subgraphs` pattern. A new subgraph is\n * discovered when a `lifecycle` event with `event: \"started\"` is\n * received at a namespace depth of exactly `parentDepth + 1`.\n */\nexport class SubgraphDiscoveryHandle implements AsyncIterable<SubgraphHandle> {\n readonly #source: SubscriptionHandle<Event>;\n readonly #session: Subscribable;\n readonly #parentNamespace: string[];\n readonly #discovered = new Set<string>();\n readonly #pendingToolStarts = new Map<string, ToolsEvent>();\n readonly #pendingToolCallHandles = new Map<string, SubgraphHandle>();\n readonly #queue: SubgraphHandle[] = [];\n readonly #waiters: Array<(value: IteratorResult<SubgraphHandle>) => void> =\n [];\n #sourcePump?: Promise<void>;\n #closed = false;\n\n constructor(\n source: SubscriptionHandle<Event>,\n session: Subscribable,\n parentNamespace: string[] = []\n ) {\n this.#source = source;\n this.#session = session;\n this.#parentNamespace = parentNamespace;\n }\n\n #emit(handle: SubgraphHandle): void {\n const waiter = this.#waiters.shift();\n if (waiter) {\n waiter({ done: false, value: handle });\n } else {\n this.#queue.push(handle);\n }\n }\n\n #processToolEvent(event: Event): boolean {\n if (event.method !== \"tools\") return false;\n const tools = event as ToolsEvent;\n const data = tools.params.data as Record<string, unknown>;\n if (data.event !== \"tool-started\") return true;\n\n const toolCallId = data.tool_call_id as string | undefined;\n if (!toolCallId) return true;\n\n const pendingHandle = this.#pendingToolCallHandles.get(toolCallId);\n if (pendingHandle) {\n pendingHandle.toolStartedEvent = tools;\n this.#pendingToolCallHandles.delete(toolCallId);\n return true;\n }\n\n this.#pendingToolStarts.set(toolCallId, tools);\n return true;\n }\n\n #processEvent(event: Event): SubgraphHandle | undefined {\n if (this.#processToolEvent(event)) return undefined;\n if (event.method !== \"lifecycle\") return undefined;\n const lifecycle = event as LifecycleEvent;\n if (lifecycle.params.data.event !== \"started\") return undefined;\n\n const ns = event.params.namespace;\n if (ns.length !== this.#parentNamespace.length + 1) return undefined;\n\n const isChild = this.#parentNamespace.every((seg, i) => ns[i] === seg);\n if (!isChild) return undefined;\n\n const nsKey = ns.join(\"/\");\n if (this.#discovered.has(nsKey)) return undefined;\n this.#discovered.add(nsKey);\n\n const lastSegment = ns[ns.length - 1] ?? \"\";\n const colonIdx = lastSegment.lastIndexOf(\":\");\n let name: string;\n let index: number;\n if (colonIdx >= 0) {\n name = lastSegment.slice(0, colonIdx);\n const suffix = lastSegment.slice(colonIdx + 1);\n index = /^\\d+$/.test(suffix) ? Number(suffix) : 0;\n } else {\n name = lastSegment;\n index = 0;\n }\n\n const data = lifecycle.params.data as unknown as Record<string, unknown>;\n const cause =\n data.cause && typeof data.cause === \"object\"\n ? (data.cause as LifecycleCause)\n : undefined;\n let toolStartedEvent: ToolsEvent | undefined;\n if (cause?.type === \"toolCall\") {\n const toolCallId = (cause as { tool_call_id?: string }).tool_call_id;\n if (toolCallId) {\n toolStartedEvent = this.#pendingToolStarts.get(toolCallId);\n this.#pendingToolStarts.delete(toolCallId);\n }\n }\n\n const handle = new SubgraphHandle(name, index, [...ns], this.#session, {\n cause,\n graphName: data.graph_name as string | undefined,\n toolStartedEvent,\n });\n if (cause?.type === \"toolCall\" && toolStartedEvent == null) {\n const toolCallId = (cause as { tool_call_id?: string }).tool_call_id;\n if (toolCallId) this.#pendingToolCallHandles.set(toolCallId, handle);\n }\n return handle;\n }\n\n #start(): void {\n if (this.#sourcePump) return;\n this.#sourcePump = (async () => {\n for await (const event of this.#source) {\n const handle = this.#processEvent(event);\n if (!handle) continue;\n this.#emit(handle);\n }\n this.#pendingToolStarts.clear();\n this.#pendingToolCallHandles.clear();\n this.#closed = true;\n while (this.#waiters.length > 0) {\n this.#waiters.shift()?.({ done: true, value: undefined });\n }\n })();\n }\n\n async close(): Promise<void> {\n this.#closed = true;\n await this.#source.unsubscribe();\n }\n\n [Symbol.asyncIterator](): AsyncIterator<SubgraphHandle> {\n this.#start();\n return {\n next: async () => {\n if (this.#queue.length > 0) {\n return { done: false, value: this.#queue.shift()! };\n }\n if (this.#closed) {\n return { done: true, value: undefined };\n }\n return await new Promise<IteratorResult<SubgraphHandle>>((resolve) => {\n this.#waiters.push(resolve);\n });\n },\n return: async () => {\n await this.close();\n return { done: true, value: undefined };\n },\n };\n }\n}\n"],"mappings":"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"}
|