agentfootprint 10.3.1 → 10.4.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/AGENTS.md +2 -2
- package/CAPABILITIES.md +6 -0
- package/README.md +44 -0
- package/ai-instructions/claude-code/SKILL.md +2 -2
- package/dist/adapters/mcp/agentcoreRuntime/errorType.js +24 -0
- package/dist/adapters/mcp/agentcoreRuntime/errorType.js.map +1 -0
- package/dist/adapters/mcp/agentcoreRuntime/invoke.js +265 -0
- package/dist/adapters/mcp/agentcoreRuntime/invoke.js.map +1 -0
- package/dist/adapters/mcp/agentcoreRuntime/safeAnswer.js +415 -0
- package/dist/adapters/mcp/agentcoreRuntime/safeAnswer.js.map +1 -0
- package/dist/adapters/mcp/agentcoreRuntime/session.js +179 -0
- package/dist/adapters/mcp/agentcoreRuntime/session.js.map +1 -0
- package/dist/adapters/mcp/agentcoreRuntime/sessionBusy.js +117 -0
- package/dist/adapters/mcp/agentcoreRuntime/sessionBusy.js.map +1 -0
- package/dist/adapters/mcp/agentcoreRuntime/strictJson.js +220 -0
- package/dist/adapters/mcp/agentcoreRuntime/strictJson.js.map +1 -0
- package/dist/adapters/mcp/agentcoreRuntime/transport.js +204 -0
- package/dist/adapters/mcp/agentcoreRuntime/transport.js.map +1 -0
- package/dist/adapters/memory/agentcore.js +435 -20
- package/dist/adapters/memory/agentcore.js.map +1 -1
- package/dist/adapters/memory/memoryBank.js +16 -3
- package/dist/adapters/memory/memoryBank.js.map +1 -1
- package/dist/adapters/memory/pgVector.js +10 -4
- package/dist/adapters/memory/pgVector.js.map +1 -1
- package/dist/adapters/memory/redis.js +11 -3
- package/dist/adapters/memory/redis.js.map +1 -1
- package/dist/adapters/memory/s3Vectors.js +8 -3
- package/dist/adapters/memory/s3Vectors.js.map +1 -1
- package/dist/adapters/memory/sqliteVector.js +10 -4
- package/dist/adapters/memory/sqliteVector.js.map +1 -1
- package/dist/ag-ui/adapter.js +71 -0
- package/dist/ag-ui/adapter.js.map +1 -0
- package/dist/ag-ui/framing.js +66 -0
- package/dist/ag-ui/framing.js.map +1 -0
- package/dist/ag-ui/frontendTools.js +69 -0
- package/dist/ag-ui/frontendTools.js.map +1 -0
- package/dist/ag-ui/ids.js +54 -0
- package/dist/ag-ui/ids.js.map +1 -0
- package/dist/ag-ui/index.js +27 -0
- package/dist/ag-ui/index.js.map +1 -0
- package/dist/ag-ui/request.js +356 -0
- package/dist/ag-ui/request.js.map +1 -0
- package/dist/ag-ui/serializer.js +899 -0
- package/dist/ag-ui/serializer.js.map +1 -0
- package/dist/ag-ui/types.js +22 -0
- package/dist/ag-ui/types.js.map +1 -0
- package/dist/core/Agent.js +38 -5
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/RunnerBase.js +16 -2
- package/dist/core/RunnerBase.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js +4 -0
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/agent/buildDynamicAgentChart.js +4 -0
- package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/core/agent/callerIdentity.js +2 -1
- package/dist/core/agent/callerIdentity.js.map +1 -1
- package/dist/core/agent/stages/routeTurn.js +3 -3
- package/dist/core/agent/stages/routeTurn.js.map +1 -1
- package/dist/core/agent/stages/seed.js +49 -8
- package/dist/core/agent/stages/seed.js.map +1 -1
- package/dist/core/agent/stages/timeLayer.js +2 -2
- package/dist/core/agent/stages/timeLayer.js.map +1 -1
- package/dist/core/agent/stages/toolCalls.js +26 -5
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/memberRun.js +244 -0
- package/dist/core/memberRun.js.map +1 -0
- package/dist/core/slots/buildToolsSlot.js +1 -1
- package/dist/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/core-flow/Conditional.js +29 -8
- package/dist/core-flow/Conditional.js.map +1 -1
- package/dist/core-flow/Graph.js +38 -13
- package/dist/core-flow/Graph.js.map +1 -1
- package/dist/core-flow/Loop.js +29 -9
- package/dist/core-flow/Loop.js.map +1 -1
- package/dist/core-flow/Parallel.js +35 -14
- package/dist/core-flow/Parallel.js.map +1 -1
- package/dist/core-flow/Sequence.js +29 -8
- package/dist/core-flow/Sequence.js.map +1 -1
- package/dist/core-flow/Workflow.js +34 -10
- package/dist/core-flow/Workflow.js.map +1 -1
- package/dist/doors/ag-ui.js +36 -0
- package/dist/doors/ag-ui.js.map +1 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/errorType.d.ts +12 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/errorType.js +20 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/errorType.js.map +1 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.d.ts +116 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.js +260 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.js.map +1 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/safeAnswer.d.ts +49 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/safeAnswer.js +409 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/safeAnswer.js.map +1 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/session.d.ts +80 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/session.js +175 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/session.js.map +1 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/sessionBusy.d.ts +61 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/sessionBusy.js +112 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/sessionBusy.js.map +1 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/strictJson.d.ts +37 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/strictJson.js +215 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/strictJson.js.map +1 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/transport.d.ts +176 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/transport.js +199 -0
- package/dist/esm/adapters/mcp/agentcoreRuntime/transport.js.map +1 -0
- package/dist/esm/adapters/memory/agentcore.d.ts +152 -7
- package/dist/esm/adapters/memory/agentcore.js +433 -19
- package/dist/esm/adapters/memory/agentcore.js.map +1 -1
- package/dist/esm/adapters/memory/memoryBank.d.ts +3 -2
- package/dist/esm/adapters/memory/memoryBank.js +16 -3
- package/dist/esm/adapters/memory/memoryBank.js.map +1 -1
- package/dist/esm/adapters/memory/pgVector.js +10 -4
- package/dist/esm/adapters/memory/pgVector.js.map +1 -1
- package/dist/esm/adapters/memory/redis.d.ts +8 -3
- package/dist/esm/adapters/memory/redis.js +11 -3
- package/dist/esm/adapters/memory/redis.js.map +1 -1
- package/dist/esm/adapters/memory/s3Vectors.js +8 -3
- package/dist/esm/adapters/memory/s3Vectors.js.map +1 -1
- package/dist/esm/adapters/memory/sqliteVector.js +10 -4
- package/dist/esm/adapters/memory/sqliteVector.js.map +1 -1
- package/dist/esm/ag-ui/adapter.d.ts +68 -0
- package/dist/esm/ag-ui/adapter.js +67 -0
- package/dist/esm/ag-ui/adapter.js.map +1 -0
- package/dist/esm/ag-ui/framing.d.ts +51 -0
- package/dist/esm/ag-ui/framing.js +62 -0
- package/dist/esm/ag-ui/framing.js.map +1 -0
- package/dist/esm/ag-ui/frontendTools.d.ts +37 -0
- package/dist/esm/ag-ui/frontendTools.js +64 -0
- package/dist/esm/ag-ui/frontendTools.js.map +1 -0
- package/dist/esm/ag-ui/ids.d.ts +43 -0
- package/dist/esm/ag-ui/ids.js +49 -0
- package/dist/esm/ag-ui/ids.js.map +1 -0
- package/dist/esm/ag-ui/index.d.ts +17 -0
- package/dist/esm/ag-ui/index.js +17 -0
- package/dist/esm/ag-ui/index.js.map +1 -0
- package/dist/esm/ag-ui/request.d.ts +72 -0
- package/dist/esm/ag-ui/request.js +350 -0
- package/dist/esm/ag-ui/request.js.map +1 -0
- package/dist/esm/ag-ui/serializer.d.ts +173 -0
- package/dist/esm/ag-ui/serializer.js +895 -0
- package/dist/esm/ag-ui/serializer.js.map +1 -0
- package/dist/esm/ag-ui/types.d.ts +305 -0
- package/dist/esm/ag-ui/types.js +19 -0
- package/dist/esm/ag-ui/types.js.map +1 -0
- package/dist/esm/core/Agent.d.ts +2 -0
- package/dist/esm/core/Agent.js +38 -5
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/RunnerBase.js +17 -3
- package/dist/esm/core/RunnerBase.js.map +1 -1
- package/dist/esm/core/agent/buildAgentChart.js +4 -0
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildDynamicAgentChart.js +4 -0
- package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/esm/core/agent/callerIdentity.js +2 -1
- package/dist/esm/core/agent/callerIdentity.js.map +1 -1
- package/dist/esm/core/agent/stages/routeTurn.d.ts +1 -1
- package/dist/esm/core/agent/stages/routeTurn.js +3 -3
- package/dist/esm/core/agent/stages/routeTurn.js.map +1 -1
- package/dist/esm/core/agent/stages/seed.d.ts +11 -1
- package/dist/esm/core/agent/stages/seed.js +49 -8
- package/dist/esm/core/agent/stages/seed.js.map +1 -1
- package/dist/esm/core/agent/stages/timeLayer.js +2 -2
- package/dist/esm/core/agent/stages/timeLayer.js.map +1 -1
- package/dist/esm/core/agent/stages/toolCalls.d.ts +11 -1
- package/dist/esm/core/agent/stages/toolCalls.js +26 -5
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/agent/types.d.ts +16 -6
- package/dist/esm/core/memberRun.d.ts +132 -0
- package/dist/esm/core/memberRun.js +227 -0
- package/dist/esm/core/memberRun.js.map +1 -0
- package/dist/esm/core/slots/buildToolsSlot.d.ts +1 -1
- package/dist/esm/core/slots/buildToolsSlot.js +1 -1
- package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/core-flow/Conditional.d.ts +8 -0
- package/dist/esm/core-flow/Conditional.js +29 -8
- package/dist/esm/core-flow/Conditional.js.map +1 -1
- package/dist/esm/core-flow/Graph.js +38 -13
- package/dist/esm/core-flow/Graph.js.map +1 -1
- package/dist/esm/core-flow/Loop.d.ts +8 -0
- package/dist/esm/core-flow/Loop.js +29 -9
- package/dist/esm/core-flow/Loop.js.map +1 -1
- package/dist/esm/core-flow/Parallel.d.ts +8 -0
- package/dist/esm/core-flow/Parallel.js +35 -14
- package/dist/esm/core-flow/Parallel.js.map +1 -1
- package/dist/esm/core-flow/Sequence.d.ts +8 -0
- package/dist/esm/core-flow/Sequence.js +29 -8
- package/dist/esm/core-flow/Sequence.js.map +1 -1
- package/dist/esm/core-flow/Workflow.js +34 -10
- package/dist/esm/core-flow/Workflow.js.map +1 -1
- package/dist/esm/doors/ag-ui.d.ts +19 -0
- package/dist/esm/doors/ag-ui.js +20 -0
- package/dist/esm/doors/ag-ui.js.map +1 -0
- package/dist/esm/hosting/envelope.js +5 -0
- package/dist/esm/hosting/envelope.js.map +1 -1
- package/dist/esm/hosting/httpHost.js +5 -78
- package/dist/esm/hosting/httpHost.js.map +1 -1
- package/dist/esm/hosting/index.d.ts +4 -1
- package/dist/esm/hosting/index.js +2 -0
- package/dist/esm/hosting/index.js.map +1 -1
- package/dist/esm/hosting/pendingAsk.d.ts +19 -0
- package/dist/esm/hosting/pendingAsk.js +38 -0
- package/dist/esm/hosting/pendingAsk.js.map +1 -0
- package/dist/esm/hosting/protocolAdapter.d.ts +229 -0
- package/dist/esm/hosting/protocolAdapter.js +23 -0
- package/dist/esm/hosting/protocolAdapter.js.map +1 -0
- package/dist/esm/hosting/refusalStatus.d.ts +30 -0
- package/dist/esm/hosting/refusalStatus.js +81 -0
- package/dist/esm/hosting/refusalStatus.js.map +1 -0
- package/dist/esm/hosting/standingAgent.js +1 -31
- package/dist/esm/hosting/standingAgent.js.map +1 -1
- package/dist/esm/hosting/stream.d.ts +39 -0
- package/dist/esm/hosting/stream.js +34 -2
- package/dist/esm/hosting/stream.js.map +1 -1
- package/dist/esm/hosting/streamHandler.d.ts +134 -0
- package/dist/esm/hosting/streamHandler.js +493 -0
- package/dist/esm/hosting/streamHandler.js.map +1 -0
- package/dist/esm/hosting/types.d.ts +15 -0
- package/dist/esm/hosting/types.js.map +1 -1
- package/dist/esm/hosting/verifiedThreads.d.ts +29 -0
- package/dist/esm/hosting/verifiedThreads.js +46 -0
- package/dist/esm/hosting/verifiedThreads.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/humanizeLLMError.d.ts +15 -0
- package/dist/esm/lib/humanizeLLMError.js +22 -7
- package/dist/esm/lib/humanizeLLMError.js.map +1 -1
- package/dist/esm/mcp/throttleRetry.d.ts +51 -0
- package/dist/esm/mcp/throttleRetry.js +37 -4
- package/dist/esm/mcp/throttleRetry.js.map +1 -1
- package/dist/esm/memory/define.js +45 -1
- package/dist/esm/memory/define.js.map +1 -1
- package/dist/esm/memory/define.types.d.ts +24 -0
- package/dist/esm/memory/define.types.js.map +1 -1
- package/dist/esm/memory/stages/formatDefault.js +3 -1
- package/dist/esm/memory/stages/formatDefault.js.map +1 -1
- package/dist/esm/memory/store/InMemoryStore.d.ts +8 -3
- package/dist/esm/memory/store/InMemoryStore.js +12 -3
- package/dist/esm/memory/store/InMemoryStore.js.map +1 -1
- package/dist/esm/memory/store/index.d.ts +1 -0
- package/dist/esm/memory/store/index.js +5 -0
- package/dist/esm/memory/store/index.js.map +1 -1
- package/dist/esm/memory/store/types.d.ts +38 -4
- package/dist/esm/memory/store/writeOptions.d.ts +118 -0
- package/dist/esm/memory/store/writeOptions.js +242 -0
- package/dist/esm/memory/store/writeOptions.js.map +1 -0
- package/dist/esm/memory-providers.d.ts +1 -1
- package/dist/esm/memory-providers.js +4 -1
- package/dist/esm/memory-providers.js.map +1 -1
- package/dist/esm/patterns/MapReduce.js +8 -2
- package/dist/esm/patterns/MapReduce.js.map +1 -1
- package/dist/esm/tool-providers/index.d.ts +5 -0
- package/dist/esm/tool-providers/index.js +6 -0
- package/dist/esm/tool-providers/index.js.map +1 -1
- package/dist/esm/trace-toolpack/selfExplain.d.ts +8 -0
- package/dist/esm/trace-toolpack/selfExplain.js +25 -2
- package/dist/esm/trace-toolpack/selfExplain.js.map +1 -1
- package/dist/hosting/envelope.js +5 -0
- package/dist/hosting/envelope.js.map +1 -1
- package/dist/hosting/httpHost.js +5 -78
- package/dist/hosting/httpHost.js.map +1 -1
- package/dist/hosting/index.js +9 -3
- package/dist/hosting/index.js.map +1 -1
- package/dist/hosting/pendingAsk.js +42 -0
- package/dist/hosting/pendingAsk.js.map +1 -0
- package/dist/hosting/protocolAdapter.js +24 -0
- package/dist/hosting/protocolAdapter.js.map +1 -0
- package/dist/hosting/refusalStatus.js +84 -0
- package/dist/hosting/refusalStatus.js.map +1 -0
- package/dist/hosting/standingAgent.js +2 -32
- package/dist/hosting/standingAgent.js.map +1 -1
- package/dist/hosting/stream.js +35 -3
- package/dist/hosting/stream.js.map +1 -1
- package/dist/hosting/streamHandler.js +497 -0
- package/dist/hosting/streamHandler.js.map +1 -0
- package/dist/hosting/types.js.map +1 -1
- package/dist/hosting/verifiedThreads.js +50 -0
- package/dist/hosting/verifiedThreads.js.map +1 -0
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/humanizeLLMError.js +23 -8
- package/dist/lib/humanizeLLMError.js.map +1 -1
- package/dist/mcp/throttleRetry.js +41 -6
- package/dist/mcp/throttleRetry.js.map +1 -1
- package/dist/memory/define.js +45 -1
- package/dist/memory/define.js.map +1 -1
- package/dist/memory/define.types.js.map +1 -1
- package/dist/memory/stages/formatDefault.js +3 -1
- package/dist/memory/stages/formatDefault.js.map +1 -1
- package/dist/memory/store/InMemoryStore.js +12 -3
- package/dist/memory/store/InMemoryStore.js.map +1 -1
- package/dist/memory/store/index.js +11 -1
- package/dist/memory/store/index.js.map +1 -1
- package/dist/memory/store/writeOptions.js +250 -0
- package/dist/memory/store/writeOptions.js.map +1 -0
- package/dist/memory-providers.js +4 -1
- package/dist/memory-providers.js.map +1 -1
- package/dist/patterns/MapReduce.js +8 -2
- package/dist/patterns/MapReduce.js.map +1 -1
- package/dist/tool-providers/index.js +10 -1
- package/dist/tool-providers/index.js.map +1 -1
- package/dist/trace-toolpack/selfExplain.js +25 -2
- package/dist/trace-toolpack/selfExplain.js.map +1 -1
- package/dist/types/adapters/mcp/agentcoreRuntime/errorType.d.ts +13 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/errorType.d.ts.map +1 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/invoke.d.ts +117 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/invoke.d.ts.map +1 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/safeAnswer.d.ts +50 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/safeAnswer.d.ts.map +1 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/session.d.ts +81 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/session.d.ts.map +1 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/sessionBusy.d.ts +62 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/sessionBusy.d.ts.map +1 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/strictJson.d.ts +38 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/strictJson.d.ts.map +1 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/transport.d.ts +177 -0
- package/dist/types/adapters/mcp/agentcoreRuntime/transport.d.ts.map +1 -0
- package/dist/types/adapters/memory/agentcore.d.ts +152 -7
- package/dist/types/adapters/memory/agentcore.d.ts.map +1 -1
- package/dist/types/adapters/memory/memoryBank.d.ts +3 -2
- package/dist/types/adapters/memory/memoryBank.d.ts.map +1 -1
- package/dist/types/adapters/memory/pgVector.d.ts.map +1 -1
- package/dist/types/adapters/memory/redis.d.ts +8 -3
- package/dist/types/adapters/memory/redis.d.ts.map +1 -1
- package/dist/types/adapters/memory/s3Vectors.d.ts.map +1 -1
- package/dist/types/adapters/memory/sqliteVector.d.ts.map +1 -1
- package/dist/types/ag-ui/adapter.d.ts +69 -0
- package/dist/types/ag-ui/adapter.d.ts.map +1 -0
- package/dist/types/ag-ui/framing.d.ts +52 -0
- package/dist/types/ag-ui/framing.d.ts.map +1 -0
- package/dist/types/ag-ui/frontendTools.d.ts +38 -0
- package/dist/types/ag-ui/frontendTools.d.ts.map +1 -0
- package/dist/types/ag-ui/ids.d.ts +44 -0
- package/dist/types/ag-ui/ids.d.ts.map +1 -0
- package/dist/types/ag-ui/index.d.ts +18 -0
- package/dist/types/ag-ui/index.d.ts.map +1 -0
- package/dist/types/ag-ui/request.d.ts +73 -0
- package/dist/types/ag-ui/request.d.ts.map +1 -0
- package/dist/types/ag-ui/serializer.d.ts +174 -0
- package/dist/types/ag-ui/serializer.d.ts.map +1 -0
- package/dist/types/ag-ui/types.d.ts +306 -0
- package/dist/types/ag-ui/types.d.ts.map +1 -0
- package/dist/types/core/Agent.d.ts +2 -0
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/RunnerBase.d.ts.map +1 -1
- package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/callerIdentity.d.ts.map +1 -1
- package/dist/types/core/agent/stages/routeTurn.d.ts +1 -1
- package/dist/types/core/agent/stages/routeTurn.d.ts.map +1 -1
- package/dist/types/core/agent/stages/seed.d.ts +11 -1
- package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts +11 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +16 -6
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/memberRun.d.ts +133 -0
- package/dist/types/core/memberRun.d.ts.map +1 -0
- package/dist/types/core/slots/buildToolsSlot.d.ts +1 -1
- package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
- package/dist/types/core-flow/Conditional.d.ts +8 -0
- package/dist/types/core-flow/Conditional.d.ts.map +1 -1
- package/dist/types/core-flow/Graph.d.ts.map +1 -1
- package/dist/types/core-flow/Loop.d.ts +8 -0
- package/dist/types/core-flow/Loop.d.ts.map +1 -1
- package/dist/types/core-flow/Parallel.d.ts +8 -0
- package/dist/types/core-flow/Parallel.d.ts.map +1 -1
- package/dist/types/core-flow/Sequence.d.ts +8 -0
- package/dist/types/core-flow/Sequence.d.ts.map +1 -1
- package/dist/types/core-flow/Workflow.d.ts.map +1 -1
- package/dist/types/doors/ag-ui.d.ts +20 -0
- package/dist/types/doors/ag-ui.d.ts.map +1 -0
- package/dist/types/hosting/httpHost.d.ts.map +1 -1
- package/dist/types/hosting/index.d.ts +4 -1
- package/dist/types/hosting/index.d.ts.map +1 -1
- package/dist/types/hosting/pendingAsk.d.ts +20 -0
- package/dist/types/hosting/pendingAsk.d.ts.map +1 -0
- package/dist/types/hosting/protocolAdapter.d.ts +230 -0
- package/dist/types/hosting/protocolAdapter.d.ts.map +1 -0
- package/dist/types/hosting/refusalStatus.d.ts +31 -0
- package/dist/types/hosting/refusalStatus.d.ts.map +1 -0
- package/dist/types/hosting/standingAgent.d.ts.map +1 -1
- package/dist/types/hosting/stream.d.ts +39 -0
- package/dist/types/hosting/stream.d.ts.map +1 -1
- package/dist/types/hosting/streamHandler.d.ts +135 -0
- package/dist/types/hosting/streamHandler.d.ts.map +1 -0
- package/dist/types/hosting/types.d.ts +15 -0
- package/dist/types/hosting/types.d.ts.map +1 -1
- package/dist/types/hosting/verifiedThreads.d.ts +30 -0
- package/dist/types/hosting/verifiedThreads.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/humanizeLLMError.d.ts +15 -0
- package/dist/types/lib/humanizeLLMError.d.ts.map +1 -1
- package/dist/types/mcp/throttleRetry.d.ts +51 -0
- package/dist/types/mcp/throttleRetry.d.ts.map +1 -1
- package/dist/types/memory/define.d.ts.map +1 -1
- package/dist/types/memory/define.types.d.ts +24 -0
- package/dist/types/memory/define.types.d.ts.map +1 -1
- package/dist/types/memory/stages/formatDefault.d.ts.map +1 -1
- package/dist/types/memory/store/InMemoryStore.d.ts +8 -3
- package/dist/types/memory/store/InMemoryStore.d.ts.map +1 -1
- package/dist/types/memory/store/index.d.ts +1 -0
- package/dist/types/memory/store/index.d.ts.map +1 -1
- package/dist/types/memory/store/types.d.ts +38 -4
- package/dist/types/memory/store/types.d.ts.map +1 -1
- package/dist/types/memory/store/writeOptions.d.ts +119 -0
- package/dist/types/memory/store/writeOptions.d.ts.map +1 -0
- package/dist/types/memory-providers.d.ts +1 -1
- package/dist/types/memory-providers.d.ts.map +1 -1
- package/dist/types/patterns/MapReduce.d.ts.map +1 -1
- package/dist/types/tool-providers/index.d.ts +5 -0
- package/dist/types/tool-providers/index.d.ts.map +1 -1
- package/dist/types/trace-toolpack/selfExplain.d.ts +8 -0
- package/dist/types/trace-toolpack/selfExplain.d.ts.map +1 -1
- package/package.json +25 -1
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* streamHandler — one run per request, streamed in a wire protocol, as a
|
|
4
|
+
* framework-agnostic Fetch-API handler: `(request: Request) => Promise<Response>`.
|
|
5
|
+
*
|
|
6
|
+
* Pattern: Template method over a {@link ProtocolAdapter} (the protocol is a
|
|
7
|
+
* strategy; AG-UI is one). Everything HTTP happens here once — the
|
|
8
|
+
* door guard, the body ceiling, the JSON parse, binding the
|
|
9
|
+
* conversation to its caller, keeping it between requests, the client
|
|
10
|
+
* hanging up, a failure that is never the process's — so an adapter
|
|
11
|
+
* only reads its request, plans the turn and translates.
|
|
12
|
+
* Role: the host for a protocol whose response is a STREAM OF EVENTS rather
|
|
13
|
+
* than text pieces (`httpHost`'s port). It mounts in anything that
|
|
14
|
+
* speaks `Request`/`Response` — a framework's route handler, an edge
|
|
15
|
+
* or serverless runtime, or Node through any fetch adapter.
|
|
16
|
+
* Deliberately names no vendor, like every file in this folder.
|
|
17
|
+
*
|
|
18
|
+
* THE REQUEST IS UNTRUSTED. A body is what anybody could send. It decides
|
|
19
|
+
* nothing the server owns:
|
|
20
|
+
* - WHO is calling and WHICH conversation is theirs come from the app's
|
|
21
|
+
* {@link ThreadBinder} (`threads`), from the request's headers — the id a
|
|
22
|
+
* request names is format-checked caller data and never a key;
|
|
23
|
+
* - WHAT WAS SAID BEFORE comes from the server: the session store
|
|
24
|
+
* (`sessions`), or the agent's own memory keyed by the bound session;
|
|
25
|
+
* - WHAT A PAUSED RUN WAITS ON is the stored run's own record — an answer is
|
|
26
|
+
* matched to it by the adapter, never taken on the request's word;
|
|
27
|
+
* - identity, credentials and redaction settings never come from a request.
|
|
28
|
+
*
|
|
29
|
+
* NOTHING IS SHARED BETWEEN REQUESTS. Every request builds a FRESH runner
|
|
30
|
+
* (`agent`, a factory): footprintjs runs one executor per run and a runner
|
|
31
|
+
* holds one run's context, so a request can neither see another's events nor
|
|
32
|
+
* leave anything behind for one — no shared listener, recorder, buffer or tool
|
|
33
|
+
* session. A factory that hands back a runner it handed back before is refused.
|
|
34
|
+
* The handler's own state is KEYS, never content: the bound conversations
|
|
35
|
+
* with a turn in flight and who holds each (a second turn on one conversation
|
|
36
|
+
* is refused rather than racing the first for the stored state), and the
|
|
37
|
+
* runners already used (by identity, held weakly).
|
|
38
|
+
*
|
|
39
|
+
* ONE TURN PER THREAD IS A PER-PROCESS GUARD. Two instances of the handler
|
|
40
|
+
* (several serverless instances, several workers) do not see each other's
|
|
41
|
+
* turns: route a thread to one instance (sticky sessions), or a double-sent
|
|
42
|
+
* answer can resume one paused run twice and a later persist can overwrite an
|
|
43
|
+
* earlier one. The session store port has no compare-and-set yet.
|
|
44
|
+
*
|
|
45
|
+
* The laws it keeps from `httpHost`:
|
|
46
|
+
* - The door guard runs first, on the headers alone (`doorGuard.ts`): a Host
|
|
47
|
+
* not configured (421), a browser origin not allowed (403), a POST that
|
|
48
|
+
* does not say it is JSON (415). A refused body is never read.
|
|
49
|
+
* - A body over `maxBodyBytes` is refused at the byte that crosses it (413).
|
|
50
|
+
* - A refusal answers with its own status and code (`refusalStatus.ts`);
|
|
51
|
+
* anything else is a 500 that names nothing the caller sent and no thrown
|
|
52
|
+
* message.
|
|
53
|
+
* - Nothing in a request's lifecycle is the process's failure: every step is
|
|
54
|
+
* caught, and a stream always ends.
|
|
55
|
+
*/
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.streamHandler = exports.DEFAULT_STREAM_HEARTBEAT_MS = exports.DEFAULT_STREAM_MAX_BODY_BYTES = void 0;
|
|
58
|
+
const eventMeta_js_1 = require("../bridge/eventMeta.js");
|
|
59
|
+
const pause_js_1 = require("../core/pause.js");
|
|
60
|
+
const wireJson_js_1 = require("../lib/wireJson.js");
|
|
61
|
+
const doorGuard_js_1 = require("./doorGuard.js");
|
|
62
|
+
const envelope_js_1 = require("./envelope.js");
|
|
63
|
+
const errors_js_1 = require("./errors.js");
|
|
64
|
+
const pendingAsk_js_1 = require("./pendingAsk.js");
|
|
65
|
+
const refusalStatus_js_1 = require("./refusalStatus.js");
|
|
66
|
+
/** The default body ceiling — 1 MiB, the same as `nodeHost`. */
|
|
67
|
+
exports.DEFAULT_STREAM_MAX_BODY_BYTES = 1_048_576;
|
|
68
|
+
/** The default keep-alive interval: an SSE comment every 15 s of silence. */
|
|
69
|
+
exports.DEFAULT_STREAM_HEARTBEAT_MS = 15_000;
|
|
70
|
+
/**
|
|
71
|
+
* Serve runs in `adapter`'s protocol: POST a protocol request, read a stream
|
|
72
|
+
* of the protocol's events.
|
|
73
|
+
*
|
|
74
|
+
* @throws TypeError at construction for options that cannot be served, and
|
|
75
|
+
* when the adapter's framing cannot be built (an optional peer missing) —
|
|
76
|
+
* refused at boot, never mid-request.
|
|
77
|
+
*
|
|
78
|
+
* @example A route handler that speaks `Request`/`Response`
|
|
79
|
+
* ```ts
|
|
80
|
+
* import { memorySessions, streamHandler } from 'agentfootprint/hosting';
|
|
81
|
+
* import { agUi } from 'agentfootprint/ag-ui';
|
|
82
|
+
*
|
|
83
|
+
* export const POST = streamHandler({
|
|
84
|
+
* agent: ({ tools }) => buildAgent(tools), // a fresh agent per request
|
|
85
|
+
* adapter: agUi(),
|
|
86
|
+
* threads: { bind: ({ conversation, headers }) => bindToUser(conversation, headers) },
|
|
87
|
+
* sessions: memorySessions(),
|
|
88
|
+
* });
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
function streamHandler(options) {
|
|
92
|
+
const { adapter, threads, sessions } = options;
|
|
93
|
+
const name = options.name ?? `${adapter.name} stream`;
|
|
94
|
+
if (typeof options.agent !== 'function') {
|
|
95
|
+
throw new TypeError(`[hosting] '${name}': agent must be a function that builds a FRESH runner for every ` +
|
|
96
|
+
`request — a runner holds one run's context, and one shared between requests would ` +
|
|
97
|
+
`hand one caller's run to another.`);
|
|
98
|
+
}
|
|
99
|
+
if (sessions !== undefined && threads === undefined) {
|
|
100
|
+
throw new TypeError(`[hosting] '${name}': sessions needs threads. A conversation is kept under the key the ` +
|
|
101
|
+
`app binds to its caller (threads.bind), never under the id a request names.`);
|
|
102
|
+
}
|
|
103
|
+
const limit = positive(options.maxBodyBytes, exports.DEFAULT_STREAM_MAX_BODY_BYTES, 'maxBodyBytes', name);
|
|
104
|
+
const heartbeatMs = options.heartbeatMs ?? exports.DEFAULT_STREAM_HEARTBEAT_MS;
|
|
105
|
+
if (!Number.isFinite(heartbeatMs) || heartbeatMs < 0) {
|
|
106
|
+
throw new TypeError(`[hosting] '${name}': heartbeatMs must be 0 (off) or a positive number.`);
|
|
107
|
+
}
|
|
108
|
+
const guard = (0, doorGuard_js_1.doorGuard)({ ...options, name });
|
|
109
|
+
const framing = adapter.framing();
|
|
110
|
+
const bytes = new TextEncoder();
|
|
111
|
+
/**
|
|
112
|
+
* Bound conversations with a turn in flight — the key, and who holds it (so
|
|
113
|
+
* anybody else hears "not found", never "busy").
|
|
114
|
+
*/
|
|
115
|
+
const inFlight = new Map();
|
|
116
|
+
/** Runners already used, by identity — so a factory that shares one is caught. */
|
|
117
|
+
const used = new WeakSet();
|
|
118
|
+
/** One answer for "none", "another's" and "nobody's" — a caller learns no ids. */
|
|
119
|
+
const notFound = () => new errors_js_1.WireRequestRefusal('ERR_SESSION_NOT_FOUND', `'${name}': that conversation is not one you can open.`, 404);
|
|
120
|
+
/** Bind the conversation the request names to its caller — the app's port decides. */
|
|
121
|
+
async function bind(request, headers) {
|
|
122
|
+
if (threads === undefined)
|
|
123
|
+
return undefined;
|
|
124
|
+
const thread = await threads.bind({ conversation: adapter.conversation(request), headers });
|
|
125
|
+
if (thread === null || typeof thread !== 'object' || typeof thread.sessionId !== 'string') {
|
|
126
|
+
throw new TypeError('threads.bind returned no session');
|
|
127
|
+
}
|
|
128
|
+
const bad = (0, doorGuard_js_1.checkSessionId)(thread.sessionId, name);
|
|
129
|
+
if (bad !== undefined)
|
|
130
|
+
throw bad;
|
|
131
|
+
return thread;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The stored conversation, when it is the caller's — refusing one that is not.
|
|
135
|
+
* Asked BEFORE anything about the conversation's activity, so a caller it is
|
|
136
|
+
* not learns "not found" and never "busy" — and never holds its turn.
|
|
137
|
+
*/
|
|
138
|
+
async function ownersOnly(thread) {
|
|
139
|
+
if (sessions === undefined || thread === undefined)
|
|
140
|
+
return undefined;
|
|
141
|
+
await sessions.onWake?.(thread.sessionId, 'invoke');
|
|
142
|
+
const stored = await sessions.hydrate(thread.sessionId);
|
|
143
|
+
// Whose conversation this is, before a line of it is read. One answer for
|
|
144
|
+
// "none", "another's" and "nobody's", so a caller learns no ids.
|
|
145
|
+
if (stored !== undefined && (0, envelope_js_1.envelopeOwner)(stored) !== thread.identity?.principal)
|
|
146
|
+
throw notFound();
|
|
147
|
+
return stored;
|
|
148
|
+
}
|
|
149
|
+
/** Read what the server holds for the bound conversation — under the turn's claim. */
|
|
150
|
+
async function hold(thread) {
|
|
151
|
+
const stored = await ownersOnly(thread);
|
|
152
|
+
if (stored === undefined)
|
|
153
|
+
return { view: { continues: false } };
|
|
154
|
+
if (stored.format === 'flowchart-v1') {
|
|
155
|
+
const paused = (0, envelope_js_1.readPausedRun)(stored);
|
|
156
|
+
const record = paused.wire?.protocol === adapter.name ? paused.wire.record : undefined;
|
|
157
|
+
return {
|
|
158
|
+
paused,
|
|
159
|
+
view: {
|
|
160
|
+
continues: false,
|
|
161
|
+
awaiting: {
|
|
162
|
+
pending: paused.pending,
|
|
163
|
+
...(record !== undefined && { suspension: record }),
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const prior = (0, envelope_js_1.readEnvelope)(stored);
|
|
169
|
+
return { prior, view: { continues: true } };
|
|
170
|
+
}
|
|
171
|
+
/** A fresh runner for this request — never one the factory handed out before. */
|
|
172
|
+
function build(context) {
|
|
173
|
+
const runner = options.agent(context);
|
|
174
|
+
if (runner === null ||
|
|
175
|
+
typeof runner !== 'object' ||
|
|
176
|
+
typeof runner.on !== 'function' ||
|
|
177
|
+
typeof runner.run !== 'function') {
|
|
178
|
+
throw new TypeError('agent returned no runner');
|
|
179
|
+
}
|
|
180
|
+
if (used.has(runner)) {
|
|
181
|
+
throw new errors_js_1.WireRequestRefusal('ERR_RUNNER_REUSED', `'${name}': the agent factory returned a runner it returned before. Every ` +
|
|
182
|
+
`request needs a FRESH runner — a shared one hands one caller's run to another.`, 500);
|
|
183
|
+
}
|
|
184
|
+
used.add(runner);
|
|
185
|
+
return runner;
|
|
186
|
+
}
|
|
187
|
+
/** Keep what the run left behind, then say how it ended — kept FIRST, told after. */
|
|
188
|
+
async function keep(turn, out, recordRunId) {
|
|
189
|
+
const { thread, runner, held, translation } = turn;
|
|
190
|
+
const store = thread === undefined ? undefined : sessions;
|
|
191
|
+
if ((0, pause_js_1.isPaused)(out)) {
|
|
192
|
+
const awaiting = adapter.awaitsCaller?.(out.pauseData) === true ? 'caller' : 'person';
|
|
193
|
+
if (store !== undefined && thread !== undefined) {
|
|
194
|
+
const record = translation.suspension?.(awaiting);
|
|
195
|
+
const conversation = runner.checkpoint?.() ?? noConversation(turn, recordRunId, thread.identity);
|
|
196
|
+
await store.persist(thread.sessionId, (0, envelope_js_1.toPausedEnvelope)({
|
|
197
|
+
checkpoint: out.checkpoint,
|
|
198
|
+
conversation,
|
|
199
|
+
pending: (0, pendingAsk_js_1.describePause)(out, thread.sessionId),
|
|
200
|
+
...(record !== undefined && { wire: { protocol: adapter.name, record } }),
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
return { kind: 'paused', awaiting };
|
|
204
|
+
}
|
|
205
|
+
if (store !== undefined && thread !== undefined) {
|
|
206
|
+
const conversation = runner.checkpoint?.();
|
|
207
|
+
if (conversation !== undefined)
|
|
208
|
+
await store.persist(thread.sessionId, (0, envelope_js_1.toEnvelope)(conversation));
|
|
209
|
+
// A runner that keeps no conversation still clears the pause it continued.
|
|
210
|
+
else if (held.paused !== undefined)
|
|
211
|
+
await store.persist(thread.sessionId, (0, envelope_js_1.toEnvelope)(noConversation(turn, recordRunId, thread.identity)));
|
|
212
|
+
}
|
|
213
|
+
return { kind: 'finished' };
|
|
214
|
+
}
|
|
215
|
+
/** Run the turn; every event the run serves goes through the translation; settle once. */
|
|
216
|
+
async function serve(turn, write, signal, release) {
|
|
217
|
+
const { plan, held, thread, runner, translation } = turn;
|
|
218
|
+
// A translation that throws is a fault in the adapter, never the run's: the
|
|
219
|
+
// run goes on, and the stream still ends.
|
|
220
|
+
const safely = (produce) => {
|
|
221
|
+
try {
|
|
222
|
+
write(produce());
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// nothing more this request can be told
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
let runId;
|
|
229
|
+
let off;
|
|
230
|
+
let settlement;
|
|
231
|
+
try {
|
|
232
|
+
// The runner is this request's alone; the run filter still holds a fact a
|
|
233
|
+
// shared resource stamped for another run or session out of the stream.
|
|
234
|
+
off = runner.on('*', (event) => {
|
|
235
|
+
const named = event.meta?.runId;
|
|
236
|
+
if (runId === undefined && typeof named === 'string' && named !== eventMeta_js_1.CONSUMER_SCOPE_RUN_ID)
|
|
237
|
+
runId = named;
|
|
238
|
+
if (!(0, eventMeta_js_1.eventBelongsToRun)(event.meta, { runId: runId ?? '', sessionId: thread?.sessionId }))
|
|
239
|
+
return;
|
|
240
|
+
safely(() => translation.event(event));
|
|
241
|
+
});
|
|
242
|
+
if (signal.aborted)
|
|
243
|
+
throw new Error('the caller left before the run started');
|
|
244
|
+
const runOptions = {
|
|
245
|
+
signal,
|
|
246
|
+
...(thread !== undefined && { sessionId: thread.sessionId }),
|
|
247
|
+
...(thread?.identity !== undefined && { identity: thread.identity }),
|
|
248
|
+
};
|
|
249
|
+
const out = plan.turn.kind === 'answer'
|
|
250
|
+
? await runner.resume(held.paused.checkpoint, plan.turn.answer, runOptions)
|
|
251
|
+
: await runner.run((typeof runner.checkpoint === 'function' && held.prior !== undefined
|
|
252
|
+
? { message: plan.turn.message, continueFrom: held.prior }
|
|
253
|
+
: { message: plan.turn.message }), runOptions);
|
|
254
|
+
settlement = await keep(turn, out, runId);
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
settlement = { kind: signal.aborted ? 'cancelled' : 'failed' };
|
|
258
|
+
}
|
|
259
|
+
finally {
|
|
260
|
+
// The conversation is free BEFORE the caller hears the end — and before
|
|
261
|
+
// anything else that could throw: a client that answers on RUN_FINISHED
|
|
262
|
+
// must not find its own turn still running, ever.
|
|
263
|
+
release();
|
|
264
|
+
try {
|
|
265
|
+
if (typeof off === 'function')
|
|
266
|
+
off();
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// a runner that cannot unsubscribe is thrown away with this request
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
safely(() => translation.settle(settlement));
|
|
273
|
+
// Tool sessions this request's runner opened close with it; a strategy the
|
|
274
|
+
// app shares between runners is drained, never stopped.
|
|
275
|
+
void runner.shutdown?.({ stop: false })?.catch(() => undefined);
|
|
276
|
+
}
|
|
277
|
+
function respond(turn, request, release) {
|
|
278
|
+
const abort = new AbortController();
|
|
279
|
+
const hangUp = () => abort.abort();
|
|
280
|
+
// A caller already gone never starts its run.
|
|
281
|
+
if (request.signal?.aborted === true)
|
|
282
|
+
abort.abort();
|
|
283
|
+
else
|
|
284
|
+
request.signal?.addEventListener('abort', hangUp, { once: true });
|
|
285
|
+
let closed = false;
|
|
286
|
+
let heartbeat;
|
|
287
|
+
const stop = () => {
|
|
288
|
+
closed = true;
|
|
289
|
+
if (heartbeat !== undefined)
|
|
290
|
+
clearInterval(heartbeat);
|
|
291
|
+
request.signal?.removeEventListener('abort', hangUp);
|
|
292
|
+
};
|
|
293
|
+
const body = new ReadableStream({
|
|
294
|
+
start(controller) {
|
|
295
|
+
const send = (text) => {
|
|
296
|
+
if (closed)
|
|
297
|
+
return;
|
|
298
|
+
try {
|
|
299
|
+
controller.enqueue(bytes.encode(text));
|
|
300
|
+
}
|
|
301
|
+
catch {
|
|
302
|
+
stop(); // the stream went away under us
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
const write = (events) => {
|
|
306
|
+
for (const event of events)
|
|
307
|
+
send(framing.frame(event));
|
|
308
|
+
};
|
|
309
|
+
if (heartbeatMs > 0) {
|
|
310
|
+
heartbeat = setInterval(() => send(': ping\n\n'), heartbeatMs);
|
|
311
|
+
heartbeat.unref?.();
|
|
312
|
+
}
|
|
313
|
+
const end = () => {
|
|
314
|
+
if (closed)
|
|
315
|
+
return;
|
|
316
|
+
stop();
|
|
317
|
+
try {
|
|
318
|
+
controller.close();
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
// already closed by the reader
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
void serve(turn, write, abort.signal, release).then(end, end);
|
|
325
|
+
},
|
|
326
|
+
cancel() {
|
|
327
|
+
stop();
|
|
328
|
+
abort.abort();
|
|
329
|
+
},
|
|
330
|
+
});
|
|
331
|
+
return new Response(body, {
|
|
332
|
+
status: 200,
|
|
333
|
+
headers: {
|
|
334
|
+
'content-type': framing.contentType,
|
|
335
|
+
'cache-control': 'no-cache, no-transform',
|
|
336
|
+
'x-accel-buffering': 'no',
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
return async (request) => {
|
|
341
|
+
/** The conversation this request holds while it is in flight — released exactly once. */
|
|
342
|
+
let claimed;
|
|
343
|
+
const release = () => {
|
|
344
|
+
if (claimed !== undefined)
|
|
345
|
+
inFlight.delete(claimed);
|
|
346
|
+
claimed = undefined;
|
|
347
|
+
};
|
|
348
|
+
try {
|
|
349
|
+
if (request.method !== 'POST') {
|
|
350
|
+
return refusal(405, `[hosting] '${name}' answers POST only.`, 'ERR_METHOD_NOT_ALLOWED', {
|
|
351
|
+
allow: 'POST',
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
const headers = headersOf(request);
|
|
355
|
+
const refused = guard.check({ method: request.method, headers });
|
|
356
|
+
if (refused !== undefined)
|
|
357
|
+
return refusal(refused.status, refused.message, refused.code);
|
|
358
|
+
const text = await readBody(request, limit, name);
|
|
359
|
+
let body;
|
|
360
|
+
try {
|
|
361
|
+
body = text.trim() === '' ? {} : JSON.parse(text);
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
return refusal(400, `[hosting] '${name}': the request body is not JSON.`, 'ERR_INVALID_JSON');
|
|
365
|
+
}
|
|
366
|
+
const read = adapter.readRequest({ body, headers });
|
|
367
|
+
const thread = await bind(read, headers);
|
|
368
|
+
if (thread !== undefined) {
|
|
369
|
+
// Ownership first: a caller the conversation is not answered "not
|
|
370
|
+
// found" whether or not a turn is running, and never claims it.
|
|
371
|
+
await ownersOnly(thread);
|
|
372
|
+
const principal = thread.identity?.principal;
|
|
373
|
+
if (inFlight.has(thread.sessionId)) {
|
|
374
|
+
// Even before a first turn has stored anything: the claimant is the owner.
|
|
375
|
+
if (inFlight.get(thread.sessionId) !== principal)
|
|
376
|
+
throw notFound();
|
|
377
|
+
return refusal(409, `[hosting] '${name}': a turn of that conversation is already in flight. Send the ` +
|
|
378
|
+
`next turn when it ends.`, 'ERR_CONCURRENT_RUN');
|
|
379
|
+
}
|
|
380
|
+
inFlight.set(thread.sessionId, principal);
|
|
381
|
+
claimed = thread.sessionId;
|
|
382
|
+
}
|
|
383
|
+
const held = await hold(thread);
|
|
384
|
+
const plan = adapter.plan(read, held.view, {
|
|
385
|
+
headers,
|
|
386
|
+
...(thread !== undefined && { thread }),
|
|
387
|
+
keepsConversation: threads !== undefined,
|
|
388
|
+
keepsPauses: threads !== undefined && sessions !== undefined,
|
|
389
|
+
});
|
|
390
|
+
const runner = build({
|
|
391
|
+
tools: plan.tools ?? [],
|
|
392
|
+
accepted: plan.accepted ?? {},
|
|
393
|
+
...(thread !== undefined && { thread }),
|
|
394
|
+
});
|
|
395
|
+
const translation = adapter.open(read, plan.turn.kind === 'answer' ? held.view.awaiting?.suspension : undefined);
|
|
396
|
+
// The stream owns the claim from here: released when the run ends.
|
|
397
|
+
const owned = claimed;
|
|
398
|
+
claimed = undefined;
|
|
399
|
+
return respond({ plan, held, ...(thread !== undefined && { thread }), runner, translation }, request, () => {
|
|
400
|
+
if (owned !== undefined)
|
|
401
|
+
inFlight.delete(owned);
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
catch (err) {
|
|
405
|
+
return failure(err, name);
|
|
406
|
+
}
|
|
407
|
+
finally {
|
|
408
|
+
release();
|
|
409
|
+
}
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
exports.streamHandler = streamHandler;
|
|
413
|
+
/**
|
|
414
|
+
* A conversation record for a runner that keeps none (an `LLMCall`, a
|
|
415
|
+
* composition): no history, only what a stored session needs — the run, the
|
|
416
|
+
* message, and whose it is.
|
|
417
|
+
*/
|
|
418
|
+
function noConversation(turn, recordRunId, identity) {
|
|
419
|
+
const message = turn.plan.turn.kind === 'message'
|
|
420
|
+
? turn.plan.turn.message
|
|
421
|
+
: turn.held.paused?.conversation.originalInput.message ?? '';
|
|
422
|
+
return {
|
|
423
|
+
version: 1,
|
|
424
|
+
runId: recordRunId ?? 'unknown',
|
|
425
|
+
history: [],
|
|
426
|
+
lastCompletedIteration: 0,
|
|
427
|
+
originalInput: { message },
|
|
428
|
+
checkpointedAt: Date.now(),
|
|
429
|
+
...(identity !== undefined && { identity }),
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
/** The refusal an error means — its own status and code, or a 500 that quotes nothing. */
|
|
433
|
+
function failure(err, name) {
|
|
434
|
+
if (err instanceof errors_js_1.RequestTooLargeError)
|
|
435
|
+
return refusal(413, err.message, err.code);
|
|
436
|
+
if (err instanceof errors_js_1.WireRequestRefusal)
|
|
437
|
+
return refusal(err.status, err.message, err.code);
|
|
438
|
+
const code = err?.code;
|
|
439
|
+
if (err instanceof Error && typeof code === 'string' && refusalStatus_js_1.REFUSAL_STATUS[code] !== undefined) {
|
|
440
|
+
return refusal(refusalStatus_js_1.REFUSAL_STATUS[code], err.message, code);
|
|
441
|
+
}
|
|
442
|
+
// Never the thrown message: it is the author's note to their own logs.
|
|
443
|
+
return refusal(500, `[hosting] '${name}' could not serve the request.`, 'ERR_INTERNAL');
|
|
444
|
+
}
|
|
445
|
+
/** A JSON refusal: `{ error, code }` under the refusal's own status. */
|
|
446
|
+
function refusal(status, message, code, headers = {}) {
|
|
447
|
+
return new Response((0, wireJson_js_1.toWireJson)({ error: message, code }), {
|
|
448
|
+
status,
|
|
449
|
+
headers: { 'content-type': 'application/json', ...headers },
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
/** The request's headers, names lower-cased (the door guard's and an adapter's view). */
|
|
453
|
+
function headersOf(request) {
|
|
454
|
+
const out = {};
|
|
455
|
+
request.headers.forEach((value, key) => {
|
|
456
|
+
out[key.toLowerCase()] = value;
|
|
457
|
+
});
|
|
458
|
+
return out;
|
|
459
|
+
}
|
|
460
|
+
/** The body as text, refused at the byte that crosses `limit`. */
|
|
461
|
+
async function readBody(request, limit, name) {
|
|
462
|
+
const declared = Number(request.headers.get('content-length'));
|
|
463
|
+
if (Number.isFinite(declared) && declared > limit)
|
|
464
|
+
throw new errors_js_1.RequestTooLargeError(limit, name);
|
|
465
|
+
if (request.body === null)
|
|
466
|
+
return '';
|
|
467
|
+
const reader = request.body.getReader();
|
|
468
|
+
const chunks = [];
|
|
469
|
+
let size = 0;
|
|
470
|
+
for (;;) {
|
|
471
|
+
const { done, value } = await reader.read();
|
|
472
|
+
if (done)
|
|
473
|
+
break;
|
|
474
|
+
size += value.byteLength;
|
|
475
|
+
if (size > limit) {
|
|
476
|
+
await reader.cancel().catch(() => undefined);
|
|
477
|
+
throw new errors_js_1.RequestTooLargeError(limit, name);
|
|
478
|
+
}
|
|
479
|
+
chunks.push(value);
|
|
480
|
+
}
|
|
481
|
+
const all = new Uint8Array(size);
|
|
482
|
+
let at = 0;
|
|
483
|
+
for (const chunk of chunks) {
|
|
484
|
+
all.set(chunk, at);
|
|
485
|
+
at += chunk.byteLength;
|
|
486
|
+
}
|
|
487
|
+
return new TextDecoder().decode(all);
|
|
488
|
+
}
|
|
489
|
+
function positive(value, fallback, field, name) {
|
|
490
|
+
if (value === undefined)
|
|
491
|
+
return fallback;
|
|
492
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
493
|
+
throw new TypeError(`[hosting] '${name}': ${field} must be a positive whole number of bytes.`);
|
|
494
|
+
}
|
|
495
|
+
return value;
|
|
496
|
+
}
|
|
497
|
+
//# sourceMappingURL=streamHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamHandler.js","sourceRoot":"","sources":["../../src/hosting/streamHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hosting/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hosting/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAoyCH;;;;;;;GAOG;AACU,QAAA,mBAAmB,GAAG,IAAI,CAAC;AA2QxC;;;;;GAKG;AACU,QAAA,gCAAgC,GAAG,CAAC,CAAC;AAElD;iFACiF;AACpE,QAAA,2BAA2B,GAAG,GAAG,CAAC;AAE/C;;;;;;;;GAQG;AACU,QAAA,yBAAyB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* verifiedThreads — the {@link ThreadBinder} that binds a thread to a VERIFIED
|
|
4
|
+
* caller, so the secure binding is the one-line one.
|
|
5
|
+
*
|
|
6
|
+
* A request names a thread; naming one proves nothing. This binder checks the
|
|
7
|
+
* caller's credential with the door's own identity verification
|
|
8
|
+
* (`verifyRequestIdentity` — the bearer token, through your verifier), never a
|
|
9
|
+
* header read as a name, and keys the conversation by WHO
|
|
10
|
+
* plus WHICH: the same thread id from two people is two conversations. The
|
|
11
|
+
* run's `identity` names the verified person, so a stored conversation records
|
|
12
|
+
* its owner and a later request from anyone else is refused as not found.
|
|
13
|
+
*
|
|
14
|
+
* A caller with no credential is REFUSED (401), even at a door that allows
|
|
15
|
+
* anonymous requests elsewhere: a thread with no owner would be anybody's who
|
|
16
|
+
* guessed its id.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.verifiedThreads = void 0;
|
|
20
|
+
const errors_js_1 = require("./errors.js");
|
|
21
|
+
const identityVerification_js_1 = require("./identityVerification.js");
|
|
22
|
+
/**
|
|
23
|
+
* Bind every thread to the caller `identity` verifies.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* import { jwksIdentity } from 'agentfootprint/security';
|
|
28
|
+
* const threads = verifiedThreads(jwksIdentity({ jwksUrl, issuer, audience }));
|
|
29
|
+
* streamHandler({ agent, adapter: agUi(), threads, sessions: memorySessions() });
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
function verifiedThreads(identity) {
|
|
33
|
+
const binder = {
|
|
34
|
+
async bind({ conversation, headers }) {
|
|
35
|
+
const who = await (0, identityVerification_js_1.verifyRequestIdentity)(identity, headers, undefined);
|
|
36
|
+
if (who === undefined)
|
|
37
|
+
throw new errors_js_1.IdentityNotVerifiedError('no-token', false);
|
|
38
|
+
return {
|
|
39
|
+
// Injective, and visible ASCII whatever the name (`josé`, `John Smith`):
|
|
40
|
+
// both halves are percent-encoded, the separator included, so no
|
|
41
|
+
// (who, which) pair spells another's key.
|
|
42
|
+
sessionId: `${encodeURIComponent(who.userId)}/${encodeURIComponent(conversation)}`,
|
|
43
|
+
identity: { principal: who.userId, conversationId: conversation },
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
return Object.freeze(binder);
|
|
48
|
+
}
|
|
49
|
+
exports.verifiedThreads = verifiedThreads;
|
|
50
|
+
//# sourceMappingURL=verifiedThreads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifiedThreads.js","sourceRoot":"","sources":["../../src/hosting/verifiedThreads.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,2CAAuD;AACvD,uEAAoG;AAGpG;;;;;;;;;GASG;AACH,SAAgB,eAAe,CAAC,QAAqC;IACnE,MAAM,MAAM,GAAiB;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE;YAClC,MAAM,GAAG,GAAG,MAAM,IAAA,+CAAqB,EAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACtE,IAAI,GAAG,KAAK,SAAS;gBAAE,MAAM,IAAI,oCAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC7E,OAAO;gBACL,yEAAyE;gBACzE,iEAAiE;gBACjE,0CAA0C;gBAC1C,SAAS,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE;gBAClF,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE;aAClE,CAAC;QACJ,CAAC;KACF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAfD,0CAeC"}
|
package/dist/index.js
CHANGED
|
@@ -27,9 +27,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
27
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
28
|
exports.StaleDecisionError = exports.DecisionRequiredError = exports.pauseDemandsDecision = exports.isAskPause = exports.isCheckInPause = exports.isPaused = exports.isPauseRequest = exports.isInputPause = exports.requestInput = exports.askHuman = exports.pauseHere = exports.makeRunId = exports.RunnerBase = exports.BASELINE_SOURCES = exports.ENGINEERED_SOURCES = exports.isBaselineSource = exports.isEngineeredSource = exports.contextEngineering = exports.COMPOSITION_KEYS = exports.UNGAPPED_FIELDS = exports.SERVED_GAPS = exports.TRANSFORM_HASH_PREFIX = exports.RECEIPT_BOUNDARY = exports.transformHashOf = exports.servedViews = exports.servedAt = exports.receiptHash = exports.receiptAt = exports.toolDigestInput = exports.messageDigestInput = exports.keyedFold = exports.epochLocations = exports.epochAt = exports.milestoneStopsStrategy = exports.milestoneStops = exports.milestoneOf = exports.isReservedSubflowSegment = exports.RESERVED_SUBFLOW_PREFIX = exports.milestoneFromTags = exports.milestoneTagsFor = exports.milestoneTags = exports.milestoneTag = exports.MILESTONE_LABEL_TAG_PREFIX = exports.MILESTONE_TAG_PREFIX = exports.MILESTONE_KINDS = exports.milestoneFor = exports.stageRole = exports.isInjectionKey = exports.injectionKeyForSlot = exports.INJECTION_KEYS = void 0;
|
|
29
29
|
exports.PRIOR_TURN_EVIDENCE_CEILING = exports.assertResultColumns = exports.COLUMN_TYPES = exports.readRowset = exports.COLUMN_TYPE_CEILING = exports.EMPTY_LOOKUP_CEILING = exports.isTruncatedToolResult = exports.LIBRARY_NOTE_OPENING = exports.LIBRARY_AUTHORED_PREFIXES = exports.isSaidByPerson = exports.isLibraryAuthoredFrame = exports.tokenBudget = exports.summarizeOldest = exports.slidingWindow = exports.isDropNotice = exports.isCompactedSummary = exports.foldedSpanFor = exports.foldedMessages = exports.DROP_NOTICE_PREFIX = exports.COMPACTED_FRAME_PREFIX = exports.CompactionUnmeasurableError = exports.AgentBuilder = exports.Agent = exports.buildAgentMessageApiChart = exports.LLMCallBuilder = exports.LLMCall = exports.selectCommentaryKey = exports.renderCommentary = exports.extractCommentaryVars = exports.extractAgentName = exports.defaultCommentaryTemplates = exports.CheckInRecorder = exports.minimalEvidenceAssembler = exports.standardEvidenceAssembler = exports.lexicalDriverScorer = exports.isCheckInDecision = exports.checkInDeclined = exports.checkInApproved = exports.ACT_KEYS = exports.actKeyFor = exports.LOOP_MOMENTS = exports.MessageDeniedError = exports.deny = exports.ask = exports.allow = exports.InvalidAskComponentError = exports.assertAskComponent = exports.readAskComponent = exports.InputRequestError = exports.PauseAnswerRequiredError = void 0;
|
|
30
|
-
exports.
|
|
31
|
-
exports.
|
|
32
|
-
exports.
|
|
30
|
+
exports.explainStatusOnlyNearMiss = exports.warnIfInvalidToolName = exports.assertValidToolName = exports.assertGates = exports.assertComposedOf = exports.assertResultKind = exports.assertResultClass = exports.assertResultCeiling = exports.defineTool = exports.verdictRowsOf = exports.VERDICT_RENDER_NOTE = exports.RunbookAbsenceSignal = exports.runbookAsTool = exports.renderVerdictTable = exports.recordingDispatch = exports.projectWalk = exports.probeDispatch = exports.PANEL_RENDER_NOTE = exports.DEFAULT_WALK_CAP = exports.DEFAULT_RECORDING_MAX_BYTES = exports.DEFAULT_MAX_ROWS = exports.DECLINED_VERDICT = exports.absenceSignalOf = exports.flowchartAsTool = exports.ParentRunRefusedError = exports.MemberIdentityError = exports.RunInFlightError = exports.ResumeRedactionError = exports.ResumeIdentityConflictError = exports.PendingQuestionError = exports.NoConversationError = exports.isContextWindowExceeded = exports.ERR_CONTEXT_WINDOW_EXCEEDED = exports.ContextWindowExceededError = exports.DEFAULT_SESSION_STORAGE_KEY = exports.browserSessionId = exports.RunCheckpointError = exports.ConversationMismatchError = exports.canResume = exports.UnsupportedValuesError = exports.EVIDENCE_CHECK_FRAME_PREFIX = exports.isSchemaCheckMessage = exports.SCHEMA_TOOL_NAME = exports.SCHEMA_CHECK_FRAME_PREFIX = exports.InvalidRunInputError = exports.TOOL_CHOICE_QUESTION = exports.ALWAYS_SERVED_TOOLS = exports.RESERVED_ARGUMENT = exports.applyOutputSchema = exports.OutputSchemaError = void 0;
|
|
31
|
+
exports.gcsArtifacts = exports.fileArtifacts = exports.DEFAULT_IN_MEMORY_ARTIFACT_RETENTION = exports.UnserializableRecordingError = exports.chartWalkPutInput = exports.CHART_WALK_ARTIFACT_KIND = exports.recordingPutInput = exports.RECORDING_MEDIA_TYPE = exports.RECORDING_ARTIFACT_KIND = exports.bindArtifacts = exports.ArtifactIntegrityError = exports.ARTIFACT_REF_PREFIX = exports.formatToolContractCheckup = exports.toolContractCheckup = exports.TOOL_SESSIONS = exports.toolSessionsOf = exports.codeRunsOf = exports.codeShape = exports.codeRunnerTool = exports.TOOL_TEARDOWN_TIMEOUT_MS = exports.ToolTeardownTimeoutError = exports.hashSessionKey = exports.toolSessionKey = exports.semanticsForModel = exports.SEMANTICS_NOTE = exports.SEMANTICS_MARKER = exports.RESULT_CLASSES = exports.readSemantics = exports.isCounterLookingAggregation = exports.explainSemantics = exports.describedResult = exports.COUNTER_AGGREGATION_WORDS = exports.composeNotCovered = exports.IN_PROGRESS_WIRE = exports.IN_PROGRESS_SECTION_LABEL = exports.IN_PROGRESS_CLAUSE = exports.periodVerdict = exports.PERIOD_WIRE = exports.readCoverageResult = exports.readCoverageLedger = exports.readAbsence = exports.COVERAGE_NOTE = exports.COVERAGE_MARKER = exports.COVERAGE_BLOCK_HEADING = exports.coverage = exports.absent = exports.ABSENCE_NOTE = exports.ABSENCE_MARKER = exports.TOOL_RESULT_STATUSES = exports.readToolResultEnvelope = void 0;
|
|
32
|
+
exports.topK = exports.indexDocuments = exports.DEFAULT_CORPUS_IDENTITY = exports.defineRAG = exports.providerFromEnv = exports.Graph = exports.graph = exports.Workflow = exports.workflow = exports.LoopBuilder = exports.Loop = exports.ConditionalBuilder = exports.Conditional = exports.ParallelBuilder = exports.Parallel = exports.SequenceBuilder = exports.Sequence = exports.PRESENT_TOOL_NAME = exports.placedResultKind = exports.isPlacedToolResult = exports.assertToolWants = exports.runArtifactStoreConformance = exports.runArtifactStoreCase = exports.formatArtifactStoreReport = exports.artifactStoreConformance = exports.canStreamArtifacts = exports.canPutArtifactStream = exports.canGetArtifactStream = exports.elicitationOf = exports.answerFromElicitation = exports.defaultTimeAskMessages = exports.englishTimeReader = exports.TIME_AXIS_UNITS = exports.TIME_AXIS_AGGREGATES = exports.timeAxisIssues = exports.readTimeAxis = exports.normaliseInstants = exports.describeTimeAxis = exports.stageDatasetArtifacts = exports.withDatasetArtifacts = exports.UnreadableArtifactStoreError = exports.UnreadableArtifactFileError = exports.UnknownParentRefError = exports.unconfiguredArtifacts = exports.sqliteArtifacts = exports.s3Artifacts = exports.mintArtifactRef = exports.isArtifactRef = exports.InvalidArtifactError = exports.inMemoryArtifacts = void 0;
|
|
33
|
+
exports.AnswerValidationError = void 0;
|
|
33
34
|
// Adapter interfaces (ports)
|
|
34
35
|
__exportStar(require("./provider-contract/types.js"), exports);
|
|
35
36
|
// Injection keys + recorder authoring helpers — needed by anyone writing
|
|
@@ -406,6 +407,11 @@ Object.defineProperty(exports, "PendingQuestionError", { enumerable: true, get:
|
|
|
406
407
|
Object.defineProperty(exports, "ResumeIdentityConflictError", { enumerable: true, get: function () { return conversation_js_1.ResumeIdentityConflictError; } });
|
|
407
408
|
Object.defineProperty(exports, "ResumeRedactionError", { enumerable: true, get: function () { return conversation_js_1.ResumeRedactionError; } });
|
|
408
409
|
Object.defineProperty(exports, "RunInFlightError", { enumerable: true, get: function () { return conversation_js_1.RunInFlightError; } });
|
|
410
|
+
// A composition member runs for the run that mounted it; one no run reached is
|
|
411
|
+
// refused by name (`core/memberRun.ts`).
|
|
412
|
+
var memberRun_js_1 = require("./core/memberRun.js");
|
|
413
|
+
Object.defineProperty(exports, "MemberIdentityError", { enumerable: true, get: function () { return memberRun_js_1.MemberIdentityError; } });
|
|
414
|
+
Object.defineProperty(exports, "ParentRunRefusedError", { enumerable: true, get: function () { return memberRun_js_1.ParentRunRefusedError; } });
|
|
409
415
|
var flowchartAsTool_js_1 = require("./core/flowchartAsTool.js");
|
|
410
416
|
Object.defineProperty(exports, "flowchartAsTool", { enumerable: true, get: function () { return flowchartAsTool_js_1.flowchartAsTool; } });
|
|
411
417
|
// runbookAsTool (9.76.0) — the STANDARD bridge from a footprintjs procedure
|