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,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* session — the session strategies: which AgentCore Runtime session a request
|
|
3
|
+
* lands in.
|
|
4
|
+
*
|
|
5
|
+
* ── The facts they rest on ───────────────────────────────────────────────────
|
|
6
|
+
* From the AgentCore Runtime MCP protocol contract and the `InvokeAgentRuntime`
|
|
7
|
+
* API reference:
|
|
8
|
+
*
|
|
9
|
+
* - The runtime routes by `Mcp-Session-Id` and always returns one. A client
|
|
10
|
+
* "must capture the Mcp-Session-Id returned in the response and include it
|
|
11
|
+
* in all subsequent requests" for microVM affinity; without it "each request
|
|
12
|
+
* may be routed to a new microVM".
|
|
13
|
+
* - `InvokeAgentRuntime` also carries `runtimeSessionId`
|
|
14
|
+
* (`X-Amzn-Bedrock-AgentCore-Runtime-Session-Id`, 33–256 characters), and
|
|
15
|
+
* the AWS SDK models it as an idempotency token — it fills a FRESH random id
|
|
16
|
+
* on every call that leaves it unset.
|
|
17
|
+
*
|
|
18
|
+
* ── 'per-call' (the default) ─────────────────────────────────────────────────
|
|
19
|
+
* Every request in a session of its own: this strategy sends a FRESH runtime
|
|
20
|
+
* session id with every request and no `Mcp-Session-Id`, and the
|
|
21
|
+
* `Mcp-Session-Id` a response carries is not handed to the MCP client, so
|
|
22
|
+
* nothing can carry one call's session into the next. Isolation by
|
|
23
|
+
* construction: a client shared by every user of a process (tools built once at
|
|
24
|
+
* startup — the common shape) never puts two users in one microVM. The price is
|
|
25
|
+
* a cold start per call, and it needs a STATELESS server (`stateless_http=True`,
|
|
26
|
+
* the runtime's recommended default) — a stateful one sees every request as a
|
|
27
|
+
* stranger.
|
|
28
|
+
*
|
|
29
|
+
* ── 'reuse' ──────────────────────────────────────────────────────────────────
|
|
30
|
+
* One session per CONNECTION (per `mcpClient` built on the transport), and the
|
|
31
|
+
* TRANSPORT owns the key. A request with no `Mcp-Session-Id` (a client's
|
|
32
|
+
* `initialize`) opens a connection with a fresh runtime session id; the
|
|
33
|
+
* `Mcp-Session-Id` the server returns for it is stored WITH that connection,
|
|
34
|
+
* and the client is handed an opaque handle of the transport's own in its
|
|
35
|
+
* place. Every later request carrying the handle is sent in that connection's
|
|
36
|
+
* runtime session with the server's own id; a handle the transport does not
|
|
37
|
+
* know is answered 404 "Session not found" here, never sent.
|
|
38
|
+
*
|
|
39
|
+
* Why a handle and not the server's id: the server's ids are unique only as far
|
|
40
|
+
* as the server makes them. One that numbers sessions per process hands every
|
|
41
|
+
* fresh microVM the same first id, and a map keyed by it would send the second
|
|
42
|
+
* client into the first one's microVM. A handle is ours, random, and per
|
|
43
|
+
* connection, so two clients on one transport are two sessions whatever the
|
|
44
|
+
* server returns — while ONE client is still one session for whoever calls
|
|
45
|
+
* through it. Build a client per conversation; never share a 'reuse' client
|
|
46
|
+
* between users.
|
|
47
|
+
*
|
|
48
|
+
* At most {@link MAX_CONNECTIONS} connections are remembered, least recently
|
|
49
|
+
* used forgotten first; a client's `DELETE` (its `close()`) forgets its own.
|
|
50
|
+
*
|
|
51
|
+
* Pattern: Strategy. Role: outer ring, vendor fact. Holds no credential.
|
|
52
|
+
*/
|
|
53
|
+
/** The runtime session header, as `InvokeAgentRuntime` binds `runtimeSessionId` to it. */
|
|
54
|
+
export const AGENTCORE_RUNTIME_SESSION_HEADER = 'X-Amzn-Bedrock-AgentCore-Runtime-Session-Id';
|
|
55
|
+
/** The MCP Streamable HTTP session header. */
|
|
56
|
+
export const MCP_SESSION_HEADER = 'Mcp-Session-Id';
|
|
57
|
+
/** How many connections a 'reuse' transport remembers before it forgets the least recently used. */
|
|
58
|
+
export const MAX_CONNECTIONS = 256;
|
|
59
|
+
/**
|
|
60
|
+
* A fresh runtime session id — `crypto.randomUUID()`, 36 characters, inside the
|
|
61
|
+
* 33–256 the API takes. Never injectable: freshness IS the isolation, and a
|
|
62
|
+
* source that repeated itself would put two requests (or two clients) in one
|
|
63
|
+
* session.
|
|
64
|
+
*/
|
|
65
|
+
const newId = () => globalThis.crypto.randomUUID();
|
|
66
|
+
/**
|
|
67
|
+
* Build the strategy for one transport.
|
|
68
|
+
*
|
|
69
|
+
* @throws when `kind` is not one of the two strategies.
|
|
70
|
+
*/
|
|
71
|
+
export function sessionStrategy(kind) {
|
|
72
|
+
if (kind === 'reuse')
|
|
73
|
+
return reuse();
|
|
74
|
+
if (kind === 'per-call')
|
|
75
|
+
return perCall();
|
|
76
|
+
throw new TypeError(`agentCoreRuntimeMcpTransport: \`session\` must be 'reuse' or 'per-call' — got ` +
|
|
77
|
+
`${JSON.stringify(kind)}. 'per-call' gives every request its own session (safe to share); ` +
|
|
78
|
+
`'reuse' keeps one runtime session per client (build one client per conversation).`);
|
|
79
|
+
}
|
|
80
|
+
function reuse() {
|
|
81
|
+
const connections = new Map();
|
|
82
|
+
const remember = (handle, connection) => {
|
|
83
|
+
connections.delete(handle);
|
|
84
|
+
connections.set(handle, connection); // most recently used last
|
|
85
|
+
while (connections.size > MAX_CONNECTIONS) {
|
|
86
|
+
const oldest = connections.keys().next().value;
|
|
87
|
+
if (oldest === undefined)
|
|
88
|
+
break;
|
|
89
|
+
connections.delete(oldest);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
request(headers, method) {
|
|
94
|
+
const handle = headers.get(MCP_SESSION_HEADER);
|
|
95
|
+
const known = handle === null ? undefined : connections.get(handle);
|
|
96
|
+
// A handle this transport did not issue, or has forgotten: fail closed.
|
|
97
|
+
if (handle !== null && known === undefined)
|
|
98
|
+
return { answer: sessionNotFound() };
|
|
99
|
+
const connection = known ?? { runtimeId: newId() };
|
|
100
|
+
if (handle !== null) {
|
|
101
|
+
if (method === 'DELETE')
|
|
102
|
+
connections.delete(handle);
|
|
103
|
+
else
|
|
104
|
+
remember(handle, connection);
|
|
105
|
+
}
|
|
106
|
+
// Set, not merged: these are the only session ids this request sends.
|
|
107
|
+
headers.set(AGENTCORE_RUNTIME_SESSION_HEADER, connection.runtimeId);
|
|
108
|
+
if (connection.serverSessionId !== undefined) {
|
|
109
|
+
headers.set(MCP_SESSION_HEADER, connection.serverSessionId);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
headers.delete(MCP_SESSION_HEADER);
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
settle: (response) => {
|
|
116
|
+
const returned = response.headers.get(MCP_SESSION_HEADER);
|
|
117
|
+
if (returned === null)
|
|
118
|
+
return response;
|
|
119
|
+
if (handle === null) {
|
|
120
|
+
// A new connection: bound under a handle of our own, shown in the server's id's place.
|
|
121
|
+
const issued = newId();
|
|
122
|
+
remember(issued, { ...connection, serverSessionId: returned });
|
|
123
|
+
return withSessionHeader(response, issued);
|
|
124
|
+
}
|
|
125
|
+
if (method !== 'DELETE')
|
|
126
|
+
connection.serverSessionId = returned;
|
|
127
|
+
return withSessionHeader(response, handle);
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function perCall() {
|
|
134
|
+
return {
|
|
135
|
+
request(headers) {
|
|
136
|
+
headers.delete(MCP_SESSION_HEADER);
|
|
137
|
+
// A fresh runtime session of our own for every request — as fresh as the
|
|
138
|
+
// SDK's own default, and set the same way on both auth paths.
|
|
139
|
+
headers.set(AGENTCORE_RUNTIME_SESSION_HEADER, newId());
|
|
140
|
+
return { settle: (response) => withSessionHeader(response, undefined) };
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* The response with its `Mcp-Session-Id` replaced by `value`, or removed when
|
|
146
|
+
* `value` is undefined. A fetched Response's headers are immutable, so the copy
|
|
147
|
+
* is rebuilt around the same body rather than edited.
|
|
148
|
+
*/
|
|
149
|
+
function withSessionHeader(response, value) {
|
|
150
|
+
const current = response.headers.get(MCP_SESSION_HEADER);
|
|
151
|
+
if (current === (value ?? null))
|
|
152
|
+
return response;
|
|
153
|
+
const headers = new Headers(response.headers);
|
|
154
|
+
if (value === undefined)
|
|
155
|
+
headers.delete(MCP_SESSION_HEADER);
|
|
156
|
+
else
|
|
157
|
+
headers.set(MCP_SESSION_HEADER, value);
|
|
158
|
+
return new Response(response.body, {
|
|
159
|
+
status: response.status,
|
|
160
|
+
statusText: response.statusText,
|
|
161
|
+
headers,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The MCP Streamable HTTP answer to a session the server does not know: 404,
|
|
166
|
+
* after which a client starts a new session with `initialize`.
|
|
167
|
+
*/
|
|
168
|
+
function sessionNotFound() {
|
|
169
|
+
return new Response(JSON.stringify({
|
|
170
|
+
jsonrpc: '2.0',
|
|
171
|
+
id: null,
|
|
172
|
+
error: { code: -32001, message: 'Session not found' },
|
|
173
|
+
}), { status: 404, headers: { 'content-type': 'application/json' } });
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../../src/adapters/mcp/agentcoreRuntime/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sessionBusy — the retry strategy: AgentCore Runtime's "session operation in
|
|
3
|
+
* progress", recognised. One small function, on purpose.
|
|
4
|
+
*
|
|
5
|
+
* ── What the service says, in its own words ──────────────────────────────────
|
|
6
|
+
* The AgentCore Runtime MCP protocol contract maps the runtime's exceptions onto
|
|
7
|
+
* JSON-RPC errors, and exactly one of them is retryable by design:
|
|
8
|
+
*
|
|
9
|
+
* -32005 RetryableConflictException HTTP 200 "Session operation in progress, please retry"
|
|
10
|
+
*
|
|
11
|
+
* returned "when a second operation targets a session while the service is
|
|
12
|
+
* provisioning or tearing down that session. Because MCP returns HTTP 200 with
|
|
13
|
+
* the error in the JSON-RPC body, the caller must inspect the response body and
|
|
14
|
+
* retry with short exponential backoff — MCP clients do not auto-retry it."
|
|
15
|
+
*
|
|
16
|
+
* So no status code says it, and the MCP SDK will not wait for it: left alone,
|
|
17
|
+
* it reaches the model as a failed tool call, a moment after the session it was
|
|
18
|
+
* waiting for came up.
|
|
19
|
+
*
|
|
20
|
+
* ── Why asking again is safe ─────────────────────────────────────────────────
|
|
21
|
+
* The refusal is the PLATFORM's, about the session, made before the request
|
|
22
|
+
* reached the MCP server: nothing ran. That is the license a 429 holds, and the
|
|
23
|
+
* only one `retryingFetchWhen` accepts (see `mcp/throttleRetry.ts` ·
|
|
24
|
+
* `RetryDecision`).
|
|
25
|
+
*
|
|
26
|
+
* ── What it must NOT match ───────────────────────────────────────────────────
|
|
27
|
+
* `ConflictException` shares the code -32005 ("Resource conflict - Resource
|
|
28
|
+
* already exists") and is not retryable; the contract tells the two apart only
|
|
29
|
+
* by the message, so the message is part of the match. Anything else — another
|
|
30
|
+
* status, an SSE stream, a batch reply, a body that is not JSON — is delivered
|
|
31
|
+
* as it is.
|
|
32
|
+
*
|
|
33
|
+
* ── The API-layer form ───────────────────────────────────────────────────────
|
|
34
|
+
* `InvokeAgentRuntime`'s API reference gives the same exception as an HTTP 409,
|
|
35
|
+
* its type in the `x-amzn-errortype` header (the REST protocol's error-type
|
|
36
|
+
* header; the SigV4 strategy rebuilds exactly that from the SDK's exception,
|
|
37
|
+
* because the transport's SDK client has its own retry off). It is the same
|
|
38
|
+
* refusal, so it is the same decision — matched by the type, never by the 409
|
|
39
|
+
* alone.
|
|
40
|
+
*
|
|
41
|
+
* Pattern: Strategy (a `RetryDecision`). Role: outer ring, vendor fact.
|
|
42
|
+
*/
|
|
43
|
+
import type { RetryVerdict } from '../../../mcp/throttleRetry.js';
|
|
44
|
+
/** The JSON-RPC error code the contract gives `RetryableConflictException`. */
|
|
45
|
+
export declare const SESSION_BUSY_CODE = -32005;
|
|
46
|
+
/**
|
|
47
|
+
* Is this response AgentCore Runtime's session-busy refusal — in either form:
|
|
48
|
+
* the MCP contract's HTTP 200 with JSON-RPC -32005, or the API's 409
|
|
49
|
+
* `RetryableConflictException`?
|
|
50
|
+
*
|
|
51
|
+
* Reads a CLONE of the body, so the response is delivered intact either way.
|
|
52
|
+
* Answers `{}` (wait the loop's own backoff, then send the same request again)
|
|
53
|
+
* or `undefined` (deliver it).
|
|
54
|
+
*/
|
|
55
|
+
export declare function sessionBusy(response: Response): Promise<RetryVerdict | undefined>;
|
|
56
|
+
/**
|
|
57
|
+
* The match itself, over a parsed body: ONE JSON-RPC reply whose error carries
|
|
58
|
+
* the contract's code and message. A batch is never retried whole — some of
|
|
59
|
+
* its replies may be the record of work that ran.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isSessionBusyReply(body: unknown): boolean;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sessionBusy — the retry strategy: AgentCore Runtime's "session operation in
|
|
3
|
+
* progress", recognised. One small function, on purpose.
|
|
4
|
+
*
|
|
5
|
+
* ── What the service says, in its own words ──────────────────────────────────
|
|
6
|
+
* The AgentCore Runtime MCP protocol contract maps the runtime's exceptions onto
|
|
7
|
+
* JSON-RPC errors, and exactly one of them is retryable by design:
|
|
8
|
+
*
|
|
9
|
+
* -32005 RetryableConflictException HTTP 200 "Session operation in progress, please retry"
|
|
10
|
+
*
|
|
11
|
+
* returned "when a second operation targets a session while the service is
|
|
12
|
+
* provisioning or tearing down that session. Because MCP returns HTTP 200 with
|
|
13
|
+
* the error in the JSON-RPC body, the caller must inspect the response body and
|
|
14
|
+
* retry with short exponential backoff — MCP clients do not auto-retry it."
|
|
15
|
+
*
|
|
16
|
+
* So no status code says it, and the MCP SDK will not wait for it: left alone,
|
|
17
|
+
* it reaches the model as a failed tool call, a moment after the session it was
|
|
18
|
+
* waiting for came up.
|
|
19
|
+
*
|
|
20
|
+
* ── Why asking again is safe ─────────────────────────────────────────────────
|
|
21
|
+
* The refusal is the PLATFORM's, about the session, made before the request
|
|
22
|
+
* reached the MCP server: nothing ran. That is the license a 429 holds, and the
|
|
23
|
+
* only one `retryingFetchWhen` accepts (see `mcp/throttleRetry.ts` ·
|
|
24
|
+
* `RetryDecision`).
|
|
25
|
+
*
|
|
26
|
+
* ── What it must NOT match ───────────────────────────────────────────────────
|
|
27
|
+
* `ConflictException` shares the code -32005 ("Resource conflict - Resource
|
|
28
|
+
* already exists") and is not retryable; the contract tells the two apart only
|
|
29
|
+
* by the message, so the message is part of the match. Anything else — another
|
|
30
|
+
* status, an SSE stream, a batch reply, a body that is not JSON — is delivered
|
|
31
|
+
* as it is.
|
|
32
|
+
*
|
|
33
|
+
* ── The API-layer form ───────────────────────────────────────────────────────
|
|
34
|
+
* `InvokeAgentRuntime`'s API reference gives the same exception as an HTTP 409,
|
|
35
|
+
* its type in the `x-amzn-errortype` header (the REST protocol's error-type
|
|
36
|
+
* header; the SigV4 strategy rebuilds exactly that from the SDK's exception,
|
|
37
|
+
* because the transport's SDK client has its own retry off). It is the same
|
|
38
|
+
* refusal, so it is the same decision — matched by the type, never by the 409
|
|
39
|
+
* alone.
|
|
40
|
+
*
|
|
41
|
+
* Pattern: Strategy (a `RetryDecision`). Role: outer ring, vendor fact.
|
|
42
|
+
*/
|
|
43
|
+
import { awsErrorType } from './errorType.js';
|
|
44
|
+
/** The JSON-RPC error code the contract gives `RetryableConflictException`. */
|
|
45
|
+
export const SESSION_BUSY_CODE = -32005;
|
|
46
|
+
/** The exception's name, as the API layer and the SDK both spell it. */
|
|
47
|
+
const SESSION_BUSY_TYPE = 'RetryableConflictException';
|
|
48
|
+
/**
|
|
49
|
+
* How the contract's message reads. Matched case-insensitively and as a
|
|
50
|
+
* fragment, so a trailing "please retry" reworded does not stop the match;
|
|
51
|
+
* the code is still required, which is what keeps `ConflictException` out.
|
|
52
|
+
*/
|
|
53
|
+
const SESSION_BUSY_MESSAGE = /session operation in progress/i;
|
|
54
|
+
/**
|
|
55
|
+
* Is this response AgentCore Runtime's session-busy refusal — in either form:
|
|
56
|
+
* the MCP contract's HTTP 200 with JSON-RPC -32005, or the API's 409
|
|
57
|
+
* `RetryableConflictException`?
|
|
58
|
+
*
|
|
59
|
+
* Reads a CLONE of the body, so the response is delivered intact either way.
|
|
60
|
+
* Answers `{}` (wait the loop's own backoff, then send the same request again)
|
|
61
|
+
* or `undefined` (deliver it).
|
|
62
|
+
*/
|
|
63
|
+
export async function sessionBusy(response) {
|
|
64
|
+
if (response.status === 409) {
|
|
65
|
+
return awsErrorType(response.headers) === SESSION_BUSY_TYPE ? {} : undefined;
|
|
66
|
+
}
|
|
67
|
+
if (response.status !== 200)
|
|
68
|
+
return undefined;
|
|
69
|
+
if (!isJson(response.headers.get('content-type')))
|
|
70
|
+
return undefined;
|
|
71
|
+
let text;
|
|
72
|
+
try {
|
|
73
|
+
text = await response.clone().text();
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
// A cheap gate before parsing: a large tool result does not contain the
|
|
79
|
+
// code's digits often, and it is the common case.
|
|
80
|
+
if (!text.includes(String(SESSION_BUSY_CODE)))
|
|
81
|
+
return undefined;
|
|
82
|
+
let body;
|
|
83
|
+
try {
|
|
84
|
+
body = JSON.parse(text);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
return isSessionBusyReply(body) ? {} : undefined;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The match itself, over a parsed body: ONE JSON-RPC reply whose error carries
|
|
93
|
+
* the contract's code and message. A batch is never retried whole — some of
|
|
94
|
+
* its replies may be the record of work that ran.
|
|
95
|
+
*/
|
|
96
|
+
export function isSessionBusyReply(body) {
|
|
97
|
+
if (body === null || typeof body !== 'object' || Array.isArray(body))
|
|
98
|
+
return false;
|
|
99
|
+
const error = body.error;
|
|
100
|
+
if (error === null || typeof error !== 'object')
|
|
101
|
+
return false;
|
|
102
|
+
const { code, message } = error;
|
|
103
|
+
return (code === SESSION_BUSY_CODE && typeof message === 'string' && SESSION_BUSY_MESSAGE.test(message));
|
|
104
|
+
}
|
|
105
|
+
/** `application/json`, with or without parameters, in any case. */
|
|
106
|
+
function isJson(contentType) {
|
|
107
|
+
if (contentType === null)
|
|
108
|
+
return false;
|
|
109
|
+
const essence = contentType.split(';')[0]?.trim().toLowerCase();
|
|
110
|
+
return essence === 'application/json';
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=sessionBusy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionBusy.js","sourceRoot":"","sources":["../../../../../src/adapters/mcp/agentcoreRuntime/sessionBusy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC;AAExC,wEAAwE;AACxE,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,gCAAgC,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAkB;IAClD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACpE,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,wEAAwE;IACxE,kDAAkD;IAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACnF,MAAM,KAAK,GAAI,IAAqC,CAAC,KAAK,CAAC;IAC3D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAgE,CAAC;IAC3F,OAAO,CACL,IAAI,KAAK,iBAAiB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAChG,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,SAAS,MAAM,CAAC,WAA0B;IACxC,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChE,OAAO,OAAO,KAAK,kBAAkB,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* strictJson — ONE reading of a JSON text, with every ambiguity refused.
|
|
3
|
+
*
|
|
4
|
+
* `JSON.parse` resolves ambiguity silently: a duplicated key keeps its LAST
|
|
5
|
+
* value, while another reader may keep the first. A check that reads a body one
|
|
6
|
+
* way and a consumer that reads it another is a parser differential — a crafted
|
|
7
|
+
* answer passes the check and is used as something else. So the transport reads
|
|
8
|
+
* an answer once, here, refusing what two readers could disagree on, and hands
|
|
9
|
+
* the client the canonical re-serialization of exactly the value it checked.
|
|
10
|
+
*
|
|
11
|
+
* Refused, by name: a duplicated object key, trailing data after the value, a
|
|
12
|
+
* leading byte-order mark, nesting deeper than {@link MAX_DEPTH}, a number
|
|
13
|
+
* out of range (its re-serialization would be `null`), and anything that is
|
|
14
|
+
* not RFC 8259 JSON.
|
|
15
|
+
*
|
|
16
|
+
* Objects are built with own properties only (a `__proto__` key is data, never
|
|
17
|
+
* a prototype).
|
|
18
|
+
*
|
|
19
|
+
* Pattern: recursive-descent parser. Role: outer ring, the one reader.
|
|
20
|
+
*/
|
|
21
|
+
/** Why a text was refused. */
|
|
22
|
+
export declare class AmbiguousJsonError extends Error {
|
|
23
|
+
readonly reason: string;
|
|
24
|
+
constructor(reason: string);
|
|
25
|
+
}
|
|
26
|
+
/** How deep a value may nest. */
|
|
27
|
+
export declare const MAX_DEPTH = 256;
|
|
28
|
+
/** A JSON value, as read. */
|
|
29
|
+
export type JsonValue = null | boolean | number | string | readonly JsonValue[] | {
|
|
30
|
+
readonly [key: string]: JsonValue;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* The one value `text` holds.
|
|
34
|
+
*
|
|
35
|
+
* @throws AmbiguousJsonError when the text is not exactly one unambiguous value.
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseStrictJson(text: string): JsonValue;
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* strictJson — ONE reading of a JSON text, with every ambiguity refused.
|
|
3
|
+
*
|
|
4
|
+
* `JSON.parse` resolves ambiguity silently: a duplicated key keeps its LAST
|
|
5
|
+
* value, while another reader may keep the first. A check that reads a body one
|
|
6
|
+
* way and a consumer that reads it another is a parser differential — a crafted
|
|
7
|
+
* answer passes the check and is used as something else. So the transport reads
|
|
8
|
+
* an answer once, here, refusing what two readers could disagree on, and hands
|
|
9
|
+
* the client the canonical re-serialization of exactly the value it checked.
|
|
10
|
+
*
|
|
11
|
+
* Refused, by name: a duplicated object key, trailing data after the value, a
|
|
12
|
+
* leading byte-order mark, nesting deeper than {@link MAX_DEPTH}, a number
|
|
13
|
+
* out of range (its re-serialization would be `null`), and anything that is
|
|
14
|
+
* not RFC 8259 JSON.
|
|
15
|
+
*
|
|
16
|
+
* Objects are built with own properties only (a `__proto__` key is data, never
|
|
17
|
+
* a prototype).
|
|
18
|
+
*
|
|
19
|
+
* Pattern: recursive-descent parser. Role: outer ring, the one reader.
|
|
20
|
+
*/
|
|
21
|
+
/** Why a text was refused. */
|
|
22
|
+
export class AmbiguousJsonError extends Error {
|
|
23
|
+
reason;
|
|
24
|
+
constructor(reason) {
|
|
25
|
+
super(`ambiguous JSON: ${reason}`);
|
|
26
|
+
this.reason = reason;
|
|
27
|
+
this.name = 'AmbiguousJsonError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** How deep a value may nest. */
|
|
31
|
+
export const MAX_DEPTH = 256;
|
|
32
|
+
/**
|
|
33
|
+
* The one value `text` holds.
|
|
34
|
+
*
|
|
35
|
+
* @throws AmbiguousJsonError when the text is not exactly one unambiguous value.
|
|
36
|
+
*/
|
|
37
|
+
export function parseStrictJson(text) {
|
|
38
|
+
if (text.charCodeAt(0) === 0xfeff)
|
|
39
|
+
throw new AmbiguousJsonError('a leading byte-order mark');
|
|
40
|
+
const reader = new Reader(text);
|
|
41
|
+
reader.space();
|
|
42
|
+
const value = reader.value(0);
|
|
43
|
+
reader.space();
|
|
44
|
+
if (!reader.done())
|
|
45
|
+
throw new AmbiguousJsonError('trailing data after the value');
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
const NUMBER = /-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/y;
|
|
49
|
+
/** Characters a string may hold as they are: not a quote, a backslash or a control character. */
|
|
50
|
+
// eslint-disable-next-line no-control-regex
|
|
51
|
+
const PLAIN_RUN = /[^"\\\u0000-\u001f]+/y;
|
|
52
|
+
class Reader {
|
|
53
|
+
text;
|
|
54
|
+
at = 0;
|
|
55
|
+
constructor(text) {
|
|
56
|
+
this.text = text;
|
|
57
|
+
}
|
|
58
|
+
done() {
|
|
59
|
+
return this.at >= this.text.length;
|
|
60
|
+
}
|
|
61
|
+
space() {
|
|
62
|
+
while (this.at < this.text.length) {
|
|
63
|
+
const c = this.text.charCodeAt(this.at);
|
|
64
|
+
if (c !== 0x20 && c !== 0x09 && c !== 0x0a && c !== 0x0d)
|
|
65
|
+
return;
|
|
66
|
+
this.at++;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
value(depth) {
|
|
70
|
+
if (depth > MAX_DEPTH)
|
|
71
|
+
throw new AmbiguousJsonError('nesting too deep');
|
|
72
|
+
const c = this.text[this.at];
|
|
73
|
+
if (c === '{')
|
|
74
|
+
return this.object(depth);
|
|
75
|
+
if (c === '[')
|
|
76
|
+
return this.array(depth);
|
|
77
|
+
if (c === '"')
|
|
78
|
+
return this.string();
|
|
79
|
+
if (this.word('true'))
|
|
80
|
+
return true;
|
|
81
|
+
if (this.word('false'))
|
|
82
|
+
return false;
|
|
83
|
+
if (this.word('null'))
|
|
84
|
+
return null;
|
|
85
|
+
return this.number();
|
|
86
|
+
}
|
|
87
|
+
object(depth) {
|
|
88
|
+
this.at++; // {
|
|
89
|
+
const out = {};
|
|
90
|
+
const seen = new Set();
|
|
91
|
+
this.space();
|
|
92
|
+
if (this.text[this.at] === '}') {
|
|
93
|
+
this.at++;
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
for (;;) {
|
|
97
|
+
this.space();
|
|
98
|
+
if (this.text[this.at] !== '"')
|
|
99
|
+
throw new AmbiguousJsonError('an object key that is not a string');
|
|
100
|
+
const key = this.string();
|
|
101
|
+
// The key is not named: it is the answer's text, and a refusal repeats none.
|
|
102
|
+
if (seen.has(key))
|
|
103
|
+
throw new AmbiguousJsonError('a duplicated object key');
|
|
104
|
+
seen.add(key);
|
|
105
|
+
this.space();
|
|
106
|
+
this.expect(':');
|
|
107
|
+
this.space();
|
|
108
|
+
Object.defineProperty(out, key, {
|
|
109
|
+
value: this.value(depth + 1),
|
|
110
|
+
enumerable: true,
|
|
111
|
+
writable: true,
|
|
112
|
+
configurable: true,
|
|
113
|
+
});
|
|
114
|
+
this.space();
|
|
115
|
+
if (this.text[this.at] === ',') {
|
|
116
|
+
this.at++;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
this.expect('}');
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
array(depth) {
|
|
124
|
+
this.at++; // [
|
|
125
|
+
const out = [];
|
|
126
|
+
this.space();
|
|
127
|
+
if (this.text[this.at] === ']') {
|
|
128
|
+
this.at++;
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
131
|
+
for (;;) {
|
|
132
|
+
this.space();
|
|
133
|
+
out.push(this.value(depth + 1));
|
|
134
|
+
this.space();
|
|
135
|
+
if (this.text[this.at] === ',') {
|
|
136
|
+
this.at++;
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
this.expect(']');
|
|
140
|
+
return out;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
string() {
|
|
144
|
+
this.at++; // opening quote
|
|
145
|
+
let out = '';
|
|
146
|
+
for (;;) {
|
|
147
|
+
if (this.at >= this.text.length)
|
|
148
|
+
throw new AmbiguousJsonError('an unterminated string');
|
|
149
|
+
const c = this.text[this.at];
|
|
150
|
+
const code = c.charCodeAt(0);
|
|
151
|
+
if (c === '"') {
|
|
152
|
+
this.at++;
|
|
153
|
+
return out;
|
|
154
|
+
}
|
|
155
|
+
if (code < 0x20)
|
|
156
|
+
throw new AmbiguousJsonError('a control character inside a string');
|
|
157
|
+
if (c !== '\\') {
|
|
158
|
+
// A run of plain characters at once — a large string is read in slices.
|
|
159
|
+
PLAIN_RUN.lastIndex = this.at;
|
|
160
|
+
const run = PLAIN_RUN.exec(this.text)?.[0] ?? c;
|
|
161
|
+
out += run;
|
|
162
|
+
this.at += run.length;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
const e = this.text[this.at + 1];
|
|
166
|
+
this.at += 2;
|
|
167
|
+
if (e === 'u') {
|
|
168
|
+
const hex = this.text.slice(this.at, this.at + 4);
|
|
169
|
+
if (!/^[0-9a-fA-F]{4}$/.test(hex))
|
|
170
|
+
throw new AmbiguousJsonError('a malformed \\u escape');
|
|
171
|
+
out += String.fromCharCode(parseInt(hex, 16));
|
|
172
|
+
this.at += 4;
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
const simple = ESCAPES[e ?? ''];
|
|
176
|
+
if (simple === undefined)
|
|
177
|
+
throw new AmbiguousJsonError('an unknown escape');
|
|
178
|
+
out += simple;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
number() {
|
|
182
|
+
NUMBER.lastIndex = this.at;
|
|
183
|
+
const match = NUMBER.exec(this.text);
|
|
184
|
+
if (match === null || match[0] === '')
|
|
185
|
+
throw new AmbiguousJsonError('a value that is not JSON');
|
|
186
|
+
this.at += match[0].length;
|
|
187
|
+
const value = Number(match[0]);
|
|
188
|
+
// Re-serialized, a number out of range would become `null` — another value.
|
|
189
|
+
if (!Number.isFinite(value))
|
|
190
|
+
throw new AmbiguousJsonError('a number out of range');
|
|
191
|
+
return value;
|
|
192
|
+
}
|
|
193
|
+
word(word) {
|
|
194
|
+
if (!this.text.startsWith(word, this.at))
|
|
195
|
+
return false;
|
|
196
|
+
this.at += word.length;
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
expect(c) {
|
|
200
|
+
if (this.text[this.at] !== c)
|
|
201
|
+
throw new AmbiguousJsonError(`a missing '${c}'`);
|
|
202
|
+
this.at++;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const ESCAPES = {
|
|
206
|
+
'"': '"',
|
|
207
|
+
'\\': '\\',
|
|
208
|
+
'/': '/',
|
|
209
|
+
b: '\b',
|
|
210
|
+
f: '\f',
|
|
211
|
+
n: '\n',
|
|
212
|
+
r: '\r',
|
|
213
|
+
t: '\t',
|
|
214
|
+
};
|
|
215
|
+
//# sourceMappingURL=strictJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strictJson.js","sourceRoot":"","sources":["../../../../../src/adapters/mcp/agentcoreRuntime/strictJson.ts"],"names":[],"mappings":"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"}
|