agentfootprint 10.4.0 → 10.5.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/CAPABILITIES.md +6 -1
- package/ai-instructions/clinerules +22 -11
- package/ai-instructions/copilot-instructions.md +22 -11
- package/ai-instructions/cursor/agentfootprint.md +22 -11
- package/ai-instructions/kiro/agentfootprint.md +22 -11
- package/ai-instructions/windsurfrules +22 -11
- package/dist/adapters/llm/AnthropicProvider.js +26 -8
- package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/BedrockProvider.js +23 -7
- package/dist/adapters/llm/BedrockProvider.js.map +1 -1
- package/dist/adapters/llm/BrowserAnthropicProvider.js +57 -49
- package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/BrowserOpenAIProvider.js +50 -42
- package/dist/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
- package/dist/adapters/llm/FoundryLocalProvider.js +174 -212
- package/dist/adapters/llm/FoundryLocalProvider.js.map +1 -1
- package/dist/adapters/llm/GeminiProvider.js +23 -9
- package/dist/adapters/llm/GeminiProvider.js.map +1 -1
- package/dist/adapters/llm/InvokeModelGatewayProvider.js +32 -9
- package/dist/adapters/llm/InvokeModelGatewayProvider.js.map +1 -1
- package/dist/adapters/llm/MockProvider.js +11 -3
- package/dist/adapters/llm/MockProvider.js.map +1 -1
- package/dist/adapters/llm/OllamaProvider.js +129 -167
- package/dist/adapters/llm/OllamaProvider.js.map +1 -1
- package/dist/adapters/llm/OpenAIProvider.js +36 -9
- package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/adapters/mcp/agentcoreRuntime/invoke.js +15 -8
- package/dist/adapters/mcp/agentcoreRuntime/invoke.js.map +1 -1
- package/dist/adapters/mcp/agentcoreRuntime/transport.js +21 -3
- package/dist/adapters/mcp/agentcoreRuntime/transport.js.map +1 -1
- package/dist/ag-ui/adapter.js +69 -14
- package/dist/ag-ui/adapter.js.map +1 -1
- package/dist/ag-ui/framing.js +3 -1
- package/dist/ag-ui/framing.js.map +1 -1
- package/dist/ag-ui/index.js +4 -2
- package/dist/ag-ui/index.js.map +1 -1
- package/dist/ag-ui/request.js +66 -6
- package/dist/ag-ui/request.js.map +1 -1
- package/dist/answer-validation/index.js +8 -1
- package/dist/answer-validation/index.js.map +1 -1
- package/dist/answer-validation/toolLedger.js +130 -0
- package/dist/answer-validation/toolLedger.js.map +1 -0
- package/dist/answer-validation/types.js.map +1 -1
- package/dist/answer-validation/validate.js +25 -3
- package/dist/answer-validation/validate.js.map +1 -1
- package/dist/classify/typesafe.js +31 -23
- package/dist/classify/typesafe.js.map +1 -1
- package/dist/core/Agent.js +69 -16
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/LLMCall.js +16 -6
- package/dist/core/LLMCall.js.map +1 -1
- package/dist/core/RunnerBase.js +83 -11
- package/dist/core/RunnerBase.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js +16 -8
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/agent/buildAgentMessageApiChart.js +22 -2
- package/dist/core/agent/buildAgentMessageApiChart.js.map +1 -1
- package/dist/core/agent/buildDynamicAgentChart.js +22 -7
- package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/core/agent/buildMessageApiChart.js +22 -2
- package/dist/core/agent/buildMessageApiChart.js.map +1 -1
- package/dist/core/agent/stages/answerValidation.js +22 -1
- package/dist/core/agent/stages/answerValidation.js.map +1 -1
- package/dist/core/agent/stages/callLLM.js +19 -3
- package/dist/core/agent/stages/callLLM.js.map +1 -1
- package/dist/core/agent/stages/routeTurn.js +14 -1
- package/dist/core/agent/stages/routeTurn.js.map +1 -1
- package/dist/core/agent/stages/seed.js +9 -0
- package/dist/core/agent/stages/seed.js.map +1 -1
- package/dist/core/agent/stages/toolCalls.js +59 -20
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/agent/window/strategies/summarizeOldest.js +4 -0
- package/dist/core/agent/window/strategies/summarizeOldest.js.map +1 -1
- package/dist/core/agent/window/summarize.js +6 -3
- package/dist/core/agent/window/summarize.js.map +1 -1
- package/dist/core/memberRun.js +58 -9
- package/dist/core/memberRun.js.map +1 -1
- package/dist/core/requestOfRun.js +28 -0
- package/dist/core/requestOfRun.js.map +1 -0
- package/dist/core/slots/buildToolsSlot.js +11 -25
- package/dist/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/core-flow/Conditional.js +17 -11
- package/dist/core-flow/Conditional.js.map +1 -1
- package/dist/core-flow/Graph.js +17 -11
- package/dist/core-flow/Graph.js.map +1 -1
- package/dist/core-flow/Loop.js +17 -11
- package/dist/core-flow/Loop.js.map +1 -1
- package/dist/core-flow/Parallel.js +25 -14
- package/dist/core-flow/Parallel.js.map +1 -1
- package/dist/core-flow/Sequence.js +17 -11
- package/dist/core-flow/Sequence.js.map +1 -1
- package/dist/core-flow/Workflow.js +17 -11
- package/dist/core-flow/Workflow.js.map +1 -1
- package/dist/doors/security.js +2 -1
- package/dist/doors/security.js.map +1 -1
- package/dist/esm/adapters/llm/AnthropicProvider.d.ts +9 -2
- package/dist/esm/adapters/llm/AnthropicProvider.js +26 -8
- package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BedrockProvider.d.ts +6 -1
- package/dist/esm/adapters/llm/BedrockProvider.js +23 -7
- package/dist/esm/adapters/llm/BedrockProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +57 -49
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BrowserOpenAIProvider.js +50 -42
- package/dist/esm/adapters/llm/BrowserOpenAIProvider.js.map +1 -1
- package/dist/esm/adapters/llm/FoundryLocalProvider.js +171 -209
- package/dist/esm/adapters/llm/FoundryLocalProvider.js.map +1 -1
- package/dist/esm/adapters/llm/GeminiProvider.js +23 -9
- package/dist/esm/adapters/llm/GeminiProvider.js.map +1 -1
- package/dist/esm/adapters/llm/InvokeModelGatewayProvider.js +32 -9
- package/dist/esm/adapters/llm/InvokeModelGatewayProvider.js.map +1 -1
- package/dist/esm/adapters/llm/MockProvider.js +11 -3
- package/dist/esm/adapters/llm/MockProvider.js.map +1 -1
- package/dist/esm/adapters/llm/OllamaProvider.js +126 -164
- package/dist/esm/adapters/llm/OllamaProvider.js.map +1 -1
- package/dist/esm/adapters/llm/OpenAIProvider.d.ts +6 -1
- package/dist/esm/adapters/llm/OpenAIProvider.js +36 -9
- package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.d.ts +1 -1
- package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.js +15 -8
- package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.js.map +1 -1
- package/dist/esm/adapters/mcp/agentcoreRuntime/transport.d.ts +26 -3
- package/dist/esm/adapters/mcp/agentcoreRuntime/transport.js +21 -3
- package/dist/esm/adapters/mcp/agentcoreRuntime/transport.js.map +1 -1
- package/dist/esm/ag-ui/adapter.d.ts +61 -11
- package/dist/esm/ag-ui/adapter.js +70 -15
- package/dist/esm/ag-ui/adapter.js.map +1 -1
- package/dist/esm/ag-ui/framing.d.ts +2 -1
- package/dist/esm/ag-ui/framing.js +3 -1
- package/dist/esm/ag-ui/framing.js.map +1 -1
- package/dist/esm/ag-ui/index.d.ts +6 -4
- package/dist/esm/ag-ui/index.js +6 -4
- package/dist/esm/ag-ui/index.js.map +1 -1
- package/dist/esm/ag-ui/request.d.ts +86 -7
- package/dist/esm/ag-ui/request.js +63 -5
- package/dist/esm/ag-ui/request.js.map +1 -1
- package/dist/esm/answer-validation/index.d.ts +2 -1
- package/dist/esm/answer-validation/index.js +1 -0
- package/dist/esm/answer-validation/index.js.map +1 -1
- package/dist/esm/answer-validation/toolLedger.d.ts +65 -0
- package/dist/esm/answer-validation/toolLedger.js +121 -0
- package/dist/esm/answer-validation/toolLedger.js.map +1 -0
- package/dist/esm/answer-validation/types.d.ts +48 -0
- package/dist/esm/answer-validation/types.js.map +1 -1
- package/dist/esm/answer-validation/validate.d.ts +2 -2
- package/dist/esm/answer-validation/validate.js +25 -3
- package/dist/esm/answer-validation/validate.js.map +1 -1
- package/dist/esm/classify/typesafe.js +30 -22
- package/dist/esm/classify/typesafe.js.map +1 -1
- package/dist/esm/core/Agent.d.ts +9 -1
- package/dist/esm/core/Agent.js +71 -18
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/LLMCall.d.ts +2 -1
- package/dist/esm/core/LLMCall.js +17 -7
- package/dist/esm/core/LLMCall.js.map +1 -1
- package/dist/esm/core/RunnerBase.d.ts +39 -8
- package/dist/esm/core/RunnerBase.js +80 -9
- package/dist/esm/core/RunnerBase.js.map +1 -1
- package/dist/esm/core/agent/buildAgentChart.js +16 -8
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildAgentMessageApiChart.d.ts +16 -0
- package/dist/esm/core/agent/buildAgentMessageApiChart.js +22 -2
- package/dist/esm/core/agent/buildAgentMessageApiChart.js.map +1 -1
- package/dist/esm/core/agent/buildDynamicAgentChart.js +22 -7
- package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildMessageApiChart.d.ts +16 -0
- package/dist/esm/core/agent/buildMessageApiChart.js +22 -2
- package/dist/esm/core/agent/buildMessageApiChart.js.map +1 -1
- package/dist/esm/core/agent/stages/answerValidation.js +22 -1
- package/dist/esm/core/agent/stages/answerValidation.js.map +1 -1
- package/dist/esm/core/agent/stages/callLLM.js +19 -3
- package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
- package/dist/esm/core/agent/stages/routeTurn.js +14 -1
- package/dist/esm/core/agent/stages/routeTurn.js.map +1 -1
- package/dist/esm/core/agent/stages/seed.d.ts +7 -0
- package/dist/esm/core/agent/stages/seed.js +9 -0
- package/dist/esm/core/agent/stages/seed.js.map +1 -1
- package/dist/esm/core/agent/stages/toolCalls.d.ts +21 -0
- package/dist/esm/core/agent/stages/toolCalls.js +59 -20
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/agent/types.d.ts +10 -0
- package/dist/esm/core/agent/window/strategies/summarizeOldest.js +4 -0
- package/dist/esm/core/agent/window/strategies/summarizeOldest.js.map +1 -1
- package/dist/esm/core/agent/window/summarize.js +6 -3
- package/dist/esm/core/agent/window/summarize.js.map +1 -1
- package/dist/esm/core/memberRun.d.ts +23 -2
- package/dist/esm/core/memberRun.js +54 -8
- package/dist/esm/core/memberRun.js.map +1 -1
- package/dist/esm/core/requestOfRun.d.ts +21 -0
- package/dist/esm/core/requestOfRun.js +24 -0
- package/dist/esm/core/requestOfRun.js.map +1 -0
- package/dist/esm/core/runner.d.ts +15 -3
- package/dist/esm/core/slots/buildToolsSlot.d.ts +0 -16
- package/dist/esm/core/slots/buildToolsSlot.js +11 -25
- package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/core-flow/Conditional.d.ts +2 -1
- package/dist/esm/core-flow/Conditional.js +18 -12
- package/dist/esm/core-flow/Conditional.js.map +1 -1
- package/dist/esm/core-flow/Graph.d.ts +2 -1
- package/dist/esm/core-flow/Graph.js +18 -12
- package/dist/esm/core-flow/Graph.js.map +1 -1
- package/dist/esm/core-flow/Loop.d.ts +2 -1
- package/dist/esm/core-flow/Loop.js +18 -12
- package/dist/esm/core-flow/Loop.js.map +1 -1
- package/dist/esm/core-flow/Parallel.d.ts +2 -1
- package/dist/esm/core-flow/Parallel.js +26 -15
- package/dist/esm/core-flow/Parallel.js.map +1 -1
- package/dist/esm/core-flow/Sequence.d.ts +2 -1
- package/dist/esm/core-flow/Sequence.js +18 -12
- package/dist/esm/core-flow/Sequence.js.map +1 -1
- package/dist/esm/core-flow/Workflow.d.ts +2 -1
- package/dist/esm/core-flow/Workflow.js +18 -12
- package/dist/esm/core-flow/Workflow.js.map +1 -1
- package/dist/esm/doors/security.d.ts +2 -1
- package/dist/esm/doors/security.js +2 -1
- package/dist/esm/doors/security.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +4 -2
- package/dist/esm/hosting/index.d.ts +1 -0
- package/dist/esm/hosting/index.js.map +1 -1
- package/dist/esm/hosting/protocolAdapter.d.ts +4 -1
- package/dist/esm/hosting/refusalStatus.js +4 -0
- package/dist/esm/hosting/refusalStatus.js.map +1 -1
- package/dist/esm/hosting/requestSealing.d.ts +65 -0
- package/dist/esm/hosting/requestSealing.js +79 -0
- package/dist/esm/hosting/requestSealing.js.map +1 -0
- package/dist/esm/hosting/standingAgent.js +23 -3
- package/dist/esm/hosting/standingAgent.js.map +1 -1
- package/dist/esm/hosting/stream.d.ts +23 -2
- package/dist/esm/hosting/stream.js +5 -1
- package/dist/esm/hosting/stream.js.map +1 -1
- package/dist/esm/hosting/streamHandler.d.ts +26 -7
- package/dist/esm/hosting/streamHandler.js +36 -12
- package/dist/esm/hosting/streamHandler.js.map +1 -1
- package/dist/esm/hosting/types.d.ts +29 -0
- package/dist/esm/hosting/types.js.map +1 -1
- package/dist/esm/identity/requestContext.d.ts +96 -0
- package/dist/esm/identity/requestContext.js +131 -0
- package/dist/esm/identity/requestContext.js.map +1 -0
- package/dist/esm/identity/requestCredentials.d.ts +99 -0
- package/dist/esm/identity/requestCredentials.js +157 -0
- package/dist/esm/identity/requestCredentials.js.map +1 -0
- package/dist/esm/identity/types.d.ts +11 -0
- package/dist/esm/identity/types.js.map +1 -1
- package/dist/esm/identity.d.ts +2 -0
- package/dist/esm/identity.js +5 -0
- package/dist/esm/identity.js.map +1 -1
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js +5 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/injection-engine/buildInjectionEngineSubflow.d.ts +11 -0
- package/dist/esm/injection-engine/buildInjectionEngineSubflow.js +39 -5
- package/dist/esm/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
- package/dist/esm/injection-engine/constrainedEnumPick.js +4 -2
- package/dist/esm/injection-engine/constrainedEnumPick.js.map +1 -1
- package/dist/esm/injection-engine/evaluator.d.ts +6 -0
- package/dist/esm/injection-engine/evaluator.js +19 -1
- package/dist/esm/injection-engine/evaluator.js.map +1 -1
- package/dist/esm/injection-engine/skillGraph.js +26 -8
- package/dist/esm/injection-engine/skillGraph.js.map +1 -1
- package/dist/esm/injection-engine/skillIntent.d.ts +4 -2
- package/dist/esm/injection-engine/skillIntent.js +3 -0
- package/dist/esm/injection-engine/skillIntent.js.map +1 -1
- package/dist/esm/injection-engine/types.d.ts +27 -1
- package/dist/esm/injection-engine/types.js +15 -0
- package/dist/esm/injection-engine/types.js.map +1 -1
- package/dist/esm/lib/abort.d.ts +143 -0
- package/dist/esm/lib/abort.js +322 -0
- package/dist/esm/lib/abort.js.map +1 -0
- package/dist/esm/maps/engagement/parkCard.d.ts +5 -1
- package/dist/esm/maps/engagement/parkCard.js +10 -3
- package/dist/esm/maps/engagement/parkCard.js.map +1 -1
- package/dist/esm/mcp/mcpClient.js +30 -2
- package/dist/esm/mcp/mcpClient.js.map +1 -1
- package/dist/esm/mcp/mcpServe.js +5 -1
- package/dist/esm/mcp/mcpServe.js.map +1 -1
- package/dist/esm/mcp/plainData.d.ts +44 -0
- package/dist/esm/mcp/plainData.js +204 -0
- package/dist/esm/mcp/plainData.js.map +1 -0
- package/dist/esm/mcp/sdkLoadFailure.d.ts +6 -7
- package/dist/esm/mcp/sdkLoadFailure.js +4 -4
- package/dist/esm/mcp/sdkLoadFailure.js.map +1 -1
- package/dist/esm/mcp/toolResult.js +8 -50
- package/dist/esm/mcp/toolResult.js.map +1 -1
- package/dist/esm/mcp/types.d.ts +10 -6
- package/dist/esm/memory/beats/llmExtractor.js +6 -3
- package/dist/esm/memory/beats/llmExtractor.js.map +1 -1
- package/dist/esm/memory/facts/llmFactExtractor.js +6 -3
- package/dist/esm/memory/facts/llmFactExtractor.js.map +1 -1
- package/dist/esm/memory/stages/summarize.js +16 -5
- package/dist/esm/memory/stages/summarize.js.map +1 -1
- package/dist/esm/patterns/LlmRouter.js +10 -5
- package/dist/esm/patterns/LlmRouter.js.map +1 -1
- package/dist/esm/redaction/conversation.js +3 -0
- package/dist/esm/redaction/conversation.js.map +1 -1
- package/dist/esm/redaction/knownStrings.js +1 -0
- package/dist/esm/redaction/knownStrings.js.map +1 -1
- package/dist/esm/reliability/buildReliabilityGateChart.js +7 -1
- package/dist/esm/reliability/buildReliabilityGateChart.js.map +1 -1
- package/dist/esm/resilience/withCircuitBreaker.js +5 -2
- package/dist/esm/resilience/withCircuitBreaker.js.map +1 -1
- package/dist/esm/resilience/withFallback.js +6 -0
- package/dist/esm/resilience/withFallback.js.map +1 -1
- package/dist/esm/resilience/withRetry.js +5 -0
- package/dist/esm/resilience/withRetry.js.map +1 -1
- package/dist/esm/time-travel/servedView.js +1 -1
- package/dist/esm/time-travel/servedView.js.map +1 -1
- package/dist/esm/tools/hostFilled.d.ts +110 -0
- package/dist/esm/tools/hostFilled.js +509 -0
- package/dist/esm/tools/hostFilled.js.map +1 -0
- package/dist/hosting/index.js.map +1 -1
- package/dist/hosting/refusalStatus.js +4 -0
- package/dist/hosting/refusalStatus.js.map +1 -1
- package/dist/hosting/requestSealing.js +83 -0
- package/dist/hosting/requestSealing.js.map +1 -0
- package/dist/hosting/standingAgent.js +23 -3
- package/dist/hosting/standingAgent.js.map +1 -1
- package/dist/hosting/stream.js +5 -1
- package/dist/hosting/stream.js.map +1 -1
- package/dist/hosting/streamHandler.js +36 -12
- package/dist/hosting/streamHandler.js.map +1 -1
- package/dist/hosting/types.js.map +1 -1
- package/dist/identity/requestContext.js +139 -0
- package/dist/identity/requestContext.js.map +1 -0
- package/dist/identity/requestCredentials.js +165 -0
- package/dist/identity/requestCredentials.js.map +1 -0
- package/dist/identity/types.js.map +1 -1
- package/dist/identity.js +13 -1
- package/dist/identity.js.map +1 -1
- package/dist/index.js +15 -4
- package/dist/index.js.map +1 -1
- package/dist/injection-engine/buildInjectionEngineSubflow.js +38 -4
- package/dist/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
- package/dist/injection-engine/constrainedEnumPick.js +4 -2
- package/dist/injection-engine/constrainedEnumPick.js.map +1 -1
- package/dist/injection-engine/evaluator.js +18 -0
- package/dist/injection-engine/evaluator.js.map +1 -1
- package/dist/injection-engine/skillGraph.js +25 -7
- package/dist/injection-engine/skillGraph.js.map +1 -1
- package/dist/injection-engine/skillIntent.js +3 -0
- package/dist/injection-engine/skillIntent.js.map +1 -1
- package/dist/injection-engine/types.js +17 -1
- package/dist/injection-engine/types.js.map +1 -1
- package/dist/lib/abort.js +336 -0
- package/dist/lib/abort.js.map +1 -0
- package/dist/maps/engagement/parkCard.js +10 -3
- package/dist/maps/engagement/parkCard.js.map +1 -1
- package/dist/mcp/mcpClient.js +30 -2
- package/dist/mcp/mcpClient.js.map +1 -1
- package/dist/mcp/mcpServe.js +5 -1
- package/dist/mcp/mcpServe.js.map +1 -1
- package/dist/mcp/plainData.js +208 -0
- package/dist/mcp/plainData.js.map +1 -0
- package/dist/mcp/sdkLoadFailure.js +4 -4
- package/dist/mcp/sdkLoadFailure.js.map +1 -1
- package/dist/mcp/toolResult.js +8 -50
- package/dist/mcp/toolResult.js.map +1 -1
- package/dist/memory/beats/llmExtractor.js +6 -3
- package/dist/memory/beats/llmExtractor.js.map +1 -1
- package/dist/memory/facts/llmFactExtractor.js +6 -3
- package/dist/memory/facts/llmFactExtractor.js.map +1 -1
- package/dist/memory/stages/summarize.js +16 -5
- package/dist/memory/stages/summarize.js.map +1 -1
- package/dist/patterns/LlmRouter.js +9 -4
- package/dist/patterns/LlmRouter.js.map +1 -1
- package/dist/redaction/conversation.js +3 -0
- package/dist/redaction/conversation.js.map +1 -1
- package/dist/redaction/knownStrings.js +1 -0
- package/dist/redaction/knownStrings.js.map +1 -1
- package/dist/reliability/buildReliabilityGateChart.js +7 -1
- package/dist/reliability/buildReliabilityGateChart.js.map +1 -1
- package/dist/resilience/withCircuitBreaker.js +5 -2
- package/dist/resilience/withCircuitBreaker.js.map +1 -1
- package/dist/resilience/withFallback.js +6 -0
- package/dist/resilience/withFallback.js.map +1 -1
- package/dist/resilience/withRetry.js +5 -0
- package/dist/resilience/withRetry.js.map +1 -1
- package/dist/time-travel/servedView.js +1 -1
- package/dist/time-travel/servedView.js.map +1 -1
- package/dist/tools/hostFilled.js +517 -0
- package/dist/tools/hostFilled.js.map +1 -0
- package/dist/types/adapters/llm/AnthropicProvider.d.ts +9 -2
- package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BedrockProvider.d.ts +6 -1
- package/dist/types/adapters/llm/BedrockProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BrowserOpenAIProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/FoundryLocalProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/GeminiProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/InvokeModelGatewayProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/MockProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/OllamaProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/OpenAIProvider.d.ts +6 -1
- package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
- package/dist/types/adapters/mcp/agentcoreRuntime/invoke.d.ts +1 -1
- package/dist/types/adapters/mcp/agentcoreRuntime/invoke.d.ts.map +1 -1
- package/dist/types/adapters/mcp/agentcoreRuntime/transport.d.ts +26 -3
- package/dist/types/adapters/mcp/agentcoreRuntime/transport.d.ts.map +1 -1
- package/dist/types/ag-ui/adapter.d.ts +61 -11
- package/dist/types/ag-ui/adapter.d.ts.map +1 -1
- package/dist/types/ag-ui/framing.d.ts +2 -1
- package/dist/types/ag-ui/framing.d.ts.map +1 -1
- package/dist/types/ag-ui/index.d.ts +6 -4
- package/dist/types/ag-ui/index.d.ts.map +1 -1
- package/dist/types/ag-ui/request.d.ts +86 -7
- package/dist/types/ag-ui/request.d.ts.map +1 -1
- package/dist/types/answer-validation/index.d.ts +2 -1
- package/dist/types/answer-validation/index.d.ts.map +1 -1
- package/dist/types/answer-validation/toolLedger.d.ts +66 -0
- package/dist/types/answer-validation/toolLedger.d.ts.map +1 -0
- package/dist/types/answer-validation/types.d.ts +48 -0
- package/dist/types/answer-validation/types.d.ts.map +1 -1
- package/dist/types/answer-validation/validate.d.ts +2 -2
- package/dist/types/answer-validation/validate.d.ts.map +1 -1
- package/dist/types/classify/typesafe.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts +9 -1
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/LLMCall.d.ts +2 -1
- package/dist/types/core/LLMCall.d.ts.map +1 -1
- package/dist/types/core/RunnerBase.d.ts +39 -8
- 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/buildAgentMessageApiChart.d.ts +16 -0
- package/dist/types/core/agent/buildAgentMessageApiChart.d.ts.map +1 -1
- package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/buildMessageApiChart.d.ts +16 -0
- package/dist/types/core/agent/buildMessageApiChart.d.ts.map +1 -1
- package/dist/types/core/agent/stages/answerValidation.d.ts.map +1 -1
- package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
- package/dist/types/core/agent/stages/routeTurn.d.ts.map +1 -1
- package/dist/types/core/agent/stages/seed.d.ts +7 -0
- package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts +21 -0
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +10 -0
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/agent/window/strategies/summarizeOldest.d.ts.map +1 -1
- package/dist/types/core/agent/window/summarize.d.ts.map +1 -1
- package/dist/types/core/memberRun.d.ts +23 -2
- package/dist/types/core/memberRun.d.ts.map +1 -1
- package/dist/types/core/requestOfRun.d.ts +22 -0
- package/dist/types/core/requestOfRun.d.ts.map +1 -0
- package/dist/types/core/runner.d.ts +15 -3
- package/dist/types/core/runner.d.ts.map +1 -1
- package/dist/types/core/slots/buildToolsSlot.d.ts +0 -16
- package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
- package/dist/types/core-flow/Conditional.d.ts +2 -1
- package/dist/types/core-flow/Conditional.d.ts.map +1 -1
- package/dist/types/core-flow/Graph.d.ts +2 -1
- package/dist/types/core-flow/Graph.d.ts.map +1 -1
- package/dist/types/core-flow/Loop.d.ts +2 -1
- package/dist/types/core-flow/Loop.d.ts.map +1 -1
- package/dist/types/core-flow/Parallel.d.ts +2 -1
- package/dist/types/core-flow/Parallel.d.ts.map +1 -1
- package/dist/types/core-flow/Sequence.d.ts +2 -1
- package/dist/types/core-flow/Sequence.d.ts.map +1 -1
- package/dist/types/core-flow/Workflow.d.ts +2 -1
- package/dist/types/core-flow/Workflow.d.ts.map +1 -1
- package/dist/types/doors/security.d.ts +2 -1
- package/dist/types/doors/security.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +4 -2
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/hosting/index.d.ts +1 -0
- package/dist/types/hosting/index.d.ts.map +1 -1
- package/dist/types/hosting/protocolAdapter.d.ts +4 -1
- package/dist/types/hosting/protocolAdapter.d.ts.map +1 -1
- package/dist/types/hosting/refusalStatus.d.ts.map +1 -1
- package/dist/types/hosting/requestSealing.d.ts +66 -0
- package/dist/types/hosting/requestSealing.d.ts.map +1 -0
- package/dist/types/hosting/standingAgent.d.ts.map +1 -1
- package/dist/types/hosting/stream.d.ts +23 -2
- package/dist/types/hosting/stream.d.ts.map +1 -1
- package/dist/types/hosting/streamHandler.d.ts +26 -7
- package/dist/types/hosting/streamHandler.d.ts.map +1 -1
- package/dist/types/hosting/types.d.ts +29 -0
- package/dist/types/hosting/types.d.ts.map +1 -1
- package/dist/types/identity/requestContext.d.ts +97 -0
- package/dist/types/identity/requestContext.d.ts.map +1 -0
- package/dist/types/identity/requestCredentials.d.ts +100 -0
- package/dist/types/identity/requestCredentials.d.ts.map +1 -0
- package/dist/types/identity/types.d.ts +11 -0
- package/dist/types/identity/types.d.ts.map +1 -1
- package/dist/types/identity.d.ts +2 -0
- package/dist/types/identity.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/injection-engine/buildInjectionEngineSubflow.d.ts +11 -0
- package/dist/types/injection-engine/buildInjectionEngineSubflow.d.ts.map +1 -1
- package/dist/types/injection-engine/constrainedEnumPick.d.ts.map +1 -1
- package/dist/types/injection-engine/evaluator.d.ts +6 -0
- package/dist/types/injection-engine/evaluator.d.ts.map +1 -1
- package/dist/types/injection-engine/skillIntent.d.ts +4 -2
- package/dist/types/injection-engine/skillIntent.d.ts.map +1 -1
- package/dist/types/injection-engine/types.d.ts +27 -1
- package/dist/types/injection-engine/types.d.ts.map +1 -1
- package/dist/types/lib/abort.d.ts +144 -0
- package/dist/types/lib/abort.d.ts.map +1 -0
- package/dist/types/maps/engagement/parkCard.d.ts +5 -1
- package/dist/types/maps/engagement/parkCard.d.ts.map +1 -1
- package/dist/types/mcp/mcpServe.d.ts.map +1 -1
- package/dist/types/mcp/plainData.d.ts +45 -0
- package/dist/types/mcp/plainData.d.ts.map +1 -0
- package/dist/types/mcp/sdkLoadFailure.d.ts +6 -7
- package/dist/types/mcp/sdkLoadFailure.d.ts.map +1 -1
- package/dist/types/mcp/toolResult.d.ts.map +1 -1
- package/dist/types/mcp/types.d.ts +10 -6
- package/dist/types/mcp/types.d.ts.map +1 -1
- package/dist/types/memory/beats/llmExtractor.d.ts.map +1 -1
- package/dist/types/memory/facts/llmFactExtractor.d.ts.map +1 -1
- package/dist/types/memory/stages/summarize.d.ts.map +1 -1
- package/dist/types/patterns/LlmRouter.d.ts.map +1 -1
- package/dist/types/redaction/conversation.d.ts.map +1 -1
- package/dist/types/redaction/knownStrings.d.ts.map +1 -1
- package/dist/types/reliability/buildReliabilityGateChart.d.ts.map +1 -1
- package/dist/types/resilience/withCircuitBreaker.d.ts.map +1 -1
- package/dist/types/resilience/withFallback.d.ts.map +1 -1
- package/dist/types/resilience/withRetry.d.ts.map +1 -1
- package/dist/types/tools/hostFilled.d.ts +111 -0
- package/dist/types/tools/hostFilled.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -3,13 +3,17 @@ import { applyOutputSchema } from './outputSchema.js';
|
|
|
3
3
|
import { copyJson as jsonCopy, ownData } from '../lib/boundedJson.js';
|
|
4
4
|
import { computeArtifactDigest } from '../artifacts/payload.js';
|
|
5
5
|
import { createAnswerEvidenceResolver } from './evidence.js';
|
|
6
|
+
import { toolCallsView } from './toolLedger.js';
|
|
6
7
|
const DEFAULT_LIMITS = Object.freeze({
|
|
7
8
|
maxReads: 16,
|
|
8
9
|
maxBytes: 4 * 1024 * 1024,
|
|
9
10
|
maxChecks: 100,
|
|
10
11
|
maxCandidateBytes: 1024 * 1024,
|
|
11
12
|
timeoutMs: 5000,
|
|
13
|
+
maxToolCalls: 256,
|
|
12
14
|
});
|
|
15
|
+
/** The ceiling `limits.maxToolCalls` may be raised to. */
|
|
16
|
+
const MAX_TOOL_CALLS = 10_000;
|
|
13
17
|
const encoder = new TextEncoder();
|
|
14
18
|
const dispositions = new Set(['checked-pass', 'checked-fail', 'not-applicable', 'unreachable']);
|
|
15
19
|
function text(value, max) {
|
|
@@ -36,7 +40,9 @@ export function resolveAnswerValidation(options) {
|
|
|
36
40
|
if (typeof value !== 'number' ||
|
|
37
41
|
!Number.isSafeInteger(value) ||
|
|
38
42
|
value <= 0 ||
|
|
39
|
-
(key === 'timeoutMs' && value > 2147483647)
|
|
43
|
+
(key === 'timeoutMs' && value > 2147483647) ||
|
|
44
|
+
// Each landing rewrites the ledger, so its cost grows with the square.
|
|
45
|
+
(key === 'maxToolCalls' && value > MAX_TOOL_CALLS))
|
|
40
46
|
throw new Error(`answerValidation.limits.${key} must be a positive bounded integer.`);
|
|
41
47
|
limits[key] = value;
|
|
42
48
|
}
|
|
@@ -96,8 +102,15 @@ function readChecks(value, config, resolved) {
|
|
|
96
102
|
* contract. It is the exact JSON string whose detached value was checked;
|
|
97
103
|
* callers must not reparse through a transforming schema or rewrite afterward.
|
|
98
104
|
*/
|
|
99
|
-
export async function executeAnswerValidation(raw, parser, config, store, scope, signal) {
|
|
105
|
+
export async function executeAnswerValidation(raw, parser, config, store, scope, signal, toolCalls) {
|
|
100
106
|
const controller = new AbortController();
|
|
107
|
+
// Detached and frozen before the callback exists: the check reads a copy of
|
|
108
|
+
// this run's ledger, never the run's state.
|
|
109
|
+
const calls = toolCallsView(toolCalls, config.limits.maxToolCalls);
|
|
110
|
+
// A check that READ an incomplete list cannot pass on it: the verdict is
|
|
111
|
+
// unverified whatever the check returned (fail closed). A check that never
|
|
112
|
+
// looks at the list is not held to it.
|
|
113
|
+
let toolCallsRead = false;
|
|
101
114
|
const evidence = createAnswerEvidenceResolver(store, scope, config.limits, controller.signal);
|
|
102
115
|
let reason;
|
|
103
116
|
let schemaAccepted = false;
|
|
@@ -161,7 +174,14 @@ export async function executeAnswerValidation(raw, parser, config, store, scope,
|
|
|
161
174
|
if (!active || controller.signal.aborted)
|
|
162
175
|
return;
|
|
163
176
|
candidateDigest = digest;
|
|
164
|
-
const returned = await config.validate(candidate, Object.freeze({
|
|
177
|
+
const returned = await config.validate(candidate, Object.freeze({
|
|
178
|
+
signal: controller.signal,
|
|
179
|
+
artifacts: evidence.resolver,
|
|
180
|
+
get toolCalls() {
|
|
181
|
+
toolCallsRead = true;
|
|
182
|
+
return calls;
|
|
183
|
+
},
|
|
184
|
+
}));
|
|
165
185
|
if (!active || controller.signal.aborted)
|
|
166
186
|
return;
|
|
167
187
|
if (Date.now() >= deadline) {
|
|
@@ -195,6 +215,8 @@ export async function executeAnswerValidation(raw, parser, config, store, scope,
|
|
|
195
215
|
const notApplicable = checks.filter((check) => check.disposition === 'not-applicable').length;
|
|
196
216
|
if (!reason && evidence.failureReason())
|
|
197
217
|
reason = `evidence-${evidence.failureReason()}`;
|
|
218
|
+
if (!reason && toolCallsRead && !calls.complete)
|
|
219
|
+
reason = 'tool-calls-incomplete';
|
|
198
220
|
if (!reason && checked === 0)
|
|
199
221
|
reason = 'no-comparable-checks';
|
|
200
222
|
if (!reason && unreachable > 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/answer-validation/validate.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,iBAAiB,EAA2B,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/answer-validation/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
* `Authorization` header only: never in an error, never in a log.
|
|
33
33
|
*/
|
|
34
34
|
import { sleep } from '../lib/sleep.js';
|
|
35
|
+
import { abortErrorOf, linkedController, throwIfAborted, untilAborted } from '../lib/abort.js';
|
|
35
36
|
import { isSlash, trimTrailing } from '../lib/linearText.js';
|
|
36
37
|
import { ClassifierError, } from './types.js';
|
|
37
38
|
const DEFAULT_BASE_URL = 'https://api.typesafe.ai';
|
|
@@ -89,40 +90,54 @@ export function typesafe(options = {}) {
|
|
|
89
90
|
const startedAt = Date.now();
|
|
90
91
|
for (let attempt = 0;; attempt++) {
|
|
91
92
|
throwIfAborted(signal);
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
// The attempt's own controller follows the caller's signal for the
|
|
94
|
+
// WHOLE attempt — the body read included — and is unlinked when the
|
|
95
|
+
// attempt ends (lib/abort.ts · linkedController). Every wait is raced
|
|
96
|
+
// against the caller's signal, so a classification that lands after
|
|
97
|
+
// the abort is refused, never returned.
|
|
98
|
+
const call = linkedController(signal);
|
|
99
|
+
let status;
|
|
100
|
+
let text;
|
|
101
|
+
try {
|
|
102
|
+
const response = await attemptOnce(url, headers, body, timeout, signal, call.controller);
|
|
103
|
+
if (response.ok) {
|
|
104
|
+
const wire = await untilAborted(readJson(response), signal);
|
|
105
|
+
return mapResult(wire, Date.now() - startedAt);
|
|
106
|
+
}
|
|
107
|
+
status = response.status;
|
|
108
|
+
text = await untilAborted(response.text().catch(() => ''), signal);
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
call.unlink();
|
|
96
112
|
}
|
|
97
|
-
const status = response.status;
|
|
98
|
-
const text = await response.text().catch(() => '');
|
|
99
113
|
const retryable = RETRYABLE_STATUSES.has(status);
|
|
100
114
|
if (!retryable || attempt >= maxRetries) {
|
|
101
115
|
throw new ClassifierError(`typesafe: HTTP ${status}${text ? ` — ${redact(text.slice(0, ERROR_BODY_CHARS), apiKey)}` : ''}`, { status, retryable });
|
|
102
116
|
}
|
|
103
|
-
await sleep(retryDelayMs * 2 ** attempt, signal,
|
|
117
|
+
await sleep(retryDelayMs * 2 ** attempt, signal, abortErrorOf);
|
|
104
118
|
}
|
|
105
119
|
},
|
|
106
120
|
};
|
|
107
121
|
}
|
|
108
122
|
// ─── One attempt ───────────────────────────────────────────────────────
|
|
109
|
-
/**
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
123
|
+
/**
|
|
124
|
+
* One HTTP attempt under the per-attempt timeout (headers only) and the
|
|
125
|
+
* caller's signal. `controller` is the attempt's own, already following the
|
|
126
|
+
* caller's signal; the timeout aborts it here.
|
|
127
|
+
*/
|
|
128
|
+
async function attemptOnce(url, headers, body, timeout, signal, controller) {
|
|
114
129
|
const timer = setTimeout(() => controller.abort(new Error('timeout')), timeout);
|
|
115
130
|
try {
|
|
116
|
-
return await fetch(url, { method: 'POST', headers, body, signal: controller.signal });
|
|
131
|
+
return await untilAborted(fetch(url, { method: 'POST', headers, body, signal: controller.signal }), signal);
|
|
117
132
|
}
|
|
118
133
|
catch (err) {
|
|
134
|
+
// The caller's abort: theirs to read, never wrapped as a classifier failure.
|
|
119
135
|
if (signal?.aborted)
|
|
120
|
-
throw
|
|
136
|
+
throw abortErrorOf(signal);
|
|
121
137
|
throw new ClassifierError(`typesafe: request failed — ${err instanceof Error ? err.message : String(err)}`, { retryable: false });
|
|
122
138
|
}
|
|
123
139
|
finally {
|
|
124
140
|
clearTimeout(timer);
|
|
125
|
-
signal?.removeEventListener('abort', onAbort);
|
|
126
141
|
}
|
|
127
142
|
}
|
|
128
143
|
async function readJson(response) {
|
|
@@ -133,13 +148,6 @@ async function readJson(response) {
|
|
|
133
148
|
throw new ClassifierError(`typesafe: response was not JSON — ${err instanceof Error ? err.message : String(err)}`, { status: response.status, retryable: false });
|
|
134
149
|
}
|
|
135
150
|
}
|
|
136
|
-
function throwIfAborted(signal) {
|
|
137
|
-
if (signal?.aborted)
|
|
138
|
-
throw abortReason(signal);
|
|
139
|
-
}
|
|
140
|
-
function abortReason(signal) {
|
|
141
|
-
return signal.reason ?? new Error('aborted');
|
|
142
|
-
}
|
|
143
151
|
function readEnvKey() {
|
|
144
152
|
return typeof process !== 'undefined' ? process.env?.TYPESAFE_API_KEY : undefined;
|
|
145
153
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesafe.js","sourceRoot":"","sources":["../../../src/classify/typesafe.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"typesafe.js","sourceRoot":"","sources":["../../../src/classify/typesafe.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/core/Agent.d.ts
CHANGED
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
* agentfootprint.stream.tool_start / tool_end
|
|
14
14
|
* agentfootprint.context.* (via ContextRecorder)
|
|
15
15
|
*/
|
|
16
|
-
import { type CombinedNarrativeEntry, type FlowchartCheckpoint, type ObserverDrainResult, type RedactionPolicy, type
|
|
16
|
+
import { type CombinedNarrativeEntry, type FlowchartCheckpoint, type ObserverDrainResult, type RedactionPolicy, type RuntimeSnapshot } from 'footprintjs';
|
|
17
|
+
import type { RunOptions } from './runner.js';
|
|
17
18
|
import type { CachePolicy, CacheStrategy } from '../cache/types.js';
|
|
18
19
|
import type { ReliabilityConfig } from '../reliability/types.js';
|
|
19
20
|
import { type RunnerPauseOutcome } from './pause.js';
|
|
@@ -301,6 +302,13 @@ export declare class Agent extends RunnerBase<AgentInput, AgentOutput> {
|
|
|
301
302
|
* chart mounted in a composition) never stamps a clock nobody declared for
|
|
302
303
|
* it (`seedClockDraft`). */
|
|
303
304
|
private runClockDraft;
|
|
305
|
+
/** The incoming request each of this agent's OWN scopes serves — recorded
|
|
306
|
+
* by the executor that made the scope (`createExecutor`), so a scope keeps
|
|
307
|
+
* ITS run's request for as long as it lives: a stage still running after
|
|
308
|
+
* its run was aborted can never be served the next run's request. A stage
|
|
309
|
+
* mounted in another runner's executor reads its run's request by link
|
|
310
|
+
* (`memberRun.ts`). Never written to scope. */
|
|
311
|
+
private readonly scopeRequests;
|
|
304
312
|
/** The `time` the CURRENT resume passed, as read — TAKEN once by the first
|
|
305
313
|
* ToolCalls pass of the resumed leg (`ToolCallsHandlerDeps.time`), and
|
|
306
314
|
* cleared when `run()` or `resume()` ends. */
|
package/dist/esm/core/Agent.js
CHANGED
|
@@ -147,7 +147,7 @@ import { InvalidRunInputError, normalizeRunInput } from './runInput.js';
|
|
|
147
147
|
import { clockOf } from '../time/rows.js';
|
|
148
148
|
import { draftClock, readRunTime, readTimeOptions, } from '../time/clock.js';
|
|
149
149
|
import { buildOutputRetryStage } from './agent/stages/outputRetry.js';
|
|
150
|
-
import { RunnerBase, makeRunId,
|
|
150
|
+
import { RunnerBase, makeRunId, runSignalOf } from './RunnerBase.js';
|
|
151
151
|
import { clampIterations, validateMemoryIdUniqueness, validateToolNameUniqueness, } from './agent/validators.js';
|
|
152
152
|
import { buildRouteDeciderStage } from './agent/stages/route.js';
|
|
153
153
|
import { withAnswerValidation } from './agent/stages/answerValidation.js';
|
|
@@ -163,7 +163,8 @@ import { isRefused, rulesOf } from '../tools/declare.js';
|
|
|
163
163
|
import { honestyLayersOf, readInputsLayerOption, } from './agent/honesty/armed.js';
|
|
164
164
|
import { answerFoldReads } from './agent/honesty/mounts.js';
|
|
165
165
|
import { readsMessageFrom } from './messageFrom.js';
|
|
166
|
-
import { memberIdentityIn, readsParentRun } from './memberRun.js';
|
|
166
|
+
import { memberIdentityIn, memberRequestIn, readsParentRun } from './memberRun.js';
|
|
167
|
+
import { requestOf } from './requestOfRun.js';
|
|
167
168
|
import { carriesArgumentView } from './toolShownArgs.js';
|
|
168
169
|
import { assertMaxToolResultChars } from './agent/toolResultCap.js';
|
|
169
170
|
import { buildAgentChart } from './agent/buildAgentChart.js';
|
|
@@ -367,6 +368,13 @@ export class Agent extends RunnerBase {
|
|
|
367
368
|
* chart mounted in a composition) never stamps a clock nobody declared for
|
|
368
369
|
* it (`seedClockDraft`). */
|
|
369
370
|
runClockDraft;
|
|
371
|
+
/** The incoming request each of this agent's OWN scopes serves — recorded
|
|
372
|
+
* by the executor that made the scope (`createExecutor`), so a scope keeps
|
|
373
|
+
* ITS run's request for as long as it lives: a stage still running after
|
|
374
|
+
* its run was aborted can never be served the next run's request. A stage
|
|
375
|
+
* mounted in another runner's executor reads its run's request by link
|
|
376
|
+
* (`memberRun.ts`). Never written to scope. */
|
|
377
|
+
scopeRequests = new WeakMap();
|
|
370
378
|
/** The `time` the CURRENT resume passed, as read — TAKEN once by the first
|
|
371
379
|
* ToolCalls pass of the resumed leg (`ToolCallsHandlerDeps.time`), and
|
|
372
380
|
* cleared when `run()` or `resume()` ends. */
|
|
@@ -1578,6 +1586,8 @@ export class Agent extends RunnerBase {
|
|
|
1578
1586
|
// not at the resume of a pause it would have made impossible to resume.
|
|
1579
1587
|
assertIdentityShape(runInput.identity, 'Agent.run');
|
|
1580
1588
|
assertIdentityShape(options?.identity, 'Agent.run');
|
|
1589
|
+
// The incoming request, sealed — refused here when `requestContext` did not build it.
|
|
1590
|
+
const runRequest = requestOf(options, 'Agent.run');
|
|
1581
1591
|
// A policy handed down for this run is refused here, before anything moves,
|
|
1582
1592
|
// by the same check `Agent.create({ redact })` gets.
|
|
1583
1593
|
if (options?.redact !== undefined)
|
|
@@ -1586,7 +1596,9 @@ export class Agent extends RunnerBase {
|
|
|
1586
1596
|
// starts — a run with no zone anywhere runs with its zone UNKNOWN (G15),
|
|
1587
1597
|
// never on the server's zone.
|
|
1588
1598
|
const clockDraft = this.clockDraftFor(runInput.time ?? options?.time, 'Agent.run');
|
|
1589
|
-
|
|
1599
|
+
// The engine's options; the run's signal (and its deadline) is armed just
|
|
1600
|
+
// before the run starts and released in its `finally` (`runSignalOf`).
|
|
1601
|
+
const engineOptions = withoutTime(options);
|
|
1590
1602
|
// Timing next, and before the executor exists: both of these refuse a call
|
|
1591
1603
|
// that would have SUCCEEDED into corrupted per-instance state or an
|
|
1592
1604
|
// orphaned human question. See ./conversation.ts for why they are throws.
|
|
@@ -1619,7 +1631,7 @@ export class Agent extends RunnerBase {
|
|
|
1619
1631
|
// declared at file end via hoisting)
|
|
1620
1632
|
this.answeredAsk = undefined;
|
|
1621
1633
|
this.resumePassedTime = undefined;
|
|
1622
|
-
const executor = this.createExecutor(engineOptions);
|
|
1634
|
+
const executor = this.createExecutor(engineOptions, runRequest);
|
|
1623
1635
|
this.inFlightRunId = this.currentRunContext.runId;
|
|
1624
1636
|
// One disposition ledger per run (9.60.0) — registration mirrors what
|
|
1625
1637
|
// this agent's configuration makes applicable; dev posture runs the
|
|
@@ -1648,6 +1660,9 @@ export class Agent extends RunnerBase {
|
|
|
1648
1660
|
// Set here, beside the `try` whose `finally` clears it, so no exit path
|
|
1649
1661
|
// can leave it behind for a turn this `run()` did not start.
|
|
1650
1662
|
this.runClockDraft = clockDraft;
|
|
1663
|
+
// Armed here, beside the `try` whose `finally` releases it: no refused
|
|
1664
|
+
// call above can leave a deadline running.
|
|
1665
|
+
const runSignal = runSignalOf(engineOptions);
|
|
1651
1666
|
try {
|
|
1652
1667
|
const result = await executor.run({
|
|
1653
1668
|
input: {
|
|
@@ -1666,7 +1681,7 @@ export class Agent extends RunnerBase {
|
|
|
1666
1681
|
// budget — give it headroom (×2 + 10 covers double-hop loop shapes).
|
|
1667
1682
|
// Consumer-provided options win.
|
|
1668
1683
|
maxIterations: this.maxIterations * 2 + 10,
|
|
1669
|
-
...(
|
|
1684
|
+
...(runSignal.options ?? {}),
|
|
1670
1685
|
});
|
|
1671
1686
|
const finalized = this.finalizeResult(executor, result);
|
|
1672
1687
|
if (typeof finalized === 'string')
|
|
@@ -1763,6 +1778,8 @@ export class Agent extends RunnerBase {
|
|
|
1763
1778
|
throw cause;
|
|
1764
1779
|
}
|
|
1765
1780
|
finally {
|
|
1781
|
+
// The run's deadline and signal links end with the run (`runSignalOf`).
|
|
1782
|
+
runSignal.release();
|
|
1766
1783
|
// The time layer's per-run inputs end with the run: a stale draft would
|
|
1767
1784
|
// be stamped by the next seed this agent did not start (a composition
|
|
1768
1785
|
// mounting its chart) as if the app had declared it.
|
|
@@ -1927,6 +1944,10 @@ export class Agent extends RunnerBase {
|
|
|
1927
1944
|
// else's conversation.
|
|
1928
1945
|
this.assertNotRunning('Agent.resumeOnError');
|
|
1929
1946
|
this.assertNoPendingQuestion('Agent.resumeOnError');
|
|
1947
|
+
// A request `run()` would refuse is refused HERE, before the side channel
|
|
1948
|
+
// below is armed — a refusal after it would leave the restored history for
|
|
1949
|
+
// the next, unrelated run.
|
|
1950
|
+
requestOf(options, 'Agent.resumeOnError');
|
|
1930
1951
|
// Stash the checkpointed history on the side channel; the seed function
|
|
1931
1952
|
// reads + clears it before scope.history initializes. No message is
|
|
1932
1953
|
// appended — the failing run's message is already the last user turn in
|
|
@@ -2118,6 +2139,9 @@ export class Agent extends RunnerBase {
|
|
|
2118
2139
|
assertIdentityShape(options?.identity, 'Agent.resume');
|
|
2119
2140
|
if (options?.redact !== undefined)
|
|
2120
2141
|
assertRedactionPolicy(options.redact, 'Agent.resume');
|
|
2142
|
+
// The incoming request is the RESUMING caller's — never the paused one's:
|
|
2143
|
+
// a checkpoint carries no request, and a resume without one serves none.
|
|
2144
|
+
const resumeRequest = requestOf(options, 'Agent.resume');
|
|
2121
2145
|
// Native guard lands with the new checkpoint protocol, before its runtime
|
|
2122
2146
|
// opt-in is mounted. Until then no Agent is armed to consume this carrier.
|
|
2123
2147
|
requireVerificationOnResume(checkpoint.sharedState ?? {}, false);
|
|
@@ -2133,7 +2157,7 @@ export class Agent extends RunnerBase {
|
|
|
2133
2157
|
// moves; it is never applied — the paused turn's clock is kept, and a
|
|
2134
2158
|
// differing value is recorded by the ToolCalls resume door.
|
|
2135
2159
|
const passedTime = this.passedTimeFor(options?.time, 'Agent.resume');
|
|
2136
|
-
options =
|
|
2160
|
+
options = withoutTime(options);
|
|
2137
2161
|
const gate = pauseDemandsDecision(checkpoint.pauseData);
|
|
2138
2162
|
if (gate && !isCheckInDecision(input))
|
|
2139
2163
|
throw new DecisionRequiredError(gate, input);
|
|
@@ -2244,7 +2268,7 @@ export class Agent extends RunnerBase {
|
|
|
2244
2268
|
// (and only when) it completes.
|
|
2245
2269
|
const recording = this.startRunRecording();
|
|
2246
2270
|
this.answeredAsk = answeredAsk;
|
|
2247
|
-
const executor = this.createExecutor(resumeOptions);
|
|
2271
|
+
const executor = this.createExecutor(resumeOptions, resumeRequest);
|
|
2248
2272
|
// The leg's WHOLE policy rides its own state too (`runRedaction`), so a
|
|
2249
2273
|
// later pause carries what this leg was covered by — names the resume
|
|
2250
2274
|
// added included — and a third leg is never less covered than this one.
|
|
@@ -2279,8 +2303,11 @@ export class Agent extends RunnerBase {
|
|
|
2279
2303
|
runRedaction: carriedRunPolicy(leg.policy),
|
|
2280
2304
|
},
|
|
2281
2305
|
};
|
|
2306
|
+
// A resume arms its own run signal and deadline (`runSignalOf`), released in
|
|
2307
|
+
// the `finally` below.
|
|
2308
|
+
const runSignal = runSignalOf(resumeOptions);
|
|
2282
2309
|
try {
|
|
2283
|
-
const result = await executor.resume(legCheckpoint, input,
|
|
2310
|
+
const result = await executor.resume(legCheckpoint, input, runSignal.options);
|
|
2284
2311
|
const finalized = this.finalizeResult(executor, result);
|
|
2285
2312
|
if (typeof finalized === 'string')
|
|
2286
2313
|
this.lastRunAnswer = finalized;
|
|
@@ -2298,6 +2325,7 @@ export class Agent extends RunnerBase {
|
|
|
2298
2325
|
throw cause;
|
|
2299
2326
|
}
|
|
2300
2327
|
finally {
|
|
2328
|
+
runSignal.release();
|
|
2301
2329
|
// A resume's passed `time` ends with the resume (the fresh-run path's terms).
|
|
2302
2330
|
this.resumePassedTime = undefined;
|
|
2303
2331
|
// Same terms as the fresh-run path: rows on every exit, before the
|
|
@@ -2903,8 +2931,9 @@ export class Agent extends RunnerBase {
|
|
|
2903
2931
|
return checkerGoverns(this.permissionChecker, 'skill_read');
|
|
2904
2932
|
}
|
|
2905
2933
|
// FOLD (resolver) · computes "which skill ids may this caller be told about".
|
|
2906
|
-
// The OWNER of the published fact is src/
|
|
2907
|
-
// resolves it once per iteration
|
|
2934
|
+
// The OWNER of the published fact is src/injection-engine/buildInjectionEngineSubflow.ts · hiddenSkillIdsOf
|
|
2935
|
+
// (the engine's Gather stage), which resolves it once per iteration, before the cursor and the
|
|
2936
|
+
// evaluator decide, and publishes it on scope; every model-facing composer reads THAT.
|
|
2908
2937
|
// Second caller: the turn router (stages/routeTurn.ts · resolveHidden) resolves it again, with different
|
|
2909
2938
|
// failure semantics, and publishes nothing — two sweeps of one policy question per turn.
|
|
2910
2939
|
/**
|
|
@@ -3046,7 +3075,7 @@ export class Agent extends RunnerBase {
|
|
|
3046
3075
|
`not in this release. Use { strategy: 'instruct', retries: N } on this provider — it ` +
|
|
3047
3076
|
`works on every wire — or run the native strategy on a provider that declares it.`);
|
|
3048
3077
|
}
|
|
3049
|
-
createExecutor(runOptions) {
|
|
3078
|
+
createExecutor(runOptions, request) {
|
|
3050
3079
|
this.assertDeliverableRoles();
|
|
3051
3080
|
this.assertForcedToolChoiceSupported();
|
|
3052
3081
|
this.assertNativeOutputSchemaSupported();
|
|
@@ -3111,14 +3140,19 @@ export class Agent extends RunnerBase {
|
|
|
3111
3140
|
// (`memberRun.ts`) — per scope, never by instance state.
|
|
3112
3141
|
const scopeFactory = redaction.scopeFactoryFor(spec);
|
|
3113
3142
|
const ownScopes = this.ownScopes;
|
|
3143
|
+
const scopeRequests = this.scopeRequests;
|
|
3114
3144
|
const executor = new FlowChartExecutor(spec, {
|
|
3115
3145
|
readTracking: this.readTracking,
|
|
3116
3146
|
commitValues: this.commitValues,
|
|
3117
3147
|
writeProvenance: this.writeProvenance,
|
|
3118
3148
|
scopeFactory: (...args) => {
|
|
3119
3149
|
const scope = scopeFactory(...args);
|
|
3120
|
-
if (scope !== null && typeof scope === 'object')
|
|
3150
|
+
if (scope !== null && typeof scope === 'object') {
|
|
3121
3151
|
ownScopes.add(scope);
|
|
3152
|
+
// THIS executor's request, bound to the scope for its whole life.
|
|
3153
|
+
if (request !== undefined)
|
|
3154
|
+
scopeRequests.set(scope, request);
|
|
3155
|
+
}
|
|
3122
3156
|
return scope;
|
|
3123
3157
|
},
|
|
3124
3158
|
});
|
|
@@ -4095,6 +4129,9 @@ export class Agent extends RunnerBase {
|
|
|
4095
4129
|
// on ruled tools, and the run's `messageFrom` constant is written — only
|
|
4096
4130
|
// under the arm (refused at build without the inputs layer).
|
|
4097
4131
|
...(this.argumentSourcesArmed === true && { argumentSources: true }),
|
|
4132
|
+
// The answer check's tool-call ledger — value-conditional, so an agent
|
|
4133
|
+
// without `answerValidation` hands seed the deps it always did.
|
|
4134
|
+
...(this.answerValidationConfig !== undefined && { toolCallLedger: true }),
|
|
4098
4135
|
get consumePendingResumeFindingsLedger() {
|
|
4099
4136
|
return ledgerRestoreArmed ? consumeResumeLedger : undefined;
|
|
4100
4137
|
},
|
|
@@ -4360,8 +4397,15 @@ export class Agent extends RunnerBase {
|
|
|
4360
4397
|
// never drift from the verdicts. Open ids are fixed after build, so they
|
|
4361
4398
|
// are computed once, exactly as the offer builder does.
|
|
4362
4399
|
const openForReachable = this.skillGraphReachable ? this.openSkillIds() : [];
|
|
4400
|
+
// Per-role skill visibility (9.11.0). The RESOLVER is handed to the
|
|
4401
|
+
// Injection Engine, the fact's one owner: its Gather stage resolves the
|
|
4402
|
+
// ids once per iteration, BEFORE anything decides, so the cursor and the
|
|
4403
|
+
// evaluator refuse a hidden skill on every activation path; the mount
|
|
4404
|
+
// publishes them on scope for every model-facing composer after it.
|
|
4405
|
+
const hiddenSkillIdsForEngine = this.hiddenSkillIdsNow();
|
|
4363
4406
|
const injectionEngineSubflow = buildInjectionEngineSubflow({
|
|
4364
4407
|
injections: this.injections,
|
|
4408
|
+
...(hiddenSkillIdsForEngine && { hiddenSkillIds: hiddenSkillIdsForEngine }),
|
|
4365
4409
|
...(this.skillGraphNextSkill && { nextSkill: this.skillGraphNextSkill }),
|
|
4366
4410
|
...(this.skillGraphExplainNextSkill && {
|
|
4367
4411
|
explainNextSkill: this.skillGraphExplainNextSkill,
|
|
@@ -4475,10 +4519,10 @@ export class Agent extends RunnerBase {
|
|
|
4475
4519
|
notServed: notServedResult,
|
|
4476
4520
|
});
|
|
4477
4521
|
const readSkillFor = this.readSkillOfferFor();
|
|
4478
|
-
// Per-role skill visibility. The
|
|
4479
|
-
//
|
|
4480
|
-
//
|
|
4481
|
-
// description is NOT the only reader — the read_skill gate's refusals, the
|
|
4522
|
+
// Per-role skill visibility. The Injection Engine resolves the ids once per
|
|
4523
|
+
// iteration and publishes them on scope (`buildInjectionEngineSubflow.ts` ·
|
|
4524
|
+
// `hiddenSkillIdsOf`); the tools slot reads that published set through its
|
|
4525
|
+
// mount. Since 9.86.0 the description is NOT the only reader — the read_skill gate's refusals, the
|
|
4482
4526
|
// `skill.rejected` payload, the propose-transition refusal and the dispatch
|
|
4483
4527
|
// roster all filter through that published set
|
|
4484
4528
|
// (`stages/toolCalls.ts` · "── Skill-graph read_skill GATE" the gate, `toolCalls.ts` ·
|
|
@@ -4488,7 +4532,6 @@ export class Agent extends RunnerBase {
|
|
|
4488
4532
|
// the self-call notice's move offer through them; the notice no longer names
|
|
4489
4533
|
// a destination at all (see `selfCallNotice`), so there is nothing left to
|
|
4490
4534
|
// filter and the cache went with the clause that needed it.
|
|
4491
|
-
const hiddenSkillIds = this.hiddenSkillIdsNow();
|
|
4492
4535
|
// Registration-time owner stamps (9.60.0) — the identity edges the
|
|
4493
4536
|
// integrity checks read. Built once per chart from the registry.
|
|
4494
4537
|
const toolOwners = new Map(registry
|
|
@@ -4558,7 +4601,6 @@ export class Agent extends RunnerBase {
|
|
|
4558
4601
|
toolClaimants,
|
|
4559
4602
|
servedTools,
|
|
4560
4603
|
...(readSkillFor && { readSkillFor }),
|
|
4561
|
-
...(hiddenSkillIds && { hiddenSkillIds }),
|
|
4562
4604
|
...(budget?.tools !== undefined && { budgetCap: budget.tools }),
|
|
4563
4605
|
// Steps (9.18.0): per-step narrowing + banner + the skip_step offer.
|
|
4564
4606
|
...(stepPlanFor !== undefined && { stepPlanFor }),
|
|
@@ -4919,6 +4961,12 @@ export class Agent extends RunnerBase {
|
|
|
4919
4961
|
toolClaimants,
|
|
4920
4962
|
...(permissionChecker && { permissionChecker }),
|
|
4921
4963
|
...(credentialProvider && { credentialProvider }),
|
|
4964
|
+
// The request a call's credential is read for: this agent's own run's,
|
|
4965
|
+
// or — on a mount — the run its link names (`memberRun.ts`). An accessor,
|
|
4966
|
+
// because the chart is built once and the request is per run.
|
|
4967
|
+
...(credentialProvider && {
|
|
4968
|
+
currentRequest: (scope) => this.ownScopes.has(scope) ? this.scopeRequests.get(scope) : memberRequestIn(scope),
|
|
4969
|
+
}),
|
|
4922
4970
|
// The claim-check store (9.21.0). Absent → not one new line runs in
|
|
4923
4971
|
// dispatch: `ctx.artifacts` is the fail-closed teacher and no artifact
|
|
4924
4972
|
// event can fire (zero-cost-when-unused).
|
|
@@ -4935,6 +4983,11 @@ export class Agent extends RunnerBase {
|
|
|
4935
4983
|
// the VALUE-conditional pattern, so an agent on the default hands the
|
|
4936
4984
|
// handler exactly the deps object it always did.
|
|
4937
4985
|
...(this.repeatedCallNudge === false && { repeatedCallNudge: false }),
|
|
4986
|
+
// The answer check's tool-call ledger (`context.toolCalls`) — kept ONLY
|
|
4987
|
+
// when `answerValidation` is configured, so no other agent's record changes.
|
|
4988
|
+
...(this.answerValidationConfig !== undefined && {
|
|
4989
|
+
toolCallLedger: { maxCalls: this.answerValidationConfig.limits.maxToolCalls },
|
|
4990
|
+
}),
|
|
4938
4991
|
// Skill-graph read_skill gate: bound the model's read_skill jumps to the
|
|
4939
4992
|
// reachable set from the current cursor. Undefined → gate off (back-compat).
|
|
4940
4993
|
...(this.skillGraphReachable && {
|