@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,45 @@
|
|
|
1
|
+
import { ProtocolSseTransportAdapter } from "./http.js";
|
|
2
|
+
import { ProtocolWebSocketTransportAdapter } from "./websocket.js";
|
|
3
|
+
//#region src/client/stream/transport/agent-server.ts
|
|
4
|
+
var HttpAgentServerAdapter = class {
|
|
5
|
+
threadId;
|
|
6
|
+
#delegate;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.threadId = options.threadId;
|
|
9
|
+
this.#delegate = options.webSocketFactory != null ? new ProtocolWebSocketTransportAdapter({
|
|
10
|
+
apiUrl: options.apiUrl,
|
|
11
|
+
threadId: options.threadId,
|
|
12
|
+
defaultHeaders: options.defaultHeaders,
|
|
13
|
+
onRequest: options.onRequest,
|
|
14
|
+
paths: options.paths,
|
|
15
|
+
webSocketFactory: options.webSocketFactory
|
|
16
|
+
}) : new ProtocolSseTransportAdapter({
|
|
17
|
+
apiUrl: options.apiUrl,
|
|
18
|
+
threadId: options.threadId,
|
|
19
|
+
defaultHeaders: options.defaultHeaders,
|
|
20
|
+
onRequest: options.onRequest,
|
|
21
|
+
fetch: options.fetch,
|
|
22
|
+
paths: options.paths
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
open() {
|
|
26
|
+
return this.#delegate.open();
|
|
27
|
+
}
|
|
28
|
+
send(command) {
|
|
29
|
+
return this.#delegate.send(command);
|
|
30
|
+
}
|
|
31
|
+
events() {
|
|
32
|
+
return this.#delegate.events();
|
|
33
|
+
}
|
|
34
|
+
openEventStream(params) {
|
|
35
|
+
if (this.#delegate.openEventStream == null) throw new Error("HttpAgentServerAdapter delegate does not support openEventStream (WebSocket path).");
|
|
36
|
+
return this.#delegate.openEventStream(params);
|
|
37
|
+
}
|
|
38
|
+
close() {
|
|
39
|
+
return this.#delegate.close();
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
//#endregion
|
|
43
|
+
export { HttpAgentServerAdapter };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=agent-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-server.js","names":["#delegate"],"sources":["../../../../src/client/stream/transport/agent-server.ts"],"sourcesContent":["/**\n * Stock `AgentServerAdapter` implementation for \"point `useStream` at a\n * single HTTP endpoint that speaks the v2 protocol\" deployments.\n *\n * Internally delegates to the appropriate built-in transport:\n * - `new HttpAgentServerAdapter({ apiUrl, threadId })` → SSE\n * - `new HttpAgentServerAdapter({ apiUrl, threadId, webSocketFactory })`\n * → WebSocket\n *\n * Keeps the user-facing import surface small: callers only ever import\n * `HttpAgentServerAdapter` from `@langchain/langgraph-sdk` instead of\n * knowing the two wire-specific class names. The class is deliberately\n * thin — it forwards every method on {@link AgentServerAdapter} to the\n * delegate it picked at construction time.\n *\n * See `plan-custom-transport.md` §4.3 for motivation.\n */\nimport type {\n AgentServerAdapter,\n EventStreamHandle,\n TransportAdapter,\n} from \"../transport.js\";\nimport type {\n Command,\n CommandResponse,\n ErrorResponse,\n Message,\n SubscribeParams,\n} from \"@langchain/protocol\";\nimport { ProtocolSseTransportAdapter } from \"./http.js\";\nimport { ProtocolWebSocketTransportAdapter } from \"./websocket.js\";\nimport type {\n HeaderValue,\n ProtocolRequestHook,\n ProtocolTransportPaths,\n} from \"./types.js\";\n\nexport interface HttpAgentServerAdapterOptions {\n apiUrl: string;\n threadId: string;\n /** Auth / tenant / diagnostic headers applied to every request. */\n defaultHeaders?: Record<string, HeaderValue>;\n /** Per-request hook for last-mile header mutation. */\n onRequest?: ProtocolRequestHook;\n /** Override the default `/v2/threads/:threadId/...` protocol paths. */\n paths?: ProtocolTransportPaths;\n /**\n * Optional `fetch` override, forwarded to the SSE transport. Useful\n * for auth proxies, Next.js route handlers, or tests with injected\n * mocks. Ignored when `webSocketFactory` is also supplied.\n */\n fetch?: typeof fetch;\n /**\n * Optional WebSocket factory. Supplying it flips the adapter into\n * WebSocket mode — SSE is bypassed entirely.\n */\n webSocketFactory?: (url: string) => WebSocket;\n}\n\nexport class HttpAgentServerAdapter implements AgentServerAdapter {\n readonly threadId: string;\n\n readonly #delegate: TransportAdapter;\n\n constructor(options: HttpAgentServerAdapterOptions) {\n this.threadId = options.threadId;\n this.#delegate =\n options.webSocketFactory != null\n ? new ProtocolWebSocketTransportAdapter({\n apiUrl: options.apiUrl,\n threadId: options.threadId,\n defaultHeaders: options.defaultHeaders,\n onRequest: options.onRequest,\n paths: options.paths,\n webSocketFactory: options.webSocketFactory,\n })\n : new ProtocolSseTransportAdapter({\n apiUrl: options.apiUrl,\n threadId: options.threadId,\n defaultHeaders: options.defaultHeaders,\n onRequest: options.onRequest,\n fetch: options.fetch,\n paths: options.paths,\n });\n }\n\n open(): Promise<void> {\n return this.#delegate.open();\n }\n\n send(command: Command): Promise<CommandResponse | ErrorResponse | void> {\n return this.#delegate.send(command);\n }\n\n events(): AsyncIterable<Message> {\n return this.#delegate.events();\n }\n\n openEventStream(params: SubscribeParams): EventStreamHandle {\n if (this.#delegate.openEventStream == null) {\n throw new Error(\n \"HttpAgentServerAdapter delegate does not support openEventStream (WebSocket path).\"\n );\n }\n return this.#delegate.openEventStream(params);\n }\n\n close(): Promise<void> {\n return this.#delegate.close();\n }\n}\n"],"mappings":";;;AA2DA,IAAa,yBAAb,MAAkE;CAChE;CAEA;CAEA,YAAY,SAAwC;AAClD,OAAK,WAAW,QAAQ;AACxB,QAAA,WACE,QAAQ,oBAAoB,OACxB,IAAI,kCAAkC;GACpC,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,gBAAgB,QAAQ;GACxB,WAAW,QAAQ;GACnB,OAAO,QAAQ;GACf,kBAAkB,QAAQ;GAC3B,CAAC,GACF,IAAI,4BAA4B;GAC9B,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,gBAAgB,QAAQ;GACxB,WAAW,QAAQ;GACnB,OAAO,QAAQ;GACf,OAAO,QAAQ;GAChB,CAAC;;CAGV,OAAsB;AACpB,SAAO,MAAA,SAAe,MAAM;;CAG9B,KAAK,SAAmE;AACtE,SAAO,MAAA,SAAe,KAAK,QAAQ;;CAGrC,SAAiC;AAC/B,SAAO,MAAA,SAAe,QAAQ;;CAGhC,gBAAgB,QAA4C;AAC1D,MAAI,MAAA,SAAe,mBAAmB,KACpC,OAAM,IAAI,MACR,qFACD;AAEH,SAAO,MAAA,SAAe,gBAAgB,OAAO;;CAG/C,QAAuB;AACrB,SAAO,MAAA,SAAe,OAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.cjs","names":[],"sources":["../../../../src/client/stream/transport/constants.ts"],"sourcesContent":["export const CR = \"\\r\".charCodeAt(0);\nexport const LF = \"\\n\".charCodeAt(0);\nexport const NULL = \"\\0\".charCodeAt(0);\nexport const COLON = \":\".charCodeAt(0);\nexport const SPACE = \" \".charCodeAt(0);\nexport const TRAILING_NEWLINE = [CR, LF];\n"],"mappings":"AAAkB,KAAK,WAAW,EAAE;AAClB,KAAK,WAAW,EAAE;AAChB,KAAK,WAAW,EAAE;AACjB,IAAI,WAAW,EAAE;AACjB,IAAI,WAAW,EAAE;AACtC,MAAa,mBAAmB,CAAA,IAAA,GAAQ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":[],"sources":["../../../../src/client/stream/transport/constants.ts"],"sourcesContent":["export const CR = \"\\r\".charCodeAt(0);\nexport const LF = \"\\n\".charCodeAt(0);\nexport const NULL = \"\\0\".charCodeAt(0);\nexport const COLON = \":\".charCodeAt(0);\nexport const SPACE = \" \".charCodeAt(0);\nexport const TRAILING_NEWLINE = [CR, LF];\n"],"mappings":"AAAkB,KAAK,WAAW,EAAE;AAClB,KAAK,WAAW,EAAE;AAChB,KAAK,WAAW,EAAE;AACjB,IAAI,WAAW,EAAE;AACjB,IAAI,WAAW,EAAE;AACtC,MAAa,mBAAmB,CAAA,IAAA,GAAQ"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
const require_constants = require("./constants.cjs");
|
|
2
|
+
//#region src/client/stream/transport/decoder.ts
|
|
3
|
+
function joinArrays(data) {
|
|
4
|
+
const totalLength = data.reduce((acc, curr) => acc + curr.length, 0);
|
|
5
|
+
const merged = new Uint8Array(totalLength);
|
|
6
|
+
let offset = 0;
|
|
7
|
+
for (const chunk of data) {
|
|
8
|
+
merged.set(chunk, offset);
|
|
9
|
+
offset += chunk.length;
|
|
10
|
+
}
|
|
11
|
+
return merged;
|
|
12
|
+
}
|
|
13
|
+
function decodeArraysToJson(decoder, data) {
|
|
14
|
+
return JSON.parse(decoder.decode(joinArrays(data)));
|
|
15
|
+
}
|
|
16
|
+
function BytesLineDecoder() {
|
|
17
|
+
let buffer = [];
|
|
18
|
+
let trailingCr = false;
|
|
19
|
+
return new TransformStream({
|
|
20
|
+
start() {
|
|
21
|
+
buffer = [];
|
|
22
|
+
trailingCr = false;
|
|
23
|
+
},
|
|
24
|
+
transform(chunk, controller) {
|
|
25
|
+
let text = chunk;
|
|
26
|
+
if (trailingCr) {
|
|
27
|
+
text = joinArrays([[13], text]);
|
|
28
|
+
trailingCr = false;
|
|
29
|
+
}
|
|
30
|
+
if (text.length > 0 && text.at(-1) === 13) {
|
|
31
|
+
trailingCr = true;
|
|
32
|
+
text = text.subarray(0, -1);
|
|
33
|
+
}
|
|
34
|
+
if (!text.length) return;
|
|
35
|
+
const trailingNewline = require_constants.TRAILING_NEWLINE.includes(text.at(-1));
|
|
36
|
+
const lastIdx = text.length - 1;
|
|
37
|
+
const { lines } = text.reduce((acc, cur, idx) => {
|
|
38
|
+
if (acc.from > idx) return acc;
|
|
39
|
+
if (cur === 13 || cur === 10) {
|
|
40
|
+
acc.lines.push(text.subarray(acc.from, idx));
|
|
41
|
+
if (cur === 13 && text[idx + 1] === 10) acc.from = idx + 2;
|
|
42
|
+
else acc.from = idx + 1;
|
|
43
|
+
}
|
|
44
|
+
if (idx === lastIdx && acc.from <= lastIdx) acc.lines.push(text.subarray(acc.from));
|
|
45
|
+
return acc;
|
|
46
|
+
}, {
|
|
47
|
+
lines: [],
|
|
48
|
+
from: 0
|
|
49
|
+
});
|
|
50
|
+
if (lines.length === 1 && !trailingNewline) {
|
|
51
|
+
buffer.push(lines[0]);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (buffer.length) {
|
|
55
|
+
buffer.push(lines[0]);
|
|
56
|
+
lines[0] = joinArrays(buffer);
|
|
57
|
+
buffer = [];
|
|
58
|
+
}
|
|
59
|
+
if (!trailingNewline && lines.length) buffer = [lines.pop()];
|
|
60
|
+
for (const line of lines) controller.enqueue(line);
|
|
61
|
+
},
|
|
62
|
+
flush(controller) {
|
|
63
|
+
if (buffer.length) controller.enqueue(joinArrays(buffer));
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function SSEDecoder() {
|
|
68
|
+
let event = "";
|
|
69
|
+
let data = [];
|
|
70
|
+
let lastEventId = "";
|
|
71
|
+
let retry = null;
|
|
72
|
+
const decoder = new TextDecoder();
|
|
73
|
+
return new TransformStream({
|
|
74
|
+
transform(chunk, controller) {
|
|
75
|
+
if (!chunk.length) {
|
|
76
|
+
if (!event && !data.length && !lastEventId && retry == null) return;
|
|
77
|
+
controller.enqueue({
|
|
78
|
+
id: lastEventId || void 0,
|
|
79
|
+
event,
|
|
80
|
+
data: data.length ? decodeArraysToJson(decoder, data) : null
|
|
81
|
+
});
|
|
82
|
+
event = "";
|
|
83
|
+
data = [];
|
|
84
|
+
retry = null;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (chunk[0] === 58) return;
|
|
88
|
+
const sepIdx = chunk.indexOf(58);
|
|
89
|
+
if (sepIdx === -1) return;
|
|
90
|
+
const fieldName = decoder.decode(chunk.subarray(0, sepIdx));
|
|
91
|
+
let value = chunk.subarray(sepIdx + 1);
|
|
92
|
+
if (value[0] === 32) value = value.subarray(1);
|
|
93
|
+
if (fieldName === "event") event = decoder.decode(value);
|
|
94
|
+
else if (fieldName === "data") data.push(value);
|
|
95
|
+
else if (fieldName === "id") {
|
|
96
|
+
if (value.indexOf(0) === -1) lastEventId = decoder.decode(value);
|
|
97
|
+
} else if (fieldName === "retry") {
|
|
98
|
+
const retryNum = Number.parseInt(decoder.decode(value), 10);
|
|
99
|
+
if (!Number.isNaN(retryNum)) retry = retryNum;
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
flush(controller) {
|
|
103
|
+
if (event) controller.enqueue({
|
|
104
|
+
id: lastEventId || void 0,
|
|
105
|
+
event,
|
|
106
|
+
data: data.length ? decodeArraysToJson(decoder, data) : null
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
//#endregion
|
|
112
|
+
exports.BytesLineDecoder = BytesLineDecoder;
|
|
113
|
+
exports.SSEDecoder = SSEDecoder;
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=decoder.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoder.cjs","names":["TRAILING_NEWLINE"],"sources":["../../../../src/client/stream/transport/decoder.ts"],"sourcesContent":["import type { StreamPart } from \"./types.js\";\nimport { CR, LF, NULL, COLON, SPACE, TRAILING_NEWLINE } from \"./constants.js\";\n\nfunction joinArrays(data: ArrayLike<number>[]) {\n const totalLength = data.reduce((acc, curr) => acc + curr.length, 0);\n const merged = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of data) {\n merged.set(chunk, offset);\n offset += chunk.length;\n }\n return merged;\n}\n\nfunction decodeArraysToJson(decoder: TextDecoder, data: ArrayLike<number>[]) {\n return JSON.parse(decoder.decode(joinArrays(data)));\n}\n\nexport function BytesLineDecoder() {\n let buffer: Uint8Array[] = [];\n let trailingCr = false;\n\n return new TransformStream<Uint8Array, Uint8Array>({\n start() {\n buffer = [];\n trailingCr = false;\n },\n\n transform(chunk, controller) {\n let text = chunk;\n\n if (trailingCr) {\n text = joinArrays([[CR], text]);\n trailingCr = false;\n }\n\n if (text.length > 0 && text.at(-1) === CR) {\n trailingCr = true;\n text = text.subarray(0, -1);\n }\n\n if (!text.length) {\n return;\n }\n const trailingNewline = TRAILING_NEWLINE.includes(text.at(-1)!);\n\n const lastIdx = text.length - 1;\n const { lines } = text.reduce<{ lines: Uint8Array[]; from: number }>(\n (acc, cur, idx) => {\n if (acc.from > idx) {\n return acc;\n }\n\n if (cur === CR || cur === LF) {\n acc.lines.push(text.subarray(acc.from, idx));\n if (cur === CR && text[idx + 1] === LF) {\n acc.from = idx + 2;\n } else {\n acc.from = idx + 1;\n }\n }\n\n if (idx === lastIdx && acc.from <= lastIdx) {\n acc.lines.push(text.subarray(acc.from));\n }\n\n return acc;\n },\n { lines: [], from: 0 }\n );\n\n if (lines.length === 1 && !trailingNewline) {\n buffer.push(lines[0]);\n return;\n }\n\n if (buffer.length) {\n buffer.push(lines[0]);\n lines[0] = joinArrays(buffer);\n buffer = [];\n }\n\n if (!trailingNewline && lines.length) {\n buffer = [lines.pop()!];\n }\n\n for (const line of lines) {\n controller.enqueue(line);\n }\n },\n\n flush(controller) {\n if (buffer.length) {\n controller.enqueue(joinArrays(buffer));\n }\n },\n });\n}\n\nexport function SSEDecoder() {\n let event = \"\";\n let data: Uint8Array[] = [];\n let lastEventId = \"\";\n let retry: number | null = null;\n\n const decoder = new TextDecoder();\n\n return new TransformStream<Uint8Array, StreamPart>({\n transform(chunk, controller) {\n if (!chunk.length) {\n if (!event && !data.length && !lastEventId && retry == null) {\n return;\n }\n\n controller.enqueue({\n id: lastEventId || undefined,\n event,\n data: data.length ? decodeArraysToJson(decoder, data) : null,\n });\n\n event = \"\";\n data = [];\n retry = null;\n return;\n }\n\n if (chunk[0] === COLON) {\n return;\n }\n\n const sepIdx = chunk.indexOf(COLON);\n if (sepIdx === -1) {\n return;\n }\n\n const fieldName = decoder.decode(chunk.subarray(0, sepIdx));\n let value = chunk.subarray(sepIdx + 1);\n if (value[0] === SPACE) {\n value = value.subarray(1);\n }\n\n if (fieldName === \"event\") {\n event = decoder.decode(value);\n } else if (fieldName === \"data\") {\n data.push(value);\n } else if (fieldName === \"id\") {\n if (value.indexOf(NULL) === -1) {\n lastEventId = decoder.decode(value);\n }\n } else if (fieldName === \"retry\") {\n const retryNum = Number.parseInt(decoder.decode(value), 10);\n if (!Number.isNaN(retryNum)) {\n retry = retryNum;\n }\n }\n },\n\n flush(controller) {\n if (event) {\n controller.enqueue({\n id: lastEventId || undefined,\n event,\n data: data.length ? decodeArraysToJson(decoder, data) : null,\n });\n }\n },\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { TRAILING_NEWLINE } from "./constants.js";
|
|
2
|
+
//#region src/client/stream/transport/decoder.ts
|
|
3
|
+
function joinArrays(data) {
|
|
4
|
+
const totalLength = data.reduce((acc, curr) => acc + curr.length, 0);
|
|
5
|
+
const merged = new Uint8Array(totalLength);
|
|
6
|
+
let offset = 0;
|
|
7
|
+
for (const chunk of data) {
|
|
8
|
+
merged.set(chunk, offset);
|
|
9
|
+
offset += chunk.length;
|
|
10
|
+
}
|
|
11
|
+
return merged;
|
|
12
|
+
}
|
|
13
|
+
function decodeArraysToJson(decoder, data) {
|
|
14
|
+
return JSON.parse(decoder.decode(joinArrays(data)));
|
|
15
|
+
}
|
|
16
|
+
function BytesLineDecoder() {
|
|
17
|
+
let buffer = [];
|
|
18
|
+
let trailingCr = false;
|
|
19
|
+
return new TransformStream({
|
|
20
|
+
start() {
|
|
21
|
+
buffer = [];
|
|
22
|
+
trailingCr = false;
|
|
23
|
+
},
|
|
24
|
+
transform(chunk, controller) {
|
|
25
|
+
let text = chunk;
|
|
26
|
+
if (trailingCr) {
|
|
27
|
+
text = joinArrays([[13], text]);
|
|
28
|
+
trailingCr = false;
|
|
29
|
+
}
|
|
30
|
+
if (text.length > 0 && text.at(-1) === 13) {
|
|
31
|
+
trailingCr = true;
|
|
32
|
+
text = text.subarray(0, -1);
|
|
33
|
+
}
|
|
34
|
+
if (!text.length) return;
|
|
35
|
+
const trailingNewline = TRAILING_NEWLINE.includes(text.at(-1));
|
|
36
|
+
const lastIdx = text.length - 1;
|
|
37
|
+
const { lines } = text.reduce((acc, cur, idx) => {
|
|
38
|
+
if (acc.from > idx) return acc;
|
|
39
|
+
if (cur === 13 || cur === 10) {
|
|
40
|
+
acc.lines.push(text.subarray(acc.from, idx));
|
|
41
|
+
if (cur === 13 && text[idx + 1] === 10) acc.from = idx + 2;
|
|
42
|
+
else acc.from = idx + 1;
|
|
43
|
+
}
|
|
44
|
+
if (idx === lastIdx && acc.from <= lastIdx) acc.lines.push(text.subarray(acc.from));
|
|
45
|
+
return acc;
|
|
46
|
+
}, {
|
|
47
|
+
lines: [],
|
|
48
|
+
from: 0
|
|
49
|
+
});
|
|
50
|
+
if (lines.length === 1 && !trailingNewline) {
|
|
51
|
+
buffer.push(lines[0]);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (buffer.length) {
|
|
55
|
+
buffer.push(lines[0]);
|
|
56
|
+
lines[0] = joinArrays(buffer);
|
|
57
|
+
buffer = [];
|
|
58
|
+
}
|
|
59
|
+
if (!trailingNewline && lines.length) buffer = [lines.pop()];
|
|
60
|
+
for (const line of lines) controller.enqueue(line);
|
|
61
|
+
},
|
|
62
|
+
flush(controller) {
|
|
63
|
+
if (buffer.length) controller.enqueue(joinArrays(buffer));
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function SSEDecoder() {
|
|
68
|
+
let event = "";
|
|
69
|
+
let data = [];
|
|
70
|
+
let lastEventId = "";
|
|
71
|
+
let retry = null;
|
|
72
|
+
const decoder = new TextDecoder();
|
|
73
|
+
return new TransformStream({
|
|
74
|
+
transform(chunk, controller) {
|
|
75
|
+
if (!chunk.length) {
|
|
76
|
+
if (!event && !data.length && !lastEventId && retry == null) return;
|
|
77
|
+
controller.enqueue({
|
|
78
|
+
id: lastEventId || void 0,
|
|
79
|
+
event,
|
|
80
|
+
data: data.length ? decodeArraysToJson(decoder, data) : null
|
|
81
|
+
});
|
|
82
|
+
event = "";
|
|
83
|
+
data = [];
|
|
84
|
+
retry = null;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (chunk[0] === 58) return;
|
|
88
|
+
const sepIdx = chunk.indexOf(58);
|
|
89
|
+
if (sepIdx === -1) return;
|
|
90
|
+
const fieldName = decoder.decode(chunk.subarray(0, sepIdx));
|
|
91
|
+
let value = chunk.subarray(sepIdx + 1);
|
|
92
|
+
if (value[0] === 32) value = value.subarray(1);
|
|
93
|
+
if (fieldName === "event") event = decoder.decode(value);
|
|
94
|
+
else if (fieldName === "data") data.push(value);
|
|
95
|
+
else if (fieldName === "id") {
|
|
96
|
+
if (value.indexOf(0) === -1) lastEventId = decoder.decode(value);
|
|
97
|
+
} else if (fieldName === "retry") {
|
|
98
|
+
const retryNum = Number.parseInt(decoder.decode(value), 10);
|
|
99
|
+
if (!Number.isNaN(retryNum)) retry = retryNum;
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
flush(controller) {
|
|
103
|
+
if (event) controller.enqueue({
|
|
104
|
+
id: lastEventId || void 0,
|
|
105
|
+
event,
|
|
106
|
+
data: data.length ? decodeArraysToJson(decoder, data) : null
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
//#endregion
|
|
112
|
+
export { BytesLineDecoder, SSEDecoder };
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=decoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoder.js","names":[],"sources":["../../../../src/client/stream/transport/decoder.ts"],"sourcesContent":["import type { StreamPart } from \"./types.js\";\nimport { CR, LF, NULL, COLON, SPACE, TRAILING_NEWLINE } from \"./constants.js\";\n\nfunction joinArrays(data: ArrayLike<number>[]) {\n const totalLength = data.reduce((acc, curr) => acc + curr.length, 0);\n const merged = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of data) {\n merged.set(chunk, offset);\n offset += chunk.length;\n }\n return merged;\n}\n\nfunction decodeArraysToJson(decoder: TextDecoder, data: ArrayLike<number>[]) {\n return JSON.parse(decoder.decode(joinArrays(data)));\n}\n\nexport function BytesLineDecoder() {\n let buffer: Uint8Array[] = [];\n let trailingCr = false;\n\n return new TransformStream<Uint8Array, Uint8Array>({\n start() {\n buffer = [];\n trailingCr = false;\n },\n\n transform(chunk, controller) {\n let text = chunk;\n\n if (trailingCr) {\n text = joinArrays([[CR], text]);\n trailingCr = false;\n }\n\n if (text.length > 0 && text.at(-1) === CR) {\n trailingCr = true;\n text = text.subarray(0, -1);\n }\n\n if (!text.length) {\n return;\n }\n const trailingNewline = TRAILING_NEWLINE.includes(text.at(-1)!);\n\n const lastIdx = text.length - 1;\n const { lines } = text.reduce<{ lines: Uint8Array[]; from: number }>(\n (acc, cur, idx) => {\n if (acc.from > idx) {\n return acc;\n }\n\n if (cur === CR || cur === LF) {\n acc.lines.push(text.subarray(acc.from, idx));\n if (cur === CR && text[idx + 1] === LF) {\n acc.from = idx + 2;\n } else {\n acc.from = idx + 1;\n }\n }\n\n if (idx === lastIdx && acc.from <= lastIdx) {\n acc.lines.push(text.subarray(acc.from));\n }\n\n return acc;\n },\n { lines: [], from: 0 }\n );\n\n if (lines.length === 1 && !trailingNewline) {\n buffer.push(lines[0]);\n return;\n }\n\n if (buffer.length) {\n buffer.push(lines[0]);\n lines[0] = joinArrays(buffer);\n buffer = [];\n }\n\n if (!trailingNewline && lines.length) {\n buffer = [lines.pop()!];\n }\n\n for (const line of lines) {\n controller.enqueue(line);\n }\n },\n\n flush(controller) {\n if (buffer.length) {\n controller.enqueue(joinArrays(buffer));\n }\n },\n });\n}\n\nexport function SSEDecoder() {\n let event = \"\";\n let data: Uint8Array[] = [];\n let lastEventId = \"\";\n let retry: number | null = null;\n\n const decoder = new TextDecoder();\n\n return new TransformStream<Uint8Array, StreamPart>({\n transform(chunk, controller) {\n if (!chunk.length) {\n if (!event && !data.length && !lastEventId && retry == null) {\n return;\n }\n\n controller.enqueue({\n id: lastEventId || undefined,\n event,\n data: data.length ? decodeArraysToJson(decoder, data) : null,\n });\n\n event = \"\";\n data = [];\n retry = null;\n return;\n }\n\n if (chunk[0] === COLON) {\n return;\n }\n\n const sepIdx = chunk.indexOf(COLON);\n if (sepIdx === -1) {\n return;\n }\n\n const fieldName = decoder.decode(chunk.subarray(0, sepIdx));\n let value = chunk.subarray(sepIdx + 1);\n if (value[0] === SPACE) {\n value = value.subarray(1);\n }\n\n if (fieldName === \"event\") {\n event = decoder.decode(value);\n } else if (fieldName === \"data\") {\n data.push(value);\n } else if (fieldName === \"id\") {\n if (value.indexOf(NULL) === -1) {\n lastEventId = decoder.decode(value);\n }\n } else if (fieldName === \"retry\") {\n const retryNum = Number.parseInt(decoder.decode(value), 10);\n if (!Number.isNaN(retryNum)) {\n retry = retryNum;\n }\n }\n },\n\n flush(controller) {\n if (event) {\n controller.enqueue({\n id: lastEventId || undefined,\n event,\n data: data.length ? decodeArraysToJson(decoder, data) : null,\n });\n }\n },\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
const require_queue = require("./queue.cjs");
|
|
2
|
+
const require_utils = require("./utils.cjs");
|
|
3
|
+
const require_decoder = require("./decoder.cjs");
|
|
4
|
+
const require_stream = require("./stream.cjs");
|
|
5
|
+
//#region src/client/stream/transport/http.ts
|
|
6
|
+
/**
|
|
7
|
+
* Transport adapter that speaks the thread-centric protocol over HTTP
|
|
8
|
+
* commands plus SSE event streams. Bound to a specific `threadId`
|
|
9
|
+
* at construction. Each {@link openEventStream} call opens an independent
|
|
10
|
+
* filtered SSE connection via `POST /v2/threads/:thread_id/stream`.
|
|
11
|
+
*/
|
|
12
|
+
var ProtocolSseTransportAdapter = class {
|
|
13
|
+
threadId;
|
|
14
|
+
queue = new require_queue.AsyncQueue();
|
|
15
|
+
fetchImpl;
|
|
16
|
+
apiUrl;
|
|
17
|
+
defaultHeaders;
|
|
18
|
+
onRequest;
|
|
19
|
+
fetchFactory;
|
|
20
|
+
commandsUrl;
|
|
21
|
+
streamUrl;
|
|
22
|
+
sessionAbortController = new AbortController();
|
|
23
|
+
eventStreams = /* @__PURE__ */ new Set();
|
|
24
|
+
closed = false;
|
|
25
|
+
constructor(options) {
|
|
26
|
+
this.fetchImpl = options.fetch ?? fetch;
|
|
27
|
+
this.apiUrl = options.apiUrl;
|
|
28
|
+
this.defaultHeaders = options.defaultHeaders ?? {};
|
|
29
|
+
this.onRequest = options.onRequest;
|
|
30
|
+
this.fetchFactory = options.fetchFactory;
|
|
31
|
+
this.threadId = options.threadId;
|
|
32
|
+
this.commandsUrl = options.paths?.commands ?? `/v2/threads/${this.threadId}/commands`;
|
|
33
|
+
this.streamUrl = options.paths?.stream ?? `/v2/threads/${this.threadId}/stream`;
|
|
34
|
+
}
|
|
35
|
+
async resolveFetch() {
|
|
36
|
+
if (this.fetchFactory) return await this.fetchFactory();
|
|
37
|
+
return this.fetchImpl;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* HTTP/SSE transports have no handshake — connections are made
|
|
41
|
+
* per-command and per-subscription.
|
|
42
|
+
*/
|
|
43
|
+
async open() {}
|
|
44
|
+
async send(command) {
|
|
45
|
+
const response = await this.request(this.commandsUrl, {
|
|
46
|
+
method: "POST",
|
|
47
|
+
headers: { "content-type": "application/json" },
|
|
48
|
+
body: JSON.stringify(command),
|
|
49
|
+
signal: this.sessionAbortController.signal
|
|
50
|
+
});
|
|
51
|
+
if (response.status === 202 || response.status === 204) return;
|
|
52
|
+
const payload = await response.json();
|
|
53
|
+
if (!require_utils.isProtocolResponse(payload)) throw new Error("Protocol command did not return a valid response.");
|
|
54
|
+
return payload;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* WebSocket-style single event stream.
|
|
58
|
+
* For the SSE transport this returns a dummy iterable; real event
|
|
59
|
+
* delivery happens via {@link openEventStream}.
|
|
60
|
+
*/
|
|
61
|
+
events() {
|
|
62
|
+
const queue = this.queue;
|
|
63
|
+
return { [Symbol.asyncIterator]: () => ({
|
|
64
|
+
next: async () => await queue.shift(),
|
|
65
|
+
return: async () => {
|
|
66
|
+
queue.close();
|
|
67
|
+
return {
|
|
68
|
+
done: true,
|
|
69
|
+
value: void 0
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}) };
|
|
73
|
+
}
|
|
74
|
+
openEventStream(params) {
|
|
75
|
+
if (this.closed) throw new Error("Protocol transport is closed.");
|
|
76
|
+
const ac = new AbortController();
|
|
77
|
+
this.eventStreams.add(ac);
|
|
78
|
+
const streamQueue = new require_queue.AsyncQueue();
|
|
79
|
+
const streamUrl = this.streamUrl;
|
|
80
|
+
let resolveReady;
|
|
81
|
+
let rejectReady;
|
|
82
|
+
const ready = new Promise((resolve, reject) => {
|
|
83
|
+
resolveReady = resolve;
|
|
84
|
+
rejectReady = reject;
|
|
85
|
+
});
|
|
86
|
+
const since = params.since;
|
|
87
|
+
const startStream = async () => {
|
|
88
|
+
try {
|
|
89
|
+
const response = await this.request(streamUrl, {
|
|
90
|
+
method: "POST",
|
|
91
|
+
headers: {
|
|
92
|
+
"content-type": "application/json",
|
|
93
|
+
accept: "text/event-stream"
|
|
94
|
+
},
|
|
95
|
+
body: JSON.stringify({
|
|
96
|
+
channels: params.channels,
|
|
97
|
+
...params.namespaces ? { namespaces: params.namespaces } : {},
|
|
98
|
+
...params.depth != null ? { depth: params.depth } : {},
|
|
99
|
+
...typeof since === "number" ? { since } : {}
|
|
100
|
+
}),
|
|
101
|
+
signal: ac.signal
|
|
102
|
+
});
|
|
103
|
+
resolveReady();
|
|
104
|
+
const stream = (response.body ?? new ReadableStream({ start(controller) {
|
|
105
|
+
controller.close();
|
|
106
|
+
} })).pipeThrough(require_decoder.BytesLineDecoder()).pipeThrough(require_decoder.SSEDecoder());
|
|
107
|
+
const iterable = require_stream.IterableReadableStream.fromReadableStream(stream);
|
|
108
|
+
for await (const event of iterable) {
|
|
109
|
+
if (ac.signal.aborted || this.closed) break;
|
|
110
|
+
if (require_utils.isRecord(event.data)) {
|
|
111
|
+
const msg = event.data;
|
|
112
|
+
streamQueue.push(msg);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
streamQueue.close();
|
|
116
|
+
} catch (error) {
|
|
117
|
+
rejectReady(error);
|
|
118
|
+
if (ac.signal.aborted || this.closed) {
|
|
119
|
+
streamQueue.close();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
streamQueue.close(error);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
startStream();
|
|
126
|
+
const cleanup = () => {
|
|
127
|
+
this.eventStreams.delete(ac);
|
|
128
|
+
ac.abort();
|
|
129
|
+
streamQueue.close();
|
|
130
|
+
};
|
|
131
|
+
return {
|
|
132
|
+
events: { [Symbol.asyncIterator]: () => ({
|
|
133
|
+
next: async () => await streamQueue.shift(),
|
|
134
|
+
return: async () => {
|
|
135
|
+
cleanup();
|
|
136
|
+
return {
|
|
137
|
+
done: true,
|
|
138
|
+
value: void 0
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}) },
|
|
142
|
+
ready,
|
|
143
|
+
close: cleanup
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
async close() {
|
|
147
|
+
if (this.closed) return;
|
|
148
|
+
this.closed = true;
|
|
149
|
+
this.sessionAbortController.abort();
|
|
150
|
+
for (const ac of this.eventStreams) ac.abort();
|
|
151
|
+
this.eventStreams.clear();
|
|
152
|
+
this.queue.close();
|
|
153
|
+
}
|
|
154
|
+
async request(path, init) {
|
|
155
|
+
const url = require_utils.toAbsoluteUrl(this.apiUrl, path);
|
|
156
|
+
let requestInit = {
|
|
157
|
+
...init,
|
|
158
|
+
headers: require_utils.mergeHeaders(this.defaultHeaders, init.headers)
|
|
159
|
+
};
|
|
160
|
+
if (this.onRequest) requestInit = await this.onRequest(url, requestInit);
|
|
161
|
+
try {
|
|
162
|
+
const response = await (await this.resolveFetch())(url.toString(), requestInit);
|
|
163
|
+
if (!response.ok) {
|
|
164
|
+
let detail = "";
|
|
165
|
+
try {
|
|
166
|
+
const body = await response.text();
|
|
167
|
+
const parsed = JSON.parse(body);
|
|
168
|
+
if (typeof parsed === "object" && parsed != null) detail = parsed.message ?? parsed.error ?? "";
|
|
169
|
+
if (!detail) detail = body;
|
|
170
|
+
} catch {}
|
|
171
|
+
const message = detail ? `Protocol request failed: ${response.status} ${response.statusText} — ${detail}` : `Protocol request failed: ${response.status} ${response.statusText}`;
|
|
172
|
+
throw new Error(message);
|
|
173
|
+
}
|
|
174
|
+
return response;
|
|
175
|
+
} catch (error) {
|
|
176
|
+
throw require_utils.toError(error);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
//#endregion
|
|
181
|
+
exports.ProtocolSseTransportAdapter = ProtocolSseTransportAdapter;
|
|
182
|
+
|
|
183
|
+
//# sourceMappingURL=http.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.cjs","names":["AsyncQueue","isProtocolResponse","BytesLineDecoder","SSEDecoder","IterableReadableStream","isRecord","toAbsoluteUrl","mergeHeaders","toError"],"sources":["../../../../src/client/stream/transport/http.ts"],"sourcesContent":["import { AsyncQueue } from \"./queue.js\";\nimport type {\n Message,\n SubscribeParams,\n Command,\n CommandResponse,\n ErrorResponse,\n} from \"@langchain/protocol\";\n\nimport type {\n HeaderValue,\n ProtocolRequestHook,\n ProtocolSseTransportOptions,\n} from \"./types.js\";\nimport type { TransportAdapter, EventStreamHandle } from \"../transport.js\";\nimport {\n toAbsoluteUrl,\n isRecord,\n mergeHeaders,\n toError,\n isProtocolResponse,\n} from \"./utils.js\";\nimport { BytesLineDecoder, SSEDecoder } from \"./decoder.js\";\nimport { IterableReadableStream } from \"./stream.js\";\n\n/**\n * Transport adapter that speaks the thread-centric protocol over HTTP\n * commands plus SSE event streams. Bound to a specific `threadId`\n * at construction. Each {@link openEventStream} call opens an independent\n * filtered SSE connection via `POST /v2/threads/:thread_id/stream`.\n */\nexport class ProtocolSseTransportAdapter implements TransportAdapter {\n readonly threadId: string;\n\n private readonly queue = new AsyncQueue<Message>();\n\n private readonly fetchImpl: typeof fetch;\n\n private readonly apiUrl: string;\n\n private readonly defaultHeaders: Record<string, HeaderValue>;\n\n private readonly onRequest?: ProtocolRequestHook;\n\n private readonly fetchFactory?: () => typeof fetch | Promise<typeof fetch>;\n\n private readonly commandsUrl: string;\n\n private readonly streamUrl: string;\n\n private readonly sessionAbortController = new AbortController();\n\n private readonly eventStreams = new Set<AbortController>();\n\n private closed = false;\n\n constructor(options: ProtocolSseTransportOptions) {\n this.fetchImpl = options.fetch ?? fetch;\n this.apiUrl = options.apiUrl;\n this.defaultHeaders = options.defaultHeaders ?? {};\n this.onRequest = options.onRequest;\n this.fetchFactory = options.fetchFactory;\n this.threadId = options.threadId;\n this.commandsUrl =\n options.paths?.commands ?? `/v2/threads/${this.threadId}/commands`;\n this.streamUrl =\n options.paths?.stream ?? `/v2/threads/${this.threadId}/stream`;\n }\n\n private async resolveFetch(): Promise<typeof fetch> {\n if (this.fetchFactory) {\n return await this.fetchFactory();\n }\n return this.fetchImpl;\n }\n\n /**\n * HTTP/SSE transports have no handshake — connections are made\n * per-command and per-subscription.\n */\n async open(): Promise<void> {\n // no-op\n }\n\n async send(\n command: Command\n ): Promise<CommandResponse | ErrorResponse | void> {\n const response = await this.request(this.commandsUrl, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(command),\n signal: this.sessionAbortController.signal,\n });\n\n if (response.status === 202 || response.status === 204) {\n return undefined;\n }\n\n const payload = (await response.json()) as unknown;\n if (!isProtocolResponse(payload)) {\n throw new Error(\"Protocol command did not return a valid response.\");\n }\n return payload;\n }\n\n /**\n * WebSocket-style single event stream.\n * For the SSE transport this returns a dummy iterable; real event\n * delivery happens via {@link openEventStream}.\n */\n events(): AsyncIterable<Message> {\n const queue = this.queue;\n return {\n [Symbol.asyncIterator]: () => ({\n next: async () => await queue.shift(),\n return: async () => {\n queue.close();\n return { done: true, value: undefined };\n },\n }),\n };\n }\n\n openEventStream(params: SubscribeParams): EventStreamHandle {\n if (this.closed) {\n throw new Error(\"Protocol transport is closed.\");\n }\n\n const ac = new AbortController();\n this.eventStreams.add(ac);\n const streamQueue = new AsyncQueue<Message>();\n const streamUrl = this.streamUrl;\n\n let resolveReady!: () => void;\n let rejectReady!: (err: unknown) => void;\n const ready = new Promise<void>((resolve, reject) => {\n resolveReady = resolve;\n rejectReady = reject;\n });\n\n const since = (params as SubscribeParams & { since?: unknown }).since;\n\n const startStream = async () => {\n try {\n const response = await this.request(streamUrl, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"text/event-stream\",\n },\n body: JSON.stringify({\n channels: params.channels,\n ...(params.namespaces ? { namespaces: params.namespaces } : {}),\n ...(params.depth != null ? { depth: params.depth } : {}),\n ...(typeof since === \"number\" ? { since } : {}),\n }),\n signal: ac.signal,\n });\n\n resolveReady();\n\n const readable =\n response.body ??\n new ReadableStream<Uint8Array>({\n start(controller) {\n controller.close();\n },\n });\n\n const stream = readable\n .pipeThrough(BytesLineDecoder())\n .pipeThrough(SSEDecoder());\n const iterable = IterableReadableStream.fromReadableStream(stream);\n\n for await (const event of iterable) {\n if (ac.signal.aborted || this.closed) {\n break;\n }\n if (isRecord(event.data)) {\n const msg = event.data as Message & {\n seq?: number;\n method?: string;\n };\n streamQueue.push(msg);\n }\n }\n streamQueue.close();\n } catch (error) {\n rejectReady(error);\n if (ac.signal.aborted || this.closed) {\n streamQueue.close();\n return;\n }\n streamQueue.close(error);\n }\n };\n\n void startStream();\n\n const cleanup = () => {\n this.eventStreams.delete(ac);\n ac.abort();\n streamQueue.close();\n };\n\n return {\n events: {\n [Symbol.asyncIterator]: () => ({\n next: async () => await streamQueue.shift(),\n return: async () => {\n cleanup();\n return { done: true, value: undefined };\n },\n }),\n },\n ready,\n close: cleanup,\n };\n }\n\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.sessionAbortController.abort();\n for (const ac of this.eventStreams) ac.abort();\n this.eventStreams.clear();\n this.queue.close();\n }\n\n private async request(path: string, init: RequestInit): Promise<Response> {\n const url = toAbsoluteUrl(this.apiUrl, path);\n let requestInit: RequestInit = {\n ...init,\n headers: mergeHeaders(this.defaultHeaders, init.headers),\n };\n\n if (this.onRequest) {\n requestInit = await this.onRequest(url, requestInit);\n }\n\n try {\n const fetchImpl = await this.resolveFetch();\n const response = await fetchImpl(url.toString(), requestInit);\n if (!response.ok) {\n let detail = \"\";\n try {\n const body = await response.text();\n const parsed = JSON.parse(body);\n if (typeof parsed === \"object\" && parsed != null) {\n detail =\n ((parsed as Record<string, unknown>).message as string) ??\n ((parsed as Record<string, unknown>).error as string) ??\n \"\";\n }\n if (!detail) detail = body;\n } catch {\n // body unreadable or not JSON — fall through\n }\n const message = detail\n ? `Protocol request failed: ${response.status} ${response.statusText} — ${detail}`\n : `Protocol request failed: ${response.status} ${response.statusText}`;\n throw new Error(message);\n }\n return response;\n } catch (error) {\n throw toError(error);\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { EventStreamHandle, TransportAdapter } from "../transport.cjs";
|
|
2
|
+
import { ProtocolSseTransportOptions } from "./types.cjs";
|
|
3
|
+
import { Command, CommandResponse, ErrorResponse, Message, SubscribeParams } from "@langchain/protocol";
|
|
4
|
+
|
|
5
|
+
//#region src/client/stream/transport/http.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Transport adapter that speaks the thread-centric protocol over HTTP
|
|
8
|
+
* commands plus SSE event streams. Bound to a specific `threadId`
|
|
9
|
+
* at construction. Each {@link openEventStream} call opens an independent
|
|
10
|
+
* filtered SSE connection via `POST /v2/threads/:thread_id/stream`.
|
|
11
|
+
*/
|
|
12
|
+
declare class ProtocolSseTransportAdapter implements TransportAdapter {
|
|
13
|
+
readonly threadId: string;
|
|
14
|
+
private readonly queue;
|
|
15
|
+
private readonly fetchImpl;
|
|
16
|
+
private readonly apiUrl;
|
|
17
|
+
private readonly defaultHeaders;
|
|
18
|
+
private readonly onRequest?;
|
|
19
|
+
private readonly fetchFactory?;
|
|
20
|
+
private readonly commandsUrl;
|
|
21
|
+
private readonly streamUrl;
|
|
22
|
+
private readonly sessionAbortController;
|
|
23
|
+
private readonly eventStreams;
|
|
24
|
+
private closed;
|
|
25
|
+
constructor(options: ProtocolSseTransportOptions);
|
|
26
|
+
private resolveFetch;
|
|
27
|
+
/**
|
|
28
|
+
* HTTP/SSE transports have no handshake — connections are made
|
|
29
|
+
* per-command and per-subscription.
|
|
30
|
+
*/
|
|
31
|
+
open(): Promise<void>;
|
|
32
|
+
send(command: Command): Promise<CommandResponse | ErrorResponse | void>;
|
|
33
|
+
/**
|
|
34
|
+
* WebSocket-style single event stream.
|
|
35
|
+
* For the SSE transport this returns a dummy iterable; real event
|
|
36
|
+
* delivery happens via {@link openEventStream}.
|
|
37
|
+
*/
|
|
38
|
+
events(): AsyncIterable<Message>;
|
|
39
|
+
openEventStream(params: SubscribeParams): EventStreamHandle;
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
private request;
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { ProtocolSseTransportAdapter };
|
|
45
|
+
//# sourceMappingURL=http.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.cts","names":[],"sources":["../../../../src/client/stream/transport/http.ts"],"mappings":";;;;;;;AA+BA;;;;cAAa,2BAAA,YAAuC,gBAAA;EAAA,SACzC,QAAA;EAAA,iBAEQ,KAAA;EAAA,iBAEA,SAAA;EAAA,iBAEA,MAAA;EAAA,iBAEA,cAAA;EAAA,iBAEA,SAAA;EAAA,iBAEA,YAAA;EAAA,iBAEA,WAAA;EAAA,iBAEA,SAAA;EAAA,iBAEA,sBAAA;EAAA,iBAEA,YAAA;EAAA,QAET,MAAA;EAER,WAAA,CAAY,OAAA,EAAS,2BAAA;EAAA,QAaP,YAAA;EAnCG;;;;EA8CX,IAAA,CAAA,GAAQ,OAAA;EAIR,IAAA,CACJ,OAAA,EAAS,OAAA,GACR,OAAA,CAAQ,eAAA,GAAkB,aAAA;EAxCZ;;;;;EAgEjB,MAAA,CAAA,GAAU,aAAA,CAAc,OAAA;EAaxB,eAAA,CAAgB,MAAA,EAAQ,eAAA,GAAkB,iBAAA;EAiGpC,KAAA,CAAA,GAAS,OAAA;EAAA,QAWD,OAAA;AAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { EventStreamHandle, TransportAdapter } from "../transport.js";
|
|
2
|
+
import { ProtocolSseTransportOptions } from "./types.js";
|
|
3
|
+
import { Command, CommandResponse, ErrorResponse, Message, SubscribeParams } from "@langchain/protocol";
|
|
4
|
+
|
|
5
|
+
//#region src/client/stream/transport/http.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Transport adapter that speaks the thread-centric protocol over HTTP
|
|
8
|
+
* commands plus SSE event streams. Bound to a specific `threadId`
|
|
9
|
+
* at construction. Each {@link openEventStream} call opens an independent
|
|
10
|
+
* filtered SSE connection via `POST /v2/threads/:thread_id/stream`.
|
|
11
|
+
*/
|
|
12
|
+
declare class ProtocolSseTransportAdapter implements TransportAdapter {
|
|
13
|
+
readonly threadId: string;
|
|
14
|
+
private readonly queue;
|
|
15
|
+
private readonly fetchImpl;
|
|
16
|
+
private readonly apiUrl;
|
|
17
|
+
private readonly defaultHeaders;
|
|
18
|
+
private readonly onRequest?;
|
|
19
|
+
private readonly fetchFactory?;
|
|
20
|
+
private readonly commandsUrl;
|
|
21
|
+
private readonly streamUrl;
|
|
22
|
+
private readonly sessionAbortController;
|
|
23
|
+
private readonly eventStreams;
|
|
24
|
+
private closed;
|
|
25
|
+
constructor(options: ProtocolSseTransportOptions);
|
|
26
|
+
private resolveFetch;
|
|
27
|
+
/**
|
|
28
|
+
* HTTP/SSE transports have no handshake — connections are made
|
|
29
|
+
* per-command and per-subscription.
|
|
30
|
+
*/
|
|
31
|
+
open(): Promise<void>;
|
|
32
|
+
send(command: Command): Promise<CommandResponse | ErrorResponse | void>;
|
|
33
|
+
/**
|
|
34
|
+
* WebSocket-style single event stream.
|
|
35
|
+
* For the SSE transport this returns a dummy iterable; real event
|
|
36
|
+
* delivery happens via {@link openEventStream}.
|
|
37
|
+
*/
|
|
38
|
+
events(): AsyncIterable<Message>;
|
|
39
|
+
openEventStream(params: SubscribeParams): EventStreamHandle;
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
private request;
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { ProtocolSseTransportAdapter };
|
|
45
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","names":[],"sources":["../../../../src/client/stream/transport/http.ts"],"mappings":";;;;;;;AA+BA;;;;cAAa,2BAAA,YAAuC,gBAAA;EAAA,SACzC,QAAA;EAAA,iBAEQ,KAAA;EAAA,iBAEA,SAAA;EAAA,iBAEA,MAAA;EAAA,iBAEA,cAAA;EAAA,iBAEA,SAAA;EAAA,iBAEA,YAAA;EAAA,iBAEA,WAAA;EAAA,iBAEA,SAAA;EAAA,iBAEA,sBAAA;EAAA,iBAEA,YAAA;EAAA,QAET,MAAA;EAER,WAAA,CAAY,OAAA,EAAS,2BAAA;EAAA,QAaP,YAAA;EAnCG;;;;EA8CX,IAAA,CAAA,GAAQ,OAAA;EAIR,IAAA,CACJ,OAAA,EAAS,OAAA,GACR,OAAA,CAAQ,eAAA,GAAkB,aAAA;EAxCZ;;;;;EAgEjB,MAAA,CAAA,GAAU,aAAA,CAAc,OAAA;EAaxB,eAAA,CAAgB,MAAA,EAAQ,eAAA,GAAkB,iBAAA;EAiGpC,KAAA,CAAA,GAAS,OAAA;EAAA,QAWD,OAAA;AAAA"}
|