agentfootprint 9.128.1 → 9.131.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CAPABILITIES.md +13 -1
- package/dist/adapters/llm/AnthropicProvider.js +10 -111
- package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/adapters/llm/BedrockProvider.js +11 -4
- package/dist/adapters/llm/BedrockProvider.js.map +1 -1
- package/dist/adapters/llm/InvokeModelGatewayProvider.js +167 -35
- package/dist/adapters/llm/InvokeModelGatewayProvider.js.map +1 -1
- package/dist/adapters/llm/OpenAIProvider.js +5 -0
- package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/adapters/llm/anthropicMessagesWire.js +20 -6
- package/dist/adapters/llm/anthropicMessagesWire.js.map +1 -1
- package/dist/adapters/llm/retryAfter.js +61 -0
- package/dist/adapters/llm/retryAfter.js.map +1 -0
- package/dist/adapters/types.js.map +1 -1
- package/dist/artifacts/datasetResult.js +2 -2
- package/dist/artifacts/datasetResult.js.map +1 -1
- package/dist/artifacts/index.js +10 -8
- package/dist/artifacts/index.js.map +1 -1
- package/dist/artifacts/minting.js +2 -2
- package/dist/artifacts/minting.js.map +1 -1
- package/dist/core/Agent.js +229 -5
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/agent/AgentBuilder.js +75 -1
- package/dist/core/agent/AgentBuilder.js.map +1 -1
- package/dist/core/agent/arguments/ask.js +356 -14
- package/dist/core/agent/arguments/ask.js.map +1 -1
- package/dist/core/agent/arguments/declare.js +260 -45
- package/dist/core/agent/arguments/declare.js.map +1 -1
- package/dist/core/agent/arguments/dispatch.js +25 -1
- package/dist/core/agent/arguments/dispatch.js.map +1 -1
- package/dist/core/agent/arguments/resolve.js +239 -6
- package/dist/core/agent/arguments/resolve.js.map +1 -1
- package/dist/core/agent/arguments/rows.js +37 -2
- package/dist/core/agent/arguments/rows.js.map +1 -1
- package/dist/core/agent/arguments/serve.js +332 -4
- package/dist/core/agent/arguments/serve.js.map +1 -1
- package/dist/core/agent/arguments/subflow.js +46 -7
- package/dist/core/agent/arguments/subflow.js.map +1 -1
- package/dist/core/agent/assessment/assess.js +45 -6
- 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 +18 -0
- package/dist/core/agent/assessment/reasons.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js +31 -1
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/agent/buildDynamicAgentChart.js +9 -0
- package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/core/agent/coverage/answer.js +24 -7
- package/dist/core/agent/coverage/answer.js.map +1 -1
- package/dist/core/agent/coverage/period.js +110 -69
- package/dist/core/agent/coverage/period.js.map +1 -1
- package/dist/core/agent/coverage/timeLimitFacts.js +70 -0
- package/dist/core/agent/coverage/timeLimitFacts.js.map +1 -0
- package/dist/core/agent/coverage/timeLimits.js +72 -0
- package/dist/core/agent/coverage/timeLimits.js.map +1 -0
- package/dist/core/agent/evidence/evidenceIndex.js +48 -7
- package/dist/core/agent/evidence/evidenceIndex.js.map +1 -1
- package/dist/core/agent/evidence/gate.js +9 -4
- package/dist/core/agent/evidence/gate.js.map +1 -1
- package/dist/core/agent/evidence/normalize.js +1 -105
- package/dist/core/agent/evidence/normalize.js.map +1 -1
- package/dist/core/agent/findings/ledger.js +14 -0
- package/dist/core/agent/findings/ledger.js.map +1 -1
- package/dist/core/agent/findings/types.js.map +1 -1
- package/dist/core/agent/honesty/mounts.js +105 -4
- package/dist/core/agent/honesty/mounts.js.map +1 -1
- package/dist/core/agent/results/subflow.js +43 -11
- package/dist/core/agent/results/subflow.js.map +1 -1
- package/dist/core/agent/stages/argumentAsk.js +85 -6
- package/dist/core/agent/stages/argumentAsk.js.map +1 -1
- package/dist/core/agent/stages/callLLM.js +16 -0
- package/dist/core/agent/stages/callLLM.js.map +1 -1
- package/dist/core/agent/stages/prepareFinal.js +61 -8
- package/dist/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/core/agent/stages/route.js +64 -6
- package/dist/core/agent/stages/route.js.map +1 -1
- package/dist/core/agent/stages/seed.js +29 -6
- package/dist/core/agent/stages/seed.js.map +1 -1
- package/dist/core/agent/stages/timeLayer.js +201 -0
- package/dist/core/agent/stages/timeLayer.js.map +1 -0
- package/dist/core/agent/stages/timeLineage.js +61 -0
- package/dist/core/agent/stages/timeLineage.js.map +1 -0
- package/dist/core/agent/stages/toolCalls.js +70 -0
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/inputRequest.js +132 -5
- package/dist/core/inputRequest.js.map +1 -1
- package/dist/core/messageFrom.js +5 -2
- package/dist/core/messageFrom.js.map +1 -1
- package/dist/core/runCheckpoint.js +17 -2
- package/dist/core/runCheckpoint.js.map +1 -1
- package/dist/core/slots/buildToolsSlot.js +30 -2
- package/dist/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/core/time/ask.js +239 -0
- package/dist/core/time/ask.js.map +1 -0
- package/dist/core/time/axis.js +469 -0
- package/dist/core/time/axis.js.map +1 -0
- package/dist/core/time/bind.js +235 -0
- package/dist/core/time/bind.js.map +1 -0
- package/dist/core/time/check.js +261 -0
- package/dist/core/time/check.js.map +1 -0
- package/dist/core/time/checkRecord.js +97 -0
- package/dist/core/time/checkRecord.js.map +1 -0
- package/dist/core/time/clock.js +260 -0
- package/dist/core/time/clock.js.map +1 -0
- package/dist/core/time/convert.js +634 -0
- package/dist/core/time/convert.js.map +1 -0
- package/dist/core/time/drift.js +96 -0
- package/dist/core/time/drift.js.map +1 -0
- package/dist/core/time/duration.js +125 -0
- package/dist/core/time/duration.js.map +1 -0
- package/dist/core/time/forms.js +273 -0
- package/dist/core/time/forms.js.map +1 -0
- package/dist/core/time/instant.js +141 -0
- package/dist/core/time/instant.js.map +1 -0
- package/dist/core/time/periodForm.js +392 -0
- package/dist/core/time/periodForm.js.map +1 -0
- package/dist/core/time/present.js +312 -0
- package/dist/core/time/present.js.map +1 -0
- package/dist/core/time/range.js +267 -0
- package/dist/core/time/range.js.map +1 -0
- package/dist/core/time/reader.js +209 -0
- package/dist/core/time/reader.js.map +1 -0
- package/dist/core/time/readers/english.js +576 -0
- package/dist/core/time/readers/english.js.map +1 -0
- package/dist/core/time/readingAsk.js +94 -0
- package/dist/core/time/readingAsk.js.map +1 -0
- package/dist/core/time/resolve.js +694 -0
- package/dist/core/time/resolve.js.map +1 -0
- package/dist/core/time/resolveRecord.js +164 -0
- package/dist/core/time/resolveRecord.js.map +1 -0
- package/dist/core/time/rows.js +412 -0
- package/dist/core/time/rows.js.map +1 -0
- package/dist/core/time/rowsBuild.js +193 -0
- package/dist/core/time/rowsBuild.js.map +1 -0
- package/dist/core/time/textForms.js +133 -0
- package/dist/core/time/textForms.js.map +1 -0
- package/dist/core/time/windows.js +172 -0
- package/dist/core/time/windows.js.map +1 -0
- package/dist/core/time/wire.js +86 -0
- package/dist/core/time/wire.js.map +1 -0
- package/dist/core/time/zone.js +253 -0
- package/dist/core/time/zone.js.map +1 -0
- package/dist/core/tools.js.map +1 -1
- package/dist/esm/adapters/llm/AnthropicProvider.js +8 -109
- package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
- package/dist/esm/adapters/llm/BedrockProvider.js +11 -4
- package/dist/esm/adapters/llm/BedrockProvider.js.map +1 -1
- package/dist/esm/adapters/llm/InvokeModelGatewayProvider.d.ts +38 -4
- package/dist/esm/adapters/llm/InvokeModelGatewayProvider.js +167 -35
- package/dist/esm/adapters/llm/InvokeModelGatewayProvider.js.map +1 -1
- package/dist/esm/adapters/llm/OpenAIProvider.js +5 -0
- package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
- package/dist/esm/adapters/llm/anthropicMessagesWire.d.ts +6 -1
- package/dist/esm/adapters/llm/anthropicMessagesWire.js +20 -6
- package/dist/esm/adapters/llm/anthropicMessagesWire.js.map +1 -1
- package/dist/esm/adapters/llm/retryAfter.d.ts +27 -0
- package/dist/esm/adapters/llm/retryAfter.js +56 -0
- package/dist/esm/adapters/llm/retryAfter.js.map +1 -0
- package/dist/esm/adapters/types.d.ts +9 -0
- package/dist/esm/adapters/types.js.map +1 -1
- package/dist/esm/artifacts/datasetResult.js +1 -1
- package/dist/esm/artifacts/datasetResult.js.map +1 -1
- package/dist/esm/artifacts/index.d.ts +1 -1
- package/dist/esm/artifacts/index.js +3 -2
- package/dist/esm/artifacts/index.js.map +1 -1
- package/dist/esm/artifacts/minting.js +1 -1
- package/dist/esm/artifacts/minting.js.map +1 -1
- package/dist/esm/artifacts/types.d.ts +2 -2
- package/dist/esm/core/Agent.d.ts +64 -0
- package/dist/esm/core/Agent.js +230 -6
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.d.ts +60 -0
- package/dist/esm/core/agent/AgentBuilder.js +75 -1
- package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
- package/dist/esm/core/agent/arguments/ask.d.ts +88 -5
- package/dist/esm/core/agent/arguments/ask.js +349 -8
- package/dist/esm/core/agent/arguments/ask.js.map +1 -1
- package/dist/esm/core/agent/arguments/checks.d.ts +1 -1
- package/dist/esm/core/agent/arguments/declare.d.ts +76 -15
- package/dist/esm/core/agent/arguments/declare.js +255 -44
- package/dist/esm/core/agent/arguments/declare.js.map +1 -1
- package/dist/esm/core/agent/arguments/dispatch.js +25 -1
- package/dist/esm/core/agent/arguments/dispatch.js.map +1 -1
- package/dist/esm/core/agent/arguments/resolve.d.ts +77 -7
- package/dist/esm/core/agent/arguments/resolve.js +239 -8
- package/dist/esm/core/agent/arguments/resolve.js.map +1 -1
- package/dist/esm/core/agent/arguments/rows.d.ts +31 -2
- package/dist/esm/core/agent/arguments/rows.js +35 -1
- package/dist/esm/core/agent/arguments/rows.js.map +1 -1
- package/dist/esm/core/agent/arguments/serve.d.ts +133 -4
- package/dist/esm/core/agent/arguments/serve.js +328 -4
- package/dist/esm/core/agent/arguments/serve.js.map +1 -1
- package/dist/esm/core/agent/arguments/subflow.d.ts +28 -0
- package/dist/esm/core/agent/arguments/subflow.js +47 -8
- package/dist/esm/core/agent/arguments/subflow.js.map +1 -1
- package/dist/esm/core/agent/assessment/assess.js +45 -6
- 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 +18 -0
- package/dist/esm/core/agent/assessment/reasons.js.map +1 -1
- package/dist/esm/core/agent/assessment/types.d.ts +15 -1
- package/dist/esm/core/agent/buildAgentChart.d.ts +41 -0
- package/dist/esm/core/agent/buildAgentChart.js +28 -0
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildDynamicAgentChart.d.ts +1 -1
- package/dist/esm/core/agent/buildDynamicAgentChart.js +9 -0
- package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/esm/core/agent/coverage/answer.d.ts +20 -1
- package/dist/esm/core/agent/coverage/answer.js +23 -6
- package/dist/esm/core/agent/coverage/answer.js.map +1 -1
- package/dist/esm/core/agent/coverage/period.d.ts +49 -3
- package/dist/esm/core/agent/coverage/period.js +107 -68
- package/dist/esm/core/agent/coverage/period.js.map +1 -1
- package/dist/esm/core/agent/coverage/timeLimitFacts.d.ts +56 -0
- package/dist/esm/core/agent/coverage/timeLimitFacts.js +65 -0
- package/dist/esm/core/agent/coverage/timeLimitFacts.js.map +1 -0
- package/dist/esm/core/agent/coverage/timeLimits.d.ts +46 -0
- package/dist/esm/core/agent/coverage/timeLimits.js +67 -0
- package/dist/esm/core/agent/coverage/timeLimits.js.map +1 -0
- package/dist/esm/core/agent/evidence/evidenceIndex.d.ts +25 -2
- package/dist/esm/core/agent/evidence/evidenceIndex.js +47 -7
- package/dist/esm/core/agent/evidence/evidenceIndex.js.map +1 -1
- package/dist/esm/core/agent/evidence/gate.d.ts +7 -0
- package/dist/esm/core/agent/evidence/gate.js +9 -4
- package/dist/esm/core/agent/evidence/gate.js.map +1 -1
- package/dist/esm/core/agent/evidence/normalize.d.ts +0 -34
- package/dist/esm/core/agent/evidence/normalize.js +0 -103
- package/dist/esm/core/agent/evidence/normalize.js.map +1 -1
- package/dist/esm/core/agent/evidence/types.d.ts +12 -1
- package/dist/esm/core/agent/findings/ledger.js +14 -0
- package/dist/esm/core/agent/findings/ledger.js.map +1 -1
- package/dist/esm/core/agent/findings/types.d.ts +2 -1
- package/dist/esm/core/agent/findings/types.js.map +1 -1
- package/dist/esm/core/agent/honesty/mounts.d.ts +25 -0
- package/dist/esm/core/agent/honesty/mounts.js +104 -4
- package/dist/esm/core/agent/honesty/mounts.js.map +1 -1
- package/dist/esm/core/agent/results/subflow.d.ts +34 -2
- package/dist/esm/core/agent/results/subflow.js +43 -11
- package/dist/esm/core/agent/results/subflow.js.map +1 -1
- package/dist/esm/core/agent/stages/argumentAsk.d.ts +19 -0
- package/dist/esm/core/agent/stages/argumentAsk.js +85 -6
- package/dist/esm/core/agent/stages/argumentAsk.js.map +1 -1
- package/dist/esm/core/agent/stages/callLLM.d.ts +6 -0
- package/dist/esm/core/agent/stages/callLLM.js +16 -0
- package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
- package/dist/esm/core/agent/stages/prepareFinal.d.ts +13 -1
- package/dist/esm/core/agent/stages/prepareFinal.js +59 -7
- package/dist/esm/core/agent/stages/prepareFinal.js.map +1 -1
- package/dist/esm/core/agent/stages/route.d.ts +29 -1
- package/dist/esm/core/agent/stages/route.js +64 -7
- package/dist/esm/core/agent/stages/route.js.map +1 -1
- package/dist/esm/core/agent/stages/seed.d.ts +23 -0
- package/dist/esm/core/agent/stages/seed.js +29 -6
- package/dist/esm/core/agent/stages/seed.js.map +1 -1
- package/dist/esm/core/agent/stages/timeLayer.d.ts +94 -0
- package/dist/esm/core/agent/stages/timeLayer.js +193 -0
- package/dist/esm/core/agent/stages/timeLayer.js.map +1 -0
- package/dist/esm/core/agent/stages/timeLineage.d.ts +31 -0
- package/dist/esm/core/agent/stages/timeLineage.js +57 -0
- package/dist/esm/core/agent/stages/timeLineage.js.map +1 -0
- package/dist/esm/core/agent/stages/toolCalls.d.ts +32 -0
- package/dist/esm/core/agent/stages/toolCalls.js +70 -0
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/agent/types.d.ts +37 -0
- package/dist/esm/core/inputRequest.d.ts +50 -6
- package/dist/esm/core/inputRequest.js +132 -5
- package/dist/esm/core/inputRequest.js.map +1 -1
- package/dist/esm/core/messageFrom.d.ts +5 -2
- package/dist/esm/core/messageFrom.js +5 -2
- package/dist/esm/core/messageFrom.js.map +1 -1
- package/dist/esm/core/runCheckpoint.js +17 -2
- package/dist/esm/core/runCheckpoint.js.map +1 -1
- package/dist/esm/core/slots/buildToolsSlot.d.ts +29 -0
- package/dist/esm/core/slots/buildToolsSlot.js +30 -2
- package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/core/time/ask.d.ts +126 -0
- package/dist/esm/core/time/ask.js +230 -0
- package/dist/esm/core/time/ask.js.map +1 -0
- package/dist/esm/core/time/axis.d.ts +224 -0
- package/dist/esm/core/time/axis.js +462 -0
- package/dist/esm/core/time/axis.js.map +1 -0
- package/dist/esm/core/time/bind.d.ts +143 -0
- package/dist/esm/core/time/bind.js +227 -0
- package/dist/esm/core/time/bind.js.map +1 -0
- package/dist/esm/core/time/check.d.ts +113 -0
- package/dist/esm/core/time/check.js +252 -0
- package/dist/esm/core/time/check.js.map +1 -0
- package/dist/esm/core/time/checkRecord.d.ts +74 -0
- package/dist/esm/core/time/checkRecord.js +90 -0
- package/dist/esm/core/time/checkRecord.js.map +1 -0
- package/dist/esm/core/time/clock.d.ts +183 -0
- package/dist/esm/core/time/clock.js +252 -0
- package/dist/esm/core/time/clock.js.map +1 -0
- package/dist/esm/core/time/convert.d.ts +178 -0
- package/dist/esm/core/time/convert.js +609 -0
- package/dist/esm/core/time/convert.js.map +1 -0
- package/dist/esm/core/time/drift.d.ts +85 -0
- package/dist/esm/core/time/drift.js +91 -0
- package/dist/esm/core/time/drift.js.map +1 -0
- package/dist/esm/core/time/duration.d.ts +71 -0
- package/dist/esm/core/time/duration.js +117 -0
- package/dist/esm/core/time/duration.js.map +1 -0
- package/dist/esm/core/time/forms.d.ts +84 -0
- package/dist/esm/core/time/forms.js +268 -0
- package/dist/esm/core/time/forms.js.map +1 -0
- package/dist/esm/core/time/instant.d.ts +75 -0
- package/dist/esm/core/time/instant.js +131 -0
- package/dist/esm/core/time/instant.js.map +1 -0
- package/dist/esm/core/time/periodForm.d.ts +184 -0
- package/dist/esm/core/time/periodForm.js +376 -0
- package/dist/esm/core/time/periodForm.js.map +1 -0
- package/dist/esm/core/time/present.d.ts +107 -0
- package/dist/esm/core/time/present.js +305 -0
- package/dist/esm/core/time/present.js.map +1 -0
- package/dist/esm/core/time/range.d.ts +127 -0
- package/dist/esm/core/time/range.js +249 -0
- package/dist/esm/core/time/range.js.map +1 -0
- package/dist/esm/core/time/reader.d.ts +162 -0
- package/dist/esm/core/time/reader.js +203 -0
- package/dist/esm/core/time/reader.js.map +1 -0
- package/dist/esm/core/time/readers/english.d.ts +99 -0
- package/dist/esm/core/time/readers/english.js +572 -0
- package/dist/esm/core/time/readers/english.js.map +1 -0
- package/dist/esm/core/time/readingAsk.d.ts +45 -0
- package/dist/esm/core/time/readingAsk.js +90 -0
- package/dist/esm/core/time/readingAsk.js.map +1 -0
- package/dist/esm/core/time/resolve.d.ts +103 -0
- package/dist/esm/core/time/resolve.js +684 -0
- package/dist/esm/core/time/resolve.js.map +1 -0
- package/dist/esm/core/time/resolveRecord.d.ts +160 -0
- package/dist/esm/core/time/resolveRecord.js +158 -0
- package/dist/esm/core/time/resolveRecord.js.map +1 -0
- package/dist/esm/core/time/rows.d.ts +297 -0
- package/dist/esm/core/time/rows.js +397 -0
- package/dist/esm/core/time/rows.js.map +1 -0
- package/dist/esm/core/time/rowsBuild.d.ts +82 -0
- package/dist/esm/core/time/rowsBuild.js +185 -0
- package/dist/esm/core/time/rowsBuild.js.map +1 -0
- package/dist/esm/core/time/textForms.d.ts +53 -0
- package/dist/esm/core/time/textForms.js +126 -0
- package/dist/esm/core/time/textForms.js.map +1 -0
- package/dist/esm/core/time/windows.d.ts +113 -0
- package/dist/esm/core/time/windows.js +166 -0
- package/dist/esm/core/time/windows.js.map +1 -0
- package/dist/esm/core/time/wire.d.ts +63 -0
- package/dist/esm/core/time/wire.js +81 -0
- package/dist/esm/core/time/wire.js.map +1 -0
- package/dist/esm/core/time/zone.d.ts +115 -0
- package/dist/esm/core/time/zone.js +242 -0
- package/dist/esm/core/time/zone.js.map +1 -0
- package/dist/esm/core/tools.d.ts +26 -4
- package/dist/esm/core/tools.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +16 -2
- package/dist/esm/index.d.ts +13 -1
- package/dist/esm/index.js +6 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/answer-account/facts/howSure.js +7 -0
- package/dist/esm/lib/answer-account/facts/howSure.js.map +1 -1
- package/dist/esm/lib/answer-account/templates.d.ts +3 -0
- package/dist/esm/lib/answer-account/templates.js +4 -0
- package/dist/esm/lib/answer-account/templates.js.map +1 -1
- package/dist/esm/lib/mcp/elicitation.d.ts +84 -0
- package/dist/esm/lib/mcp/elicitation.js +181 -0
- package/dist/esm/lib/mcp/elicitation.js.map +1 -0
- package/dist/esm/lib/mcp/mcpClient.js +9 -3
- package/dist/esm/lib/mcp/mcpClient.js.map +1 -1
- package/dist/esm/lib/mcp/mcpServe.js +6 -2
- package/dist/esm/lib/mcp/mcpServe.js.map +1 -1
- package/dist/esm/lib/mcp/mockMcpClient.d.ts +9 -1
- package/dist/esm/lib/mcp/mockMcpClient.js +5 -3
- package/dist/esm/lib/mcp/mockMcpClient.js.map +1 -1
- package/dist/esm/lib/mcp/toolExtras.d.ts +21 -2
- package/dist/esm/lib/mcp/toolExtras.js +22 -0
- package/dist/esm/lib/mcp/toolExtras.js.map +1 -1
- package/dist/esm/lib/mcp/types.d.ts +8 -0
- package/dist/esm/lib/time-travel/receipt.d.ts +1 -1
- package/dist/esm/lib/time-travel/servedView.d.ts +1 -1
- package/dist/esm/lib/time-travel/servedView.js +9 -0
- package/dist/esm/lib/time-travel/servedView.js.map +1 -1
- package/dist/esm/locales/index.d.ts +6 -0
- package/dist/esm/locales/index.js +6 -0
- package/dist/esm/locales/index.js.map +1 -1
- package/dist/esm/locales/timeAsk.d.ts +29 -0
- package/dist/esm/locales/timeAsk.js +44 -0
- package/dist/esm/locales/timeAsk.js.map +1 -0
- package/dist/esm/recorders/core/resilienceHooks.js +1 -0
- package/dist/esm/recorders/core/resilienceHooks.js.map +1 -1
- package/dist/esm/resilience/statedWait.d.ts +22 -0
- package/dist/esm/resilience/statedWait.js +35 -0
- package/dist/esm/resilience/statedWait.js.map +1 -0
- package/dist/esm/resilience/withRetry.d.ts +13 -2
- package/dist/esm/resilience/withRetry.js +16 -1
- package/dist/esm/resilience/withRetry.js.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/answer-account/facts/howSure.js +7 -0
- package/dist/lib/answer-account/facts/howSure.js.map +1 -1
- package/dist/lib/answer-account/templates.js +4 -0
- package/dist/lib/answer-account/templates.js.map +1 -1
- package/dist/lib/mcp/elicitation.js +186 -0
- package/dist/lib/mcp/elicitation.js.map +1 -0
- package/dist/lib/mcp/mcpClient.js +8 -2
- package/dist/lib/mcp/mcpClient.js.map +1 -1
- package/dist/lib/mcp/mcpServe.js +5 -1
- package/dist/lib/mcp/mcpServe.js.map +1 -1
- package/dist/lib/mcp/mockMcpClient.js +4 -2
- package/dist/lib/mcp/mockMcpClient.js.map +1 -1
- package/dist/lib/mcp/toolExtras.js +25 -1
- package/dist/lib/mcp/toolExtras.js.map +1 -1
- package/dist/lib/time-travel/servedView.js +9 -0
- package/dist/lib/time-travel/servedView.js.map +1 -1
- package/dist/locales/index.js +8 -1
- package/dist/locales/index.js.map +1 -1
- package/dist/locales/timeAsk.js +47 -0
- package/dist/locales/timeAsk.js.map +1 -0
- package/dist/recorders/core/resilienceHooks.js +1 -0
- package/dist/recorders/core/resilienceHooks.js.map +1 -1
- package/dist/resilience/statedWait.js +39 -0
- package/dist/resilience/statedWait.js.map +1 -0
- package/dist/resilience/withRetry.js +16 -1
- package/dist/resilience/withRetry.js.map +1 -1
- package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/BedrockProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/InvokeModelGatewayProvider.d.ts +38 -4
- package/dist/types/adapters/llm/InvokeModelGatewayProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
- package/dist/types/adapters/llm/anthropicMessagesWire.d.ts +6 -1
- package/dist/types/adapters/llm/anthropicMessagesWire.d.ts.map +1 -1
- package/dist/types/adapters/llm/retryAfter.d.ts +28 -0
- package/dist/types/adapters/llm/retryAfter.d.ts.map +1 -0
- package/dist/types/adapters/types.d.ts +9 -0
- package/dist/types/adapters/types.d.ts.map +1 -1
- package/dist/types/artifacts/index.d.ts +1 -1
- package/dist/types/artifacts/index.d.ts.map +1 -1
- package/dist/types/artifacts/types.d.ts +2 -2
- package/dist/types/artifacts/types.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts +64 -0
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/agent/AgentBuilder.d.ts +60 -0
- package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/ask.d.ts +88 -5
- package/dist/types/core/agent/arguments/ask.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/checks.d.ts +1 -1
- package/dist/types/core/agent/arguments/checks.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/declare.d.ts +76 -15
- package/dist/types/core/agent/arguments/declare.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/dispatch.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/resolve.d.ts +77 -7
- package/dist/types/core/agent/arguments/resolve.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/rows.d.ts +31 -2
- package/dist/types/core/agent/arguments/rows.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/serve.d.ts +133 -4
- package/dist/types/core/agent/arguments/serve.d.ts.map +1 -1
- package/dist/types/core/agent/arguments/subflow.d.ts +28 -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 +15 -1
- package/dist/types/core/agent/assessment/types.d.ts.map +1 -1
- package/dist/types/core/agent/buildAgentChart.d.ts +41 -0
- package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/buildDynamicAgentChart.d.ts +1 -1
- package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/coverage/answer.d.ts +20 -1
- package/dist/types/core/agent/coverage/answer.d.ts.map +1 -1
- package/dist/types/core/agent/coverage/period.d.ts +49 -3
- package/dist/types/core/agent/coverage/period.d.ts.map +1 -1
- package/dist/types/core/agent/coverage/timeLimitFacts.d.ts +57 -0
- package/dist/types/core/agent/coverage/timeLimitFacts.d.ts.map +1 -0
- package/dist/types/core/agent/coverage/timeLimits.d.ts +47 -0
- package/dist/types/core/agent/coverage/timeLimits.d.ts.map +1 -0
- package/dist/types/core/agent/evidence/evidenceIndex.d.ts +25 -2
- package/dist/types/core/agent/evidence/evidenceIndex.d.ts.map +1 -1
- package/dist/types/core/agent/evidence/gate.d.ts +7 -0
- package/dist/types/core/agent/evidence/gate.d.ts.map +1 -1
- package/dist/types/core/agent/evidence/normalize.d.ts +0 -34
- package/dist/types/core/agent/evidence/normalize.d.ts.map +1 -1
- package/dist/types/core/agent/evidence/types.d.ts +12 -1
- package/dist/types/core/agent/evidence/types.d.ts.map +1 -1
- package/dist/types/core/agent/findings/ledger.d.ts.map +1 -1
- package/dist/types/core/agent/findings/types.d.ts +2 -1
- package/dist/types/core/agent/findings/types.d.ts.map +1 -1
- package/dist/types/core/agent/honesty/mounts.d.ts +25 -0
- package/dist/types/core/agent/honesty/mounts.d.ts.map +1 -1
- package/dist/types/core/agent/results/subflow.d.ts +34 -2
- package/dist/types/core/agent/results/subflow.d.ts.map +1 -1
- package/dist/types/core/agent/stages/argumentAsk.d.ts +19 -0
- package/dist/types/core/agent/stages/argumentAsk.d.ts.map +1 -1
- package/dist/types/core/agent/stages/callLLM.d.ts +6 -0
- package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
- package/dist/types/core/agent/stages/prepareFinal.d.ts +13 -1
- package/dist/types/core/agent/stages/prepareFinal.d.ts.map +1 -1
- package/dist/types/core/agent/stages/route.d.ts +29 -1
- package/dist/types/core/agent/stages/route.d.ts.map +1 -1
- package/dist/types/core/agent/stages/seed.d.ts +23 -0
- package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
- package/dist/types/core/agent/stages/timeLayer.d.ts +95 -0
- package/dist/types/core/agent/stages/timeLayer.d.ts.map +1 -0
- package/dist/types/core/agent/stages/timeLineage.d.ts +32 -0
- package/dist/types/core/agent/stages/timeLineage.d.ts.map +1 -0
- package/dist/types/core/agent/stages/toolCalls.d.ts +32 -0
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +37 -0
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/inputRequest.d.ts +50 -6
- package/dist/types/core/inputRequest.d.ts.map +1 -1
- package/dist/types/core/messageFrom.d.ts +5 -2
- package/dist/types/core/messageFrom.d.ts.map +1 -1
- package/dist/types/core/runCheckpoint.d.ts.map +1 -1
- package/dist/types/core/slots/buildToolsSlot.d.ts +29 -0
- package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
- package/dist/types/core/time/ask.d.ts +127 -0
- package/dist/types/core/time/ask.d.ts.map +1 -0
- package/dist/types/core/time/axis.d.ts +225 -0
- package/dist/types/core/time/axis.d.ts.map +1 -0
- package/dist/types/core/time/bind.d.ts +144 -0
- package/dist/types/core/time/bind.d.ts.map +1 -0
- package/dist/types/core/time/check.d.ts +114 -0
- package/dist/types/core/time/check.d.ts.map +1 -0
- package/dist/types/core/time/checkRecord.d.ts +75 -0
- package/dist/types/core/time/checkRecord.d.ts.map +1 -0
- package/dist/types/core/time/clock.d.ts +184 -0
- package/dist/types/core/time/clock.d.ts.map +1 -0
- package/dist/types/core/time/convert.d.ts +179 -0
- package/dist/types/core/time/convert.d.ts.map +1 -0
- package/dist/types/core/time/drift.d.ts +86 -0
- package/dist/types/core/time/drift.d.ts.map +1 -0
- package/dist/types/core/time/duration.d.ts +72 -0
- package/dist/types/core/time/duration.d.ts.map +1 -0
- package/dist/types/core/time/forms.d.ts +85 -0
- package/dist/types/core/time/forms.d.ts.map +1 -0
- package/dist/types/core/time/instant.d.ts +76 -0
- package/dist/types/core/time/instant.d.ts.map +1 -0
- package/dist/types/core/time/periodForm.d.ts +185 -0
- package/dist/types/core/time/periodForm.d.ts.map +1 -0
- package/dist/types/core/time/present.d.ts +108 -0
- package/dist/types/core/time/present.d.ts.map +1 -0
- package/dist/types/core/time/range.d.ts +128 -0
- package/dist/types/core/time/range.d.ts.map +1 -0
- package/dist/types/core/time/reader.d.ts +163 -0
- package/dist/types/core/time/reader.d.ts.map +1 -0
- package/dist/types/core/time/readers/english.d.ts +100 -0
- package/dist/types/core/time/readers/english.d.ts.map +1 -0
- package/dist/types/core/time/readingAsk.d.ts +46 -0
- package/dist/types/core/time/readingAsk.d.ts.map +1 -0
- package/dist/types/core/time/resolve.d.ts +104 -0
- package/dist/types/core/time/resolve.d.ts.map +1 -0
- package/dist/types/core/time/resolveRecord.d.ts +161 -0
- package/dist/types/core/time/resolveRecord.d.ts.map +1 -0
- package/dist/types/core/time/rows.d.ts +298 -0
- package/dist/types/core/time/rows.d.ts.map +1 -0
- package/dist/types/core/time/rowsBuild.d.ts +83 -0
- package/dist/types/core/time/rowsBuild.d.ts.map +1 -0
- package/dist/types/core/time/textForms.d.ts +54 -0
- package/dist/types/core/time/textForms.d.ts.map +1 -0
- package/dist/types/core/time/windows.d.ts +114 -0
- package/dist/types/core/time/windows.d.ts.map +1 -0
- package/dist/types/core/time/wire.d.ts +64 -0
- package/dist/types/core/time/wire.d.ts.map +1 -0
- package/dist/types/core/time/zone.d.ts +116 -0
- package/dist/types/core/time/zone.d.ts.map +1 -0
- package/dist/types/core/tools.d.ts +26 -4
- package/dist/types/core/tools.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +16 -2
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/index.d.ts +13 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/answer-account/facts/howSure.d.ts.map +1 -1
- package/dist/types/lib/answer-account/templates.d.ts +3 -0
- package/dist/types/lib/answer-account/templates.d.ts.map +1 -1
- package/dist/types/lib/mcp/elicitation.d.ts +85 -0
- package/dist/types/lib/mcp/elicitation.d.ts.map +1 -0
- package/dist/types/lib/mcp/mcpServe.d.ts.map +1 -1
- package/dist/types/lib/mcp/mockMcpClient.d.ts +9 -1
- package/dist/types/lib/mcp/mockMcpClient.d.ts.map +1 -1
- package/dist/types/lib/mcp/toolExtras.d.ts +21 -2
- package/dist/types/lib/mcp/toolExtras.d.ts.map +1 -1
- package/dist/types/lib/mcp/types.d.ts +8 -0
- package/dist/types/lib/mcp/types.d.ts.map +1 -1
- package/dist/types/lib/time-travel/receipt.d.ts +1 -1
- package/dist/types/lib/time-travel/receipt.d.ts.map +1 -1
- package/dist/types/lib/time-travel/servedView.d.ts +1 -1
- package/dist/types/lib/time-travel/servedView.d.ts.map +1 -1
- package/dist/types/locales/index.d.ts +6 -0
- package/dist/types/locales/index.d.ts.map +1 -1
- package/dist/types/locales/timeAsk.d.ts +30 -0
- package/dist/types/locales/timeAsk.d.ts.map +1 -0
- package/dist/types/recorders/core/resilienceHooks.d.ts.map +1 -1
- package/dist/types/resilience/statedWait.d.ts +23 -0
- package/dist/types/resilience/statedWait.d.ts.map +1 -0
- package/dist/types/resilience/withRetry.d.ts +13 -2
- package/dist/types/resilience/withRetry.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/artifacts/timeAxis.js +0 -218
- package/dist/artifacts/timeAxis.js.map +0 -1
- package/dist/esm/artifacts/timeAxis.d.ts +0 -114
- package/dist/esm/artifacts/timeAxis.js +0 -212
- package/dist/esm/artifacts/timeAxis.js.map +0 -1
- package/dist/types/artifacts/timeAxis.d.ts +0 -115
- package/dist/types/artifacts/timeAxis.d.ts.map +0 -1
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stages/timeLayer — the time layer's half of seed and ToolCalls, in the ONE
|
|
3
|
+
* module a plain agent never loads.
|
|
4
|
+
*
|
|
5
|
+
* Pattern: the stage bodies `.time()` adds — seed's clock stamp and reading
|
|
6
|
+
* of the person's words, ToolCalls' dispatch moment (the `call` row,
|
|
7
|
+
* the drift redraw, `ctx.time`) and a resume's `clock-on-resume`
|
|
8
|
+
* row — moved out of the two stages verbatim, each taking the
|
|
9
|
+
* stage's own scope and deps.
|
|
10
|
+
* Role: core/ layer leaf of the time layer. seed (`stages/seed.ts`) and
|
|
11
|
+
* ToolCalls (`stages/toolCalls.ts`) load it through `import()` only
|
|
12
|
+
* when the agent armed `.time()` (`deps.timeClock`, `deps.timeReader`,
|
|
13
|
+
* `deps.time`) — the optional-family law of docs-next's site budget
|
|
14
|
+
* (`scripts/check-site-budget.mjs`; the `arguments/dispatch.ts`
|
|
15
|
+
* precedent), so the resolver, the conversion forms and the drift
|
|
16
|
+
* check are not on the graph `import { Agent }` loads.
|
|
17
|
+
* Emits: N/A (rows go through the ledger's one writer).
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* if (deps.time !== undefined) (await import('./timeLayer.js')).recordClockOnResume(scope, deps.time);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import type { TypedScope } from 'footprintjs';
|
|
25
|
+
import { type TimeContext } from '../../time/wire.js';
|
|
26
|
+
import { type ZoneName } from '../../time/zone.js';
|
|
27
|
+
import { type RuledToolLike } from '../arguments/declare.js';
|
|
28
|
+
import type { AgentState } from '../types.js';
|
|
29
|
+
import type { SeedStageDeps } from './seed.js';
|
|
30
|
+
import type { ToolCallsHandlerDeps } from './toolCalls.js';
|
|
31
|
+
/**
|
|
32
|
+
* The turn's clock stamp (the time layer) — filed LAST in seed, after the
|
|
33
|
+
* turn number is final (`anchorTurnNumber` may raise it), so the row names
|
|
34
|
+
* the turn every later row of this turn names. One row per run; the clock is
|
|
35
|
+
* a run constant from here on and is never written again this turn (a
|
|
36
|
+
* resume keeps it — `stages/toolCalls.ts` records a differing `time` as
|
|
37
|
+
* `clock-on-resume`). No accessor, or no draft → nothing is written.
|
|
38
|
+
*/
|
|
39
|
+
export declare function stampClock(scope: TypedScope<AgentState>, deps: SeedStageDeps): void;
|
|
40
|
+
/**
|
|
41
|
+
* The person's words, read for time (the time layer's reader) — right after
|
|
42
|
+
* the turn's clock, which the reading resolves against. Reads ONLY this
|
|
43
|
+
* turn's entry, and only when a person wrote it: a message this library
|
|
44
|
+
* authored in a person's voice, a delivered injection and a composed run's
|
|
45
|
+
* message (another runner's output) are never read. A turn that already
|
|
46
|
+
* has its rows (a `resumeOnError` retry re-seeds the same turn) is read
|
|
47
|
+
* back, never re-read: a model-backed reader must not answer differently
|
|
48
|
+
* the second time. A sync reader keeps seed's shape; an async one makes it
|
|
49
|
+
* wait. A reader that throws fails the run.
|
|
50
|
+
*/
|
|
51
|
+
export declare function readTimeWords(scope: TypedScope<AgentState>, deps: SeedStageDeps): void | Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* The time layer at one dispatch: the `call` row (`core/time/rowsBuild.ts` ·
|
|
54
|
+
* `callRow`) — the wall clock read at the moment the library hands the call
|
|
55
|
+
* to the tool — and, for a call that sent a look-back, the clock at dispatch
|
|
56
|
+
* (§ 7.4, `core/time/drift.ts` · `driftAtDispatch`): past the tool's step the
|
|
57
|
+
* library's OWN look-back fill is re-sent as the asked range in the tool's
|
|
58
|
+
* absolute form (`args` comes back redrawn), and any other look-back runs as
|
|
59
|
+
* sent and is recorded shifted. Filed through the one writer; no event (the
|
|
60
|
+
* row is the record).
|
|
61
|
+
*/
|
|
62
|
+
export declare function timeAtDispatch(scope: TypedScope<AgentState>, call: {
|
|
63
|
+
readonly toolCallId: string;
|
|
64
|
+
readonly toolName: string;
|
|
65
|
+
}, iteration: number, tool: RuledToolLike | undefined, args: Readonly<Record<string, unknown>>, appZone: ZoneName | undefined): {
|
|
66
|
+
readonly context: TimeContext | undefined;
|
|
67
|
+
readonly args: Readonly<Record<string, unknown>>;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* `ctx.time` for one call (`core/time/wire.ts` · `TimeContext`, time design
|
|
71
|
+
* § 7.5) — present only when the inputs layer filed a `call-window` row for
|
|
72
|
+
* it this turn (its tool's period declares forms) and the turn has a clock:
|
|
73
|
+
* the range the call asks for, the person's zone, the frozen `now` and the
|
|
74
|
+
* dispatch moment just recorded. Read from the committed ledger, never
|
|
75
|
+
* recomputed.
|
|
76
|
+
*/
|
|
77
|
+
export declare function callTimeContext(scope: TypedScope<AgentState>, toolCallId: string, dispatchedAt: string): TimeContext | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* A resume's passed `time` against the paused turn's kept clock — one
|
|
80
|
+
* `clock-on-resume` row when they differ (`core/time/rowsBuild.ts` ·
|
|
81
|
+
* `clockOnResumeRow`), nothing when nothing was passed, nothing differs, or
|
|
82
|
+
* the paused turn has no clock (a checkpoint written by an agent without the
|
|
83
|
+
* layer: there is no frozen clock to keep, and a resume never starts one
|
|
84
|
+
* mid-turn).
|
|
85
|
+
*
|
|
86
|
+
* Called FIRST at both of this stage's entries, because a resume re-enters
|
|
87
|
+
* through either: the pausable `resume` door (a check-in, a middleware ask, a
|
|
88
|
+
* tool's own pause) or `execute` re-run from its top (the inputs layer's
|
|
89
|
+
* argument ask pauses through footprintjs's `interrupt()`). The passed value
|
|
90
|
+
* is TAKEN (`ToolCallsHandlerDeps.time` · `takePassedOnResume`), so the leg
|
|
91
|
+
* files it once whichever door it came through, and a fresh run — which
|
|
92
|
+
* passed none — files nothing.
|
|
93
|
+
*/
|
|
94
|
+
export declare function recordClockOnResume(scope: TypedScope<AgentState>, time: NonNullable<ToolCallsHandlerDeps['time']>): void;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stages/timeLayer — the time layer's half of seed and ToolCalls, in the ONE
|
|
3
|
+
* module a plain agent never loads.
|
|
4
|
+
*
|
|
5
|
+
* Pattern: the stage bodies `.time()` adds — seed's clock stamp and reading
|
|
6
|
+
* of the person's words, ToolCalls' dispatch moment (the `call` row,
|
|
7
|
+
* the drift redraw, `ctx.time`) and a resume's `clock-on-resume`
|
|
8
|
+
* row — moved out of the two stages verbatim, each taking the
|
|
9
|
+
* stage's own scope and deps.
|
|
10
|
+
* Role: core/ layer leaf of the time layer. seed (`stages/seed.ts`) and
|
|
11
|
+
* ToolCalls (`stages/toolCalls.ts`) load it through `import()` only
|
|
12
|
+
* when the agent armed `.time()` (`deps.timeClock`, `deps.timeReader`,
|
|
13
|
+
* `deps.time`) — the optional-family law of docs-next's site budget
|
|
14
|
+
* (`scripts/check-site-budget.mjs`; the `arguments/dispatch.ts`
|
|
15
|
+
* precedent), so the resolver, the conversion forms and the drift
|
|
16
|
+
* check are not on the graph `import { Agent }` loads.
|
|
17
|
+
* Emits: N/A (rows go through the ledger's one writer).
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* if (deps.time !== undefined) (await import('./timeLayer.js')).recordClockOnResume(scope, deps.time);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import { isSaidByPerson } from '../../../lib/saidByPerson.js';
|
|
25
|
+
import { completeClock } from '../../time/clock.js';
|
|
26
|
+
import { granularityMsOf } from '../../time/convert.js';
|
|
27
|
+
import { driftAtDispatch } from '../../time/drift.js';
|
|
28
|
+
import { checkReading } from '../../time/reader.js';
|
|
29
|
+
import { callWindowOfCall, clockOf, readingsOf } from '../../time/rows.js';
|
|
30
|
+
import { callRow, clockOnResumeRow, clockRow, timeReadingRows } from '../../time/rowsBuild.js';
|
|
31
|
+
import { timeContextOf } from '../../time/wire.js';
|
|
32
|
+
import { tzdataVersion } from '../../time/zone.js';
|
|
33
|
+
import { isRefused, periodFactsOf, periodFormsOf, rulesOf, } from '../arguments/declare.js';
|
|
34
|
+
import { recordFindings } from '../findings/ledger.js';
|
|
35
|
+
// ─── seed ────────────────────────────────────────────────────────────────
|
|
36
|
+
/**
|
|
37
|
+
* The turn's clock stamp (the time layer) — filed LAST in seed, after the
|
|
38
|
+
* turn number is final (`anchorTurnNumber` may raise it), so the row names
|
|
39
|
+
* the turn every later row of this turn names. One row per run; the clock is
|
|
40
|
+
* a run constant from here on and is never written again this turn (a
|
|
41
|
+
* resume keeps it — `stages/toolCalls.ts` records a differing `time` as
|
|
42
|
+
* `clock-on-resume`). No accessor, or no draft → nothing is written.
|
|
43
|
+
*/
|
|
44
|
+
export function stampClock(scope, deps) {
|
|
45
|
+
const draft = deps.timeClock?.();
|
|
46
|
+
if (draft === undefined)
|
|
47
|
+
return;
|
|
48
|
+
const clock = completeClock(draft, scope.turnStartMs);
|
|
49
|
+
recordFindings(scope, [
|
|
50
|
+
clockRow(clock, { turn: scope.turnNumber, iteration: scope.iteration }, draft.window),
|
|
51
|
+
]);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The person's words, read for time (the time layer's reader) — right after
|
|
55
|
+
* the turn's clock, which the reading resolves against. Reads ONLY this
|
|
56
|
+
* turn's entry, and only when a person wrote it: a message this library
|
|
57
|
+
* authored in a person's voice, a delivered injection and a composed run's
|
|
58
|
+
* message (another runner's output) are never read. A turn that already
|
|
59
|
+
* has its rows (a `resumeOnError` retry re-seeds the same turn) is read
|
|
60
|
+
* back, never re-read: a model-backed reader must not answer differently
|
|
61
|
+
* the second time. A sync reader keeps seed's shape; an async one makes it
|
|
62
|
+
* wait. A reader that throws fails the run.
|
|
63
|
+
*/
|
|
64
|
+
export function readTimeWords(scope, deps) {
|
|
65
|
+
const armed = deps.timeReader;
|
|
66
|
+
if (armed === undefined)
|
|
67
|
+
return;
|
|
68
|
+
if (scope.$getArgs().messageFrom === 'composed')
|
|
69
|
+
return;
|
|
70
|
+
const ledger = scope.findingsLedger;
|
|
71
|
+
const turn = scope.turnNumber;
|
|
72
|
+
if (readingsOf(ledger, turn).length > 0)
|
|
73
|
+
return;
|
|
74
|
+
const clock = clockOf(ledger);
|
|
75
|
+
const history = scope.history;
|
|
76
|
+
const entry = history[history.length - 1];
|
|
77
|
+
if (clock === undefined || entry === undefined || !isSaidByPerson(entry))
|
|
78
|
+
return;
|
|
79
|
+
const text = entry.content;
|
|
80
|
+
const { reader, policy } = armed;
|
|
81
|
+
const file = (reading) => {
|
|
82
|
+
const mentions = checkReading(text, reading, reader.id);
|
|
83
|
+
recordFindings(scope, timeReadingRows({
|
|
84
|
+
mentions,
|
|
85
|
+
clock,
|
|
86
|
+
policy,
|
|
87
|
+
reader,
|
|
88
|
+
tzdata: tzdataVersion(),
|
|
89
|
+
at: { turn, iteration: scope.iteration },
|
|
90
|
+
}));
|
|
91
|
+
};
|
|
92
|
+
const reading = reader.read(text, { locale: reader.locale });
|
|
93
|
+
if (reading !== null && typeof reading.then === 'function') {
|
|
94
|
+
return Promise.resolve(reading).then(file);
|
|
95
|
+
}
|
|
96
|
+
file(reading);
|
|
97
|
+
}
|
|
98
|
+
// ─── ToolCalls ───────────────────────────────────────────────────────────
|
|
99
|
+
/**
|
|
100
|
+
* The time layer at one dispatch: the `call` row (`core/time/rowsBuild.ts` ·
|
|
101
|
+
* `callRow`) — the wall clock read at the moment the library hands the call
|
|
102
|
+
* to the tool — and, for a call that sent a look-back, the clock at dispatch
|
|
103
|
+
* (§ 7.4, `core/time/drift.ts` · `driftAtDispatch`): past the tool's step the
|
|
104
|
+
* library's OWN look-back fill is re-sent as the asked range in the tool's
|
|
105
|
+
* absolute form (`args` comes back redrawn), and any other look-back runs as
|
|
106
|
+
* sent and is recorded shifted. Filed through the one writer; no event (the
|
|
107
|
+
* row is the record).
|
|
108
|
+
*/
|
|
109
|
+
export function timeAtDispatch(scope, call, iteration, tool, args, appZone) {
|
|
110
|
+
const atMs = Date.now();
|
|
111
|
+
const dispatchedAt = new Date(atMs).toISOString();
|
|
112
|
+
const ledger = scope.findingsLedger;
|
|
113
|
+
const turn = scope.turnNumber;
|
|
114
|
+
const window = callWindowOfCall(ledger, call.toolCallId, turn);
|
|
115
|
+
const clock = clockOf(ledger);
|
|
116
|
+
const rules = window !== undefined && clock !== undefined ? rulesOf(tool) : undefined;
|
|
117
|
+
const drift = rules !== undefined && !isRefused(rules) && clock !== undefined
|
|
118
|
+
? driftAtDispatch(window, periodFormsOf(rules.period), {
|
|
119
|
+
now: clock.now,
|
|
120
|
+
dispatchedAt,
|
|
121
|
+
granularityMs: granularityMsOf(periodFactsOf(rules.period)),
|
|
122
|
+
zone: clock.zone,
|
|
123
|
+
...(appZone !== undefined && { appZone }),
|
|
124
|
+
})
|
|
125
|
+
: undefined;
|
|
126
|
+
const row = callRow(call, { turn, iteration }, atMs, drift === undefined
|
|
127
|
+
? undefined
|
|
128
|
+
: drift.outcome === 'redrawn'
|
|
129
|
+
? { byMs: drift.byMs, outcome: 'redrawn', form: drift.form }
|
|
130
|
+
: { byMs: drift.byMs, outcome: 'shifted' });
|
|
131
|
+
recordFindings(scope, [row]);
|
|
132
|
+
const redrawn = drift?.outcome === 'redrawn' ? redrawnArgs(args, tool, window?.form, drift.values) : args;
|
|
133
|
+
return { context: callTimeContext(scope, call.toolCallId, row.dispatchedAt), args: redrawn };
|
|
134
|
+
}
|
|
135
|
+
/** `args` with the look-back form's argument dropped and the absolute form's values written — a fresh object. */
|
|
136
|
+
function redrawnArgs(args, tool, lookbackForm, values) {
|
|
137
|
+
const rules = rulesOf(tool);
|
|
138
|
+
const forms = rules === undefined || isRefused(rules) ? [] : periodFormsOf(rules.period);
|
|
139
|
+
const lookback = lookbackForm === undefined ? undefined : forms[lookbackForm];
|
|
140
|
+
const next = { ...args };
|
|
141
|
+
if (lookback !== undefined && lookback.kind === 'lookback')
|
|
142
|
+
delete next[lookback.argument];
|
|
143
|
+
return { ...next, ...values };
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* `ctx.time` for one call (`core/time/wire.ts` · `TimeContext`, time design
|
|
147
|
+
* § 7.5) — present only when the inputs layer filed a `call-window` row for
|
|
148
|
+
* it this turn (its tool's period declares forms) and the turn has a clock:
|
|
149
|
+
* the range the call asks for, the person's zone, the frozen `now` and the
|
|
150
|
+
* dispatch moment just recorded. Read from the committed ledger, never
|
|
151
|
+
* recomputed.
|
|
152
|
+
*/
|
|
153
|
+
export function callTimeContext(scope, toolCallId, dispatchedAt) {
|
|
154
|
+
const ledger = scope.findingsLedger;
|
|
155
|
+
const window = callWindowOfCall(ledger, toolCallId, scope.turnNumber);
|
|
156
|
+
if (window === undefined)
|
|
157
|
+
return undefined;
|
|
158
|
+
const clock = clockOf(ledger);
|
|
159
|
+
if (clock === undefined)
|
|
160
|
+
return undefined;
|
|
161
|
+
return structuredClone(timeContextOf(window, clock, dispatchedAt));
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* A resume's passed `time` against the paused turn's kept clock — one
|
|
165
|
+
* `clock-on-resume` row when they differ (`core/time/rowsBuild.ts` ·
|
|
166
|
+
* `clockOnResumeRow`), nothing when nothing was passed, nothing differs, or
|
|
167
|
+
* the paused turn has no clock (a checkpoint written by an agent without the
|
|
168
|
+
* layer: there is no frozen clock to keep, and a resume never starts one
|
|
169
|
+
* mid-turn).
|
|
170
|
+
*
|
|
171
|
+
* Called FIRST at both of this stage's entries, because a resume re-enters
|
|
172
|
+
* through either: the pausable `resume` door (a check-in, a middleware ask, a
|
|
173
|
+
* tool's own pause) or `execute` re-run from its top (the inputs layer's
|
|
174
|
+
* argument ask pauses through footprintjs's `interrupt()`). The passed value
|
|
175
|
+
* is TAKEN (`ToolCallsHandlerDeps.time` · `takePassedOnResume`), so the leg
|
|
176
|
+
* files it once whichever door it came through, and a fresh run — which
|
|
177
|
+
* passed none — files nothing.
|
|
178
|
+
*/
|
|
179
|
+
export function recordClockOnResume(scope, time) {
|
|
180
|
+
const passed = time.takePassedOnResume();
|
|
181
|
+
if (passed === undefined)
|
|
182
|
+
return;
|
|
183
|
+
const kept = clockOf(scope.findingsLedger);
|
|
184
|
+
if (kept === undefined)
|
|
185
|
+
return;
|
|
186
|
+
const row = clockOnResumeRow(passed, kept, {
|
|
187
|
+
turn: scope.turnNumber,
|
|
188
|
+
iteration: scope.iteration,
|
|
189
|
+
});
|
|
190
|
+
if (row !== undefined)
|
|
191
|
+
recordFindings(scope, [row]);
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=timeLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeLayer.js","sourceRoot":"","sources":["../../../../../src/core/agent/stages/timeLayer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stages/timeLineage — this turn's time spellings by lineage, as the evidence
|
|
3
|
+
* gate reads them (time design § 9.5, step T7), in a module a plain agent
|
|
4
|
+
* never loads.
|
|
5
|
+
*
|
|
6
|
+
* Pattern: Walker over the committed ledger — the turn's recorded windows
|
|
7
|
+
* (`core/time/forms.ts` · `turnFormsWindowsOf`), the values the
|
|
8
|
+
* library filled from a window (`./route.ts` · `isWindowFillRow`) and
|
|
9
|
+
* the served time line.
|
|
10
|
+
* Role: the Route decider loads it through `import()` under `.time()` only
|
|
11
|
+
* (`./route.ts` · `loadTimeLineage`): `forms.ts` re-resolves a
|
|
12
|
+
* confirmed reading (`resolve.ts`), so it stays off the graph
|
|
13
|
+
* `import { Agent }` loads (the optional-family law,
|
|
14
|
+
* `test/lib/trace-toolpack/browserGraph.test.ts`).
|
|
15
|
+
* Emits: N/A.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const { said, derived } = timeLineageOf(scope); // said → the exempt corpus; derived → a time-derived row
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import { type TimeLineage } from './route.js';
|
|
23
|
+
/**
|
|
24
|
+
* This turn's time spellings, split by lineage (time design § 9.5, step T7):
|
|
25
|
+
* per recorded window (`core/time/forms.ts` · `turnFormsWindowsOf`), the
|
|
26
|
+
* spellings `timeFormsOf` files as the person's and as the library's; plus,
|
|
27
|
+
* as the library's, every value it filled from a window into a call
|
|
28
|
+
* (`isWindowFillRow`) and the served time line (`timeLine` — library text,
|
|
29
|
+
* never evidence, so an answer that echoes it is not the person's).
|
|
30
|
+
*/
|
|
31
|
+
export declare const timeLineageOf: TimeLineage;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* stages/timeLineage — this turn's time spellings by lineage, as the evidence
|
|
3
|
+
* gate reads them (time design § 9.5, step T7), in a module a plain agent
|
|
4
|
+
* never loads.
|
|
5
|
+
*
|
|
6
|
+
* Pattern: Walker over the committed ledger — the turn's recorded windows
|
|
7
|
+
* (`core/time/forms.ts` · `turnFormsWindowsOf`), the values the
|
|
8
|
+
* library filled from a window (`./route.ts` · `isWindowFillRow`) and
|
|
9
|
+
* the served time line.
|
|
10
|
+
* Role: the Route decider loads it through `import()` under `.time()` only
|
|
11
|
+
* (`./route.ts` · `loadTimeLineage`): `forms.ts` re-resolves a
|
|
12
|
+
* confirmed reading (`resolve.ts`), so it stays off the graph
|
|
13
|
+
* `import { Agent }` loads (the optional-family law,
|
|
14
|
+
* `test/lib/trace-toolpack/browserGraph.test.ts`).
|
|
15
|
+
* Emits: N/A.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const { said, derived } = timeLineageOf(scope); // said → the exempt corpus; derived → a time-derived row
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import { timeFormsOf, turnFormsWindowsOf } from '../../time/forms.js';
|
|
23
|
+
import { HIDDEN_VALUE } from '../arguments/rows.js';
|
|
24
|
+
import { isWindowFillRow } from './route.js';
|
|
25
|
+
// FOLD · the one owner of this turn's time spellings by lineage, as the evidence gate reads them
|
|
26
|
+
// consumers read this and never re-derive it: judgeEvidence (the exempt corpus's `timeSaid`, checkAnswer's `derived`)
|
|
27
|
+
// detached: yes — fresh arrays per call, read from the committed ledger and the served time line.
|
|
28
|
+
/**
|
|
29
|
+
* This turn's time spellings, split by lineage (time design § 9.5, step T7):
|
|
30
|
+
* per recorded window (`core/time/forms.ts` · `turnFormsWindowsOf`), the
|
|
31
|
+
* spellings `timeFormsOf` files as the person's and as the library's; plus,
|
|
32
|
+
* as the library's, every value it filled from a window into a call
|
|
33
|
+
* (`isWindowFillRow`) and the served time line (`timeLine` — library text,
|
|
34
|
+
* never evidence, so an answer that echoes it is not the person's).
|
|
35
|
+
*/
|
|
36
|
+
export const timeLineageOf = (scope) => {
|
|
37
|
+
const ledger = [...(scope.findingsLedger ?? [])];
|
|
38
|
+
const said = [];
|
|
39
|
+
const derived = [];
|
|
40
|
+
for (const window of turnFormsWindowsOf(ledger)) {
|
|
41
|
+
const forms = timeFormsOf({ window });
|
|
42
|
+
said.push(...forms.said);
|
|
43
|
+
derived.push(...forms.derived);
|
|
44
|
+
}
|
|
45
|
+
const turn = scope.turnNumber;
|
|
46
|
+
for (const row of ledger) {
|
|
47
|
+
if (row.kind !== 'argument' || row.turn !== turn || !isWindowFillRow(row, ledger))
|
|
48
|
+
continue;
|
|
49
|
+
if (row.value !== undefined && row.value !== HIDDEN_VALUE)
|
|
50
|
+
derived.push(row.value);
|
|
51
|
+
}
|
|
52
|
+
const line = scope.timeLine;
|
|
53
|
+
if (line !== undefined)
|
|
54
|
+
derived.push(line.text);
|
|
55
|
+
return { said, derived };
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=timeLineage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeLineage.js","sourceRoot":"","sources":["../../../../../src/core/agent/stages/timeLineage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAoB,MAAM,YAAY,CAAC;AAE/D,iGAAiG;AACjG,sHAAsH;AACtH,kGAAkG;AAClG;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAgB,CAAC,KAAK,EAAE,EAAE;IAClD,MAAM,MAAM,GAAG,CAAC,GAAG,CAAE,KAAK,CAAC,cAA6C,IAAI,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAoB,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC;YAAE,SAAS;QAC5F,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,YAAY;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAiD,CAAC;IACrE,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC,CAAC"}
|
|
@@ -69,6 +69,10 @@ import type { MemoryIdentity } from '../../../memory/identity/types.js';
|
|
|
69
69
|
import type { ToolSessionTier } from '../../toolSessions.js';
|
|
70
70
|
import type { ToolMiddleware } from '../middleware/types.js';
|
|
71
71
|
import type { Classifier } from '../../../classify/types.js';
|
|
72
|
+
import type { ReadRunTime } from '../../time/clock.js';
|
|
73
|
+
import type { ZoneName } from '../../time/zone.js';
|
|
74
|
+
import type { TimePolicy } from '../../time/resolveRecord.js';
|
|
75
|
+
import type { TimeAskMessages } from '../../time/ask.js';
|
|
72
76
|
import type { ResolvedEvidenceGate } from '../evidence/types.js';
|
|
73
77
|
import { type ToolArgValidationMode } from '../toolArgsValidation.js';
|
|
74
78
|
import { type StepPlanFor } from '../../../lib/injection-engine/skillSteps.js';
|
|
@@ -515,6 +519,34 @@ export interface ToolCallsHandlerDeps {
|
|
|
515
519
|
* @internal
|
|
516
520
|
*/
|
|
517
521
|
readonly answeredAsk?: () => AnsweredAsk | undefined;
|
|
522
|
+
/**
|
|
523
|
+
* THE TIME LAYER (`.time()`) — present only then. Each dispatched call files
|
|
524
|
+
* one `call` row with `dispatchedAt` (the wall clock, just before the tool
|
|
525
|
+
* runs: a tool evaluates a look-back against its own clock at dispatch,
|
|
526
|
+
* which after a pause is later than the turn's `now`). `takePassedOnResume`
|
|
527
|
+
* hands over the `time` the current resume passed, as read, ONCE (a second
|
|
528
|
+
* call answers `undefined`) — the first ToolCalls pass of the resumed leg
|
|
529
|
+
* compares it with the turn's kept clock and files `clock-on-resume` when
|
|
530
|
+
* they differ; the kept clock is never replaced. A call whose tool's period
|
|
531
|
+
* declares forms is handed `ctx.time` (read off its `call-window` row), and
|
|
532
|
+
* the batch ask judges a period answer against the tool's facts at the
|
|
533
|
+
* turn's clock (`appZone`: the app's `.time({ zone })`).
|
|
534
|
+
*
|
|
535
|
+
* @internal
|
|
536
|
+
*/
|
|
537
|
+
readonly time?: {
|
|
538
|
+
readonly takePassedOnResume: () => ReadRunTime | undefined;
|
|
539
|
+
readonly appZone?: ZoneName;
|
|
540
|
+
/**
|
|
541
|
+
* Present exactly under `.time({ reader })` (step T6b): the batch ask asks
|
|
542
|
+
* a period left out while the turn's one mention is open as THAT
|
|
543
|
+
* mention's window — the lazy word-driven ask (`./argumentAsk.ts` · `windowPlanOf`).
|
|
544
|
+
*/
|
|
545
|
+
readonly reader?: {
|
|
546
|
+
readonly policy: TimePolicy;
|
|
547
|
+
readonly messages?: Partial<TimeAskMessages>;
|
|
548
|
+
};
|
|
549
|
+
};
|
|
518
550
|
/**
|
|
519
551
|
* Put one artifact fact on the record for the run it BELONGS to — the door
|
|
520
552
|
* a `ctx.artifacts` fact takes when it lands after that run ended (a tool's
|
|
@@ -83,6 +83,7 @@ import { isResultMessage, knownResults } from '../findings/offer.js';
|
|
|
83
83
|
import { basisRowFrom, foldLedger, recordFindings, standingRowsFrom, } from '../findings/ledger.js';
|
|
84
84
|
import { contingentRowsOf, groundedArgumentValues, hasSetAsideStanding, } from '../findings/contingent.js';
|
|
85
85
|
import { withUnsettledRows } from '../findings/unsettled.js';
|
|
86
|
+
import { sourceClockRow, sourceClocksOf } from '../../time/rows.js';
|
|
86
87
|
import { evidenceFromHistory, exemptFromRun, } from '../evidence/evidenceIndex.js';
|
|
87
88
|
import { noteRepeatedCall, repeatedCallLedgers } from '../repeatedCall.js';
|
|
88
89
|
import { formatToolArgIssues, validateToolArgs, } from '../toolArgsValidation.js';
|
|
@@ -719,6 +720,27 @@ function towersFor(scope, findings, gate) {
|
|
|
719
720
|
standingOf,
|
|
720
721
|
};
|
|
721
722
|
}
|
|
723
|
+
/**
|
|
724
|
+
* File the `source-clock` row for one call's dataset whose declared time axis
|
|
725
|
+
* names `zone` (step T8) — once per call and zone this turn, through the one
|
|
726
|
+
* writer; no event (the row is the record).
|
|
727
|
+
*/
|
|
728
|
+
function recordSourceClock(scope, call, zone) {
|
|
729
|
+
const ledger = scope.findingsLedger;
|
|
730
|
+
const turn = scope.turnNumber;
|
|
731
|
+
const filed = sourceClocksOf(ledger, turn).some((r) => r.toolCallId === call.toolCallId && r.zone === zone);
|
|
732
|
+
if (filed)
|
|
733
|
+
return;
|
|
734
|
+
recordFindings(scope, [
|
|
735
|
+
sourceClockRow(call, { turn, iteration: scope.iteration }, zone),
|
|
736
|
+
]);
|
|
737
|
+
}
|
|
738
|
+
/** The run a capability binding was made in — `undefined` when there is no binding. */
|
|
739
|
+
const madeInRun = (bindRun) => bindRun?.runContext?.runId;
|
|
740
|
+
// The time layer's half of dispatch — the `call` row, the drift redraw,
|
|
741
|
+
// `ctx.time` and the `clock-on-resume` row — lives in `./timeLayer.ts`,
|
|
742
|
+
// loaded through `import()` only when `.time()` armed the agent (`deps.time`),
|
|
743
|
+
// under the same optional-family law.
|
|
722
744
|
export function buildToolCallsHandler(deps) {
|
|
723
745
|
const { registryByName, externalToolProvider, providerToolCache, servedTools, toolClaimants, permissionChecker, } = deps;
|
|
724
746
|
const toolArgValidation = deps.toolArgValidation ?? 'enforce';
|
|
@@ -1710,6 +1732,16 @@ export function buildToolCallsHandler(deps) {
|
|
|
1710
1732
|
...(meta.timeAxis !== undefined && { timeAxis: meta.timeAxis }),
|
|
1711
1733
|
tool: toolName,
|
|
1712
1734
|
});
|
|
1735
|
+
// Under `.time()` (step T8): a dataset whose declared axis names a
|
|
1736
|
+
// zone is a wall-clock source — one `source-clock` row per call and
|
|
1737
|
+
// zone, for the limits block's `Clocks` lines. Only in the run the
|
|
1738
|
+
// binding was made in (a late mint's run has ended).
|
|
1739
|
+
const zone = meta.timeAxis?.zone;
|
|
1740
|
+
if (deps.time !== undefined &&
|
|
1741
|
+
zone !== undefined &&
|
|
1742
|
+
(madeInRun(bindRun) === undefined || madeInRun(bindRun) === deps.currentRun?.().runId)) {
|
|
1743
|
+
recordSourceClock(scope, { toolCallId, toolName }, zone);
|
|
1744
|
+
}
|
|
1713
1745
|
return;
|
|
1714
1746
|
}
|
|
1715
1747
|
case 'resolved':
|
|
@@ -2458,11 +2490,20 @@ export function buildToolCallsHandler(deps) {
|
|
|
2458
2490
|
}
|
|
2459
2491
|
}
|
|
2460
2492
|
try {
|
|
2493
|
+
// The time layer's dispatch moment — a resumed call is dispatched NOW,
|
|
2494
|
+
// so its `dispatchedAt` is the resume's, not the pause's.
|
|
2495
|
+
const dispatched = deps.time !== undefined
|
|
2496
|
+
? (await import('./timeLayer.js')).timeAtDispatch(scope, { toolCallId, toolName }, iteration, tool, args, deps.time.appZone)
|
|
2497
|
+
: undefined;
|
|
2498
|
+
const callTime = dispatched?.context;
|
|
2499
|
+
if (dispatched !== undefined)
|
|
2500
|
+
args = dispatched.args;
|
|
2461
2501
|
// `let`, not `const`: the semantic projection below replaces the value
|
|
2462
2502
|
// on the non-envelope path exactly as the batch loop does.
|
|
2463
2503
|
let result = await tool.execute(args, {
|
|
2464
2504
|
toolCallId,
|
|
2465
2505
|
iteration,
|
|
2506
|
+
...(callTime !== undefined && { time: callTime }),
|
|
2466
2507
|
...(env.signal && { signal: env.signal }),
|
|
2467
2508
|
credentials: reportingCredentials(credentials, scope, toolName),
|
|
2468
2509
|
hasCredentials,
|
|
@@ -2617,6 +2658,13 @@ export function buildToolCallsHandler(deps) {
|
|
|
2617
2658
|
const durable = deps.awaitDurable?.();
|
|
2618
2659
|
if (durable)
|
|
2619
2660
|
await durable;
|
|
2661
|
+
// The time layer: a resume whose pause was the inputs layer's argument
|
|
2662
|
+
// ask re-runs THIS function from its top — the kept clock is recorded
|
|
2663
|
+
// against the resume's `time` here, first, exactly as the resume door
|
|
2664
|
+
// does (TQ21). A fresh run passed no resume `time`: nothing is filed.
|
|
2665
|
+
if (deps.time !== undefined) {
|
|
2666
|
+
(await import('./timeLayer.js')).recordClockOnResume(scope, deps.time);
|
|
2667
|
+
}
|
|
2620
2668
|
// Materialize ONCE — `scope.llmLatestToolCalls` is a live TypedScope
|
|
2621
2669
|
// deep-Proxy view; spreading yields the raw (plain, structured-clone-
|
|
2622
2670
|
// safe) elements. This array is embedded into the assistant history
|
|
@@ -2660,6 +2708,12 @@ export function buildToolCallsHandler(deps) {
|
|
|
2660
2708
|
toolOf: (toolName) => resolveTool(toolName).tool,
|
|
2661
2709
|
runId: () => deps.currentRun?.().runId,
|
|
2662
2710
|
...(deps.argumentAskContext !== undefined && { hostContext: deps.argumentAskContext }),
|
|
2711
|
+
...(deps.time !== undefined && {
|
|
2712
|
+
time: {
|
|
2713
|
+
...(deps.time.appZone !== undefined && { appZone: deps.time.appZone }),
|
|
2714
|
+
...(deps.time.reader !== undefined && { reader: deps.time.reader }),
|
|
2715
|
+
},
|
|
2716
|
+
}),
|
|
2663
2717
|
});
|
|
2664
2718
|
resolutions = asked.resolutions;
|
|
2665
2719
|
if (asked.answered)
|
|
@@ -3469,6 +3523,15 @@ export function buildToolCallsHandler(deps) {
|
|
|
3469
3523
|
throw new Error(resolved.refusal ?? unknownToolResult(tc.name, dispatchRoster(scope)));
|
|
3470
3524
|
}
|
|
3471
3525
|
noteOffWire(scope, resolved, { toolName: tc.name, toolCallId: tc.id, iteration });
|
|
3526
|
+
// The time layer's dispatch moment — just before the tool runs.
|
|
3527
|
+
// A look-back the clock drifted past is redrawn here (§ 7.4) — `callArgs`
|
|
3528
|
+
// carries what the tool ran with, so the note and the results layer read it.
|
|
3529
|
+
const dispatched = deps.time !== undefined
|
|
3530
|
+
? (await import('./timeLayer.js')).timeAtDispatch(scope, { toolCallId: tc.id, toolName: tc.name }, iteration, tool, callArgs, deps.time.appZone)
|
|
3531
|
+
: undefined;
|
|
3532
|
+
const callTime = dispatched?.context;
|
|
3533
|
+
if (dispatched !== undefined)
|
|
3534
|
+
callArgs = dispatched.args;
|
|
3472
3535
|
// Set BEFORE the await: a tool that throws has still run, and a
|
|
3473
3536
|
// tool that does not exist has not. This flag is the entire
|
|
3474
3537
|
// precondition of the after-tool moment below.
|
|
@@ -3476,6 +3539,7 @@ export function buildToolCallsHandler(deps) {
|
|
|
3476
3539
|
result = await tool.execute(callArgs, {
|
|
3477
3540
|
toolCallId: tc.id,
|
|
3478
3541
|
iteration,
|
|
3542
|
+
...(callTime !== undefined && { time: callTime }),
|
|
3479
3543
|
...(env.signal && { signal: env.signal }),
|
|
3480
3544
|
credentials: reportingCredentials(credentials, scope, tc.name),
|
|
3481
3545
|
hasCredentials,
|
|
@@ -4268,6 +4332,12 @@ export function buildToolCallsHandler(deps) {
|
|
|
4268
4332
|
const durable = deps.awaitDurable?.();
|
|
4269
4333
|
if (durable)
|
|
4270
4334
|
await durable;
|
|
4335
|
+
// The time layer: the paused turn's clock is KEPT — its words were
|
|
4336
|
+
// resolved against it. A resume that passed a different `time` is
|
|
4337
|
+
// recorded here, first, and never applied (TQ21).
|
|
4338
|
+
if (deps.time !== undefined) {
|
|
4339
|
+
(await import('./timeLayer.js')).recordClockOnResume(scope, deps.time);
|
|
4340
|
+
}
|
|
4271
4341
|
// Consumer-supplied resume input becomes the paused tool's result.
|
|
4272
4342
|
// The subflow's pre-pause scope is restored automatically by
|
|
4273
4343
|
// footprintjs 4.17.0 via `checkpoint.subflowStates`, so
|