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,634 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* core/time/convert — a tool's period FORMS (time design § 7.1) and the EXACT
|
|
4
|
+
* conversions of one range into them (§ 7.2), with the inverse a binding reads.
|
|
5
|
+
*
|
|
6
|
+
* Pattern: one table per direction. A tool declares every SHAPE its period
|
|
7
|
+
* takes (`PeriodForm` — two arguments, one joined string, an object,
|
|
8
|
+
* a day, a look-back); the library converts a resolved range into the
|
|
9
|
+
* first form that holds it EXACTLY ({@link convertExact}) and reads a
|
|
10
|
+
* sent value back into a range ({@link readBack}). Both cross the
|
|
11
|
+
* argument boundary of § 3.3 through `range.ts` (`boundInto` /
|
|
12
|
+
* `boundFrom` for a `to` bound; `lookbackRange` for a look-back) —
|
|
13
|
+
* never inline.
|
|
14
|
+
* Role: core/ leaf (the time layer). Imports `instant.ts`, `duration.ts`,
|
|
15
|
+
* `range.ts`, `zone.ts` and `periodForm.ts` — the declaration half
|
|
16
|
+
* (the shapes, the sugar, each form's own rules, a declared value's
|
|
17
|
+
* spelling, the tool's facts), split out for the synchronous doors
|
|
18
|
+
* (`arguments/declare.ts`, `ask.ts`, `rows.ts`) and re-exported
|
|
19
|
+
* here. Asked by `bind.ts` (the fill and the binding) and `drift.ts`,
|
|
20
|
+
* which only an armed agent loads.
|
|
21
|
+
* Emits: N/A.
|
|
22
|
+
*
|
|
23
|
+
* ## The sugar (§ 7.1)
|
|
24
|
+
*
|
|
25
|
+
* | Sugar | Means |
|
|
26
|
+
* |-------|-------|
|
|
27
|
+
* | `{ argument, spelling: 'lookback' }` | `{ kind: 'lookback', argument, signed: false }` |
|
|
28
|
+
* | `spelling: 'signed-lookback'` | the same with `signed: true` |
|
|
29
|
+
* | `spelling: 'iso-range'` | `{ kind: 'joined', argument, as: 'iso', joiner: '..', edge: 'inclusive' }` |
|
|
30
|
+
* | `'wall-range'` + `zoneArgument` | `{ kind: 'joined', argument, as: 'wall', joiner: '..', edge: 'inclusive', zone: { argument } }` |
|
|
31
|
+
* | `accepts: [a, b]` | `[sugar(a), sugar(b)]` |
|
|
32
|
+
*
|
|
33
|
+
* ## The exact rows (§ 7.2) — what {@link convertExact} sends
|
|
34
|
+
*
|
|
35
|
+
* | Asked | Form | Sent | Note |
|
|
36
|
+
* |-------|------|------|------|
|
|
37
|
+
* | a look-back | `lookback` | the same length, the sign added or removed, respelled in the form's `units` | none when no unit of `units` spells it |
|
|
38
|
+
* | a look-back | `bounds` / `joined` / `object` | `[now − L, now)` in that `as` | |
|
|
39
|
+
* | a range | `bounds` / `joined` / `object`, `as` `iso` · `epoch-ms` · `epoch-s` | the range; a `to` bound per its `edge` | `epoch-s` rounds outward to whole seconds: `rounded` |
|
|
40
|
+
* | a range | `as: 'wall'` / `'date'` + a zone | the wall times (dates) in the zone | exact only when the tool reads back the same instants (no doubled hour; a date only at midnights) |
|
|
41
|
+
* | a whole day | `day` | that day | any other range is not exact — see the inexact rows |
|
|
42
|
+
* | a range ending at now (within `granularity`) | `lookback` | the smallest spelling in `units` that covers `from` | `rounded` when it is longer |
|
|
43
|
+
*
|
|
44
|
+
* Every other row of § 7.2 is not exact, and {@link convertExact} answers
|
|
45
|
+
* `undefined` for it.
|
|
46
|
+
*
|
|
47
|
+
* ## The inexact rows (§ 7.2, step T5b) — what {@link convertWidened} sends
|
|
48
|
+
*
|
|
49
|
+
* | Asked | Form | Sent | Reads |
|
|
50
|
+
* |-------|------|------|-------|
|
|
51
|
+
* | a range inside one calendar day (in the form's zone) | `day` | that day | the whole day — the rest of it is `extra` |
|
|
52
|
+
* | a range ending before now (past the tool's step) | `lookback` | the covering look-back from now, in the form's units | `[now − L, now]` — the gap after the range (and any rounding before it) is `extra` |
|
|
53
|
+
*
|
|
54
|
+
* A form whose read would be wider than the tool's `maxRange` is skipped.
|
|
55
|
+
* The refusals are tests the binding asks: a range across days when every
|
|
56
|
+
* form is a `day` ({@link spansDaysForDayOnly}), a sent wall time the zone
|
|
57
|
+
* skips ({@link wallGapArgument}), and the facts ({@link periodFactProblem};
|
|
58
|
+
* a range only partly older than `retention` runs —
|
|
59
|
+
* {@link partlyBeyondRetention}).
|
|
60
|
+
*
|
|
61
|
+
* ## Precision and the inclusive edge
|
|
62
|
+
*
|
|
63
|
+
* An ISO or wall bound is written to the second when the instant is a whole
|
|
64
|
+
* second, else to the millisecond; an inclusive `to` is "the last instant
|
|
65
|
+
* inside at that precision" (`to − 1 s`, or `to − 1 ms`). Read back, a bound's
|
|
66
|
+
* precision is how it was written: minutes (`to + 1 min`), seconds, or a
|
|
67
|
+
* fraction (`+ 1 ms`). An epoch bound's precision is its unit; a date's is
|
|
68
|
+
* the calendar day in the zone.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* const forms = sugarForms({ argument: 'window', spelling: 'iso-range' });
|
|
73
|
+
* convertExact(
|
|
74
|
+
* { range: { from: '2026-10-09T08:00:00-07:00', to: '2026-10-09T08:41:00-07:00' } },
|
|
75
|
+
* forms,
|
|
76
|
+
* { now: '2026-10-09T15:40:00Z', zone: 'America/Los_Angeles', granularityMs: 60_000 },
|
|
77
|
+
* );
|
|
78
|
+
* // { form: 0, values: { window: '2026-10-09T08:00:00-07:00..2026-10-09T08:40:59-07:00' } }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
82
|
+
exports.widestMsOf = exports.partlyBeyondRetention = exports.granularityMsOf = exports.lookbackAsBounds = exports.readBack = exports.wallGapArgument = exports.spansDaysForDayOnly = exports.convertWidened = exports.convertExact = exports.TIME_REFUSALS = exports.sugarForms = exports.sugarForm = exports.primaryArgument = exports.periodFactProblem = exports.PERIOD_SPELLINGS = exports.parsesUnderForm = exports.needsZone = exports.isBoundValue = exports.formIssue = exports.formArguments = exports.FORM_KINDS = exports.FACT_UNITS = exports.DEFAULT_GRANULARITY_MS = exports.BOUND_AS = exports.sameRange = void 0;
|
|
83
|
+
const duration_js_1 = require("./duration.js");
|
|
84
|
+
const instant_js_1 = require("./instant.js");
|
|
85
|
+
const range_js_1 = require("./range.js");
|
|
86
|
+
Object.defineProperty(exports, "sameRange", { enumerable: true, get: function () { return range_js_1.sameRange; } });
|
|
87
|
+
const zone_js_1 = require("./zone.js");
|
|
88
|
+
const periodForm_js_1 = require("./periodForm.js");
|
|
89
|
+
var periodForm_js_2 = require("./periodForm.js");
|
|
90
|
+
Object.defineProperty(exports, "BOUND_AS", { enumerable: true, get: function () { return periodForm_js_2.BOUND_AS; } });
|
|
91
|
+
Object.defineProperty(exports, "DEFAULT_GRANULARITY_MS", { enumerable: true, get: function () { return periodForm_js_2.DEFAULT_GRANULARITY_MS; } });
|
|
92
|
+
Object.defineProperty(exports, "FACT_UNITS", { enumerable: true, get: function () { return periodForm_js_2.FACT_UNITS; } });
|
|
93
|
+
Object.defineProperty(exports, "FORM_KINDS", { enumerable: true, get: function () { return periodForm_js_2.FORM_KINDS; } });
|
|
94
|
+
Object.defineProperty(exports, "formArguments", { enumerable: true, get: function () { return periodForm_js_2.formArguments; } });
|
|
95
|
+
Object.defineProperty(exports, "formIssue", { enumerable: true, get: function () { return periodForm_js_2.formIssue; } });
|
|
96
|
+
Object.defineProperty(exports, "isBoundValue", { enumerable: true, get: function () { return periodForm_js_2.isBoundValue; } });
|
|
97
|
+
Object.defineProperty(exports, "needsZone", { enumerable: true, get: function () { return periodForm_js_2.needsZone; } });
|
|
98
|
+
Object.defineProperty(exports, "parsesUnderForm", { enumerable: true, get: function () { return periodForm_js_2.parsesUnderForm; } });
|
|
99
|
+
Object.defineProperty(exports, "PERIOD_SPELLINGS", { enumerable: true, get: function () { return periodForm_js_2.PERIOD_SPELLINGS; } });
|
|
100
|
+
Object.defineProperty(exports, "periodFactProblem", { enumerable: true, get: function () { return periodForm_js_2.periodFactProblem; } });
|
|
101
|
+
Object.defineProperty(exports, "primaryArgument", { enumerable: true, get: function () { return periodForm_js_2.primaryArgument; } });
|
|
102
|
+
Object.defineProperty(exports, "sugarForm", { enumerable: true, get: function () { return periodForm_js_2.sugarForm; } });
|
|
103
|
+
Object.defineProperty(exports, "sugarForms", { enumerable: true, get: function () { return periodForm_js_2.sugarForms; } });
|
|
104
|
+
Object.defineProperty(exports, "TIME_REFUSALS", { enumerable: true, get: function () { return periodForm_js_2.TIME_REFUSALS; } });
|
|
105
|
+
// ─── Wall times and dates as text (the parsers are periodForm.ts') ─────
|
|
106
|
+
const pad = (n, width) => String(n).padStart(width, '0');
|
|
107
|
+
function spellWall(wall, withMs) {
|
|
108
|
+
const base = `${pad(wall.year, 4)}-${pad(wall.month, 2)}-${pad(wall.day, 2)}` +
|
|
109
|
+
`T${pad(wall.hour, 2)}:${pad(wall.minute, 2)}:${pad(wall.second ?? 0, 2)}`;
|
|
110
|
+
return withMs ? `${base}.${pad(wall.millisecond ?? 0, 3)}` : base;
|
|
111
|
+
}
|
|
112
|
+
const spellDate = (d) => `${pad(d.year, 4)}-${pad(d.month, 2)}-${pad(d.day, 2)}`;
|
|
113
|
+
/** The calendar day after `d` (proleptic Gregorian). */
|
|
114
|
+
function nextDay(d) {
|
|
115
|
+
const ms = (0, instant_js_1.utcWallMs)(d.year, d.month, d.day, 0, 0, 0) + 86_400_000;
|
|
116
|
+
const t = new Date(ms);
|
|
117
|
+
return { year: t.getUTCFullYear(), month: t.getUTCMonth() + 1, day: t.getUTCDate() };
|
|
118
|
+
}
|
|
119
|
+
/** The calendar day before `d`. */
|
|
120
|
+
function previousDay(d) {
|
|
121
|
+
const ms = (0, instant_js_1.utcWallMs)(d.year, d.month, d.day, 0, 0, 0) - 86_400_000;
|
|
122
|
+
const t = new Date(ms);
|
|
123
|
+
return { year: t.getUTCFullYear(), month: t.getUTCMonth() + 1, day: t.getUTCDate() };
|
|
124
|
+
}
|
|
125
|
+
/** The one instant a wall time names in `zone` — `undefined` in a doubled or skipped hour. */
|
|
126
|
+
function uniqueInstant(wall, zone) {
|
|
127
|
+
const reading = (0, zone_js_1.readWall)(wall, zone);
|
|
128
|
+
return reading.kind === 'unique' ? reading.ms : undefined;
|
|
129
|
+
}
|
|
130
|
+
/** The first instant of a calendar day in `zone`, when exactly one instant is it. */
|
|
131
|
+
const midnightOf = (d, zone) => uniqueInstant({ ...d, hour: 0, minute: 0 }, zone);
|
|
132
|
+
/** An instant a range bound names, exactly to the millisecond — `undefined` for a sub-millisecond one. */
|
|
133
|
+
function msOf(text) {
|
|
134
|
+
const at = (0, instant_js_1.instantOf)(text, 'strict');
|
|
135
|
+
if (at === undefined || at.nanos !== 0)
|
|
136
|
+
return undefined;
|
|
137
|
+
return { ms: at.ms, offsetMinutes: at.offsetMinutes };
|
|
138
|
+
}
|
|
139
|
+
/** The zone a wall or date form is written in: its zone argument's (the window's), else the app's under `wallZone`. */
|
|
140
|
+
function formZone(form, ctx) {
|
|
141
|
+
return 'zone' in form && form.zone !== undefined ? ctx.zone : ctx.appZone;
|
|
142
|
+
}
|
|
143
|
+
/** One bound written in `as`: the value, and whether writing it moved the instant (epoch seconds, outward). */
|
|
144
|
+
function writeBound(at, which, as, edge, zone) {
|
|
145
|
+
switch (as) {
|
|
146
|
+
case 'iso': {
|
|
147
|
+
const step = at.ms % 1000 === 0 ? 1_000 : 1;
|
|
148
|
+
const ms = which === 'to' && edge === 'inclusive' ? at.ms - step : at.ms;
|
|
149
|
+
const text = (0, instant_js_1.spellInstant)({ ms, nanos: 0 }, at.offsetMinutes);
|
|
150
|
+
return text === undefined ? undefined : { value: text, rounded: false };
|
|
151
|
+
}
|
|
152
|
+
case 'epoch-ms':
|
|
153
|
+
return { value: which === 'to' && edge === 'inclusive' ? at.ms - 1 : at.ms, rounded: false };
|
|
154
|
+
case 'epoch-s': {
|
|
155
|
+
const whole = which === 'from' ? Math.floor(at.ms / 1000) * 1000 : Math.ceil(at.ms / 1000) * 1000;
|
|
156
|
+
const seconds = whole / 1000 - (which === 'to' && edge === 'inclusive' ? 1 : 0);
|
|
157
|
+
return { value: seconds, rounded: whole !== at.ms };
|
|
158
|
+
}
|
|
159
|
+
case 'wall': {
|
|
160
|
+
if (zone === undefined)
|
|
161
|
+
return undefined;
|
|
162
|
+
const step = at.ms % 1000 === 0 ? 1_000 : 1;
|
|
163
|
+
const ms = which === 'to' && edge === 'inclusive' ? at.ms - step : at.ms;
|
|
164
|
+
const wall = (0, zone_js_1.wallAt)(zone, ms);
|
|
165
|
+
// Exact only when the tool reads the wall time back as this instant.
|
|
166
|
+
if (uniqueInstant(wall, zone) !== ms)
|
|
167
|
+
return undefined;
|
|
168
|
+
return { value: spellWall(wall, step === 1), rounded: false };
|
|
169
|
+
}
|
|
170
|
+
case 'date': {
|
|
171
|
+
if (zone === undefined)
|
|
172
|
+
return undefined;
|
|
173
|
+
const wall = (0, zone_js_1.wallAt)(zone, at.ms);
|
|
174
|
+
const date = { year: wall.year, month: wall.month, day: wall.day };
|
|
175
|
+
if (midnightOf(date, zone) !== at.ms)
|
|
176
|
+
return undefined;
|
|
177
|
+
const day = which === 'to' && edge === 'inclusive' ? previousDay(date) : date;
|
|
178
|
+
return { value: spellDate(day), rounded: false };
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/** The range a form's bounds hold, for a window: a look-back's is `[now − L, now)`. */
|
|
183
|
+
function absoluteOf(window, now) {
|
|
184
|
+
if (window.lookback !== undefined) {
|
|
185
|
+
const n = msOf(now);
|
|
186
|
+
const length = (0, duration_js_1.durationMs)(window.lookback, duration_js_1.AXIS_UNITS);
|
|
187
|
+
if (n === undefined || length === undefined)
|
|
188
|
+
return undefined;
|
|
189
|
+
return [
|
|
190
|
+
{ ms: n.ms - length, offsetMinutes: n.offsetMinutes },
|
|
191
|
+
{ ms: n.ms, offsetMinutes: n.offsetMinutes },
|
|
192
|
+
];
|
|
193
|
+
}
|
|
194
|
+
const from = msOf(window.range.from);
|
|
195
|
+
const to = msOf(window.range.to);
|
|
196
|
+
return from === undefined || to === undefined || from.ms >= to.ms ? undefined : [from, to];
|
|
197
|
+
}
|
|
198
|
+
function lookbackInto(window, form, ctx) {
|
|
199
|
+
const units = form.units ?? duration_js_1.LOOKBACK_UNITS;
|
|
200
|
+
const sign = form.signed ? '-' : '';
|
|
201
|
+
if (window.lookback !== undefined) {
|
|
202
|
+
const ms = (0, duration_js_1.durationMs)(window.lookback, duration_js_1.AXIS_UNITS);
|
|
203
|
+
const spelled = ms === undefined ? undefined : (0, duration_js_1.spellDuration)(ms, units);
|
|
204
|
+
return spelled === undefined ? undefined : { value: `${sign}${spelled}`, rounded: false };
|
|
205
|
+
}
|
|
206
|
+
// A range ending at now (within the tool's step): the smallest spelling that covers `from`.
|
|
207
|
+
const now = msOf(ctx.now);
|
|
208
|
+
const from = msOf(window.range.from);
|
|
209
|
+
const to = msOf(window.range.to);
|
|
210
|
+
if (now === undefined || from === undefined || to === undefined)
|
|
211
|
+
return undefined;
|
|
212
|
+
if (Math.abs(to.ms - now.ms) > ctx.granularityMs)
|
|
213
|
+
return undefined;
|
|
214
|
+
const need = now.ms - from.ms;
|
|
215
|
+
if (need <= 0)
|
|
216
|
+
return undefined;
|
|
217
|
+
const finest = finestUnitMs(units);
|
|
218
|
+
const length = Math.ceil(need / finest) * finest;
|
|
219
|
+
const spelled = (0, duration_js_1.spellDuration)(length, units);
|
|
220
|
+
// Rounded when the length grew, or the end moved to now (a look-back ends at now, both ends inside).
|
|
221
|
+
const endMoved = to.ms !== now.ms && to.ms !== now.ms + 1;
|
|
222
|
+
return spelled === undefined
|
|
223
|
+
? undefined
|
|
224
|
+
: { value: `${sign}${spelled}`, rounded: length !== need || endMoved };
|
|
225
|
+
}
|
|
226
|
+
const UNIT_MS = {
|
|
227
|
+
s: 1_000,
|
|
228
|
+
m: 60_000,
|
|
229
|
+
h: 3_600_000,
|
|
230
|
+
d: 86_400_000,
|
|
231
|
+
w: 604_800_000,
|
|
232
|
+
};
|
|
233
|
+
function finestUnitMs(units) {
|
|
234
|
+
return Math.min(...[...units].map((u) => UNIT_MS[u]));
|
|
235
|
+
}
|
|
236
|
+
/** One form's exact values for a window, or `undefined` when the form does not hold it exactly. */
|
|
237
|
+
function convertOne(window, form, ctx) {
|
|
238
|
+
if (form.kind === 'lookback') {
|
|
239
|
+
const sent = lookbackInto(window, form, ctx);
|
|
240
|
+
return sent === undefined
|
|
241
|
+
? undefined
|
|
242
|
+
: { values: { [form.argument]: sent.value }, rounded: sent.rounded };
|
|
243
|
+
}
|
|
244
|
+
const zone = formZone(form, ctx);
|
|
245
|
+
if ((0, periodForm_js_1.needsZone)(form) && zone === undefined)
|
|
246
|
+
return undefined;
|
|
247
|
+
const zoneValue = 'zone' in form && form.zone !== undefined ? { [form.zone.argument]: ctx.zone } : {};
|
|
248
|
+
const span = absoluteOf(window, ctx.now);
|
|
249
|
+
if (span === undefined)
|
|
250
|
+
return undefined;
|
|
251
|
+
const [from, to] = span;
|
|
252
|
+
if (form.kind === 'day') {
|
|
253
|
+
const z = zone;
|
|
254
|
+
const wall = (0, zone_js_1.wallAt)(z, from.ms);
|
|
255
|
+
const date = { year: wall.year, month: wall.month, day: wall.day };
|
|
256
|
+
if (midnightOf(date, z) !== from.ms || midnightOf(nextDay(date), z) !== to.ms)
|
|
257
|
+
return undefined;
|
|
258
|
+
return { values: { [form.argument]: spellDate(date), ...zoneValue }, rounded: false };
|
|
259
|
+
}
|
|
260
|
+
const fromAs = form.kind === 'bounds' ? form.from.as : form.as;
|
|
261
|
+
const toAs = form.kind === 'bounds' ? form.to.as : form.as;
|
|
262
|
+
// `bounds` / `object` declare their edge (TQ18); only a `joined` form (the sugar's) defaults.
|
|
263
|
+
const edge = form.kind === 'joined'
|
|
264
|
+
? form.edge ?? 'inclusive'
|
|
265
|
+
: form.kind === 'bounds'
|
|
266
|
+
? form.to.edge
|
|
267
|
+
: form.edge;
|
|
268
|
+
const a = writeBound(from, 'from', fromAs, 'inclusive', zone);
|
|
269
|
+
const b = writeBound(to, 'to', toAs, edge, zone);
|
|
270
|
+
if (a === undefined || b === undefined)
|
|
271
|
+
return undefined;
|
|
272
|
+
const rounded = a.rounded || b.rounded;
|
|
273
|
+
switch (form.kind) {
|
|
274
|
+
case 'bounds':
|
|
275
|
+
return {
|
|
276
|
+
values: { [form.from.argument]: a.value, [form.to.argument]: b.value, ...zoneValue },
|
|
277
|
+
rounded,
|
|
278
|
+
};
|
|
279
|
+
case 'joined':
|
|
280
|
+
return {
|
|
281
|
+
values: { [form.argument]: `${a.value}${form.joiner}${b.value}`, ...zoneValue },
|
|
282
|
+
rounded,
|
|
283
|
+
};
|
|
284
|
+
case 'object':
|
|
285
|
+
return {
|
|
286
|
+
values: {
|
|
287
|
+
[form.argument]: { [form.keys.from]: a.value, [form.keys.to]: b.value },
|
|
288
|
+
...zoneValue,
|
|
289
|
+
},
|
|
290
|
+
rounded,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* The first form (in declared order) that holds `window` EXACTLY — the exact
|
|
296
|
+
* rows of § 7.2 — as the argument values to send, or `undefined` when no form
|
|
297
|
+
* does. A form that would widen, shift or drop part of the window is never
|
|
298
|
+
* chosen here.
|
|
299
|
+
*/
|
|
300
|
+
function convertExact(window, forms, ctx) {
|
|
301
|
+
for (let i = 0; i < forms.length; i++) {
|
|
302
|
+
const done = convertOne(window, forms[i], ctx);
|
|
303
|
+
if (done !== undefined) {
|
|
304
|
+
return { form: i, values: done.values, ...(done.rounded && { rounded: true }) };
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return undefined;
|
|
308
|
+
}
|
|
309
|
+
exports.convertExact = convertExact;
|
|
310
|
+
/** The parts of `[sentFrom, sentTo)` outside `[from, to)`, in time order. */
|
|
311
|
+
function extraOf(sentFrom, sentTo, from, to) {
|
|
312
|
+
const parts = [];
|
|
313
|
+
const before = from > sentFrom ? spanRange(sentFrom, from) : undefined;
|
|
314
|
+
const after = sentTo > to ? spanRange(to, sentTo) : undefined;
|
|
315
|
+
if (before !== undefined)
|
|
316
|
+
parts.push(before);
|
|
317
|
+
if (after !== undefined)
|
|
318
|
+
parts.push(after);
|
|
319
|
+
return parts;
|
|
320
|
+
}
|
|
321
|
+
/** The calendar date an instant falls on in `zone`. */
|
|
322
|
+
function dateAt(zone, ms) {
|
|
323
|
+
const wall = (0, zone_js_1.wallAt)(zone, ms);
|
|
324
|
+
return { year: wall.year, month: wall.month, day: wall.day };
|
|
325
|
+
}
|
|
326
|
+
/** A `day` form widened: the one calendar day that holds the whole window. */
|
|
327
|
+
function dayWidened(window, form, ctx) {
|
|
328
|
+
const zone = formZone(form, ctx);
|
|
329
|
+
const span = absoluteOf(window, ctx.now);
|
|
330
|
+
if (zone === undefined || span === undefined)
|
|
331
|
+
return undefined;
|
|
332
|
+
const [from, to] = span;
|
|
333
|
+
const date = dateAt(zone, from.ms);
|
|
334
|
+
if (spellDate(dateAt(zone, to.ms - 1)) !== spellDate(date))
|
|
335
|
+
return undefined;
|
|
336
|
+
const start = midnightOf(date, zone);
|
|
337
|
+
const end = midnightOf(nextDay(date), zone);
|
|
338
|
+
if (start === undefined || end === undefined)
|
|
339
|
+
return undefined;
|
|
340
|
+
const sent = spanRange(start, end);
|
|
341
|
+
if (sent === undefined)
|
|
342
|
+
return undefined;
|
|
343
|
+
const zoneValue = form.zone !== undefined ? { [form.zone.argument]: ctx.zone } : {};
|
|
344
|
+
return {
|
|
345
|
+
values: { [form.argument]: spellDate(date), ...zoneValue },
|
|
346
|
+
sent,
|
|
347
|
+
extra: extraOf(start, end, from.ms, to.ms),
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* A `lookback` form widened: a range that ENDS BEFORE now (past the tool's
|
|
352
|
+
* step) is covered by the look-back from now that reaches its `from` — the
|
|
353
|
+
* smallest length in the form's units. A range ending at now is the exact
|
|
354
|
+
* row's; one ending after it no look-back can hold.
|
|
355
|
+
*/
|
|
356
|
+
function lookbackWidened(window, form, ctx) {
|
|
357
|
+
if (window.lookback !== undefined)
|
|
358
|
+
return undefined;
|
|
359
|
+
const now = msOf(ctx.now);
|
|
360
|
+
const from = msOf(window.range.from);
|
|
361
|
+
const to = msOf(window.range.to);
|
|
362
|
+
if (now === undefined || from === undefined || to === undefined)
|
|
363
|
+
return undefined;
|
|
364
|
+
if (to.ms >= now.ms - ctx.granularityMs)
|
|
365
|
+
return undefined;
|
|
366
|
+
const units = form.units ?? duration_js_1.LOOKBACK_UNITS;
|
|
367
|
+
const finest = finestUnitMs(units);
|
|
368
|
+
const length = Math.ceil((now.ms - from.ms) / finest) * finest;
|
|
369
|
+
const spelled = (0, duration_js_1.spellDuration)(length, units);
|
|
370
|
+
if (spelled === undefined)
|
|
371
|
+
return undefined;
|
|
372
|
+
// The look-back reads `[now − L, now]`, both ends inside (`range.ts` · `lookbackRange`).
|
|
373
|
+
const sent = (0, range_js_1.lookbackRange)(ctx.now, spelled, units);
|
|
374
|
+
const sentTo = msOf(sent.to).ms;
|
|
375
|
+
return {
|
|
376
|
+
values: { [form.argument]: `${form.signed ? '-' : ''}${spelled}` },
|
|
377
|
+
sent,
|
|
378
|
+
extra: extraOf(now.ms - length, sentTo, from.ms, to.ms),
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* The first form (in declared order) that holds `window` by READING MORE than
|
|
383
|
+
* it — the inexact rows of § 7.2: a range inside one calendar day → that day
|
|
384
|
+
* (`day`); a range ending before now → the covering look-back from now
|
|
385
|
+
* (`lookback`). `widestMs` (the tool's `maxRange`) skips a form whose read
|
|
386
|
+
* would be wider than the tool reads at once. Asked only after
|
|
387
|
+
* {@link convertExact} found no exact form.
|
|
388
|
+
*/
|
|
389
|
+
function convertWidened(window, forms, ctx, widestMs) {
|
|
390
|
+
for (let i = 0; i < forms.length; i++) {
|
|
391
|
+
const form = forms[i];
|
|
392
|
+
const done = form.kind === 'day'
|
|
393
|
+
? dayWidened(window, form, ctx)
|
|
394
|
+
: form.kind === 'lookback'
|
|
395
|
+
? lookbackWidened(window, form, ctx)
|
|
396
|
+
: undefined;
|
|
397
|
+
if (done === undefined || done.extra.length === 0)
|
|
398
|
+
continue;
|
|
399
|
+
const sentFrom = msOf(done.sent.from);
|
|
400
|
+
const sentTo = msOf(done.sent.to);
|
|
401
|
+
if (widestMs !== undefined && sentTo.ms - sentFrom.ms > widestMs)
|
|
402
|
+
continue;
|
|
403
|
+
return { form: i, ...done };
|
|
404
|
+
}
|
|
405
|
+
return undefined;
|
|
406
|
+
}
|
|
407
|
+
exports.convertWidened = convertWidened;
|
|
408
|
+
/**
|
|
409
|
+
* Whether every form is a `day` and the window spans more than one calendar
|
|
410
|
+
* day in the form's zone — the row § 7.2 refuses before dispatch: one call per
|
|
411
|
+
* day is the model's choice, not the library's.
|
|
412
|
+
*/
|
|
413
|
+
function spansDaysForDayOnly(window, forms, ctx) {
|
|
414
|
+
if (forms.length === 0 || !forms.every((f) => f.kind === 'day'))
|
|
415
|
+
return false;
|
|
416
|
+
const span = absoluteOf(window, ctx.now);
|
|
417
|
+
if (span === undefined)
|
|
418
|
+
return false;
|
|
419
|
+
return forms.every((f) => {
|
|
420
|
+
const zone = formZone(f, ctx);
|
|
421
|
+
if (zone === undefined)
|
|
422
|
+
return false;
|
|
423
|
+
return spellDate(dateAt(zone, span[0].ms)) !== spellDate(dateAt(zone, span[1].ms - 1));
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
exports.spansDaysForDayOnly = spansDaysForDayOnly;
|
|
427
|
+
/**
|
|
428
|
+
* The first argument of `form` whose sent value is a wall time the zone
|
|
429
|
+
* SKIPS (a spring-forward gap) — the tool would read a time that never
|
|
430
|
+
* happened; refused before dispatch (§ 7.2). `undefined` when the form reads
|
|
431
|
+
* no wall bound, the zone is unknown, or every wall value exists.
|
|
432
|
+
*/
|
|
433
|
+
function wallGapArgument(args, form, ctx) {
|
|
434
|
+
if (form.kind === 'day' || form.kind === 'lookback')
|
|
435
|
+
return undefined;
|
|
436
|
+
const sentZone = 'zone' in form && form.zone !== undefined ? args[form.zone.argument] : undefined;
|
|
437
|
+
const zone = formZone(form, {
|
|
438
|
+
zone: (0, zone_js_1.isZoneName)(sentZone) ? sentZone : undefined,
|
|
439
|
+
...(ctx.appZone !== undefined && { appZone: ctx.appZone }),
|
|
440
|
+
});
|
|
441
|
+
if (zone === undefined)
|
|
442
|
+
return undefined;
|
|
443
|
+
const inGap = (value) => {
|
|
444
|
+
const read = (0, periodForm_js_1.wallOf)(value);
|
|
445
|
+
return read !== undefined && (0, zone_js_1.readWall)(read.wall, zone).kind === 'gap';
|
|
446
|
+
};
|
|
447
|
+
if (form.kind === 'bounds') {
|
|
448
|
+
for (const bound of [form.from, form.to]) {
|
|
449
|
+
if (bound.as === 'wall' && inGap(args[bound.argument]))
|
|
450
|
+
return bound.argument;
|
|
451
|
+
}
|
|
452
|
+
return undefined;
|
|
453
|
+
}
|
|
454
|
+
if (form.as !== 'wall')
|
|
455
|
+
return undefined;
|
|
456
|
+
const value = args[form.argument];
|
|
457
|
+
if (form.kind === 'joined') {
|
|
458
|
+
if (typeof value !== 'string')
|
|
459
|
+
return undefined;
|
|
460
|
+
return value.split(form.joiner).some(inGap) ? form.argument : undefined;
|
|
461
|
+
}
|
|
462
|
+
if (!(0, periodForm_js_1.isPlain)(value))
|
|
463
|
+
return undefined;
|
|
464
|
+
return inGap(value[form.keys.from]) || inGap(value[form.keys.to]) ? form.argument : undefined;
|
|
465
|
+
}
|
|
466
|
+
exports.wallGapArgument = wallGapArgument;
|
|
467
|
+
// ─── Reading a sent value back ───────────────────────────────────────────
|
|
468
|
+
/** A bound read back: the instant it names as a half-open end, in milliseconds. */
|
|
469
|
+
function readBound(value, which, as, edge, zone) {
|
|
470
|
+
const inclusiveTo = which === 'to' && edge === 'inclusive';
|
|
471
|
+
switch (as) {
|
|
472
|
+
case 'iso': {
|
|
473
|
+
const at = (0, instant_js_1.instantOf)(value, 'strict');
|
|
474
|
+
if (at === undefined || at.nanos !== 0)
|
|
475
|
+
return undefined;
|
|
476
|
+
const step = at.precision === 'minute' ? 60_000 : at.precision === 'second' ? 1_000 : 1;
|
|
477
|
+
return inclusiveTo ? at.ms + step : at.ms;
|
|
478
|
+
}
|
|
479
|
+
case 'epoch-ms':
|
|
480
|
+
if (typeof value !== 'number' || !Number.isSafeInteger(value))
|
|
481
|
+
return undefined;
|
|
482
|
+
return inclusiveTo ? value + 1 : value;
|
|
483
|
+
case 'epoch-s':
|
|
484
|
+
if (typeof value !== 'number' || !Number.isSafeInteger(value))
|
|
485
|
+
return undefined;
|
|
486
|
+
return (inclusiveTo ? value + 1 : value) * 1000;
|
|
487
|
+
case 'wall': {
|
|
488
|
+
if (zone === undefined)
|
|
489
|
+
return undefined;
|
|
490
|
+
const read = (0, periodForm_js_1.wallOf)(value);
|
|
491
|
+
if (read === undefined)
|
|
492
|
+
return undefined;
|
|
493
|
+
const ms = uniqueInstant(read.wall, zone);
|
|
494
|
+
return ms === undefined ? undefined : inclusiveTo ? ms + read.stepMs : ms;
|
|
495
|
+
}
|
|
496
|
+
case 'date': {
|
|
497
|
+
if (zone === undefined)
|
|
498
|
+
return undefined;
|
|
499
|
+
const date = (0, periodForm_js_1.dateOf)(value);
|
|
500
|
+
if (date === undefined)
|
|
501
|
+
return undefined;
|
|
502
|
+
return midnightOf(inclusiveTo ? nextDay(date) : date, zone);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
const epochOrText = (as, text) => as === 'epoch-ms' || as === 'epoch-s' ? (0, periodForm_js_1.epochFromText)(text) : text;
|
|
507
|
+
function spanRange(fromMs, toMs) {
|
|
508
|
+
if (!(fromMs < toMs))
|
|
509
|
+
return undefined;
|
|
510
|
+
const from = (0, instant_js_1.spellInstant)({ ms: fromMs, nanos: 0 }, 0);
|
|
511
|
+
const to = (0, instant_js_1.spellInstant)({ ms: toMs, nanos: 0 }, 0);
|
|
512
|
+
return from === undefined || to === undefined ? undefined : { from, to };
|
|
513
|
+
}
|
|
514
|
+
/**
|
|
515
|
+
* The half-open range the arguments of `form` name — the § 3.3 conversion back
|
|
516
|
+
* from each bound — or `undefined` when they do not name one (missing,
|
|
517
|
+
* misspelled, a wall time the zone doubles or skips, `from` not before `to`).
|
|
518
|
+
* A look-back is read at the turn's clock (`lookbackRange`). The range is
|
|
519
|
+
* spelled in UTC: compare it as instants ({@link sameRange}).
|
|
520
|
+
*/
|
|
521
|
+
function readBack(args, form, ctx) {
|
|
522
|
+
if (form.kind === 'lookback') {
|
|
523
|
+
const value = args[form.argument];
|
|
524
|
+
if (typeof value !== 'string')
|
|
525
|
+
return undefined;
|
|
526
|
+
const units = form.units ?? duration_js_1.LOOKBACK_UNITS;
|
|
527
|
+
if (form.signed && !value.startsWith('-'))
|
|
528
|
+
return undefined;
|
|
529
|
+
const length = form.signed ? value.slice(1) : value;
|
|
530
|
+
if (!(0, duration_js_1.isDuration)(length, units) || (0, duration_js_1.durationMs)(length, units) === undefined)
|
|
531
|
+
return undefined;
|
|
532
|
+
return (0, range_js_1.lookbackRange)(ctx.now, length, units);
|
|
533
|
+
}
|
|
534
|
+
const sentZone = 'zone' in form && form.zone !== undefined ? args[form.zone.argument] : undefined;
|
|
535
|
+
if ('zone' in form && form.zone !== undefined && !(0, zone_js_1.isZoneName)(sentZone)) {
|
|
536
|
+
if ((0, periodForm_js_1.needsZone)(form))
|
|
537
|
+
return undefined;
|
|
538
|
+
}
|
|
539
|
+
const zone = formZone(form, {
|
|
540
|
+
zone: (0, zone_js_1.isZoneName)(sentZone) ? sentZone : undefined,
|
|
541
|
+
appZone: ctx.appZone,
|
|
542
|
+
});
|
|
543
|
+
if (form.kind === 'day') {
|
|
544
|
+
if (zone === undefined)
|
|
545
|
+
return undefined;
|
|
546
|
+
const date = (0, periodForm_js_1.dateOf)(args[form.argument]);
|
|
547
|
+
if (date === undefined)
|
|
548
|
+
return undefined;
|
|
549
|
+
const from = midnightOf(date, zone);
|
|
550
|
+
const to = midnightOf(nextDay(date), zone);
|
|
551
|
+
return from === undefined || to === undefined ? undefined : spanRange(from, to);
|
|
552
|
+
}
|
|
553
|
+
let fromValue;
|
|
554
|
+
let toValue;
|
|
555
|
+
let fromAs;
|
|
556
|
+
let toAs;
|
|
557
|
+
let edge;
|
|
558
|
+
if (form.kind === 'bounds') {
|
|
559
|
+
fromValue = args[form.from.argument];
|
|
560
|
+
toValue = args[form.to.argument];
|
|
561
|
+
fromAs = form.from.as;
|
|
562
|
+
toAs = form.to.as;
|
|
563
|
+
edge = form.to.edge;
|
|
564
|
+
}
|
|
565
|
+
else if (form.kind === 'joined') {
|
|
566
|
+
const text = args[form.argument];
|
|
567
|
+
if (typeof text !== 'string')
|
|
568
|
+
return undefined;
|
|
569
|
+
const halves = text.split(form.joiner);
|
|
570
|
+
if (halves.length !== 2)
|
|
571
|
+
return undefined;
|
|
572
|
+
fromValue = epochOrText(form.as, halves[0]);
|
|
573
|
+
toValue = epochOrText(form.as, halves[1]);
|
|
574
|
+
fromAs = toAs = form.as;
|
|
575
|
+
edge = form.edge ?? 'inclusive';
|
|
576
|
+
}
|
|
577
|
+
else {
|
|
578
|
+
const object = args[form.argument];
|
|
579
|
+
if (!(0, periodForm_js_1.isPlain)(object))
|
|
580
|
+
return undefined;
|
|
581
|
+
fromValue = object[form.keys.from];
|
|
582
|
+
toValue = object[form.keys.to];
|
|
583
|
+
fromAs = toAs = form.as;
|
|
584
|
+
edge = form.edge;
|
|
585
|
+
}
|
|
586
|
+
const from = readBound(fromValue, 'from', fromAs, 'inclusive', zone);
|
|
587
|
+
const to = readBound(toValue, 'to', toAs, edge, zone);
|
|
588
|
+
return from === undefined || to === undefined ? undefined : spanRange(from, to);
|
|
589
|
+
}
|
|
590
|
+
exports.readBack = readBack;
|
|
591
|
+
/**
|
|
592
|
+
* The absolute range a look-back window was sent as to a bounds form —
|
|
593
|
+
* `[now − L, now)`, which reads back one millisecond shorter than the
|
|
594
|
+
* look-back's own `[now − L, now]` — so a binding recognises either.
|
|
595
|
+
*/
|
|
596
|
+
function lookbackAsBounds(now, lookback) {
|
|
597
|
+
const n = msOf(now);
|
|
598
|
+
const length = (0, duration_js_1.durationMs)(lookback, duration_js_1.AXIS_UNITS);
|
|
599
|
+
if (n === undefined || length === undefined)
|
|
600
|
+
return undefined;
|
|
601
|
+
return spanRange(n.ms - length, n.ms);
|
|
602
|
+
}
|
|
603
|
+
exports.lookbackAsBounds = lookbackAsBounds;
|
|
604
|
+
/** The tool's step in milliseconds — its `granularity`, else one minute (§ 7.4). */
|
|
605
|
+
function granularityMsOf(facts) {
|
|
606
|
+
const ms = facts?.granularity === undefined ? undefined : (0, duration_js_1.durationMs)(facts.granularity, periodForm_js_1.FACT_UNITS);
|
|
607
|
+
return ms ?? periodForm_js_1.DEFAULT_GRANULARITY_MS;
|
|
608
|
+
}
|
|
609
|
+
exports.granularityMsOf = granularityMsOf;
|
|
610
|
+
// ─── The tool's facts against a range (the checks live in periodForm.ts) ──
|
|
611
|
+
/**
|
|
612
|
+
* Whether a half-open range is PARTLY older than what the source keeps — it
|
|
613
|
+
* starts before `now − retention` and ends after it. It dispatches as asked
|
|
614
|
+
* (§ 7.2); the result's `held` decides `partly-held`. `false` when the tool
|
|
615
|
+
* declares no `retention`.
|
|
616
|
+
*/
|
|
617
|
+
function partlyBeyondRetention(range, facts, now) {
|
|
618
|
+
const retention = facts.retention === undefined ? undefined : (0, duration_js_1.durationMs)(facts.retention, periodForm_js_1.FACT_UNITS);
|
|
619
|
+
const from = (0, instant_js_1.instantOf)(range.from, 'strict');
|
|
620
|
+
const to = (0, instant_js_1.instantOf)(range.to, 'strict');
|
|
621
|
+
const at = (0, instant_js_1.instantOf)(now, 'strict');
|
|
622
|
+
if (retention === undefined || from === undefined || to === undefined || at === undefined) {
|
|
623
|
+
return false;
|
|
624
|
+
}
|
|
625
|
+
const oldest = at.ms - retention;
|
|
626
|
+
return from.ms < oldest && to.ms > oldest;
|
|
627
|
+
}
|
|
628
|
+
exports.partlyBeyondRetention = partlyBeyondRetention;
|
|
629
|
+
/** The widest window the tool reads at once (`maxRange`) in milliseconds, when it declares one. */
|
|
630
|
+
function widestMsOf(facts) {
|
|
631
|
+
return facts?.maxRange === undefined ? undefined : (0, duration_js_1.durationMs)(facts.maxRange, periodForm_js_1.FACT_UNITS);
|
|
632
|
+
}
|
|
633
|
+
exports.widestMsOf = widestMsOf;
|
|
634
|
+
//# sourceMappingURL=convert.js.map
|