agentfootprint 10.10.0 → 11.0.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 +14 -4
- package/CAPABILITIES.md +14 -3
- package/README.md +115 -52
- package/ai-instructions/claude-code/SKILL.md +14 -4
- package/dist/adapters/hosting/agentCoreA2A.js +4 -0
- package/dist/adapters/hosting/agentCoreA2A.js.map +1 -1
- package/dist/adapters/hosting/firestoreSessions.js +9 -2
- package/dist/adapters/hosting/firestoreSessions.js.map +1 -1
- package/dist/adapters/hosting/googleAgentEngine.js +4 -6
- package/dist/adapters/hosting/googleAgentEngine.js.map +1 -1
- package/dist/adapters/llm/AnthropicProvider.js +4 -0
- package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/BrowserAnthropicProvider.js +4 -0
- package/dist/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/MockProvider.js +2 -0
- package/dist/adapters/llm/MockProvider.js.map +1 -1
- package/dist/ag-ui/request.js +27 -2
- package/dist/ag-ui/request.js.map +1 -1
- package/dist/ag-ui/serializer.js +21 -8
- package/dist/ag-ui/serializer.js.map +1 -1
- package/dist/answer-account/facts/howSure.js +3 -0
- package/dist/answer-account/facts/howSure.js.map +1 -1
- package/dist/answer-account/templates.js +4 -1
- package/dist/answer-account/templates.js.map +1 -1
- package/dist/answer-validation/agentChecks.js +130 -0
- package/dist/answer-validation/agentChecks.js.map +1 -0
- package/dist/answer-validation/index.js +5 -1
- package/dist/answer-validation/index.js.map +1 -1
- package/dist/answer-validation/outputSchema.js +8 -1
- package/dist/answer-validation/outputSchema.js.map +1 -1
- package/dist/answer-validation/types.js +9 -2
- package/dist/answer-validation/types.js.map +1 -1
- package/dist/answer-validation/validate.js +82 -3
- package/dist/answer-validation/validate.js.map +1 -1
- package/dist/core/Agent.js +189 -30
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/RunnerBase.js +4 -0
- package/dist/core/RunnerBase.js.map +1 -1
- package/dist/core/agent/AgentBuilder.js +127 -17
- package/dist/core/agent/AgentBuilder.js.map +1 -1
- package/dist/core/agent/arguments/checks.js +1 -1
- package/dist/core/agent/arguments/subflow.js +1 -0
- package/dist/core/agent/arguments/subflow.js.map +1 -1
- package/dist/core/agent/assessment/assess.js +31 -0
- package/dist/core/agent/assessment/assess.js.map +1 -1
- package/dist/core/agent/assessment/compose.js +3 -0
- package/dist/core/agent/assessment/compose.js.map +1 -1
- package/dist/core/agent/assessment/reasons.js +19 -1
- package/dist/core/agent/assessment/reasons.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 +17 -3
- package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/core/agent/buildToolRegistry.js +13 -0
- package/dist/core/agent/buildToolRegistry.js.map +1 -1
- package/dist/core/agent/composeRequest.js +19 -1
- package/dist/core/agent/composeRequest.js.map +1 -1
- package/dist/core/agent/evidence/answerCarriers.js +1 -1
- package/dist/core/agent/evidence/answerCarriers.js.map +1 -1
- package/dist/core/agent/evidence/evidenceIndex.js +1 -1
- package/dist/core/agent/evidence/evidenceIndex.js.map +1 -1
- package/dist/core/agent/evidence/extract.js +139 -32
- package/dist/core/agent/evidence/extract.js.map +1 -1
- package/dist/core/agent/evidence/figures.js +1 -1
- package/dist/core/agent/evidence/figures.js.map +1 -1
- package/dist/core/agent/evidence/gate.js +10 -2
- package/dist/core/agent/evidence/gate.js.map +1 -1
- package/dist/core/agent/evidence/numericRanges.js +1 -1
- package/dist/core/agent/evidence/numericRanges.js.map +1 -1
- package/dist/core/agent/evidence/recovery.js +3 -1
- package/dist/core/agent/evidence/recovery.js.map +1 -1
- package/dist/core/agent/evidence/resultCarries.js +3 -3
- package/dist/core/agent/evidence/resultCarries.js.map +1 -1
- package/dist/core/agent/findings/contingent.js +1 -1
- package/dist/core/agent/findings/contingent.js.map +1 -1
- package/dist/core/agent/findings/ledger.js +49 -0
- package/dist/core/agent/findings/ledger.js.map +1 -1
- package/dist/core/agent/findings/negativeProse.js +53 -0
- package/dist/core/agent/findings/negativeProse.js.map +1 -0
- package/dist/core/agent/findings/types.js +3 -2
- package/dist/core/agent/findings/types.js.map +1 -1
- package/dist/core/agent/honesty/mounts.js +6 -0
- package/dist/core/agent/honesty/mounts.js.map +1 -1
- package/dist/core/agent/nativeOutputFormat.js +19 -1
- package/dist/core/agent/nativeOutputFormat.js.map +1 -1
- package/dist/core/agent/negativeClaims/capture.js +522 -0
- package/dist/core/agent/negativeClaims/capture.js.map +1 -0
- package/dist/core/agent/negativeClaims/checkpoint.js +83 -0
- package/dist/core/agent/negativeClaims/checkpoint.js.map +1 -0
- package/dist/core/agent/negativeClaims/config.js +192 -0
- package/dist/core/agent/negativeClaims/config.js.map +1 -0
- package/dist/core/agent/negativeClaims/delivery.js +249 -0
- package/dist/core/agent/negativeClaims/delivery.js.map +1 -0
- package/dist/core/agent/negativeClaims/observe.js +38 -0
- package/dist/core/agent/negativeClaims/observe.js.map +1 -0
- package/dist/core/agent/negativeClaims/prose.js +116 -0
- package/dist/core/agent/negativeClaims/prose.js.map +1 -0
- package/dist/core/agent/negativeClaims/recheck.js +37 -0
- package/dist/core/agent/negativeClaims/recheck.js.map +1 -0
- package/dist/core/agent/outputEnforcement.js.map +1 -1
- package/dist/core/agent/stages/answerEvidence.js +21 -0
- package/dist/core/agent/stages/answerEvidence.js.map +1 -0
- package/dist/core/agent/stages/answerValidation.js +112 -4
- package/dist/core/agent/stages/answerValidation.js.map +1 -1
- package/dist/core/agent/stages/callLLM.js +58 -16
- package/dist/core/agent/stages/callLLM.js.map +1 -1
- package/dist/core/agent/stages/evidenceRecheck.js +16 -2
- package/dist/core/agent/stages/evidenceRecheck.js.map +1 -1
- package/dist/core/agent/stages/outputRetry.js +23 -7
- package/dist/core/agent/stages/outputRetry.js.map +1 -1
- package/dist/core/agent/stages/prepareFinal.js +6 -1
- package/dist/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/core/agent/stages/reliabilityExecution.js +3 -0
- package/dist/core/agent/stages/reliabilityExecution.js.map +1 -1
- package/dist/core/agent/stages/route.js +81 -33
- package/dist/core/agent/stages/route.js.map +1 -1
- package/dist/core/agent/stages/searchCoverage.js +121 -0
- package/dist/core/agent/stages/searchCoverage.js.map +1 -0
- package/dist/core/agent/stages/seed.js +13 -1
- package/dist/core/agent/stages/seed.js.map +1 -1
- package/dist/core/agent/stages/toolCalls.js +699 -76
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/agent/toolChoice/compose.js +1 -0
- package/dist/core/agent/toolChoice/compose.js.map +1 -1
- package/dist/core/agent/toolChoice/pick.js +2 -0
- package/dist/core/agent/toolChoice/pick.js.map +1 -1
- package/dist/core/checkin.js +82 -18
- package/dist/core/checkin.js.map +1 -1
- package/dist/core/consentRequest.js +844 -0
- package/dist/core/consentRequest.js.map +1 -0
- package/dist/core/pause.js +104 -6
- package/dist/core/pause.js.map +1 -1
- package/dist/core/runCheckpoint.js +8 -1
- package/dist/core/runCheckpoint.js.map +1 -1
- package/dist/core/slots/buildToolsSlot.js +1 -0
- package/dist/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/debug.js +2 -0
- package/dist/debug.js.map +1 -1
- package/dist/esm/adapters/hosting/agentCoreA2A.js +4 -0
- package/dist/esm/adapters/hosting/agentCoreA2A.js.map +1 -1
- package/dist/esm/adapters/hosting/firestoreSessions.js +9 -2
- package/dist/esm/adapters/hosting/firestoreSessions.js.map +1 -1
- package/dist/esm/adapters/hosting/googleAgentEngine.js +4 -6
- package/dist/esm/adapters/hosting/googleAgentEngine.js.map +1 -1
- package/dist/esm/adapters/llm/AnthropicProvider.d.ts +1 -0
- package/dist/esm/adapters/llm/AnthropicProvider.js +5 -1
- package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.d.ts +1 -0
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js +5 -1
- package/dist/esm/adapters/llm/BrowserAnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/MockProvider.d.ts +2 -0
- package/dist/esm/adapters/llm/MockProvider.js +2 -0
- package/dist/esm/adapters/llm/MockProvider.js.map +1 -1
- package/dist/esm/ag-ui/request.d.ts +4 -1
- package/dist/esm/ag-ui/request.js +27 -2
- package/dist/esm/ag-ui/request.js.map +1 -1
- package/dist/esm/ag-ui/serializer.d.ts +15 -2
- package/dist/esm/ag-ui/serializer.js +20 -7
- package/dist/esm/ag-ui/serializer.js.map +1 -1
- package/dist/esm/answer-account/facts/howSure.js +3 -0
- package/dist/esm/answer-account/facts/howSure.js.map +1 -1
- package/dist/esm/answer-account/templates.d.ts +4 -1
- package/dist/esm/answer-account/templates.js +4 -1
- package/dist/esm/answer-account/templates.js.map +1 -1
- package/dist/esm/answer-validation/agentChecks.d.ts +75 -0
- package/dist/esm/answer-validation/agentChecks.js +125 -0
- package/dist/esm/answer-validation/agentChecks.js.map +1 -0
- 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/outputSchema.d.ts +18 -7
- package/dist/esm/answer-validation/outputSchema.js +8 -1
- package/dist/esm/answer-validation/outputSchema.js.map +1 -1
- package/dist/esm/answer-validation/types.d.ts +125 -1
- package/dist/esm/answer-validation/types.js +9 -2
- package/dist/esm/answer-validation/types.js.map +1 -1
- package/dist/esm/answer-validation/validate.d.ts +11 -2
- package/dist/esm/answer-validation/validate.js +82 -3
- package/dist/esm/answer-validation/validate.js.map +1 -1
- package/dist/esm/core/Agent.d.ts +25 -1
- package/dist/esm/core/Agent.js +192 -33
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/RunnerBase.js +4 -0
- package/dist/esm/core/RunnerBase.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.d.ts +43 -4
- package/dist/esm/core/agent/AgentBuilder.js +128 -18
- package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
- package/dist/esm/core/agent/arguments/checks.d.ts +1 -1
- package/dist/esm/core/agent/arguments/checks.js +1 -1
- package/dist/esm/core/agent/arguments/subflow.d.ts +6 -0
- package/dist/esm/core/agent/arguments/subflow.js +1 -0
- package/dist/esm/core/agent/arguments/subflow.js.map +1 -1
- package/dist/esm/core/agent/assessment/assess.js +31 -0
- package/dist/esm/core/agent/assessment/assess.js.map +1 -1
- package/dist/esm/core/agent/assessment/compose.js +3 -0
- package/dist/esm/core/agent/assessment/compose.js.map +1 -1
- package/dist/esm/core/agent/assessment/reasons.js +19 -1
- package/dist/esm/core/agent/assessment/reasons.js.map +1 -1
- package/dist/esm/core/agent/assessment/types.d.ts +3 -2
- package/dist/esm/core/agent/buildAgentChart.d.ts +1 -0
- 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 +17 -3
- package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildToolRegistry.js +13 -0
- package/dist/esm/core/agent/buildToolRegistry.js.map +1 -1
- package/dist/esm/core/agent/composeRequest.d.ts +19 -0
- package/dist/esm/core/agent/composeRequest.js +17 -0
- package/dist/esm/core/agent/composeRequest.js.map +1 -1
- package/dist/esm/core/agent/evidence/answerCarriers.js +1 -1
- package/dist/esm/core/agent/evidence/answerCarriers.js.map +1 -1
- package/dist/esm/core/agent/evidence/evidenceIndex.js +1 -1
- package/dist/esm/core/agent/evidence/evidenceIndex.js.map +1 -1
- package/dist/esm/core/agent/evidence/extract.d.ts +45 -6
- package/dist/esm/core/agent/evidence/extract.js +136 -30
- package/dist/esm/core/agent/evidence/extract.js.map +1 -1
- package/dist/esm/core/agent/evidence/figures.js +1 -1
- package/dist/esm/core/agent/evidence/figures.js.map +1 -1
- package/dist/esm/core/agent/evidence/gate.d.ts +6 -0
- package/dist/esm/core/agent/evidence/gate.js +11 -3
- package/dist/esm/core/agent/evidence/gate.js.map +1 -1
- package/dist/esm/core/agent/evidence/numericRanges.js +1 -1
- package/dist/esm/core/agent/evidence/numericRanges.js.map +1 -1
- package/dist/esm/core/agent/evidence/recovery.d.ts +2 -0
- package/dist/esm/core/agent/evidence/recovery.js +3 -1
- package/dist/esm/core/agent/evidence/recovery.js.map +1 -1
- package/dist/esm/core/agent/evidence/resultCarries.d.ts +2 -2
- package/dist/esm/core/agent/evidence/resultCarries.js +3 -3
- package/dist/esm/core/agent/evidence/resultCarries.js.map +1 -1
- package/dist/esm/core/agent/evidence/types.d.ts +17 -0
- package/dist/esm/core/agent/findings/contingent.js +1 -1
- package/dist/esm/core/agent/findings/contingent.js.map +1 -1
- package/dist/esm/core/agent/findings/ledger.d.ts +3 -0
- package/dist/esm/core/agent/findings/ledger.js +49 -0
- package/dist/esm/core/agent/findings/ledger.js.map +1 -1
- package/dist/esm/core/agent/findings/negativeProse.d.ts +1 -0
- package/dist/esm/core/agent/findings/negativeProse.js +49 -0
- package/dist/esm/core/agent/findings/negativeProse.js.map +1 -0
- package/dist/esm/core/agent/findings/types.d.ts +11 -4
- package/dist/esm/core/agent/findings/types.js +3 -2
- package/dist/esm/core/agent/findings/types.js.map +1 -1
- package/dist/esm/core/agent/honesty/mounts.d.ts +7 -0
- package/dist/esm/core/agent/honesty/mounts.js +6 -0
- package/dist/esm/core/agent/honesty/mounts.js.map +1 -1
- package/dist/esm/core/agent/nativeOutputFormat.d.ts +2 -1
- package/dist/esm/core/agent/nativeOutputFormat.js +19 -1
- package/dist/esm/core/agent/nativeOutputFormat.js.map +1 -1
- package/dist/esm/core/agent/negativeClaims/capture.d.ts +65 -0
- package/dist/esm/core/agent/negativeClaims/capture.js +508 -0
- package/dist/esm/core/agent/negativeClaims/capture.js.map +1 -0
- package/dist/esm/core/agent/negativeClaims/checkpoint.d.ts +7 -0
- package/dist/esm/core/agent/negativeClaims/checkpoint.js +79 -0
- package/dist/esm/core/agent/negativeClaims/checkpoint.js.map +1 -0
- package/dist/esm/core/agent/negativeClaims/config.d.ts +66 -0
- package/dist/esm/core/agent/negativeClaims/config.js +185 -0
- package/dist/esm/core/agent/negativeClaims/config.js.map +1 -0
- package/dist/esm/core/agent/negativeClaims/delivery.d.ts +24 -0
- package/dist/esm/core/agent/negativeClaims/delivery.js +244 -0
- package/dist/esm/core/agent/negativeClaims/delivery.js.map +1 -0
- package/dist/esm/core/agent/negativeClaims/observe.d.ts +14 -0
- package/dist/esm/core/agent/negativeClaims/observe.js +34 -0
- package/dist/esm/core/agent/negativeClaims/observe.js.map +1 -0
- package/dist/esm/core/agent/negativeClaims/prose.d.ts +9 -0
- package/dist/esm/core/agent/negativeClaims/prose.js +112 -0
- package/dist/esm/core/agent/negativeClaims/prose.js.map +1 -0
- package/dist/esm/core/agent/negativeClaims/recheck.d.ts +7 -0
- package/dist/esm/core/agent/negativeClaims/recheck.js +32 -0
- package/dist/esm/core/agent/negativeClaims/recheck.js.map +1 -0
- package/dist/esm/core/agent/outputEnforcement.d.ts +5 -1
- package/dist/esm/core/agent/outputEnforcement.js.map +1 -1
- package/dist/esm/core/agent/receipt/receipt.d.ts +2 -2
- package/dist/esm/core/agent/stages/answerEvidence.d.ts +28 -0
- package/dist/esm/core/agent/stages/answerEvidence.js +16 -0
- package/dist/esm/core/agent/stages/answerEvidence.js.map +1 -0
- package/dist/esm/core/agent/stages/answerValidation.d.ts +15 -3
- package/dist/esm/core/agent/stages/answerValidation.js +113 -5
- package/dist/esm/core/agent/stages/answerValidation.js.map +1 -1
- package/dist/esm/core/agent/stages/callLLM.d.ts +10 -2
- package/dist/esm/core/agent/stages/callLLM.js +60 -18
- package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
- package/dist/esm/core/agent/stages/evidenceRecheck.d.ts +6 -1
- package/dist/esm/core/agent/stages/evidenceRecheck.js +16 -2
- package/dist/esm/core/agent/stages/evidenceRecheck.js.map +1 -1
- package/dist/esm/core/agent/stages/outputRetry.js +23 -7
- package/dist/esm/core/agent/stages/outputRetry.js.map +1 -1
- package/dist/esm/core/agent/stages/prepareFinal.js +6 -1
- package/dist/esm/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/esm/core/agent/stages/reliabilityExecution.d.ts +3 -0
- package/dist/esm/core/agent/stages/reliabilityExecution.js +3 -0
- package/dist/esm/core/agent/stages/reliabilityExecution.js.map +1 -1
- package/dist/esm/core/agent/stages/route.d.ts +8 -2
- package/dist/esm/core/agent/stages/route.js +81 -33
- package/dist/esm/core/agent/stages/route.js.map +1 -1
- package/dist/esm/core/agent/stages/searchCoverage.d.ts +94 -0
- package/dist/esm/core/agent/stages/searchCoverage.js +117 -0
- package/dist/esm/core/agent/stages/searchCoverage.js.map +1 -0
- package/dist/esm/core/agent/stages/seed.d.ts +9 -0
- package/dist/esm/core/agent/stages/seed.js +13 -1
- package/dist/esm/core/agent/stages/seed.js.map +1 -1
- package/dist/esm/core/agent/stages/toolCalls.d.ts +16 -0
- package/dist/esm/core/agent/stages/toolCalls.js +700 -77
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/agent/toolChoice/compose.d.ts +2 -0
- package/dist/esm/core/agent/toolChoice/compose.js +1 -0
- package/dist/esm/core/agent/toolChoice/compose.js.map +1 -1
- package/dist/esm/core/agent/toolChoice/pick.d.ts +2 -0
- package/dist/esm/core/agent/toolChoice/pick.js +2 -0
- package/dist/esm/core/agent/toolChoice/pick.js.map +1 -1
- package/dist/esm/core/agent/toolChoice/types.d.ts +1 -1
- package/dist/esm/core/agent/types.d.ts +79 -5
- package/dist/esm/core/checkin.d.ts +83 -7
- package/dist/esm/core/checkin.js +77 -15
- package/dist/esm/core/checkin.js.map +1 -1
- package/dist/esm/core/consentRequest.d.ts +488 -0
- package/dist/esm/core/consentRequest.js +817 -0
- package/dist/esm/core/consentRequest.js.map +1 -0
- package/dist/esm/core/pause.d.ts +88 -7
- package/dist/esm/core/pause.js +102 -5
- package/dist/esm/core/pause.js.map +1 -1
- package/dist/esm/core/runCheckpoint.d.ts +5 -1
- package/dist/esm/core/runCheckpoint.js +8 -1
- package/dist/esm/core/runCheckpoint.js.map +1 -1
- package/dist/esm/core/slots/buildToolsSlot.d.ts +2 -1
- package/dist/esm/core/slots/buildToolsSlot.js +1 -0
- package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/debug.d.ts +1 -1
- package/dist/esm/debug.js +2 -0
- package/dist/esm/debug.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +145 -3
- package/dist/esm/events/registry.d.ts +3 -1
- package/dist/esm/events/registry.js +2 -0
- package/dist/esm/events/registry.js.map +1 -1
- package/dist/esm/hosting/answeredPause.d.ts +301 -0
- package/dist/esm/hosting/answeredPause.js +522 -0
- package/dist/esm/hosting/answeredPause.js.map +1 -0
- package/dist/esm/hosting/conformance/cases.js +81 -1
- package/dist/esm/hosting/conformance/cases.js.map +1 -1
- package/dist/esm/hosting/conformance/types.d.ts +1 -1
- package/dist/esm/hosting/envelope.d.ts +6 -0
- package/dist/esm/hosting/envelope.js +14 -0
- package/dist/esm/hosting/envelope.js.map +1 -1
- package/dist/esm/hosting/errors.d.ts +14 -2
- package/dist/esm/hosting/errors.js +13 -6
- package/dist/esm/hosting/errors.js.map +1 -1
- package/dist/esm/hosting/index.d.ts +2 -1
- package/dist/esm/hosting/index.js +3 -0
- package/dist/esm/hosting/index.js.map +1 -1
- package/dist/esm/hosting/memorySessions.js +10 -2
- package/dist/esm/hosting/memorySessions.js.map +1 -1
- package/dist/esm/hosting/processLocalStore.d.ts +20 -0
- package/dist/esm/hosting/processLocalStore.js +26 -0
- package/dist/esm/hosting/processLocalStore.js.map +1 -0
- package/dist/esm/hosting/protocolAdapter.d.ts +13 -0
- package/dist/esm/hosting/refusalStatus.d.ts +6 -0
- package/dist/esm/hosting/refusalStatus.js +13 -0
- package/dist/esm/hosting/refusalStatus.js.map +1 -1
- package/dist/esm/hosting/sessionWire.d.ts +8 -3
- package/dist/esm/hosting/sessionWire.js.map +1 -1
- package/dist/esm/hosting/sqliteSessions.js +27 -3
- package/dist/esm/hosting/sqliteSessions.js.map +1 -1
- package/dist/esm/hosting/standingAgent.js +70 -26
- package/dist/esm/hosting/standingAgent.js.map +1 -1
- package/dist/esm/hosting/streamHandler.d.ts +3 -1
- package/dist/esm/hosting/streamHandler.js +150 -32
- package/dist/esm/hosting/streamHandler.js.map +1 -1
- package/dist/esm/hosting/types.d.ts +28 -6
- package/dist/esm/hosting/types.js.map +1 -1
- package/dist/esm/index.d.ts +7 -3
- package/dist/esm/index.js +21 -17
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/integrity/negative-claim/anchor.d.ts +9 -0
- package/dist/esm/integrity/negative-claim/anchor.js +120 -0
- package/dist/esm/integrity/negative-claim/anchor.js.map +1 -0
- package/dist/esm/integrity/negative-claim/citation.d.ts +34 -0
- package/dist/esm/integrity/negative-claim/citation.js +367 -0
- package/dist/esm/integrity/negative-claim/citation.js.map +1 -0
- package/dist/esm/integrity/negative-claim/containment.d.ts +40 -0
- package/dist/esm/integrity/negative-claim/containment.js +257 -0
- package/dist/esm/integrity/negative-claim/containment.js.map +1 -0
- package/dist/esm/integrity/negative-claim/derive.d.ts +17 -0
- package/dist/esm/integrity/negative-claim/derive.js +122 -0
- package/dist/esm/integrity/negative-claim/derive.js.map +1 -0
- package/dist/esm/integrity/negative-claim/detect.d.ts +44 -0
- package/dist/esm/integrity/negative-claim/detect.js +65 -0
- package/dist/esm/integrity/negative-claim/detect.js.map +1 -0
- package/dist/esm/integrity/negative-claim/judge.d.ts +41 -0
- package/dist/esm/integrity/negative-claim/judge.js +95 -0
- package/dist/esm/integrity/negative-claim/judge.js.map +1 -0
- package/dist/esm/integrity/negative-claim/language.d.ts +14 -0
- package/dist/esm/integrity/negative-claim/language.js +42 -0
- package/dist/esm/integrity/negative-claim/language.js.map +1 -0
- package/dist/esm/integrity/negative-claim/limits.d.ts +2 -0
- package/dist/esm/integrity/negative-claim/limits.js +3 -0
- package/dist/esm/integrity/negative-claim/limits.js.map +1 -0
- package/dist/esm/integrity/negative-claim/matcher.d.ts +51 -0
- package/dist/esm/integrity/negative-claim/matcher.js +164 -0
- package/dist/esm/integrity/negative-claim/matcher.js.map +1 -0
- package/dist/esm/integrity/negative-claim/noRead.d.ts +8 -0
- package/dist/esm/integrity/negative-claim/noRead.js +9 -0
- package/dist/esm/integrity/negative-claim/noRead.js.map +1 -0
- package/dist/esm/integrity/negative-claim/phrases.d.ts +69 -0
- package/dist/esm/integrity/negative-claim/phrases.js +249 -0
- package/dist/esm/integrity/negative-claim/phrases.js.map +1 -0
- package/dist/esm/integrity/negative-claim/prose.d.ts +36 -0
- package/dist/esm/integrity/negative-claim/prose.js +143 -0
- package/dist/esm/integrity/negative-claim/prose.js.map +1 -0
- package/dist/esm/integrity/negative-claim/readings.d.ts +81 -0
- package/dist/esm/integrity/negative-claim/readings.js +322 -0
- package/dist/esm/integrity/negative-claim/readings.js.map +1 -0
- package/dist/esm/integrity/negative-claim/resolve.d.ts +37 -0
- package/dist/esm/integrity/negative-claim/resolve.js +179 -0
- package/dist/esm/integrity/negative-claim/resolve.js.map +1 -0
- package/dist/esm/integrity/negative-claim/statement.d.ts +75 -0
- package/dist/esm/integrity/negative-claim/statement.js +361 -0
- package/dist/esm/integrity/negative-claim/statement.js.map +1 -0
- package/dist/esm/integrity/negative-claim/types.d.ts +144 -0
- package/dist/esm/integrity/negative-claim/types.js +39 -0
- package/dist/esm/integrity/negative-claim/types.js.map +1 -0
- package/dist/esm/integrity/negative-claim/units.d.ts +33 -0
- package/dist/esm/integrity/negative-claim/units.js +185 -0
- package/dist/esm/integrity/negative-claim/units.js.map +1 -0
- package/dist/esm/integrity/negative-claim/work.d.ts +12 -0
- package/dist/esm/integrity/negative-claim/work.js +19 -0
- package/dist/esm/integrity/negative-claim/work.js.map +1 -0
- package/dist/esm/integrity/unsupported-claim/check.d.ts +33 -0
- package/dist/esm/integrity/unsupported-claim/check.js +48 -26
- package/dist/esm/integrity/unsupported-claim/check.js.map +1 -1
- package/dist/esm/integrity/unsupported-claim/delivered.d.ts +72 -0
- package/dist/esm/integrity/unsupported-claim/delivered.js +98 -0
- package/dist/esm/integrity/unsupported-claim/delivered.js.map +1 -0
- package/dist/esm/integrity/unsupported-claim/evaluate.d.ts +103 -1
- package/dist/esm/integrity/unsupported-claim/evaluate.js +373 -0
- package/dist/esm/integrity/unsupported-claim/evaluate.js.map +1 -1
- package/dist/esm/lib/conventions.d.ts +1 -0
- package/dist/esm/lib/conventions.js +3 -0
- package/dist/esm/lib/conventions.js.map +1 -1
- package/dist/esm/lib/frozenCopy.d.ts +75 -0
- package/dist/esm/lib/frozenCopy.js +198 -0
- package/dist/esm/lib/frozenCopy.js.map +1 -0
- package/dist/esm/lib/jsonFaithful.d.ts +34 -0
- package/dist/esm/lib/jsonFaithful.js +111 -0
- package/dist/esm/lib/jsonFaithful.js.map +1 -0
- package/dist/esm/lib/normalize.d.ts +96 -0
- package/dist/esm/{tools → lib}/normalize.js +142 -6
- package/dist/esm/lib/normalize.js.map +1 -0
- package/dist/esm/mcp/toolExtras.d.ts +10 -0
- package/dist/esm/mcp/toolExtras.js +11 -0
- package/dist/esm/mcp/toolExtras.js.map +1 -1
- package/dist/esm/provider-contract/nativeOutputSchema.d.ts +6 -2
- package/dist/esm/provider-contract/nativeOutputSchema.js +9 -2
- package/dist/esm/provider-contract/nativeOutputSchema.js.map +1 -1
- package/dist/esm/provider-contract/types.d.ts +12 -1
- package/dist/esm/provider-contract/types.js.map +1 -1
- package/dist/esm/recorders/core/CheckInRecorder.d.ts +6 -1
- package/dist/esm/recorders/core/CheckInRecorder.js +5 -1
- package/dist/esm/recorders/core/CheckInRecorder.js.map +1 -1
- package/dist/esm/redaction/conversation.js +6 -0
- package/dist/esm/redaction/conversation.js.map +1 -1
- package/dist/esm/redaction/knownStrings.d.ts +9 -7
- package/dist/esm/redaction/knownStrings.js +74 -0
- package/dist/esm/redaction/knownStrings.js.map +1 -1
- package/dist/esm/resilience/withCircuitBreaker.js +3 -0
- package/dist/esm/resilience/withCircuitBreaker.js.map +1 -1
- package/dist/esm/resilience/withFallback.js +8 -1
- package/dist/esm/resilience/withFallback.js.map +1 -1
- package/dist/esm/resilience/withRetry.js +3 -0
- package/dist/esm/resilience/withRetry.js.map +1 -1
- package/dist/esm/semantics/check.d.ts +44 -2
- package/dist/esm/semantics/check.js +112 -3
- package/dist/esm/semantics/check.js.map +1 -1
- package/dist/esm/semantics/cli.js +33 -3
- package/dist/esm/semantics/cli.js.map +1 -1
- package/dist/esm/semantics/coverage/absent.d.ts +19 -2
- package/dist/esm/semantics/coverage/absent.js +56 -52
- package/dist/esm/semantics/coverage/absent.js.map +1 -1
- package/dist/esm/semantics/coverage/among.d.ts +73 -0
- package/dist/esm/semantics/coverage/among.js +172 -0
- package/dist/esm/semantics/coverage/among.js.map +1 -0
- package/dist/esm/semantics/coverage/composedCoverage.d.ts +220 -0
- package/dist/esm/semantics/coverage/composedCoverage.js +42 -0
- package/dist/esm/semantics/coverage/composedCoverage.js.map +1 -0
- package/dist/esm/semantics/coverage/evidence.js +27 -2
- package/dist/esm/semantics/coverage/evidence.js.map +1 -1
- package/dist/esm/semantics/coverage/index.d.ts +4 -1
- package/dist/esm/semantics/coverage/index.js +2 -0
- package/dist/esm/semantics/coverage/index.js.map +1 -1
- package/dist/esm/semantics/coverage/ledger.d.ts +2 -1
- package/dist/esm/semantics/coverage/ledger.js +15 -53
- package/dist/esm/semantics/coverage/ledger.js.map +1 -1
- package/dist/esm/semantics/coverage/read.d.ts +19 -0
- package/dist/esm/semantics/coverage/read.js.map +1 -1
- package/dist/esm/semantics/coverage/recognize.d.ts +17 -1
- package/dist/esm/semantics/coverage/recognize.js +40 -0
- package/dist/esm/semantics/coverage/recognize.js.map +1 -1
- package/dist/esm/semantics/coverage/search/binding.d.ts +27 -0
- package/dist/esm/semantics/coverage/search/binding.js +42 -0
- package/dist/esm/semantics/coverage/search/binding.js.map +1 -0
- package/dist/esm/semantics/coverage/search/compose.d.ts +90 -0
- package/dist/esm/semantics/coverage/search/compose.js +120 -0
- package/dist/esm/semantics/coverage/search/compose.js.map +1 -0
- package/dist/esm/semantics/coverage/search/declaration.d.ts +75 -0
- package/dist/esm/semantics/coverage/search/declaration.js +453 -0
- package/dist/esm/semantics/coverage/search/declaration.js.map +1 -0
- package/dist/esm/semantics/coverage/search/door.d.ts +46 -0
- package/dist/esm/semantics/coverage/search/door.js +130 -0
- package/dist/esm/semantics/coverage/search/door.js.map +1 -0
- package/dist/esm/semantics/coverage/search/events.d.ts +42 -0
- package/dist/esm/semantics/coverage/search/events.js +100 -0
- package/dist/esm/semantics/coverage/search/events.js.map +1 -0
- package/dist/esm/semantics/coverage/search/facets.d.ts +52 -0
- package/dist/esm/semantics/coverage/search/facets.js +191 -0
- package/dist/esm/semantics/coverage/search/facets.js.map +1 -0
- package/dist/esm/semantics/coverage/search/gaps.d.ts +63 -0
- package/dist/esm/semantics/coverage/search/gaps.js +221 -0
- package/dist/esm/semantics/coverage/search/gaps.js.map +1 -0
- package/dist/esm/semantics/coverage/search/inEffect.d.ts +65 -0
- package/dist/esm/semantics/coverage/search/inEffect.js +48 -0
- package/dist/esm/semantics/coverage/search/inEffect.js.map +1 -0
- package/dist/esm/semantics/coverage/search/resultFacts.d.ts +42 -0
- package/dist/esm/semantics/coverage/search/resultFacts.js +100 -0
- package/dist/esm/semantics/coverage/search/resultFacts.js.map +1 -0
- package/dist/esm/semantics/coverage/search/review.d.ts +36 -0
- package/dist/esm/semantics/coverage/search/review.js +89 -0
- package/dist/esm/semantics/coverage/search/review.js.map +1 -0
- package/dist/esm/semantics/coverage/search/served.d.ts +51 -0
- package/dist/esm/semantics/coverage/search/served.js +130 -0
- package/dist/esm/semantics/coverage/search/served.js.map +1 -0
- package/dist/esm/semantics/coverage/search/span.d.ts +34 -0
- package/dist/esm/semantics/coverage/search/span.js +61 -0
- package/dist/esm/semantics/coverage/search/span.js.map +1 -0
- package/dist/esm/semantics/coverage/search/statementText.d.ts +46 -0
- package/dist/esm/semantics/coverage/search/statementText.js +102 -0
- package/dist/esm/semantics/coverage/search/statementText.js.map +1 -0
- package/dist/esm/semantics/coverage/search/types.d.ts +120 -0
- package/dist/esm/semantics/coverage/search/types.js +11 -0
- package/dist/esm/semantics/coverage/search/types.js.map +1 -0
- package/dist/esm/semantics/coverage/search/valueWords.d.ts +22 -0
- package/dist/esm/semantics/coverage/search/valueWords.js +32 -0
- package/dist/esm/semantics/coverage/search/valueWords.js.map +1 -0
- package/dist/esm/semantics/coverage/types.d.ts +163 -0
- package/dist/esm/semantics/described.js +3 -1
- package/dist/esm/semantics/described.js.map +1 -1
- package/dist/esm/semantics/envelope.js +26 -2
- package/dist/esm/semantics/envelope.js.map +1 -1
- package/dist/esm/semantics/index.d.ts +2 -1
- package/dist/esm/semantics/index.js.map +1 -1
- package/dist/esm/semantics/overclaim.d.ts +105 -0
- package/dist/esm/semantics/overclaim.js +397 -0
- package/dist/esm/semantics/overclaim.js.map +1 -0
- package/dist/esm/semantics/types.d.ts +13 -0
- package/dist/esm/semantics/types.js.map +1 -1
- package/dist/esm/time/forms.js +1 -1
- package/dist/esm/time/textForms.js +1 -1
- package/dist/esm/time-travel/servedView.d.ts +1 -1
- package/dist/esm/time-travel/servedView.js +8 -6
- package/dist/esm/time-travel/servedView.js.map +1 -1
- package/dist/esm/tools/declare.d.ts +1 -1
- package/dist/esm/tools/declare.js +2 -2
- package/dist/esm/tools/declare.js.map +1 -1
- package/dist/esm/tools/hostFilled.d.ts +20 -1
- package/dist/esm/tools/hostFilled.js +46 -1
- package/dist/esm/tools/hostFilled.js.map +1 -1
- package/dist/esm/tools/searchOf.d.ts +60 -0
- package/dist/esm/tools/searchOf.js +97 -0
- package/dist/esm/tools/searchOf.js.map +1 -0
- package/dist/esm/tools/tools.d.ts +49 -0
- package/dist/esm/tools/tools.js +76 -1
- package/dist/esm/tools/tools.js.map +1 -1
- package/dist/events/registry.js +2 -0
- package/dist/events/registry.js.map +1 -1
- package/dist/hosting/answeredPause.js +536 -0
- package/dist/hosting/answeredPause.js.map +1 -0
- package/dist/hosting/conformance/cases.js +80 -0
- package/dist/hosting/conformance/cases.js.map +1 -1
- package/dist/hosting/envelope.js +14 -0
- package/dist/hosting/envelope.js.map +1 -1
- package/dist/hosting/errors.js +13 -6
- package/dist/hosting/errors.js.map +1 -1
- package/dist/hosting/index.js +7 -3
- package/dist/hosting/index.js.map +1 -1
- package/dist/hosting/memorySessions.js +10 -2
- package/dist/hosting/memorySessions.js.map +1 -1
- package/dist/hosting/processLocalStore.js +31 -0
- package/dist/hosting/processLocalStore.js.map +1 -0
- package/dist/hosting/refusalStatus.js +13 -0
- package/dist/hosting/refusalStatus.js.map +1 -1
- package/dist/hosting/sessionWire.js.map +1 -1
- package/dist/hosting/sqliteSessions.js +27 -3
- package/dist/hosting/sqliteSessions.js.map +1 -1
- package/dist/hosting/standingAgent.js +69 -25
- package/dist/hosting/standingAgent.js.map +1 -1
- package/dist/hosting/streamHandler.js +149 -31
- package/dist/hosting/streamHandler.js.map +1 -1
- package/dist/hosting/types.js.map +1 -1
- package/dist/index.js +26 -21
- package/dist/index.js.map +1 -1
- package/dist/integrity/negative-claim/anchor.js +124 -0
- package/dist/integrity/negative-claim/anchor.js.map +1 -0
- package/dist/integrity/negative-claim/citation.js +371 -0
- package/dist/integrity/negative-claim/citation.js.map +1 -0
- package/dist/integrity/negative-claim/containment.js +262 -0
- package/dist/integrity/negative-claim/containment.js.map +1 -0
- package/dist/integrity/negative-claim/derive.js +130 -0
- package/dist/integrity/negative-claim/derive.js.map +1 -0
- package/dist/integrity/negative-claim/detect.js +69 -0
- package/dist/integrity/negative-claim/detect.js.map +1 -0
- package/dist/integrity/negative-claim/judge.js +100 -0
- package/dist/integrity/negative-claim/judge.js.map +1 -0
- package/dist/integrity/negative-claim/language.js +46 -0
- package/dist/integrity/negative-claim/language.js.map +1 -0
- package/dist/integrity/negative-claim/limits.js +6 -0
- package/dist/integrity/negative-claim/limits.js.map +1 -0
- package/dist/integrity/negative-claim/matcher.js +179 -0
- package/dist/integrity/negative-claim/matcher.js.map +1 -0
- package/dist/integrity/negative-claim/noRead.js +13 -0
- package/dist/integrity/negative-claim/noRead.js.map +1 -0
- package/dist/integrity/negative-claim/phrases.js +253 -0
- package/dist/integrity/negative-claim/phrases.js.map +1 -0
- package/dist/integrity/negative-claim/prose.js +147 -0
- package/dist/integrity/negative-claim/prose.js.map +1 -0
- package/dist/integrity/negative-claim/readings.js +338 -0
- package/dist/integrity/negative-claim/readings.js.map +1 -0
- package/dist/integrity/negative-claim/resolve.js +184 -0
- package/dist/integrity/negative-claim/resolve.js.map +1 -0
- package/dist/integrity/negative-claim/statement.js +369 -0
- package/dist/integrity/negative-claim/statement.js.map +1 -0
- package/dist/integrity/negative-claim/types.js +42 -0
- package/dist/integrity/negative-claim/types.js.map +1 -0
- package/dist/integrity/negative-claim/units.js +190 -0
- package/dist/integrity/negative-claim/units.js.map +1 -0
- package/dist/integrity/negative-claim/work.js +24 -0
- package/dist/integrity/negative-claim/work.js.map +1 -0
- package/dist/integrity/unsupported-claim/check.js +50 -27
- package/dist/integrity/unsupported-claim/check.js.map +1 -1
- package/dist/integrity/unsupported-claim/delivered.js +102 -0
- package/dist/integrity/unsupported-claim/delivered.js.map +1 -0
- package/dist/integrity/unsupported-claim/evaluate.js +377 -1
- package/dist/integrity/unsupported-claim/evaluate.js.map +1 -1
- package/dist/lib/conventions.js +3 -0
- package/dist/lib/conventions.js.map +1 -1
- package/dist/lib/frozenCopy.js +207 -0
- package/dist/lib/frozenCopy.js.map +1 -0
- package/dist/lib/jsonFaithful.js +115 -0
- package/dist/lib/jsonFaithful.js.map +1 -0
- package/dist/{tools → lib}/normalize.js +151 -7
- package/dist/lib/normalize.js.map +1 -0
- package/dist/mcp/toolExtras.js +11 -0
- package/dist/mcp/toolExtras.js.map +1 -1
- package/dist/provider-contract/nativeOutputSchema.js +11 -3
- package/dist/provider-contract/nativeOutputSchema.js.map +1 -1
- package/dist/provider-contract/types.js.map +1 -1
- package/dist/recorders/core/CheckInRecorder.js +5 -1
- package/dist/recorders/core/CheckInRecorder.js.map +1 -1
- package/dist/redaction/conversation.js +6 -0
- package/dist/redaction/conversation.js.map +1 -1
- package/dist/redaction/knownStrings.js +74 -0
- package/dist/redaction/knownStrings.js.map +1 -1
- package/dist/resilience/withCircuitBreaker.js +3 -0
- package/dist/resilience/withCircuitBreaker.js.map +1 -1
- package/dist/resilience/withFallback.js +7 -0
- package/dist/resilience/withFallback.js.map +1 -1
- package/dist/resilience/withRetry.js +3 -0
- package/dist/resilience/withRetry.js.map +1 -1
- package/dist/semantics/check.js +112 -3
- package/dist/semantics/check.js.map +1 -1
- package/dist/semantics/cli.js +32 -2
- package/dist/semantics/cli.js.map +1 -1
- package/dist/semantics/coverage/absent.js +56 -52
- package/dist/semantics/coverage/absent.js.map +1 -1
- package/dist/semantics/coverage/among.js +177 -0
- package/dist/semantics/coverage/among.js.map +1 -0
- package/dist/semantics/coverage/composedCoverage.js +46 -0
- package/dist/semantics/coverage/composedCoverage.js.map +1 -0
- package/dist/semantics/coverage/evidence.js +27 -2
- package/dist/semantics/coverage/evidence.js.map +1 -1
- package/dist/semantics/coverage/index.js +5 -1
- package/dist/semantics/coverage/index.js.map +1 -1
- package/dist/semantics/coverage/ledger.js +18 -56
- package/dist/semantics/coverage/ledger.js.map +1 -1
- package/dist/semantics/coverage/read.js.map +1 -1
- package/dist/semantics/coverage/recognize.js +43 -1
- package/dist/semantics/coverage/recognize.js.map +1 -1
- package/dist/semantics/coverage/search/binding.js +46 -0
- package/dist/semantics/coverage/search/binding.js.map +1 -0
- package/dist/semantics/coverage/search/compose.js +124 -0
- package/dist/semantics/coverage/search/compose.js.map +1 -0
- package/dist/semantics/coverage/search/declaration.js +462 -0
- package/dist/semantics/coverage/search/declaration.js.map +1 -0
- package/dist/semantics/coverage/search/door.js +134 -0
- package/dist/semantics/coverage/search/door.js.map +1 -0
- package/dist/semantics/coverage/search/events.js +104 -0
- package/dist/semantics/coverage/search/events.js.map +1 -0
- package/dist/semantics/coverage/search/facets.js +196 -0
- package/dist/semantics/coverage/search/facets.js.map +1 -0
- package/dist/semantics/coverage/search/gaps.js +226 -0
- package/dist/semantics/coverage/search/gaps.js.map +1 -0
- package/dist/semantics/coverage/search/inEffect.js +52 -0
- package/dist/semantics/coverage/search/inEffect.js.map +1 -0
- package/dist/semantics/coverage/search/resultFacts.js +109 -0
- package/dist/semantics/coverage/search/resultFacts.js.map +1 -0
- package/dist/semantics/coverage/search/review.js +93 -0
- package/dist/semantics/coverage/search/review.js.map +1 -0
- package/dist/semantics/coverage/search/served.js +137 -0
- package/dist/semantics/coverage/search/served.js.map +1 -0
- package/dist/semantics/coverage/search/span.js +66 -0
- package/dist/semantics/coverage/search/span.js.map +1 -0
- package/dist/semantics/coverage/search/statementText.js +107 -0
- package/dist/semantics/coverage/search/statementText.js.map +1 -0
- package/dist/semantics/coverage/search/types.js +12 -0
- package/dist/semantics/coverage/search/types.js.map +1 -0
- package/dist/semantics/coverage/search/valueWords.js +36 -0
- package/dist/semantics/coverage/search/valueWords.js.map +1 -0
- package/dist/semantics/described.js +3 -1
- package/dist/semantics/described.js.map +1 -1
- package/dist/semantics/envelope.js +26 -2
- package/dist/semantics/envelope.js.map +1 -1
- package/dist/semantics/index.js.map +1 -1
- package/dist/semantics/overclaim.js +407 -0
- package/dist/semantics/overclaim.js.map +1 -0
- package/dist/semantics/types.js.map +1 -1
- package/dist/time/forms.js +1 -1
- package/dist/time/textForms.js +1 -1
- package/dist/time-travel/servedView.js +7 -5
- package/dist/time-travel/servedView.js.map +1 -1
- package/dist/tools/declare.js +2 -2
- package/dist/tools/declare.js.map +1 -1
- package/dist/tools/hostFilled.js +48 -2
- package/dist/tools/hostFilled.js.map +1 -1
- package/dist/tools/searchOf.js +104 -0
- package/dist/tools/searchOf.js.map +1 -0
- package/dist/tools/tools.js +80 -2
- package/dist/tools/tools.js.map +1 -1
- package/dist/types/adapters/hosting/agentCoreA2A.d.ts.map +1 -1
- package/dist/types/adapters/hosting/firestoreSessions.d.ts.map +1 -1
- package/dist/types/adapters/hosting/googleAgentEngine.d.ts.map +1 -1
- package/dist/types/adapters/llm/AnthropicProvider.d.ts +1 -0
- package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts +1 -0
- package/dist/types/adapters/llm/BrowserAnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/MockProvider.d.ts +2 -0
- package/dist/types/adapters/llm/MockProvider.d.ts.map +1 -1
- package/dist/types/ag-ui/request.d.ts +4 -1
- package/dist/types/ag-ui/request.d.ts.map +1 -1
- package/dist/types/ag-ui/serializer.d.ts +15 -2
- package/dist/types/ag-ui/serializer.d.ts.map +1 -1
- package/dist/types/answer-account/facts/howSure.d.ts.map +1 -1
- package/dist/types/answer-account/templates.d.ts +4 -1
- package/dist/types/answer-account/templates.d.ts.map +1 -1
- package/dist/types/answer-validation/agentChecks.d.ts +76 -0
- package/dist/types/answer-validation/agentChecks.d.ts.map +1 -0
- 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/outputSchema.d.ts +18 -7
- package/dist/types/answer-validation/outputSchema.d.ts.map +1 -1
- package/dist/types/answer-validation/types.d.ts +125 -1
- package/dist/types/answer-validation/types.d.ts.map +1 -1
- package/dist/types/answer-validation/validate.d.ts +11 -2
- package/dist/types/answer-validation/validate.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts +25 -1
- 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/AgentBuilder.d.ts +43 -4
- package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/checks.d.ts +1 -1
- package/dist/types/core/agent/arguments/subflow.d.ts +6 -0
- package/dist/types/core/agent/arguments/subflow.d.ts.map +1 -1
- package/dist/types/core/agent/assessment/assess.d.ts.map +1 -1
- package/dist/types/core/agent/assessment/compose.d.ts.map +1 -1
- package/dist/types/core/agent/assessment/reasons.d.ts.map +1 -1
- package/dist/types/core/agent/assessment/types.d.ts +3 -2
- package/dist/types/core/agent/assessment/types.d.ts.map +1 -1
- package/dist/types/core/agent/buildAgentChart.d.ts +1 -0
- 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/buildToolRegistry.d.ts.map +1 -1
- package/dist/types/core/agent/composeRequest.d.ts +19 -0
- package/dist/types/core/agent/composeRequest.d.ts.map +1 -1
- package/dist/types/core/agent/evidence/extract.d.ts +45 -6
- package/dist/types/core/agent/evidence/extract.d.ts.map +1 -1
- package/dist/types/core/agent/evidence/gate.d.ts +6 -0
- package/dist/types/core/agent/evidence/gate.d.ts.map +1 -1
- package/dist/types/core/agent/evidence/recovery.d.ts +2 -0
- package/dist/types/core/agent/evidence/recovery.d.ts.map +1 -1
- package/dist/types/core/agent/evidence/resultCarries.d.ts +2 -2
- package/dist/types/core/agent/evidence/types.d.ts +17 -0
- package/dist/types/core/agent/evidence/types.d.ts.map +1 -1
- package/dist/types/core/agent/findings/ledger.d.ts +3 -0
- package/dist/types/core/agent/findings/ledger.d.ts.map +1 -1
- package/dist/types/core/agent/findings/negativeProse.d.ts +2 -0
- package/dist/types/core/agent/findings/negativeProse.d.ts.map +1 -0
- package/dist/types/core/agent/findings/types.d.ts +11 -4
- package/dist/types/core/agent/findings/types.d.ts.map +1 -1
- package/dist/types/core/agent/honesty/mounts.d.ts +7 -0
- package/dist/types/core/agent/honesty/mounts.d.ts.map +1 -1
- package/dist/types/core/agent/nativeOutputFormat.d.ts +2 -1
- package/dist/types/core/agent/nativeOutputFormat.d.ts.map +1 -1
- package/dist/types/core/agent/negativeClaims/capture.d.ts +66 -0
- package/dist/types/core/agent/negativeClaims/capture.d.ts.map +1 -0
- package/dist/types/core/agent/negativeClaims/checkpoint.d.ts +8 -0
- package/dist/types/core/agent/negativeClaims/checkpoint.d.ts.map +1 -0
- package/dist/types/core/agent/negativeClaims/config.d.ts +67 -0
- package/dist/types/core/agent/negativeClaims/config.d.ts.map +1 -0
- package/dist/types/core/agent/negativeClaims/delivery.d.ts +25 -0
- package/dist/types/core/agent/negativeClaims/delivery.d.ts.map +1 -0
- package/dist/types/core/agent/negativeClaims/observe.d.ts +15 -0
- package/dist/types/core/agent/negativeClaims/observe.d.ts.map +1 -0
- package/dist/types/core/agent/negativeClaims/prose.d.ts +10 -0
- package/dist/types/core/agent/negativeClaims/prose.d.ts.map +1 -0
- package/dist/types/core/agent/negativeClaims/recheck.d.ts +8 -0
- package/dist/types/core/agent/negativeClaims/recheck.d.ts.map +1 -0
- package/dist/types/core/agent/outputEnforcement.d.ts +5 -1
- package/dist/types/core/agent/outputEnforcement.d.ts.map +1 -1
- package/dist/types/core/agent/receipt/receipt.d.ts +2 -2
- package/dist/types/core/agent/receipt/receipt.d.ts.map +1 -1
- package/dist/types/core/agent/stages/answerEvidence.d.ts +29 -0
- package/dist/types/core/agent/stages/answerEvidence.d.ts.map +1 -0
- package/dist/types/core/agent/stages/answerValidation.d.ts +15 -3
- package/dist/types/core/agent/stages/answerValidation.d.ts.map +1 -1
- package/dist/types/core/agent/stages/callLLM.d.ts +10 -2
- package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
- package/dist/types/core/agent/stages/evidenceRecheck.d.ts +6 -1
- package/dist/types/core/agent/stages/evidenceRecheck.d.ts.map +1 -1
- package/dist/types/core/agent/stages/outputRetry.d.ts.map +1 -1
- package/dist/types/core/agent/stages/prepareFinal.d.ts.map +1 -1
- package/dist/types/core/agent/stages/reliabilityExecution.d.ts +3 -0
- package/dist/types/core/agent/stages/reliabilityExecution.d.ts.map +1 -1
- package/dist/types/core/agent/stages/route.d.ts +8 -2
- package/dist/types/core/agent/stages/route.d.ts.map +1 -1
- package/dist/types/core/agent/stages/searchCoverage.d.ts +95 -0
- package/dist/types/core/agent/stages/searchCoverage.d.ts.map +1 -0
- package/dist/types/core/agent/stages/seed.d.ts +9 -0
- package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
- package/dist/types/core/agent/stages/toolCalls.d.ts +16 -0
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/toolChoice/compose.d.ts +2 -0
- package/dist/types/core/agent/toolChoice/compose.d.ts.map +1 -1
- package/dist/types/core/agent/toolChoice/pick.d.ts +2 -0
- package/dist/types/core/agent/toolChoice/pick.d.ts.map +1 -1
- package/dist/types/core/agent/toolChoice/types.d.ts +1 -1
- package/dist/types/core/agent/toolChoice/types.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +79 -5
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/checkin.d.ts +83 -7
- package/dist/types/core/checkin.d.ts.map +1 -1
- package/dist/types/core/consentRequest.d.ts +489 -0
- package/dist/types/core/consentRequest.d.ts.map +1 -0
- package/dist/types/core/pause.d.ts +88 -7
- package/dist/types/core/pause.d.ts.map +1 -1
- package/dist/types/core/runCheckpoint.d.ts +5 -1
- package/dist/types/core/runCheckpoint.d.ts.map +1 -1
- package/dist/types/core/slots/buildToolsSlot.d.ts +2 -1
- package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
- package/dist/types/debug.d.ts +1 -1
- package/dist/types/debug.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +145 -3
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/events/registry.d.ts +3 -1
- package/dist/types/events/registry.d.ts.map +1 -1
- package/dist/types/hosting/answeredPause.d.ts +302 -0
- package/dist/types/hosting/answeredPause.d.ts.map +1 -0
- package/dist/types/hosting/conformance/cases.d.ts.map +1 -1
- package/dist/types/hosting/conformance/types.d.ts +1 -1
- package/dist/types/hosting/conformance/types.d.ts.map +1 -1
- package/dist/types/hosting/envelope.d.ts +6 -0
- package/dist/types/hosting/envelope.d.ts.map +1 -1
- package/dist/types/hosting/errors.d.ts +14 -2
- package/dist/types/hosting/errors.d.ts.map +1 -1
- package/dist/types/hosting/index.d.ts +2 -1
- package/dist/types/hosting/index.d.ts.map +1 -1
- package/dist/types/hosting/memorySessions.d.ts.map +1 -1
- package/dist/types/hosting/processLocalStore.d.ts +21 -0
- package/dist/types/hosting/processLocalStore.d.ts.map +1 -0
- package/dist/types/hosting/protocolAdapter.d.ts +13 -0
- package/dist/types/hosting/protocolAdapter.d.ts.map +1 -1
- package/dist/types/hosting/refusalStatus.d.ts +6 -0
- package/dist/types/hosting/refusalStatus.d.ts.map +1 -1
- package/dist/types/hosting/sessionWire.d.ts +8 -3
- package/dist/types/hosting/sessionWire.d.ts.map +1 -1
- package/dist/types/hosting/sqliteSessions.d.ts.map +1 -1
- package/dist/types/hosting/standingAgent.d.ts.map +1 -1
- package/dist/types/hosting/streamHandler.d.ts +3 -1
- package/dist/types/hosting/streamHandler.d.ts.map +1 -1
- package/dist/types/hosting/types.d.ts +28 -6
- package/dist/types/hosting/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +7 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/integrity/negative-claim/anchor.d.ts +10 -0
- package/dist/types/integrity/negative-claim/anchor.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/citation.d.ts +35 -0
- package/dist/types/integrity/negative-claim/citation.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/containment.d.ts +41 -0
- package/dist/types/integrity/negative-claim/containment.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/derive.d.ts +18 -0
- package/dist/types/integrity/negative-claim/derive.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/detect.d.ts +45 -0
- package/dist/types/integrity/negative-claim/detect.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/judge.d.ts +42 -0
- package/dist/types/integrity/negative-claim/judge.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/language.d.ts +15 -0
- package/dist/types/integrity/negative-claim/language.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/limits.d.ts +3 -0
- package/dist/types/integrity/negative-claim/limits.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/matcher.d.ts +52 -0
- package/dist/types/integrity/negative-claim/matcher.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/noRead.d.ts +9 -0
- package/dist/types/integrity/negative-claim/noRead.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/phrases.d.ts +70 -0
- package/dist/types/integrity/negative-claim/phrases.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/prose.d.ts +37 -0
- package/dist/types/integrity/negative-claim/prose.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/readings.d.ts +82 -0
- package/dist/types/integrity/negative-claim/readings.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/resolve.d.ts +38 -0
- package/dist/types/integrity/negative-claim/resolve.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/statement.d.ts +76 -0
- package/dist/types/integrity/negative-claim/statement.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/types.d.ts +145 -0
- package/dist/types/integrity/negative-claim/types.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/units.d.ts +34 -0
- package/dist/types/integrity/negative-claim/units.d.ts.map +1 -0
- package/dist/types/integrity/negative-claim/work.d.ts +13 -0
- package/dist/types/integrity/negative-claim/work.d.ts.map +1 -0
- package/dist/types/integrity/unsupported-claim/check.d.ts +33 -0
- package/dist/types/integrity/unsupported-claim/check.d.ts.map +1 -1
- package/dist/types/integrity/unsupported-claim/delivered.d.ts +73 -0
- package/dist/types/integrity/unsupported-claim/delivered.d.ts.map +1 -0
- package/dist/types/integrity/unsupported-claim/evaluate.d.ts +103 -1
- package/dist/types/integrity/unsupported-claim/evaluate.d.ts.map +1 -1
- package/dist/types/lib/conventions.d.ts +1 -0
- package/dist/types/lib/conventions.d.ts.map +1 -1
- package/dist/types/lib/frozenCopy.d.ts +76 -0
- package/dist/types/lib/frozenCopy.d.ts.map +1 -0
- package/dist/types/lib/jsonFaithful.d.ts +35 -0
- package/dist/types/lib/jsonFaithful.d.ts.map +1 -0
- package/dist/types/lib/normalize.d.ts +97 -0
- package/dist/types/lib/normalize.d.ts.map +1 -0
- package/dist/types/mcp/toolExtras.d.ts +10 -0
- package/dist/types/mcp/toolExtras.d.ts.map +1 -1
- package/dist/types/provider-contract/nativeOutputSchema.d.ts +6 -2
- package/dist/types/provider-contract/nativeOutputSchema.d.ts.map +1 -1
- package/dist/types/provider-contract/types.d.ts +12 -1
- package/dist/types/provider-contract/types.d.ts.map +1 -1
- package/dist/types/recorders/core/CheckInRecorder.d.ts +6 -1
- package/dist/types/recorders/core/CheckInRecorder.d.ts.map +1 -1
- package/dist/types/redaction/conversation.d.ts.map +1 -1
- package/dist/types/redaction/knownStrings.d.ts +9 -7
- package/dist/types/redaction/knownStrings.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/semantics/check.d.ts +44 -2
- package/dist/types/semantics/check.d.ts.map +1 -1
- package/dist/types/semantics/cli.d.ts.map +1 -1
- package/dist/types/semantics/coverage/absent.d.ts +19 -2
- package/dist/types/semantics/coverage/absent.d.ts.map +1 -1
- package/dist/types/semantics/coverage/among.d.ts +74 -0
- package/dist/types/semantics/coverage/among.d.ts.map +1 -0
- package/dist/types/semantics/coverage/composedCoverage.d.ts +221 -0
- package/dist/types/semantics/coverage/composedCoverage.d.ts.map +1 -0
- package/dist/types/semantics/coverage/evidence.d.ts.map +1 -1
- package/dist/types/semantics/coverage/index.d.ts +4 -1
- package/dist/types/semantics/coverage/index.d.ts.map +1 -1
- package/dist/types/semantics/coverage/ledger.d.ts +2 -1
- package/dist/types/semantics/coverage/ledger.d.ts.map +1 -1
- package/dist/types/semantics/coverage/read.d.ts +19 -0
- package/dist/types/semantics/coverage/read.d.ts.map +1 -1
- package/dist/types/semantics/coverage/recognize.d.ts +17 -1
- package/dist/types/semantics/coverage/recognize.d.ts.map +1 -1
- package/dist/types/semantics/coverage/search/binding.d.ts +28 -0
- package/dist/types/semantics/coverage/search/binding.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/compose.d.ts +91 -0
- package/dist/types/semantics/coverage/search/compose.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/declaration.d.ts +76 -0
- package/dist/types/semantics/coverage/search/declaration.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/door.d.ts +47 -0
- package/dist/types/semantics/coverage/search/door.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/events.d.ts +43 -0
- package/dist/types/semantics/coverage/search/events.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/facets.d.ts +53 -0
- package/dist/types/semantics/coverage/search/facets.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/gaps.d.ts +64 -0
- package/dist/types/semantics/coverage/search/gaps.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/inEffect.d.ts +66 -0
- package/dist/types/semantics/coverage/search/inEffect.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/resultFacts.d.ts +43 -0
- package/dist/types/semantics/coverage/search/resultFacts.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/review.d.ts +37 -0
- package/dist/types/semantics/coverage/search/review.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/served.d.ts +52 -0
- package/dist/types/semantics/coverage/search/served.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/span.d.ts +35 -0
- package/dist/types/semantics/coverage/search/span.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/statementText.d.ts +47 -0
- package/dist/types/semantics/coverage/search/statementText.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/types.d.ts +121 -0
- package/dist/types/semantics/coverage/search/types.d.ts.map +1 -0
- package/dist/types/semantics/coverage/search/valueWords.d.ts +23 -0
- package/dist/types/semantics/coverage/search/valueWords.d.ts.map +1 -0
- package/dist/types/semantics/coverage/types.d.ts +163 -0
- package/dist/types/semantics/coverage/types.d.ts.map +1 -1
- package/dist/types/semantics/described.d.ts.map +1 -1
- package/dist/types/semantics/envelope.d.ts.map +1 -1
- package/dist/types/semantics/index.d.ts +2 -1
- package/dist/types/semantics/index.d.ts.map +1 -1
- package/dist/types/semantics/overclaim.d.ts +106 -0
- package/dist/types/semantics/overclaim.d.ts.map +1 -0
- package/dist/types/semantics/types.d.ts +13 -0
- package/dist/types/semantics/types.d.ts.map +1 -1
- package/dist/types/time-travel/servedView.d.ts +1 -1
- package/dist/types/time-travel/servedView.d.ts.map +1 -1
- package/dist/types/tools/declare.d.ts +1 -1
- package/dist/types/tools/hostFilled.d.ts +20 -1
- package/dist/types/tools/hostFilled.d.ts.map +1 -1
- package/dist/types/tools/searchOf.d.ts +61 -0
- package/dist/types/tools/searchOf.d.ts.map +1 -0
- package/dist/types/tools/tools.d.ts +49 -0
- package/dist/types/tools/tools.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/esm/tools/normalize.d.ts +0 -43
- package/dist/esm/tools/normalize.js.map +0 -1
- package/dist/tools/normalize.js.map +0 -1
- package/dist/types/tools/normalize.d.ts +0 -44
- package/dist/types/tools/normalize.d.ts.map +0 -1
package/AGENTS.md
CHANGED
|
@@ -286,7 +286,7 @@ const agent = Agent.create({ provider, model })
|
|
|
286
286
|
agent.on('agentfootprint.context.evaluated', (e) => console.log(e.payload.activeIds));
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
-
**
|
|
289
|
+
**125 typed events across 27 domains.** Two subscription shapes and no third:
|
|
290
290
|
`'*'` (every event) and `'agentfootprint.<domain>.*'` (one domain). **`'agentfootprint.*'`
|
|
291
291
|
is not a pattern** — TypeScript rejects it, and at runtime it would match nothing.
|
|
292
292
|
|
|
@@ -300,14 +300,24 @@ agent.on('agentfootprint.agent.turn_end', (e) =>
|
|
|
300
300
|
## Human in the loop
|
|
301
301
|
|
|
302
302
|
```typescript
|
|
303
|
-
import {
|
|
303
|
+
import { isCheckInPause, checkInApproved } from 'agentfootprint';
|
|
304
304
|
|
|
305
305
|
const result = await agent.run({ message: 'Refund $500?' });
|
|
306
|
-
if (
|
|
307
|
-
|
|
306
|
+
if (isCheckInPause(result)) {
|
|
307
|
+
// The decision names the request it answers: once, for exactly the call shown.
|
|
308
|
+
const final = await agent.resume(
|
|
309
|
+
result.checkpoint,
|
|
310
|
+
checkInApproved({ request: result.checkIn, by: 'maya' }),
|
|
311
|
+
);
|
|
308
312
|
}
|
|
309
313
|
```
|
|
310
314
|
|
|
315
|
+
A decision for another pause, for a checkpoint whose call changed, or a second
|
|
316
|
+
resume with the same decision throws `ResumeDecisionError` — the tool never runs.
|
|
317
|
+
"Once" holds per ledger: agents in one process share one by default; when more
|
|
318
|
+
than one process can resume a paused run, give them one shared store via
|
|
319
|
+
`Agent.create({ decisionLedger })`.
|
|
320
|
+
|
|
311
321
|
## Resilience
|
|
312
322
|
|
|
313
323
|
```typescript
|
package/CAPABILITIES.md
CHANGED
|
@@ -31,7 +31,8 @@ not in this table, search `src/index.ts` for the nearest noun before writing cod
|
|
|
31
31
|
| serving agents to AG-UI frontends (CopilotKit, the AG-UI Dojo, an `@ag-ui/client` app) from any framework with no glue code — POST a `RunAgentInput`, stream AG-UI events back; the request is untrusted browser input: only the newest user message is conversation (the page's copy is never read), a system/developer message refused, an answer taken only for the pause the server keeps, frontend tools only by the app's name allow-list with its own contract (they run in the page, no server privilege), `state`/`context` only through the app's validators, no identity/credential/redaction from a request; a fresh runner per request, the thread bound to the caller the app authenticates, the conversation and paused runs kept server-side, one turn per thread, door guard, body ceiling, SSE keep-alive | `streamHandler` + `ProtocolAdapter` + `verifiedThreads` (`agentfootprint/hosting`) + `agUi` (`agentfootprint/ag-ui`) | `src/hosting/streamHandler.ts` | 10.4.0 |
|
|
32
32
|
| serving an agent behind a GATEWAY that speaks AG-UI in its own request body and its own output envelope (`{"eventType":"…Event","event":{…,"eventSequence":n}}`) — `agUi()` as three replaceable strategies: a reader (the gateway's body → the turn), the translation (AG-UI vocabulary, unchanged) and the framing (the envelope; each frame's number in its own stream handed in by the host, never a shared counter); every untrusted-input rule stays in the core whichever reader ran (shape and ids, no system/developer message, frontend tools by allow-list, state/context by validators, answers only for the kept pause; each value read once) | `agUi({ reader, translation, framing })` + `AgUiRequestReader` / `AgUiTurnRequest` / `AgUiTranslationStrategy` (`agentfootprint/ag-ui`), `SseFraming.frame(event, { sequence })` + `SseFramePosition` (`agentfootprint/observe`) | `src/ag-ui/adapter.ts` | 10.5.0 |
|
|
33
33
|
| checking forced tool choice per model without changing the existing boolean wire declaration; explicit requests refuse before transport, classifiers keep their strict parse alternative, wrappers preserve and fallback pairs intersect | `LLMProvider.supportsForcedToolChoice` + `forcedToolChoiceFor` + `UnsupportedToolChoiceError` (`agentfootprint/providers`) | `src/provider-contract/forcedToolChoice.ts` | 10.1.0 |
|
|
34
|
-
| a typed answer constrained by the PROVIDER'S OWN structured output instead of asked for in prose — the schema sent as Anthropic's `output_config.format`, the agent keeping its tools; one function builds the API-compatible wire copy (objects closed, unsupported constraints moved into the description, recursion / external `$ref` / complex enums / open values / open-keyed maps refused at build by node), the parser still judges; per-model capability with unknown ids read as the newest generation, refused by name at run start and before transport; a `'refusal'` / `'max_tokens'` stop fails the attempt by name even when it parses; `_findings` allowed on the format when the ledger is armed | `.outputSchema(parser, { strategy: 'native', jsonSchema })` + `LLMProvider.carriesNativeOutputSchema` / `supportsNativeOutputSchema` + `nativeOutputSchemaFor` + `UnsupportedNativeOutputError` (`agentfootprint/providers`) + `answerGuarantee: 'native'` + `OutputAttempt.stopReason` | `src/provider-contract/nativeOutputSchema.ts` | 10.3.0 |
|
|
34
|
+
| a typed answer constrained by the PROVIDER'S OWN structured output instead of asked for in prose — the schema sent as Anthropic's `output_config.format`, the agent keeping its tools; one function builds the API-compatible wire copy (objects closed, unsupported constraints moved into the description, recursion / external `$ref` / complex enums / open values / open-keyed maps refused at build by node), the parser still judges; explicit-native per-model capability with unknown ids read as the newest generation, refused by name at run start and before transport; a `'refusal'` / `'max_tokens'` stop fails the attempt by name even when it parses; `_findings` allowed on the format when the ledger is armed | `.outputSchema(parser, { strategy: 'native', jsonSchema })` + `LLMProvider.carriesNativeOutputSchema` / `supportsNativeOutputSchema` + `nativeOutputSchemaFor` + `UnsupportedNativeOutputError` (`agentfootprint/providers`) + `answerGuarantee: 'native'` + `OutputAttempt.stopReason` | `src/provider-contract/nativeOutputSchema.ts` | 10.3.0 |
|
|
35
|
+
| choosing native structured output automatically only for positively known supported models (`supportsAutoNativeOutputSchema`) when a safely lowered JSON Schema is available; otherwise keeping instruction plus local validation, with an accurate format guarantee; accepting exactly one whole-answer JSON or unlabelled code fence before the unchanged JSON/schema parser | `.outputSchema(parser, { strategy: 'auto', jsonSchema? })` (default) + `agent.parseOutput` / `runTyped` | `src/core/agent/AgentBuilder.ts` | 11.0.0 |
|
|
35
36
|
| replaying Anthropic thinking in its original content order; refusing known unsafe active-tool replay, observing each permitted completed-turn omission before sending, and retaining that decision across checkpoints | `LLMMessage.replay` + `UnsafeThinkingReplayError` + `LLMCallHooks.onReplayPrepared` + `agentfootprint.agent.thinking_omitted` | `src/adapters/llm/anthropicThinkingReplay.ts` | 10.1.0 |
|
|
36
37
|
| keeping personal data out of an agent's saved records — snapshot, narrative, every event, recordings, bug reports, answer accounts, the exporters — while the model, the tools and the caller keep the real values; the library's own list of the names the conversation travels under (proven per feature), joined with the fields your tools name; it reaches compositions (members' policies adopted) and runs a tool starts (`ctx.redact`), and readers of the record say "kept out", never "not recorded" or "no tool ran" | `Agent.create({ redact })` (a footprintjs `RedactionPolicy`) + `conversationRedaction` + `ToolExecutionContext.redact` | `src/redaction/` | 9.140.0 |
|
|
37
38
|
| prompt caching that keeps hitting behind `withRetry`, `withFallback` or your own provider wrapper — the cache strategy chosen from what the adapter DECLARES (explicit breakpoints / automatic / none), never from its name, plus a moving breakpoint on the conversation tail so each call reads back what the last one sent | `LLMProvider.promptCaching` (`PromptCaching`) + `cacheStrategyFor` + `BreakpointCacheStrategy` / `AutomaticCacheStrategy` / `NoOpCacheStrategy` | `src/cache/cacheStrategyFor.ts` | 9.138.0 |
|
|
@@ -45,6 +46,7 @@ not in this table, search `src/index.ts` for the nearest noun before writing cod
|
|
|
45
46
|
| identifying which same-name tool call a permission check or credential event describes — captured at dispatch, including resume and inner pull failures; qualify with run identity, missing fields stay unknown | `ToolCallEventIdentity` + `bindToolSecurityEvents` | `src/core/agent/toolSecurityEvents.ts` | 9.137.0 |
|
|
46
47
|
| guiding an evidence repair to ask for missing context without inventing values | `recoveryInstruction` + `EvidenceRecoveryContext` | `src/core/agent/evidence/` | 9.96.0 |
|
|
47
48
|
| checking a typed final answer against scoped evidence before streaming or memory delivery — optional host-authored checks with enforce/observe modes, canonical JSON and bounded read-only artifacts | `answerValidation` + `AnswerValidationError` | `src/answer-validation/` | 9.95.0 |
|
|
49
|
+
| an answer the agent's own checks flagged still being DELIVERED — a typed field that contradicts the fact a tool settled (`.claims()`) or a value no tool result carried (`.namesAndNumbersFromEvidence()`) withheld instead of only recorded: each listed check is a row of the enforcing answer validation, judged on the exact JSON delivered after any output transform (draft tokens held, `AnswerValidationError` on refusal, recorded only under `mode: 'observe'`), after the gate's one repair turn under `'guard'` (served no tools while the validation enforces, so a tool that writes or sends never runs twice); claims compare after a declared normalization (text in NFC, trimmed, case agreeing only between the same letters in another case in a word of more than three letters — `ß` never `ss`, and a rule that cannot know where case carries meaning, so `Polish` agrees with `polish`; a number and a plain decimal string by value; a unit exactly; a currency, separators, a dot-grouped number, a date or a time only as written), so a different spelling — an accent dropped included — is never a contradiction; a reading can only withhold — a field contradicting any value read fails its row, and readings that differ where the field contradicts none, a reading that settled only doubt beside a stated value, values that cannot be compared safely (a list with a hole included), a malformed `Claim`, or a doubt agreeing with a tool's doubt is `unreachable` and withheld; an agreeing claim, a fact no tool settled and a clean gate pass are `not-applicable` — the agent's rows withhold and never verify, so only the app's own checks pass a report; rows carry declared names and counts, never values; opt-in, defaults unchanged | `answerValidation({ agentChecks })` + `AgentCheckName` | `src/answer-validation/` | 11.0.0 |
|
|
48
50
|
| blocking a declared claim when its required relationship evidence is missing or unresolved, while independently checked measurements remain usable — host-owned policies over Foottrace requirement records, composed with output middleware and enforcing answer validation | `checkClaimRequirements` + `ClaimRequirementPolicy` + `ClaimRequirementAssessment` | `src/answer-validation/requirements.ts` | 10.6.0 |
|
|
49
51
|
| an output guard that sees which tools ran — fail the run when the answer presents code but no code-execution tool ran; this run's tool calls (name, call id, outcome ok/error/not-run; never arguments or results) handed to the enforce check, per run, bounded | `AnswerValidationContext.toolCalls` + `AnswerToolCallsView` + `limits.maxToolCalls` | `src/answer-validation/toolLedger.ts` | 10.5.0 |
|
|
50
52
|
| turning a written operational procedure (a runbook, a triage playbook) into ONE agent tool whose every answer is EVIDENCE — coverage folded up from the inner tools it calls, rule name+version, verdict rows with GENERATED meanings, and the recorded walk as an artifact ticket, never bytes | `runbookAsTool` — dials: `procedure` (factory, invoked per call with `ctx.tools`) + `resultKind` (`'verdict/*'` arms the rowset projection; anything else ships spine + the chart's `report`) + `rules {name, version}` (default absent ⇒ `rule_version: 'undeclared'`) + `verdicts {decider, maxRows}` (default 50; `verdict_meanings` = statically declared branches + this run's rule labels + the DEFAULT branch's label, which reaches evidence only when the chart calls `decide(s, rules, {branch, label})` — fp ≥9.16.1, the default is chosen by NO rule so nothing else can name it, and inside a generated fan-out branch the static walk is blind too; an undeclared or blank label stays ABSENT from the map, never invented from a branch id, and there is deliberately NO caller-supplied meanings map) + `presentation` (`'prose'` default = ship `table` + `VERDICT_RENDER_NOTE` "output it VERBATIM"; `'panel'` = the HOST renders the rowset, so NO `table` key at all + `PANEL_RENDER_NOTE` "the rows are already on the reader's screen — do not reproduce them"; the rowset half is byte-identical across modes, `table` stays RESERVED in both, an unknown value THROWS at definition) + `walk {cap, recording}` (cap default 500; over-cap ⇒ control-flow projection, declared · `recording: true` or `{label, maxBytes}`, default OFF — ALSO files the inner chart's own `{snapshot, events, structure}` under `recording/run` and puts its ref on the spine as `walk.recording_ref`, because the ROW projection cannot be drawn; snapshot read from the REDACTED mirror so one `redact` means the same for both; over `maxBytes` (`DEFAULT_RECORDING_MAX_BYTES` = 5,000,000) it is REFUSED not truncated; every absence — no store / over size / unserializable / store threw — is STATED in `walk.recording_note`, and the four `recording_*` fields are absent entirely when the dial is off) + `composedOf` (drift-checked at agent BUILD) + kept `recorders`/`keepRecord`/`keepRecordLimit`/`redact`; reserved state keys `verdicts`/`coverage`/`report` (the `report` bag lands BESIDE the spine, never over it — a report field spelling `af_coverage`/`af_provenance`/`rule_version`/`walk`/`report_note` or a live projection key is discarded and NAMED in `result.report_note`; precedence is explicit in `report.ts`, never spread order); inner `absent()` passes through VERBATIM unless the call said `allowAbsent`; walk kind `recording/chart-walk` + `walk_segment` discriminant | `src/core/runbook/` | 9.76.0, recording 9.79.0 |
|
|
@@ -103,9 +105,16 @@ not in this table, search `src/index.ts` for the nearest noun before writing cod
|
|
|
103
105
|
| a lookup tool that answers "nothing found" for EVERY id because a filter broke, and an agent reporting that absence as fact — the run itself produced the id, the lookup came back empty, and that PAIR is worth a look | `noticeEmptyLookups` + `readLookupResult` + `EMPTY_LOOKUP_CEILING` (dial default OFF and needs a tool declaring `argumentsFrom` too — two halves; kind `empty-lookup` at seam `write`, always `advisory: true`; empty = a zero-length ARRAY or an `absent()` envelope, every other shape files `not-applicable` and no finding; the ceiling is quoted verbatim into every message) | `src/integrity/empty-lookup/` | 9.77.0 |
|
|
104
106
|
| an agent answering a NEW question out of an OLD turn's tool results — grounded, four turns stale, and the evidence gate approving it (`Tool calls 0` and "all 7 values were found in what the tools returned"). ALSO the bug half: the gate's two sentences claimed the flagged values "appear in no tool result FROM THIS TURN" while its index walked every `role:'tool'` turn — a boundary asserted and never measured; both now say "no tool result this run read" | `noticePriorTurnEvidence` + `PRIOR_TURN_EVIDENCE_CEILING` + `priorTurnEvidenceOf` + `AnswerGroundingReading` (dial default OFF and needs `.namesAndNumbersFromEvidence()` too — two halves, and the second is structural: the gate owns the extractor that decides which tokens are values; kind `prior-turn-evidence` at seam `claim`, always `advisory: true`; `EvidenceCorpus.values` became a `Map<form, turn>` stamped in the walk that was already happening, a TURN = each `role:'user'` message `isLibraryAuthoredTurn` did NOT write (counting the gate's own correction would file against every revised answer); fires when ≥1 value is grounded and NOT ONE came from the turn being answered — ONE current-turn value files nothing, which is what keeps an honest follow-up quiet and is the design's falsification test; the zero-tool-call turn is the SAME kind with a stronger witness, not a second kind; corpus is the LIVE WINDOW so ordinals are window-relative and the distance is a FLOOR, while the boundary stays exact (`'current-request'` is un-droppable); memory/RAG values are exempt from grounding and invisible — it can under-report, never over-report; the ceiling is quoted verbatim into every message) | `src/integrity/prior-turn-evidence/` | 9.83.0 |
|
|
105
107
|
| a tool's ROWS quietly disagreeing with what the tool promised — a LUN 0 stored as `""` because it is falsy, a numeric column arriving as quoted strings, a declared column present in no row at all | `Tool.resultColumns` + `checkColumnTypes` + `COLUMN_TYPE_CEILING` + `readRowset` (dial `'off'` (default) / `'warn'` (file findings, model reads the rows unchanged) / `'enforce'` (refuse the rows, `resultCeiling`'s teaching-sentence idiom, delivered status `'invalid'`) — the `toolArgsValidation` trio, this seam's mirror; needs a tool declaring `resultColumns` too — two halves; types `number`/`string`/`boolean`/`date`, bare word or `{type, nullable}`, deliberately NO `'unknown'`; OPEN — unlisted columns allowed and unjudged; TWO kinds at seam `write` — `column-type-mismatch` (there, wrong type) vs `missing-column` (declared, in no row); rowset = an ARRAY OF PLAIN OBJECTS with ≥1 row, everything else incl. the ZERO-ROW result files `not-applicable` (empty is `empty-lookup`'s subject); travels MCP `_meta`; the ceiling is quoted verbatim into every message) | `src/integrity/column-types/` | 9.78.0 |
|
|
108
|
+
| verifying the model-selected negative kind against cited native reads, normalizing only none/not-found over declared absence; optional subject phrases must include the recorded populations, and delivered subjects come from the searches; complete requires an explicit claim and completeness evidence, with visible absence-only fallback when it fails | `.negativeClaims({ field, tools })` + `NegativeClaimCitation` | `src/core/agent/negativeClaims/` | 11.0.0 |
|
|
109
|
+
| observing data-anchored negative prose without an output schema, citation field or answer validator; native read evidence only, unchanged delivery and normal streaming, no correction or withholding. An eligible grammar match with no dispatched native read recorded for the current turn files one no-read note per answer; earlier-turn reads do not suppress it, but recorded failed or kept-out reads do. This presence check proves neither that no read occurred nor that evidence is usable. The observer filters exact normalized ordinary clauses None / No action is needed / Tests: 0 failed; added words or separate negative clauses remain eligible. Current-turn findings make the assessment not-sure; no finding never means verified. Bounded English heuristic with code/language/limit notes and optional literal phrase extensions; prior detector failed every free-replay benchmark gate, revised data-anchored path remains unmeasured. App validation stays independent; prose-only plus outputFallback is refused | `.negativeClaims({ prose: true, phrases? })` + `NegativeClaimsOptions` + `agent.findings()` + `agentfootprint.findings.negative_claim` (bounded locations, codes, phrase version and native references; no answer text or tool values) | `src/core/agent/negativeClaims/` | 11.0.0 |
|
|
110
|
+
| deriving a typed negative's kind and searched subject from the cited native records; model supplies only result handles, legacy kind/about never steer checks, and advisory display text remains unchecked; other searches are compared using recorded populations | `.negativeClaims({ field, tools })` + `NegativeClaimCitation` | `src/core/agent/negativeClaims/` | 11.0.0 |
|
|
111
|
+
| checking an agent's "there are none", "not found" or "that is the full list" against what its searches were actually made of — by code, never a model: a TYPED claim cites the library-minted result identities (or served handles) of the reads it rests on and is established only from those reads (this turn, read and returned, a local composed row, the kind fitting the row), withheld when rows on the same, a narrower or a wider search contradict it, a same-search call fails after it, or any call not classified as a read runs after it; the library writes the statement, attributing every text to the tool, the model or the result and listing every gap as "not checked". The typed path is UNMEASURED. A PROSE claim found by a fixed, versioned and hashed English grammar is only NOTED (`scope-wider`, `coverage-gap`, `entity-unresolved` …); on a first free replay against model-rater labels the prose grammar FAILED every gate it could be read on | `judgeTypedNegatives` + `judgeProseNegatives` + `composeStatement` + `NEGATIVE_CLAIM_PHRASES` (internal; typed checker mounted by `.negativeClaims()`, prose checker mounted observe-only with whole-answer limits) | `src/integrity/negative-claim/` | 11.0.0 |
|
|
106
112
|
| a model head-mathing a total from tool-result numbers while a compute tool sits unused on the wire — a LATE line each iteration naming the staged refs and the `wants` tool that spends them (recency working FOR the instruction), plus the revise correction naming the same route | `nudge: true` (default off) + `stagedRefsNudgeLine` + `findStagedRefs` + `grounding_nudged` | `src/core/agent/stagedRefs.ts` | 9.75.0 |
|
|
107
113
|
| a tool answering "I looked and found nothing", routably | `absent` + `looked_for` + `checked`/`not_checked`/`cannot_cover` + `tryInstead` (delivered status `'absent'`, routable by `onToolStatus`) | `src/semantics/coverage/absent.ts` | 9.43.0 |
|
|
114
|
+
| a lookup that checked a name against ONE known list and found nothing — a named miss over the names it read, never "it does not exist": the names facet in `checked` (dated when `measuredAt` is an instant), the gap "names outside <source>" (`{ kind: 'scope', relevance: 'bears', bears: 'source' }`) the author cannot remove except by `authoritative: { why }` — and, for `partial: true`, also "not every name in <source> was read" (`bears: 'completeness'`), which nothing removes — and `provenance` composed; `names` read only to check `count` (`names-count-mismatch`) and never served | `absent({ what, among })` + `AmongDeclaration` + `namesFacetOf` | `src/semantics/coverage/among.ts` | 11.0.0 |
|
|
115
|
+
| a build gate for declarations that claim more than was read — a refusal that says what does not exist, an absence that calls the input wrong, every `authoritative` names list for review | `checkSemantics(entries, { strict?, rules?: ['overclaim'] })` + catalog `refusals` (strings, values, or `{ text, argument?, value? }`) + codes `refusal-asserts-absence` / `absence-asserts-wrongness` / `authoritative-names` (warnings, only for samples using the new fields, and only on a sentence that names the looked-up argument or value; a format, range, permission or transport sentence exempts a wrongness phrase, never a non-existence one; `--strict` or `--rules=overclaim` make the first two errors) | `src/semantics/overclaim.ts` | 11.0.0 |
|
|
108
116
|
| stating what a clean answer does NOT rule out | `coverage` + the declaration `{ checked, not_checked?, cannot_cover? }` | `src/semantics/coverage/ledger.ts` | 9.43.0 |
|
|
117
|
+
| a tool's "nothing found" stating exactly what ONE call searched — declared once as typed data (every argument classified by role, defaults, built-in qualifiers, blind spots each bearing on a facet) and composed by the library from the arguments the call ran with, so it can only under-claim relative to a true declaration; a remote declaration establishes nothing; the row addressed by a library-minted result identity | `Tool.search` (`defineTool({ search })`: `source`, `subject`, `fixed`, `arguments` with `role` (incl. `query` / `match`) + `whenOmitted` (a value or `{ any: true }`), `complete`, `gaps` with `bears`, `limits.cap` / `limits.byCredential`, `ranking: 'approximate'`; judged at `defineTool` and again at registration) + `effects: 'read'` (local, `defineTool` only) + `absent({ checked: 'declared' })` / `coverage(rows, { checked: 'declared' })` + `resolved` / `paging` on a result + `ComposedCoverage` / `isComposedCoverage` (the `coverageDeclared` row: typed `checked`, `gaps`, `complete`, `composed: 'local' or 'remote'`, `resultId`, `handle`); events carry references, never a composed value; `check:semantics` lists `source-said` / `said-overlap` | `src/semantics/coverage/search/` | 11.0.0 |
|
|
109
118
|
| a TYPED answer (`.outputSchema()`) carrying the limits its tools declared WITHOUT breaking its JSON — the same limits `.limitsTravelWithTheAnswer()` appends to a prose answer, as data beside it (checked / not checked / cannot cover, duplicates said once, every entry kept); `runTyped()` parses the model's answer untouched | `agent.answerCoverage()` + `turn_end.answerCoverage` + `AgentState.answerCoverage` (with `.outputSchema()` + `.limitsTravelWithTheAnswer()`; absent when no tool declared a limit) | `src/core/agent/stages/answerCoverage.ts` | 9.121.0 |
|
|
110
119
|
| a person-readable short form of a coverage item, and whether an unchecked item is about EXISTENCE (does the thing asked about exist at all) or SCOPE (outside what the tool reaches) — on the record for a report, never in the model's request, never evidence. `short`: at most 80 chars, one line, never longer than `what`. `kind`: 'existence' or 'scope', on notChecked and cannotCover only. Refused at `absent()` and `coverage()`, read-never-repaired on a foreign envelope; carried by `tools.absent`, `tools.coverage_declared` and `coverageDeclared`; stripped from every served envelope, with `tool_end.modelResult` stamped where it differs | `CoverageItem` + `absent` + `coverage` | `src/semantics/coverage/` | 9.116.0 |
|
|
111
120
|
| a skill's plain name for a person ("array estate report" for `array-inventory`) on the recording, without changing what the model reads or what a graph draws — at most 60 chars, one line of plain visible text, not the id; carried as `skill.graph_declared` `nodes[].title` on a skill-graph agent, absent when not declared | `defineSkill` + `title` | `src/injection-engine/factories/defineSkill.ts` | 9.116.0 |
|
|
@@ -124,6 +133,7 @@ not in this table, search `src/index.ts` for the nearest noun before writing cod
|
|
|
124
133
|
| minting one of those shapes from a tool that is NOT JavaScript — the canonical note sentences and reserved marker keys as DATA, so a Python/Go/Rust sidecar reads a file instead of regex-scraping `dist/esm` (which a consumer really did) | `canonical-notes.json` at the package root + the `./canonical-notes.json` exports entry, GENERATED from the built barrel by `scripts/gen-canonical-notes.mjs` | `scripts/gen-canonical-notes.mjs` | 9.70.0 |
|
|
125
134
|
| proving a session store really honours the port | `runSessionLifecycleConformance` + `declared` skips (by case name WITH the reason; a declared case still RUNS) + outcomes `'passed'`/`'not-applicable'`/`'declared'`/`'failed'` | `src/hosting/conformance/` | 9.37.0 |
|
|
126
135
|
| deciding who owns a contested session write | `resolveSessionOwner` | `src/hosting/sessionOwnership.ts` | 9.37.0 |
|
|
136
|
+
| a session list that badges only what still waits on a person — an answered pause, or one no answer can reach any more, lists as a conversation; the one reading every store that lists reports (the conformance battery holds a store you wrote to it) | `listedFormatOf` + `SessionSummary.format` | `src/hosting/answeredPause.ts` | 11.0.0 |
|
|
127
137
|
| a host filing its OWN per-turn artifacts (a story, the person's clicks) where `artifact-get` will look for the same caller — never composing a scope itself; awaited inside the turn, bounded (`turnArtifactsTimeoutMs`, default `TURN_ARTIFACTS_TIMEOUT_MS`), revoked after it (`TurnArtifactsExpiredError`), failures on the stream (`artifacts.hand_over_failed`) | `HostReply.turnArtifacts` + `TurnArtifacts` | `src/hosting/turnArtifacts.ts` | 9.115.0 |
|
|
128
138
|
| a host reading or filing artifacts in the scope a redemption by the same caller reads, OUTSIDE a turn (a read by ref before a run, an app-owned route) — the redemption door's verifier (the person a token or a sign-in key proves — a `HostRequest` goes in as it is — or at an open door the session id and claim), session-id check, ownership rule and ONE scope composer; refusals as values (`unverified` / `unavailable` / `no-session` / `invalid-session` / `not-found` / `no-store`); never builds or evicts an instance, never the unscoped store; revoked with its instance | `handle.artifactsForRequest` + `ArtifactsForRequestResult` | `src/hosting/standingAgent.ts` | 9.117.0 |
|
|
129
139
|
| refusing a forged cross-site request, DNS rebinding or an oversized session id at the hosting door — before any handler, in every identity mode; the same rule for an app's own routes beside the door | `doorGuard` + `checkSessionId` + `MAX_SESSION_ID_LENGTH` + `CrossSiteOptions` (`allowedOrigins` / `allowedHosts` / `requireJsonContentType` on `httpHost`, `nodeHost` and the hosted-runtime adapters, which default the browser rules OFF on a non-loopback bind; a loopback bind defaults `allowedHosts` to the loopback names) + `AgentHost.onRefusal` (feeds the ingress record) | `src/hosting/doorGuard.ts` | 9.115.0 |
|
|
@@ -140,7 +150,8 @@ not in this table, search `src/index.ts` for the nearest noun before writing cod
|
|
|
140
150
|
| making a caller-supplied id safe for a backend | `encodeIdentityField` | `src/memory/identity/encode.ts` | 9.37.0 |
|
|
141
151
|
| scoping a skill's tools so they reach the model only while it is active | `toolsFromActiveSkill` + a no-arg posture (default off) + the stamp `autoActivate: 'currentSkill'` (a default, never an override) | `src/core/agent/toolsFromActiveSkill.ts` | 9.36.0 |
|
|
142
152
|
| subscribing to every event in one domain at once | `DomainWildcard` | `src/events/dispatcher.ts` | 9.4.0 |
|
|
143
|
-
| pausing a run for a person and resuming it later | `checkInApproved` / `checkInDeclined` (`{ by, note?, value? }`; a decline is NOT an abort — the model gets a "declined by human" tool result and adapts in-loop) | `src/core/checkin.ts` | 7.5.0 |
|
|
153
|
+
| pausing a run for a person and resuming it later | `checkInApproved` / `checkInDeclined` (`{ request, by, note?, value? }`; a decline is NOT an abort — the model gets a "declined by human" tool result and adapts in-loop) | `src/core/checkin.ts` | 7.5.0 |
|
|
154
|
+
| a person's approval used ONCE, for the exact call they were shown — refused for another paused request (a later pause of the run, a parallel sibling, another conversation), for a checkpoint whose call changed after the ask, for an ask whose later rules changed or whose arguments a later rule rewrote, or on a second resume; once per ledger — one per process by default, one shared store across processes; every pre-execute callback and event (a `checkIn` predicate, the evidence assembler, the permission checker, `tool_start`, and the history they are handed) sees one shared frozen copy of the arguments (its own copy when they hold a `Map`, `Set`, `Date` or typed array), never the ones the tool runs with, and an approved call is held to its request again at `execute`; a closed pause's call is recorded as not run only when the ledger the request was minted under spends it (a tombstone, so nothing can run it later), else as possibly run — proof needs a shared ledger with a `storeId` (unique per backing store, never copied across environments, changed on migration) and a permanent `spend` across processes, and a retried close keeps its verdict (`closed-proven:` marker; a late answer is refused `'closed-by-host'`; a decision is spent only in the proving ledger its request was minted under — `'ledger-changed'` otherwise, so a ledger migration means pending approvals are asked again); this process's default ledger proves only for pauses kept in `memorySessions()`, a restart never; switching ledgers leaves earlier pauses unprovable | `CheckInRequest.id` / `MiddlewareAsk.id` (the request id, bound to the call) + `CheckInDecision.requestId` + `ResumeDecisionError` (`reason`) + `Agent.create({ decisionLedger })` / `DecisionLedger` / `inMemoryDecisionLedger` | `src/core/consentRequest.ts` | 11.0.0 |
|
|
144
155
|
| refusing unserved, ambiguous, malformed or known not-dispatched findings citations before host callbacks and tool execution, with request-local accepted-attempt evidence, bounded diagnostics and JSON-answer admission; no additional model call or cache-layout change | `captureFindingsRequest` + `findingsReferenceRefusal` (internal; enabled by `.findings()`) | `src/core/agent/findings/admission.ts` | 10.9.0 |
|
|
145
156
|
| a SECOND source judging every tool result — a calibrated classifier asked what a result is worth for the declared proposition (never why the tool was called), its distribution and cost on the record beside the model's own standing, never merged, never served in its place (policy A) | `.findings({ judge })` + `Classifier` / `typesafe` / `mockClassifier` (`agentfootprint/classify`) + `JudgmentRow` / `JudgmentErrorRow` + `classifierScorer` (the scored entry choice, `agentfootprint/skill-graph`) | `src/classify/` | 9.104.0 |
|
|
146
157
|
| a classifier's reading of WHICH TOOL beside every model call — the ranking, the pick and the cost on the record before the call, the model's call and the agreement after it; optionally the served list narrowed to the top-N plus the doors, on the committed record the receipt hashes and the served view rebuilds; a miss recorded and the full wire served next call, never a refusal, never an override | `.toolChoice({ classifier, serve, alwaysServe })` + `ToolChoiceRow` + `ToolChoiceOutcomeRow` + `ToolChoiceErrorRow` + `ALWAYS_SERVED_TOOLS` + `recordToolChoice` + `narrowServed` (events `agentfootprint.tool_choice.*`, bench `npm run bench:tool-choice`) | `src/core/agent/toolChoice/` | 9.105.0 |
|
|
@@ -154,7 +165,7 @@ not in this table, search `src/index.ts` for the nearest noun before writing cod
|
|
|
154
165
|
| a per-request deadline on your gateway provider, so a gateway that never answers (or a stream that goes silent) fails typed instead of hanging the run: bounds the response headers, a `complete()` body and EACH stream read (first chunk, then every gap — a stream that keeps talking is never cut off); a miss aborts the request and raises `reason: 'timeout'`, `retryable: true` (withRetry re-opens it while no chunk reached the caller); the caller's `req.signal` still wins; omitted = the fetch gets exactly `req.signal` as before | `timeoutMs` + `invokeModelGateway` + `InvokeModelGatewayError` (`reason: 'timeout'`) | `src/adapters/llm/InvokeModelGatewayProvider.ts` | 9.130.0 |
|
|
155
166
|
| Replay a saved complete domain-event batch with the same fork grouping and nested drill projection as live run steps | `ingestDomainEvents` + `getSteps` + `clear` | `src/recorders/observability/RunStepRecorder.ts` | 10.0.0 |
|
|
156
167
|
| experimental, not yet validated in real use: additive saved-record shapes for scoped historical verification observations; paired checkpoint readers and writers validate retained evidence and counters without judging old observations again, and native continuation refuses an unarmed evidence carrier; protocol only — no runtime verifier, model declaration parser or answer badge is enabled | `FindingsRow` + optional `AgentRunCheckpoint.claimVerification` | `src/core/` | 10.2.0 |
|
|
157
|
-
| an AG-UI frontend (`@ag-ui/client`, CopilotKit, the AG-UI Dojo) reading an agentfootprint run with no glue code — the run's served events translated into AG-UI 1.0 events: streamed text, tool calls with arguments and results, reasoning, ReAct iterations and compositions as steps, a nested agent (a `Sequence` step, a `Parallel` branch) as a sub-agent with its parent links, a pause as an interrupt, a failure as `RUN_ERROR` in the record's words; `CUSTOM` an allow-list of events with projected fields (`AG_UI_CUSTOM_EVENTS`), reasoning only on request; ids minted from the record's address under the request's run id (unique across a thread when branches reuse a provider's tool-call id); nothing a redaction policy hides on the wire, at any depth; framed by the official `@ag-ui/encoder` (optional peer, loaded only when a framing is built) | `agUiSerializer` + `agUiSse` + `AG_UI_CUSTOM_EVENTS` (`agentfootprint/ag-ui`) + `RunTranslation` / `RunSettlement` (the port, `agentfootprint/hosting`) | `src/ag-ui/` | 10.4.0 |
|
|
168
|
+
| an AG-UI frontend (`@ag-ui/client`, CopilotKit, the AG-UI Dojo) reading an agentfootprint run with no glue code — the run's served events translated into AG-UI 1.0 events: streamed text, tool calls with arguments and results, reasoning, ReAct iterations and compositions as steps, a nested agent (a `Sequence` step, a `Parallel` branch) as a sub-agent with its parent links, a pause as an interrupt, a failure as `RUN_ERROR` in the record's words (an answer `.answerValidation()` withheld as `RUN_ERROR { code: 'ERR_ANSWER_VALIDATION' }`, a refusal not a crash — `RunSettlement.refusal` / `RunRefusal`); `CUSTOM` an allow-list of events with projected fields (`AG_UI_CUSTOM_EVENTS`), reasoning only on request; ids minted from the record's address under the request's run id (unique across a thread when branches reuse a provider's tool-call id); nothing a redaction policy hides on the wire, at any depth; framed by the official `@ag-ui/encoder` (optional peer, loaded only when a framing is built) | `agUiSerializer` + `agUiSse` + `AG_UI_CUSTOM_EVENTS` (`agentfootprint/ag-ui`) + `RunTranslation` / `RunSettlement` (the port, `agentfootprint/hosting`) | `src/ag-ui/` | 10.4.0 |
|
|
158
169
|
| writing a run's Server-Sent Events in a different frame shape — the framing is a strategy: `toSSE({ framing })`, default the frames it always wrote | `SseFraming` + `agentfootprintSse` (`agentfootprint/observe`) | `src/hosting/stream.ts` | 10.4.0 |
|
|
159
170
|
|
|
160
171
|
**Maintaining this table:** a new public capability adds a row, in the same
|
package/README.md
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
1
|
<h1 align="center">Agentfootprint</h1>
|
|
4
2
|
|
|
5
3
|
<p align="center">
|
|
6
|
-
<strong>
|
|
4
|
+
<strong>Build agents whose answers can be checked.</strong>
|
|
7
5
|
</p>
|
|
8
6
|
|
|
9
7
|
<p align="center">
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
A TypeScript agent framework for connecting answers to recorded evidence, making uncertainty explicit,
|
|
9
|
+
and checking outputs before delivery. Configure what an answer must support and when to withhold it.
|
|
12
10
|
</p>
|
|
13
11
|
|
|
14
12
|
<p align="center">
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
Built on <a href="https://github.com/footprintjs/footPrint">FootprintJS execution provenance</a>:
|
|
14
|
+
context, tool calls, results and decisions become connected records as the agent runs.<br/>
|
|
15
|
+
Build with tools, skills, memory, RAG and orchestration; use that record for answer checks, debugging and review.
|
|
17
16
|
</p>
|
|
18
17
|
|
|
19
18
|
<p align="center">
|
|
20
|
-
<a href="
|
|
21
|
-
|
|
22
|
-
</a>
|
|
23
|
-
</
|
|
24
|
-
<p align="center">
|
|
25
|
-
<sub>A real run, replayed — rendered with <a href="https://github.com/footprintjs/agentThinkingUI"><b>Story Lens</b></a> (<code>npm i agentthinkingui</code>). Every frame is generated from the run's own trace; <a href="https://footprintjs.github.io/agentThinkingUI/">▶ watch it live</a>.</sub>
|
|
19
|
+
<a href="#what-can-this-answer-support">Evidence and limits</a> ·
|
|
20
|
+
<a href="#checks-you-can-enable">Checks and guarantees</a> ·
|
|
21
|
+
<a href="#how-this-compares-with-langchain-and-mastra">Framework comparison</a> ·
|
|
22
|
+
<a href="#quick-start--runs-offline-no-api-key">Quick start</a>
|
|
26
23
|
</p>
|
|
27
24
|
|
|
28
25
|
<p align="center">
|
|
@@ -37,38 +34,75 @@
|
|
|
37
34
|
|
|
38
35
|
---
|
|
39
36
|
|
|
40
|
-
##
|
|
37
|
+
## What can this answer support?
|
|
38
|
+
|
|
39
|
+
A tool returned no rows. Before an agent says **"there are no incidents"**, the app
|
|
40
|
+
needs to know which account was searched, what period the read covered, whether it
|
|
41
|
+
finished, and what it could not reach. A successful empty query and a failed query
|
|
42
|
+
support different answers.
|
|
43
|
+
|
|
44
|
+
For example, the bounded claim is: **"The search returned no matching incidents
|
|
45
|
+
for this account and time window. Email reports were not checked."** That is an
|
|
46
|
+
illustration of scope-aware wording, not a claim that no incident exists anywhere.
|
|
47
|
+
When the evidence cannot support the requested conclusion, the app should make
|
|
48
|
+
that uncertainty explicit or withhold the answer.
|
|
49
|
+
|
|
50
|
+
Agentfootprint supplies the execution record and configurable checks for that
|
|
51
|
+
decision. Your app defines the comparisons and delivery policy. Tool declarations
|
|
52
|
+
must describe the query truthfully: recording a source's assertion does not prove
|
|
53
|
+
the source is correct.
|
|
54
|
+
|
|
55
|
+
## How evidence reaches the answer
|
|
56
|
+
|
|
57
|
+
1. **Record what ran.** FootprintJS connects execution steps and data dependencies;
|
|
58
|
+
Agentfootprint records the context supplied, tools called and results returned.
|
|
59
|
+
2. **Preserve the limits.** Tools declare absence, coverage and time boundaries.
|
|
60
|
+
Configure those limits to travel with the answer instead of relying on the model
|
|
61
|
+
to repeat them.
|
|
62
|
+
3. **Check before delivery.** Opt-in answer validation compares the candidate with
|
|
63
|
+
evidence under app-authored rules. Enforce mode withholds failed or unverified
|
|
64
|
+
candidates; the host decides how to explain the refusal to the user.
|
|
65
|
+
4. **Inspect the same run.** Review recorded inputs, results, decisions and checks,
|
|
66
|
+
or replay the execution to investigate a failure.
|
|
67
|
+
|
|
68
|
+
Execution provenance describes what ran and what was supplied. It does not expose
|
|
69
|
+
the model's internal reasoning or independently establish that an external fact
|
|
70
|
+
is true. Withholding an answer does not undo tool actions already performed.
|
|
41
71
|
|
|
42
|
-
|
|
43
|
-
domain knowledge to fix either:
|
|
72
|
+
## Checks you can enable
|
|
44
73
|
|
|
45
|
-
|
|
74
|
+
Installing the framework does not make every answer verified. These mechanisms
|
|
75
|
+
have different jobs and must be configured for the claims your app needs to check.
|
|
76
|
+
|
|
77
|
+
| Mechanism | What it provides | Boundary of the guarantee |
|
|
46
78
|
|---|---|---|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
79
|
+
| [`absent()`, `coverage()` and `.limitsTravelWithTheAnswer()`](#what-a-tool-returns--three-helpers-one-rule) | Explicit absence and declared limits, carried into prose or returned beside typed output. | Preserves declarations; does not prove that the tool described its coverage correctly. |
|
|
80
|
+
| [`.answerValidation()`](docs-next/content/docs/build/output-schema.mdx#check-the-answer-against-evidence) | App-authored checks on a typed final answer. Enforce mode buffers drafts and withholds failed or unverified answers; observe mode records the report and permits delivery. | Only the configured checks are judged. The app owns their correctness and the trustworthiness of its evidence. |
|
|
81
|
+
| [`.namesAndNumbersFromEvidence()`](docs-next/content/docs/build/evidence-gate.mdx) | A deterministic detector for unsupported values, with configurable extraction limits and delivery postures. | Default `assist` flags; `rails` refuses. A false sentence assembled from real values can pass. This is not general factual verification. |
|
|
82
|
+
| [`Tool.search` and typed `.negativeClaims()`](docs-next/content/docs/build/negative-claims.mdx) | Composed search scope and library-written statements for cited structured negative claims, retaining gaps and withholding or reporting unsupported claims according to policy. | **Opt-in, available but not recommended pending benchmark gates.** Accuracy and usefulness remain unmeasured. Depends on truthful app-owned search declarations; other answer fields remain unchecked model text. |
|
|
83
|
+
| [`.negativeClaims({ prose: true })`](docs-next/content/docs/build/negative-claims.mdx) | Bounded heuristic warnings on the model's own negative sentences. | Never verifies, blocks or rewrites an answer. The previous detector failed its benchmark; the revised path is unmeasured. No warning does not mean verified. |
|
|
50
84
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
the
|
|
85
|
+
The links above describe this branch. Features marked **unreleased** in the
|
|
86
|
+
[capability index](CAPABILITIES.md) are not yet available in the published package;
|
|
87
|
+
check its availability column and the [release notes](CHANGELOG.md) for your
|
|
88
|
+
installed version. The basic quick start below does not enable these checks.
|
|
54
89
|
|
|
55
|
-
|
|
56
|
-
|---|---|
|
|
57
|
-
| picked the wrong tool | two descriptions read nearly alike — it chose between twins |
|
|
58
|
-
| believed a wrong "fact" | a tool returned it, or an injected fact planted it |
|
|
59
|
-
| followed the wrong instruction | the wrong skill / steering fired — or fired one iteration too early |
|
|
60
|
-
| answered from the past | a previous turn or stale memory bled into this one |
|
|
90
|
+
## How this compares with LangChain and Mastra
|
|
61
91
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
code do?"* but **"who influenced the model?"**
|
|
92
|
+
These frameworks all support agent building and runtime controls. The useful
|
|
93
|
+
distinction is what each emphasizes, rather than whether it has guardrails.
|
|
65
94
|
|
|
66
|
-
|
|
95
|
+
| Framework | Emphasis and existing runtime controls |
|
|
96
|
+
|---|---|
|
|
97
|
+
| **LangChain / LangGraph** | Model and tool integrations, agent loops and stateful orchestration with persistence and human oversight. [LangGraph](https://docs.langchain.com/oss/javascript/langgraph/overview) covers execution; [LangChain guardrails](https://docs.langchain.com/oss/javascript/langchain/guardrails) can check inputs, outputs and tool calls during a run. |
|
|
98
|
+
| **Mastra** | A TypeScript framework for agent applications, with workflows, memory, development tools, tracing and evaluations. Its [input/output processors](https://mastra.ai/docs/agents/processors) can validate or transform messages during execution. [Overview](https://mastra.ai/docs). |
|
|
99
|
+
| **Agentfootprint** | Agent building organized around FootprintJS execution provenance: connected execution records, declared evidence limits, and [configured checks](#checks-you-can-enable) that can govern answer delivery. |
|
|
67
100
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
101
|
+
Choose Agentfootprint when a central requirement is to connect an answer to what
|
|
102
|
+
the agent actually read, the limits of that evidence, and the checks applied before
|
|
103
|
+
delivery. Skills, tools and orchestration build the agent; the execution record
|
|
104
|
+
also supports its answer policy. This comparison describes design emphasis, not
|
|
105
|
+
exclusive capabilities or measured superiority in answer accuracy.
|
|
72
106
|
|
|
73
107
|
## Quick start — runs offline, no API key
|
|
74
108
|
|
|
@@ -92,7 +126,12 @@ const weather = defineTool({
|
|
|
92
126
|
});
|
|
93
127
|
|
|
94
128
|
const agent = Agent.create({
|
|
95
|
-
provider: mock({
|
|
129
|
+
provider: mock({
|
|
130
|
+
replies: [
|
|
131
|
+
{ toolCalls: [{ id: 'weather-1', name: 'weather', args: { city: 'Paris' } }] },
|
|
132
|
+
{ content: 'The demo weather tool returned 72°F and sunny for Paris.' },
|
|
133
|
+
],
|
|
134
|
+
}),
|
|
96
135
|
model: 'mock',
|
|
97
136
|
})
|
|
98
137
|
.system('You answer weather questions using the weather tool.')
|
|
@@ -100,10 +139,19 @@ const agent = Agent.create({
|
|
|
100
139
|
.build();
|
|
101
140
|
|
|
102
141
|
const result = await agent.run({ message: 'Weather in Paris?' });
|
|
103
|
-
console.log(result); // → "
|
|
142
|
+
console.log(result); // → "The demo weather tool returned 72°F and sunny for Paris."
|
|
104
143
|
```
|
|
105
144
|
|
|
106
|
-
|
|
145
|
+
The tool runs locally and the mock scripts its call and reply. The temperature is
|
|
146
|
+
fixture data, not a live weather reading; this example demonstrates wiring, not
|
|
147
|
+
answer validation. For a configured delivery check, run the [mock answer-validation
|
|
148
|
+
example](examples/features/99-guard-presented-code.ts).
|
|
149
|
+
|
|
150
|
+
To use a real model, replace the scripted mock with a provider from
|
|
151
|
+
`agentfootprint/providers` — `anthropic(...)` / `openai(...)` / `bedrock(...)` /
|
|
152
|
+
`gemini(...)` / `ollama(...)` — and configure its model and any required credentials.
|
|
153
|
+
The agent and tool wiring stays the same. Every provider, including `mock`, lives
|
|
154
|
+
on that subpath so the main barrel stays free of optional provider SDK imports.
|
|
107
155
|
|
|
108
156
|
**No cloud account?** `ollama('llama3.2')` from `agentfootprint/providers` runs the same agent against a local model for $0 — the free rung between the mock and the bill. Full recipes: [Ollama](https://agentfootprint.dev/docs/build/ollama/) · [OpenAI-compatible endpoints](https://agentfootprint.dev/docs/build/openai/#openai-compatible-endpoints-ollama-llamacpp-vllm-together-groq-lm-studio).
|
|
109
157
|
|
|
@@ -138,7 +186,7 @@ execute: ({ vm, summary }) => {
|
|
|
138
186
|
|
|
139
187
|
What the model reads from each, exactly: [Tools → what `execute` returns](https://agentfootprint.dev/docs/build/tools/#what-execute-returns--three-helpers-one-rule).
|
|
140
188
|
|
|
141
|
-
##
|
|
189
|
+
## Building agents — context, tools and orchestration
|
|
142
190
|
|
|
143
191
|
Skills, steering, RAG, facts, memory, guardrails — every name for context does one thing: it injects into one of three LLM slots. So we abstracted the injection itself.
|
|
144
192
|
|
|
@@ -184,12 +232,23 @@ That's the whole model: `Injection = slot × trigger × cache`.
|
|
|
184
232
|
|
|
185
233
|
**3 slots × 4 triggers × N flavors = the entire context-engineering surface.**
|
|
186
234
|
|
|
187
|
-
##
|
|
235
|
+
## Inspect and replay the evidence
|
|
236
|
+
|
|
237
|
+
The recorded run also supports debugging. These examples illustrate different
|
|
238
|
+
kinds of evidence; a similarity score or recorded dependency alone is not proof
|
|
239
|
+
of why a model chose an answer.
|
|
188
240
|
|
|
189
|
-
|
|
241
|
+
<p align="center">
|
|
242
|
+
<a href="https://footprintjs.github.io/agentThinkingUI/">
|
|
243
|
+
<img src="docs/assets/hero-atui.png" alt="An agent run replayed in Story Lens, with recorded tool output, model messages and an execution timeline." width="100%">
|
|
244
|
+
</a>
|
|
245
|
+
</p>
|
|
246
|
+
<p align="center">
|
|
247
|
+
<sub>A run replayed with <a href="https://github.com/footprintjs/agentThinkingUI"><b>Story Lens</b></a> (<code>npm i agentthinkingui</code>). Frames are generated from the run's trace; <a href="https://footprintjs.github.io/agentThinkingUI/">▶ watch it live</a>.</sub>
|
|
248
|
+
</p>
|
|
190
249
|
|
|
191
250
|
```text
|
|
192
|
-
Q:
|
|
251
|
+
Q: Were refund_full and refund_partial described similarly?
|
|
193
252
|
A: margin 0.02 — ⚠ NARROW: the two tool descriptions read nearly identical
|
|
194
253
|
(toolChoiceRecorder — and the catalog lint flags the pair before you ever run)
|
|
195
254
|
|
|
@@ -197,23 +256,27 @@ Q: Why was this loan declined?
|
|
|
197
256
|
A: decision ← [control: "DTI above the 0.43 affordability ceiling"] ← dti 0.52 ← monthlyDebt / income
|
|
198
257
|
(decide() evidence + the causal slice — every hop is a real recorded edge)
|
|
199
258
|
|
|
200
|
-
Q:
|
|
201
|
-
A:
|
|
202
|
-
(localizeContextBug —
|
|
259
|
+
Q: Did removing a piece of context change the outcome in these reruns?
|
|
260
|
+
A: ablating fact 'vip-override' flipped the outcome in 3/3 seeded reruns
|
|
261
|
+
(localizeContextBug — evidence from those counterfactual trials)
|
|
203
262
|
|
|
204
|
-
Q:
|
|
263
|
+
Q: Does this exported bundle pass its integrity check?
|
|
205
264
|
A: verifyAuditBundle → valid: false, brokenAt: #16 — the tampered record, named
|
|
206
265
|
(hash-chained audit export, offline verification)
|
|
207
266
|
```
|
|
208
267
|
|
|
209
|
-
|
|
268
|
+
The trace toolpack also lets a debugger model inspect the record: in one run it
|
|
269
|
+
found a planted bug while reading **9.5% of the trace**
|
|
270
|
+
([self-explain](https://agentfootprint.dev/docs/debug/self-explain/)). That is one
|
|
271
|
+
debugging result, not an answer-accuracy benchmark. Integrity checks establish
|
|
272
|
+
properties of the exported record; they do not establish that its source data was true.
|
|
210
273
|
|
|
211
274
|
## Pick your door
|
|
212
275
|
|
|
213
|
-
|
|
|
276
|
+
| Checking answers? | Building an agent? | Inspecting a run? |
|
|
214
277
|
|---|---|---|
|
|
215
|
-
|
|
|
216
|
-
| [→
|
|
278
|
+
| Declare the evidence and limits; configure checks and the response to uncertainty. | Typed agents with skills, steering, RAG, memory and control flow. | Recorded dependencies, counterfactual reruns, replay and audit-bundle integrity checks. |
|
|
279
|
+
| [→ Checks and guarantees](#checks-you-can-enable) · [→ Output contracts](docs-next/content/docs/build/output-schema.mdx) | [→ Quick start](https://agentfootprint.dev/docs/getting-started/quick-start/) · [→ Build an agent](https://agentfootprint.dev/docs/build/agent/) | [→ Debug](https://agentfootprint.dev/docs/debug/debug/) · [→ Exporters & audit bundles](https://agentfootprint.dev/docs/monitor/exporters/) |
|
|
217
280
|
|
|
218
281
|
## Mocks first, production second
|
|
219
282
|
|
|
@@ -286,7 +286,7 @@ const agent = Agent.create({ provider, model })
|
|
|
286
286
|
agent.on('agentfootprint.context.evaluated', (e) => console.log(e.payload.activeIds));
|
|
287
287
|
```
|
|
288
288
|
|
|
289
|
-
**
|
|
289
|
+
**125 typed events across 27 domains.** Two subscription shapes and no third:
|
|
290
290
|
`'*'` (every event) and `'agentfootprint.<domain>.*'` (one domain). **`'agentfootprint.*'`
|
|
291
291
|
is not a pattern** — TypeScript rejects it, and at runtime it would match nothing.
|
|
292
292
|
|
|
@@ -300,14 +300,24 @@ agent.on('agentfootprint.agent.turn_end', (e) =>
|
|
|
300
300
|
## Human in the loop
|
|
301
301
|
|
|
302
302
|
```typescript
|
|
303
|
-
import {
|
|
303
|
+
import { isCheckInPause, checkInApproved } from 'agentfootprint';
|
|
304
304
|
|
|
305
305
|
const result = await agent.run({ message: 'Refund $500?' });
|
|
306
|
-
if (
|
|
307
|
-
|
|
306
|
+
if (isCheckInPause(result)) {
|
|
307
|
+
// The decision names the request it answers: once, for exactly the call shown.
|
|
308
|
+
const final = await agent.resume(
|
|
309
|
+
result.checkpoint,
|
|
310
|
+
checkInApproved({ request: result.checkIn, by: 'maya' }),
|
|
311
|
+
);
|
|
308
312
|
}
|
|
309
313
|
```
|
|
310
314
|
|
|
315
|
+
A decision for another pause, for a checkpoint whose call changed, or a second
|
|
316
|
+
resume with the same decision throws `ResumeDecisionError` — the tool never runs.
|
|
317
|
+
"Once" holds per ledger: agents in one process share one by default; when more
|
|
318
|
+
than one process can resume a paused run, give them one shared store via
|
|
319
|
+
`Agent.create({ decisionLedger })`.
|
|
320
|
+
|
|
311
321
|
## Resilience
|
|
312
322
|
|
|
313
323
|
```typescript
|
|
@@ -73,8 +73,12 @@ function agentCoreA2AErrorCode(code) {
|
|
|
73
73
|
case 'ERR_SESSION_NOT_FOUND':
|
|
74
74
|
case 'ERR_ARTIFACT_NOT_FOUND':
|
|
75
75
|
return -32051;
|
|
76
|
+
// ERR_RESUME_DECISION is a Validation, not -32054: a client retries a
|
|
77
|
+
// Conflict with backoff, and the same decision is refused the same way
|
|
78
|
+
// every time.
|
|
76
79
|
case 'ERR_INVALID_WIRE_OP':
|
|
77
80
|
case 'ERR_DECISION_REQUIRED':
|
|
81
|
+
case 'ERR_RESUME_DECISION':
|
|
78
82
|
case 'ERR_ARTIFACT_SESSION_REQUIRED':
|
|
79
83
|
case 'invalid_request':
|
|
80
84
|
case 'invalid_params':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentCoreA2A.js","sourceRoot":"","sources":["../../../src/adapters/hosting/agentCoreA2A.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;;;AAIH,6DAAwF;AACxF,2DAAiF;AACjF,6CAKsB;AAEtB,sFAAsF;AACzE,QAAA,0BAA0B,GAAG,IAAI,CAAC;AAE/C,wCAAwC;AAC3B,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAE7C,oDAAoD;AACvC,QAAA,mBAAmB,GAAG,OAAO,CAAC;AAE3C,oDAAoD;AACvC,QAAA,wBAAwB,GAAG,6CAA6C,CAAC;AAEtF;;;;;;;;;;;;;GAaG;AACH,SAAgB,qBAAqB,CAAC,IAAwB;IAC5D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,uBAAuB,CAAC;QAC7B,KAAK,wBAAwB;YAC3B,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,+BAA+B,CAAC;QACrC,KAAK,iBAAiB,CAAC;QACvB,KAAK,gBAAgB,CAAC;QACtB,KAAK,kBAAkB;YACrB,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,uBAAuB,CAAC;QAC7B,KAAK,uBAAuB;YAC1B,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,iBAAiB,CAAC;QACvB,KAAK,uBAAuB,CAAC;QAC7B,KAAK,uBAAuB;YAC1B,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,kBAAkB;YACrB,0EAA0E;YAC1E,yEAAyE;YACzE,mCAAmC;YACnC,OAAO,CAAC,KAAK,CAAC;QAChB;YACE,OAAO,CAAC,KAAK,CAAC;IAClB,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"agentCoreA2A.js","sourceRoot":"","sources":["../../../src/adapters/hosting/agentCoreA2A.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;;;AAIH,6DAAwF;AACxF,2DAAiF;AACjF,6CAKsB;AAEtB,sFAAsF;AACzE,QAAA,0BAA0B,GAAG,IAAI,CAAC;AAE/C,wCAAwC;AAC3B,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAE7C,oDAAoD;AACvC,QAAA,mBAAmB,GAAG,OAAO,CAAC;AAE3C,oDAAoD;AACvC,QAAA,wBAAwB,GAAG,6CAA6C,CAAC;AAEtF;;;;;;;;;;;;;GAaG;AACH,SAAgB,qBAAqB,CAAC,IAAwB;IAC5D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,uBAAuB,CAAC;QAC7B,KAAK,wBAAwB;YAC3B,OAAO,CAAC,KAAK,CAAC;QAChB,sEAAsE;QACtE,uEAAuE;QACvE,cAAc;QACd,KAAK,qBAAqB,CAAC;QAC3B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,+BAA+B,CAAC;QACrC,KAAK,iBAAiB,CAAC;QACvB,KAAK,gBAAgB,CAAC;QACtB,KAAK,kBAAkB;YACrB,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,uBAAuB,CAAC;QAC7B,KAAK,uBAAuB;YAC1B,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,iBAAiB,CAAC;QACvB,KAAK,uBAAuB,CAAC;QAC7B,KAAK,uBAAuB;YAC1B,OAAO,CAAC,KAAK,CAAC;QAChB,KAAK,kBAAkB;YACrB,0EAA0E;YAC1E,yEAAyE;YACzE,mCAAmC;YACnC,OAAO,CAAC,KAAK,CAAC;QAChB;YACE,OAAO,CAAC,KAAK,CAAC;IAClB,CAAC;AACH,CAAC;AAhCD,sDAgCC;AAiCD,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAEzC;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,OAAgC;IAC/D,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACxD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAA,iCAAoB,EAAC,IAAI,CAAC,CAAC,CAAC;IAEhE,kFAAkF;IAClF,MAAM,SAAS,GAAG,CAAC,GAAoB,EAAE,GAAmB,EAAQ,EAAE;QACpE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,gCAAmB,EAAE,CAAC;YACzD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;aAClD,CAAC,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,2EAA2E;QAC3E,0EAA0E;QAC1E,qEAAqE;QACrE,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,gBAAgB,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM;QACnB,CAAC,CAAC,EAAE,MAAM,EAAE;QACZ,CAAC,CAAC;YACE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,kCAA0B;YAChD,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;YAC/C,WAAW,EAAE,SAAS;SACvB,CAAC;IAEN,MAAM,QAAQ,GAAG,IAAA,oBAAO,EAAC;QACvB,IAAI;QACJ,sEAAsE;QACtE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;QAC7B,YAAY,EAAE,qBAAqB;QACnC,IAAI,EAAE,kBAAkB;KACzB,CAAC,CAAC;IAEH,OAAO,IAAA,sBAAQ,EAAC;QACd,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE;YACJ,GAAG,QAAQ;YACX,yEAAyE;YACzE,uEAAuE;YACvE,WAAW,CAAC,KAAK;gBACf,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,SAAS,GAAG,IAAA,yBAAW,EAAC,KAAK,EAAE,gCAAwB,CAAC,CAAC;gBAC/D,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YACpE,CAAC;SACF;QACD,UAAU,EAAE,iCAAyB;QACrC,UAAU,EAAE,2BAAmB;QAC/B,wEAAwE;QACxE,uEAAuE;QACvE,uEAAuE;QACvE,wEAAwE;QACxE,oEAAoE;QACpE,4EAA4E;QAC5E,qDAAqD;QACrD,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,sBAAsB;QAC5D,yEAAyE;QACzE,yEAAyE;QACzE,2DAA2D;QAC3D,GAAG,IAAA,kCAAmB,EAAC,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,GAAG,MAAM;KACV,CAAC,CAAC;AACL,CAAC;AAvED,4CAuEC"}
|
|
@@ -223,6 +223,7 @@
|
|
|
223
223
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
224
224
|
exports.firestoreFailure = exports.isFailedPrecondition = exports.grpcStatusOf = exports.documentIdFor = exports.firestoreSessions = exports.EnvelopeTooLargeError = exports.FirestoreIndexMissingError = exports.FIRESTORE_MAX_ENVELOPE_BYTES = exports.FIRESTORE_MAX_DOCUMENT_BYTES = exports.ttlPolicyCommand = exports.EXPIRES_AT_FIELD = exports.DEFAULT_SESSION_COLLECTION = void 0;
|
|
225
225
|
const node_crypto_1 = require("node:crypto");
|
|
226
|
+
const answeredPause_js_1 = require("../../hosting/answeredPause.js");
|
|
226
227
|
const envelope_js_1 = require("../../hosting/envelope.js");
|
|
227
228
|
const errors_js_1 = require("../../hosting/errors.js");
|
|
228
229
|
const sessionOwnership_js_1 = require("../../hosting/sessionOwnership.js");
|
|
@@ -543,7 +544,10 @@ function firestoreSessions(options = {}) {
|
|
|
543
544
|
const ref = docFor(sessionId);
|
|
544
545
|
const row = {
|
|
545
546
|
sessionId,
|
|
546
|
-
format:
|
|
547
|
+
// The LISTED format (`listedFormatOf`), what `listByUser` reports: a
|
|
548
|
+
// pause whose decision a resume already used reads as a conversation
|
|
549
|
+
// here, though `envelope` still holds the paused run.
|
|
550
|
+
format: (0, answeredPause_js_1.listedFormatOf)(checked),
|
|
547
551
|
savedAt: checked.savedAt,
|
|
548
552
|
envelope: json,
|
|
549
553
|
messageCount: (0, envelope_js_1.envelopeTranscript)(checked).length,
|
|
@@ -692,7 +696,10 @@ function firestoreSessions(options = {}) {
|
|
|
692
696
|
// hand a caller an id that opens nothing.
|
|
693
697
|
sessionId: typeof row['sessionId'] === 'string' ? row['sessionId'] : '',
|
|
694
698
|
savedAt: typeof row['savedAt'] === 'number' ? row['savedAt'] : 0,
|
|
695
|
-
|
|
699
|
+
// What the session IS now: a document written before the field
|
|
700
|
+
// held the listed format says 'flowchart-v1' for any pause, and is
|
|
701
|
+
// read again from the envelope the query already returned.
|
|
702
|
+
format: (0, answeredPause_js_1.listedFormatOfRow)(typeof row['format'] === 'string' ? row['format'] : 'unknown', row['envelope']),
|
|
696
703
|
// A listing hint, never the authority — the transcript op reads the
|
|
697
704
|
// envelope itself and says the truth.
|
|
698
705
|
messageCount: typeof row['messageCount'] === 'number' ? row['messageCount'] : 0,
|