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.
Files changed (603) hide show
  1. package/CAPABILITIES.md +13 -1
  2. package/dist/adapters/llm/AnthropicProvider.js +10 -111
  3. package/dist/adapters/llm/AnthropicProvider.js.map +1 -1
  4. package/dist/adapters/llm/BedrockProvider.js +11 -4
  5. package/dist/adapters/llm/BedrockProvider.js.map +1 -1
  6. package/dist/adapters/llm/InvokeModelGatewayProvider.js +167 -35
  7. package/dist/adapters/llm/InvokeModelGatewayProvider.js.map +1 -1
  8. package/dist/adapters/llm/OpenAIProvider.js +5 -0
  9. package/dist/adapters/llm/OpenAIProvider.js.map +1 -1
  10. package/dist/adapters/llm/anthropicMessagesWire.js +20 -6
  11. package/dist/adapters/llm/anthropicMessagesWire.js.map +1 -1
  12. package/dist/adapters/llm/retryAfter.js +61 -0
  13. package/dist/adapters/llm/retryAfter.js.map +1 -0
  14. package/dist/adapters/types.js.map +1 -1
  15. package/dist/artifacts/datasetResult.js +2 -2
  16. package/dist/artifacts/datasetResult.js.map +1 -1
  17. package/dist/artifacts/index.js +10 -8
  18. package/dist/artifacts/index.js.map +1 -1
  19. package/dist/artifacts/minting.js +2 -2
  20. package/dist/artifacts/minting.js.map +1 -1
  21. package/dist/core/Agent.js +229 -5
  22. package/dist/core/Agent.js.map +1 -1
  23. package/dist/core/agent/AgentBuilder.js +75 -1
  24. package/dist/core/agent/AgentBuilder.js.map +1 -1
  25. package/dist/core/agent/arguments/ask.js +356 -14
  26. package/dist/core/agent/arguments/ask.js.map +1 -1
  27. package/dist/core/agent/arguments/declare.js +260 -45
  28. package/dist/core/agent/arguments/declare.js.map +1 -1
  29. package/dist/core/agent/arguments/dispatch.js +25 -1
  30. package/dist/core/agent/arguments/dispatch.js.map +1 -1
  31. package/dist/core/agent/arguments/resolve.js +239 -6
  32. package/dist/core/agent/arguments/resolve.js.map +1 -1
  33. package/dist/core/agent/arguments/rows.js +37 -2
  34. package/dist/core/agent/arguments/rows.js.map +1 -1
  35. package/dist/core/agent/arguments/serve.js +332 -4
  36. package/dist/core/agent/arguments/serve.js.map +1 -1
  37. package/dist/core/agent/arguments/subflow.js +46 -7
  38. package/dist/core/agent/arguments/subflow.js.map +1 -1
  39. package/dist/core/agent/assessment/assess.js +45 -6
  40. package/dist/core/agent/assessment/assess.js.map +1 -1
  41. package/dist/core/agent/assessment/compose.js +3 -0
  42. package/dist/core/agent/assessment/compose.js.map +1 -1
  43. package/dist/core/agent/assessment/reasons.js +18 -0
  44. package/dist/core/agent/assessment/reasons.js.map +1 -1
  45. package/dist/core/agent/buildAgentChart.js +31 -1
  46. package/dist/core/agent/buildAgentChart.js.map +1 -1
  47. package/dist/core/agent/buildDynamicAgentChart.js +9 -0
  48. package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
  49. package/dist/core/agent/coverage/answer.js +24 -7
  50. package/dist/core/agent/coverage/answer.js.map +1 -1
  51. package/dist/core/agent/coverage/period.js +110 -69
  52. package/dist/core/agent/coverage/period.js.map +1 -1
  53. package/dist/core/agent/coverage/timeLimitFacts.js +70 -0
  54. package/dist/core/agent/coverage/timeLimitFacts.js.map +1 -0
  55. package/dist/core/agent/coverage/timeLimits.js +72 -0
  56. package/dist/core/agent/coverage/timeLimits.js.map +1 -0
  57. package/dist/core/agent/evidence/evidenceIndex.js +48 -7
  58. package/dist/core/agent/evidence/evidenceIndex.js.map +1 -1
  59. package/dist/core/agent/evidence/gate.js +9 -4
  60. package/dist/core/agent/evidence/gate.js.map +1 -1
  61. package/dist/core/agent/evidence/normalize.js +1 -105
  62. package/dist/core/agent/evidence/normalize.js.map +1 -1
  63. package/dist/core/agent/findings/ledger.js +14 -0
  64. package/dist/core/agent/findings/ledger.js.map +1 -1
  65. package/dist/core/agent/findings/types.js.map +1 -1
  66. package/dist/core/agent/honesty/mounts.js +105 -4
  67. package/dist/core/agent/honesty/mounts.js.map +1 -1
  68. package/dist/core/agent/results/subflow.js +43 -11
  69. package/dist/core/agent/results/subflow.js.map +1 -1
  70. package/dist/core/agent/stages/argumentAsk.js +85 -6
  71. package/dist/core/agent/stages/argumentAsk.js.map +1 -1
  72. package/dist/core/agent/stages/callLLM.js +16 -0
  73. package/dist/core/agent/stages/callLLM.js.map +1 -1
  74. package/dist/core/agent/stages/prepareFinal.js +61 -8
  75. package/dist/core/agent/stages/prepareFinal.js.map +1 -1
  76. package/dist/core/agent/stages/route.js +64 -6
  77. package/dist/core/agent/stages/route.js.map +1 -1
  78. package/dist/core/agent/stages/seed.js +29 -6
  79. package/dist/core/agent/stages/seed.js.map +1 -1
  80. package/dist/core/agent/stages/timeLayer.js +201 -0
  81. package/dist/core/agent/stages/timeLayer.js.map +1 -0
  82. package/dist/core/agent/stages/timeLineage.js +61 -0
  83. package/dist/core/agent/stages/timeLineage.js.map +1 -0
  84. package/dist/core/agent/stages/toolCalls.js +70 -0
  85. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  86. package/dist/core/inputRequest.js +132 -5
  87. package/dist/core/inputRequest.js.map +1 -1
  88. package/dist/core/messageFrom.js +5 -2
  89. package/dist/core/messageFrom.js.map +1 -1
  90. package/dist/core/runCheckpoint.js +17 -2
  91. package/dist/core/runCheckpoint.js.map +1 -1
  92. package/dist/core/slots/buildToolsSlot.js +30 -2
  93. package/dist/core/slots/buildToolsSlot.js.map +1 -1
  94. package/dist/core/time/ask.js +239 -0
  95. package/dist/core/time/ask.js.map +1 -0
  96. package/dist/core/time/axis.js +469 -0
  97. package/dist/core/time/axis.js.map +1 -0
  98. package/dist/core/time/bind.js +235 -0
  99. package/dist/core/time/bind.js.map +1 -0
  100. package/dist/core/time/check.js +261 -0
  101. package/dist/core/time/check.js.map +1 -0
  102. package/dist/core/time/checkRecord.js +97 -0
  103. package/dist/core/time/checkRecord.js.map +1 -0
  104. package/dist/core/time/clock.js +260 -0
  105. package/dist/core/time/clock.js.map +1 -0
  106. package/dist/core/time/convert.js +634 -0
  107. package/dist/core/time/convert.js.map +1 -0
  108. package/dist/core/time/drift.js +96 -0
  109. package/dist/core/time/drift.js.map +1 -0
  110. package/dist/core/time/duration.js +125 -0
  111. package/dist/core/time/duration.js.map +1 -0
  112. package/dist/core/time/forms.js +273 -0
  113. package/dist/core/time/forms.js.map +1 -0
  114. package/dist/core/time/instant.js +141 -0
  115. package/dist/core/time/instant.js.map +1 -0
  116. package/dist/core/time/periodForm.js +392 -0
  117. package/dist/core/time/periodForm.js.map +1 -0
  118. package/dist/core/time/present.js +312 -0
  119. package/dist/core/time/present.js.map +1 -0
  120. package/dist/core/time/range.js +267 -0
  121. package/dist/core/time/range.js.map +1 -0
  122. package/dist/core/time/reader.js +209 -0
  123. package/dist/core/time/reader.js.map +1 -0
  124. package/dist/core/time/readers/english.js +576 -0
  125. package/dist/core/time/readers/english.js.map +1 -0
  126. package/dist/core/time/readingAsk.js +94 -0
  127. package/dist/core/time/readingAsk.js.map +1 -0
  128. package/dist/core/time/resolve.js +694 -0
  129. package/dist/core/time/resolve.js.map +1 -0
  130. package/dist/core/time/resolveRecord.js +164 -0
  131. package/dist/core/time/resolveRecord.js.map +1 -0
  132. package/dist/core/time/rows.js +412 -0
  133. package/dist/core/time/rows.js.map +1 -0
  134. package/dist/core/time/rowsBuild.js +193 -0
  135. package/dist/core/time/rowsBuild.js.map +1 -0
  136. package/dist/core/time/textForms.js +133 -0
  137. package/dist/core/time/textForms.js.map +1 -0
  138. package/dist/core/time/windows.js +172 -0
  139. package/dist/core/time/windows.js.map +1 -0
  140. package/dist/core/time/wire.js +86 -0
  141. package/dist/core/time/wire.js.map +1 -0
  142. package/dist/core/time/zone.js +253 -0
  143. package/dist/core/time/zone.js.map +1 -0
  144. package/dist/core/tools.js.map +1 -1
  145. package/dist/esm/adapters/llm/AnthropicProvider.js +8 -109
  146. package/dist/esm/adapters/llm/AnthropicProvider.js.map +1 -1
  147. package/dist/esm/adapters/llm/BedrockProvider.js +11 -4
  148. package/dist/esm/adapters/llm/BedrockProvider.js.map +1 -1
  149. package/dist/esm/adapters/llm/InvokeModelGatewayProvider.d.ts +38 -4
  150. package/dist/esm/adapters/llm/InvokeModelGatewayProvider.js +167 -35
  151. package/dist/esm/adapters/llm/InvokeModelGatewayProvider.js.map +1 -1
  152. package/dist/esm/adapters/llm/OpenAIProvider.js +5 -0
  153. package/dist/esm/adapters/llm/OpenAIProvider.js.map +1 -1
  154. package/dist/esm/adapters/llm/anthropicMessagesWire.d.ts +6 -1
  155. package/dist/esm/adapters/llm/anthropicMessagesWire.js +20 -6
  156. package/dist/esm/adapters/llm/anthropicMessagesWire.js.map +1 -1
  157. package/dist/esm/adapters/llm/retryAfter.d.ts +27 -0
  158. package/dist/esm/adapters/llm/retryAfter.js +56 -0
  159. package/dist/esm/adapters/llm/retryAfter.js.map +1 -0
  160. package/dist/esm/adapters/types.d.ts +9 -0
  161. package/dist/esm/adapters/types.js.map +1 -1
  162. package/dist/esm/artifacts/datasetResult.js +1 -1
  163. package/dist/esm/artifacts/datasetResult.js.map +1 -1
  164. package/dist/esm/artifacts/index.d.ts +1 -1
  165. package/dist/esm/artifacts/index.js +3 -2
  166. package/dist/esm/artifacts/index.js.map +1 -1
  167. package/dist/esm/artifacts/minting.js +1 -1
  168. package/dist/esm/artifacts/minting.js.map +1 -1
  169. package/dist/esm/artifacts/types.d.ts +2 -2
  170. package/dist/esm/core/Agent.d.ts +64 -0
  171. package/dist/esm/core/Agent.js +230 -6
  172. package/dist/esm/core/Agent.js.map +1 -1
  173. package/dist/esm/core/agent/AgentBuilder.d.ts +60 -0
  174. package/dist/esm/core/agent/AgentBuilder.js +75 -1
  175. package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
  176. package/dist/esm/core/agent/arguments/ask.d.ts +88 -5
  177. package/dist/esm/core/agent/arguments/ask.js +349 -8
  178. package/dist/esm/core/agent/arguments/ask.js.map +1 -1
  179. package/dist/esm/core/agent/arguments/checks.d.ts +1 -1
  180. package/dist/esm/core/agent/arguments/declare.d.ts +76 -15
  181. package/dist/esm/core/agent/arguments/declare.js +255 -44
  182. package/dist/esm/core/agent/arguments/declare.js.map +1 -1
  183. package/dist/esm/core/agent/arguments/dispatch.js +25 -1
  184. package/dist/esm/core/agent/arguments/dispatch.js.map +1 -1
  185. package/dist/esm/core/agent/arguments/resolve.d.ts +77 -7
  186. package/dist/esm/core/agent/arguments/resolve.js +239 -8
  187. package/dist/esm/core/agent/arguments/resolve.js.map +1 -1
  188. package/dist/esm/core/agent/arguments/rows.d.ts +31 -2
  189. package/dist/esm/core/agent/arguments/rows.js +35 -1
  190. package/dist/esm/core/agent/arguments/rows.js.map +1 -1
  191. package/dist/esm/core/agent/arguments/serve.d.ts +133 -4
  192. package/dist/esm/core/agent/arguments/serve.js +328 -4
  193. package/dist/esm/core/agent/arguments/serve.js.map +1 -1
  194. package/dist/esm/core/agent/arguments/subflow.d.ts +28 -0
  195. package/dist/esm/core/agent/arguments/subflow.js +47 -8
  196. package/dist/esm/core/agent/arguments/subflow.js.map +1 -1
  197. package/dist/esm/core/agent/assessment/assess.js +45 -6
  198. package/dist/esm/core/agent/assessment/assess.js.map +1 -1
  199. package/dist/esm/core/agent/assessment/compose.js +3 -0
  200. package/dist/esm/core/agent/assessment/compose.js.map +1 -1
  201. package/dist/esm/core/agent/assessment/reasons.js +18 -0
  202. package/dist/esm/core/agent/assessment/reasons.js.map +1 -1
  203. package/dist/esm/core/agent/assessment/types.d.ts +15 -1
  204. package/dist/esm/core/agent/buildAgentChart.d.ts +41 -0
  205. package/dist/esm/core/agent/buildAgentChart.js +28 -0
  206. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  207. package/dist/esm/core/agent/buildDynamicAgentChart.d.ts +1 -1
  208. package/dist/esm/core/agent/buildDynamicAgentChart.js +9 -0
  209. package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
  210. package/dist/esm/core/agent/coverage/answer.d.ts +20 -1
  211. package/dist/esm/core/agent/coverage/answer.js +23 -6
  212. package/dist/esm/core/agent/coverage/answer.js.map +1 -1
  213. package/dist/esm/core/agent/coverage/period.d.ts +49 -3
  214. package/dist/esm/core/agent/coverage/period.js +107 -68
  215. package/dist/esm/core/agent/coverage/period.js.map +1 -1
  216. package/dist/esm/core/agent/coverage/timeLimitFacts.d.ts +56 -0
  217. package/dist/esm/core/agent/coverage/timeLimitFacts.js +65 -0
  218. package/dist/esm/core/agent/coverage/timeLimitFacts.js.map +1 -0
  219. package/dist/esm/core/agent/coverage/timeLimits.d.ts +46 -0
  220. package/dist/esm/core/agent/coverage/timeLimits.js +67 -0
  221. package/dist/esm/core/agent/coverage/timeLimits.js.map +1 -0
  222. package/dist/esm/core/agent/evidence/evidenceIndex.d.ts +25 -2
  223. package/dist/esm/core/agent/evidence/evidenceIndex.js +47 -7
  224. package/dist/esm/core/agent/evidence/evidenceIndex.js.map +1 -1
  225. package/dist/esm/core/agent/evidence/gate.d.ts +7 -0
  226. package/dist/esm/core/agent/evidence/gate.js +9 -4
  227. package/dist/esm/core/agent/evidence/gate.js.map +1 -1
  228. package/dist/esm/core/agent/evidence/normalize.d.ts +0 -34
  229. package/dist/esm/core/agent/evidence/normalize.js +0 -103
  230. package/dist/esm/core/agent/evidence/normalize.js.map +1 -1
  231. package/dist/esm/core/agent/evidence/types.d.ts +12 -1
  232. package/dist/esm/core/agent/findings/ledger.js +14 -0
  233. package/dist/esm/core/agent/findings/ledger.js.map +1 -1
  234. package/dist/esm/core/agent/findings/types.d.ts +2 -1
  235. package/dist/esm/core/agent/findings/types.js.map +1 -1
  236. package/dist/esm/core/agent/honesty/mounts.d.ts +25 -0
  237. package/dist/esm/core/agent/honesty/mounts.js +104 -4
  238. package/dist/esm/core/agent/honesty/mounts.js.map +1 -1
  239. package/dist/esm/core/agent/results/subflow.d.ts +34 -2
  240. package/dist/esm/core/agent/results/subflow.js +43 -11
  241. package/dist/esm/core/agent/results/subflow.js.map +1 -1
  242. package/dist/esm/core/agent/stages/argumentAsk.d.ts +19 -0
  243. package/dist/esm/core/agent/stages/argumentAsk.js +85 -6
  244. package/dist/esm/core/agent/stages/argumentAsk.js.map +1 -1
  245. package/dist/esm/core/agent/stages/callLLM.d.ts +6 -0
  246. package/dist/esm/core/agent/stages/callLLM.js +16 -0
  247. package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
  248. package/dist/esm/core/agent/stages/prepareFinal.d.ts +13 -1
  249. package/dist/esm/core/agent/stages/prepareFinal.js +59 -7
  250. package/dist/esm/core/agent/stages/prepareFinal.js.map +1 -1
  251. package/dist/esm/core/agent/stages/route.d.ts +29 -1
  252. package/dist/esm/core/agent/stages/route.js +64 -7
  253. package/dist/esm/core/agent/stages/route.js.map +1 -1
  254. package/dist/esm/core/agent/stages/seed.d.ts +23 -0
  255. package/dist/esm/core/agent/stages/seed.js +29 -6
  256. package/dist/esm/core/agent/stages/seed.js.map +1 -1
  257. package/dist/esm/core/agent/stages/timeLayer.d.ts +94 -0
  258. package/dist/esm/core/agent/stages/timeLayer.js +193 -0
  259. package/dist/esm/core/agent/stages/timeLayer.js.map +1 -0
  260. package/dist/esm/core/agent/stages/timeLineage.d.ts +31 -0
  261. package/dist/esm/core/agent/stages/timeLineage.js +57 -0
  262. package/dist/esm/core/agent/stages/timeLineage.js.map +1 -0
  263. package/dist/esm/core/agent/stages/toolCalls.d.ts +32 -0
  264. package/dist/esm/core/agent/stages/toolCalls.js +70 -0
  265. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  266. package/dist/esm/core/agent/types.d.ts +37 -0
  267. package/dist/esm/core/inputRequest.d.ts +50 -6
  268. package/dist/esm/core/inputRequest.js +132 -5
  269. package/dist/esm/core/inputRequest.js.map +1 -1
  270. package/dist/esm/core/messageFrom.d.ts +5 -2
  271. package/dist/esm/core/messageFrom.js +5 -2
  272. package/dist/esm/core/messageFrom.js.map +1 -1
  273. package/dist/esm/core/runCheckpoint.js +17 -2
  274. package/dist/esm/core/runCheckpoint.js.map +1 -1
  275. package/dist/esm/core/slots/buildToolsSlot.d.ts +29 -0
  276. package/dist/esm/core/slots/buildToolsSlot.js +30 -2
  277. package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
  278. package/dist/esm/core/time/ask.d.ts +126 -0
  279. package/dist/esm/core/time/ask.js +230 -0
  280. package/dist/esm/core/time/ask.js.map +1 -0
  281. package/dist/esm/core/time/axis.d.ts +224 -0
  282. package/dist/esm/core/time/axis.js +462 -0
  283. package/dist/esm/core/time/axis.js.map +1 -0
  284. package/dist/esm/core/time/bind.d.ts +143 -0
  285. package/dist/esm/core/time/bind.js +227 -0
  286. package/dist/esm/core/time/bind.js.map +1 -0
  287. package/dist/esm/core/time/check.d.ts +113 -0
  288. package/dist/esm/core/time/check.js +252 -0
  289. package/dist/esm/core/time/check.js.map +1 -0
  290. package/dist/esm/core/time/checkRecord.d.ts +74 -0
  291. package/dist/esm/core/time/checkRecord.js +90 -0
  292. package/dist/esm/core/time/checkRecord.js.map +1 -0
  293. package/dist/esm/core/time/clock.d.ts +183 -0
  294. package/dist/esm/core/time/clock.js +252 -0
  295. package/dist/esm/core/time/clock.js.map +1 -0
  296. package/dist/esm/core/time/convert.d.ts +178 -0
  297. package/dist/esm/core/time/convert.js +609 -0
  298. package/dist/esm/core/time/convert.js.map +1 -0
  299. package/dist/esm/core/time/drift.d.ts +85 -0
  300. package/dist/esm/core/time/drift.js +91 -0
  301. package/dist/esm/core/time/drift.js.map +1 -0
  302. package/dist/esm/core/time/duration.d.ts +71 -0
  303. package/dist/esm/core/time/duration.js +117 -0
  304. package/dist/esm/core/time/duration.js.map +1 -0
  305. package/dist/esm/core/time/forms.d.ts +84 -0
  306. package/dist/esm/core/time/forms.js +268 -0
  307. package/dist/esm/core/time/forms.js.map +1 -0
  308. package/dist/esm/core/time/instant.d.ts +75 -0
  309. package/dist/esm/core/time/instant.js +131 -0
  310. package/dist/esm/core/time/instant.js.map +1 -0
  311. package/dist/esm/core/time/periodForm.d.ts +184 -0
  312. package/dist/esm/core/time/periodForm.js +376 -0
  313. package/dist/esm/core/time/periodForm.js.map +1 -0
  314. package/dist/esm/core/time/present.d.ts +107 -0
  315. package/dist/esm/core/time/present.js +305 -0
  316. package/dist/esm/core/time/present.js.map +1 -0
  317. package/dist/esm/core/time/range.d.ts +127 -0
  318. package/dist/esm/core/time/range.js +249 -0
  319. package/dist/esm/core/time/range.js.map +1 -0
  320. package/dist/esm/core/time/reader.d.ts +162 -0
  321. package/dist/esm/core/time/reader.js +203 -0
  322. package/dist/esm/core/time/reader.js.map +1 -0
  323. package/dist/esm/core/time/readers/english.d.ts +99 -0
  324. package/dist/esm/core/time/readers/english.js +572 -0
  325. package/dist/esm/core/time/readers/english.js.map +1 -0
  326. package/dist/esm/core/time/readingAsk.d.ts +45 -0
  327. package/dist/esm/core/time/readingAsk.js +90 -0
  328. package/dist/esm/core/time/readingAsk.js.map +1 -0
  329. package/dist/esm/core/time/resolve.d.ts +103 -0
  330. package/dist/esm/core/time/resolve.js +684 -0
  331. package/dist/esm/core/time/resolve.js.map +1 -0
  332. package/dist/esm/core/time/resolveRecord.d.ts +160 -0
  333. package/dist/esm/core/time/resolveRecord.js +158 -0
  334. package/dist/esm/core/time/resolveRecord.js.map +1 -0
  335. package/dist/esm/core/time/rows.d.ts +297 -0
  336. package/dist/esm/core/time/rows.js +397 -0
  337. package/dist/esm/core/time/rows.js.map +1 -0
  338. package/dist/esm/core/time/rowsBuild.d.ts +82 -0
  339. package/dist/esm/core/time/rowsBuild.js +185 -0
  340. package/dist/esm/core/time/rowsBuild.js.map +1 -0
  341. package/dist/esm/core/time/textForms.d.ts +53 -0
  342. package/dist/esm/core/time/textForms.js +126 -0
  343. package/dist/esm/core/time/textForms.js.map +1 -0
  344. package/dist/esm/core/time/windows.d.ts +113 -0
  345. package/dist/esm/core/time/windows.js +166 -0
  346. package/dist/esm/core/time/windows.js.map +1 -0
  347. package/dist/esm/core/time/wire.d.ts +63 -0
  348. package/dist/esm/core/time/wire.js +81 -0
  349. package/dist/esm/core/time/wire.js.map +1 -0
  350. package/dist/esm/core/time/zone.d.ts +115 -0
  351. package/dist/esm/core/time/zone.js +242 -0
  352. package/dist/esm/core/time/zone.js.map +1 -0
  353. package/dist/esm/core/tools.d.ts +26 -4
  354. package/dist/esm/core/tools.js.map +1 -1
  355. package/dist/esm/events/payloads.d.ts +16 -2
  356. package/dist/esm/index.d.ts +13 -1
  357. package/dist/esm/index.js +6 -1
  358. package/dist/esm/index.js.map +1 -1
  359. package/dist/esm/lib/answer-account/facts/howSure.js +7 -0
  360. package/dist/esm/lib/answer-account/facts/howSure.js.map +1 -1
  361. package/dist/esm/lib/answer-account/templates.d.ts +3 -0
  362. package/dist/esm/lib/answer-account/templates.js +4 -0
  363. package/dist/esm/lib/answer-account/templates.js.map +1 -1
  364. package/dist/esm/lib/mcp/elicitation.d.ts +84 -0
  365. package/dist/esm/lib/mcp/elicitation.js +181 -0
  366. package/dist/esm/lib/mcp/elicitation.js.map +1 -0
  367. package/dist/esm/lib/mcp/mcpClient.js +9 -3
  368. package/dist/esm/lib/mcp/mcpClient.js.map +1 -1
  369. package/dist/esm/lib/mcp/mcpServe.js +6 -2
  370. package/dist/esm/lib/mcp/mcpServe.js.map +1 -1
  371. package/dist/esm/lib/mcp/mockMcpClient.d.ts +9 -1
  372. package/dist/esm/lib/mcp/mockMcpClient.js +5 -3
  373. package/dist/esm/lib/mcp/mockMcpClient.js.map +1 -1
  374. package/dist/esm/lib/mcp/toolExtras.d.ts +21 -2
  375. package/dist/esm/lib/mcp/toolExtras.js +22 -0
  376. package/dist/esm/lib/mcp/toolExtras.js.map +1 -1
  377. package/dist/esm/lib/mcp/types.d.ts +8 -0
  378. package/dist/esm/lib/time-travel/receipt.d.ts +1 -1
  379. package/dist/esm/lib/time-travel/servedView.d.ts +1 -1
  380. package/dist/esm/lib/time-travel/servedView.js +9 -0
  381. package/dist/esm/lib/time-travel/servedView.js.map +1 -1
  382. package/dist/esm/locales/index.d.ts +6 -0
  383. package/dist/esm/locales/index.js +6 -0
  384. package/dist/esm/locales/index.js.map +1 -1
  385. package/dist/esm/locales/timeAsk.d.ts +29 -0
  386. package/dist/esm/locales/timeAsk.js +44 -0
  387. package/dist/esm/locales/timeAsk.js.map +1 -0
  388. package/dist/esm/recorders/core/resilienceHooks.js +1 -0
  389. package/dist/esm/recorders/core/resilienceHooks.js.map +1 -1
  390. package/dist/esm/resilience/statedWait.d.ts +22 -0
  391. package/dist/esm/resilience/statedWait.js +35 -0
  392. package/dist/esm/resilience/statedWait.js.map +1 -0
  393. package/dist/esm/resilience/withRetry.d.ts +13 -2
  394. package/dist/esm/resilience/withRetry.js +16 -1
  395. package/dist/esm/resilience/withRetry.js.map +1 -1
  396. package/dist/index.js +11 -1
  397. package/dist/index.js.map +1 -1
  398. package/dist/lib/answer-account/facts/howSure.js +7 -0
  399. package/dist/lib/answer-account/facts/howSure.js.map +1 -1
  400. package/dist/lib/answer-account/templates.js +4 -0
  401. package/dist/lib/answer-account/templates.js.map +1 -1
  402. package/dist/lib/mcp/elicitation.js +186 -0
  403. package/dist/lib/mcp/elicitation.js.map +1 -0
  404. package/dist/lib/mcp/mcpClient.js +8 -2
  405. package/dist/lib/mcp/mcpClient.js.map +1 -1
  406. package/dist/lib/mcp/mcpServe.js +5 -1
  407. package/dist/lib/mcp/mcpServe.js.map +1 -1
  408. package/dist/lib/mcp/mockMcpClient.js +4 -2
  409. package/dist/lib/mcp/mockMcpClient.js.map +1 -1
  410. package/dist/lib/mcp/toolExtras.js +25 -1
  411. package/dist/lib/mcp/toolExtras.js.map +1 -1
  412. package/dist/lib/time-travel/servedView.js +9 -0
  413. package/dist/lib/time-travel/servedView.js.map +1 -1
  414. package/dist/locales/index.js +8 -1
  415. package/dist/locales/index.js.map +1 -1
  416. package/dist/locales/timeAsk.js +47 -0
  417. package/dist/locales/timeAsk.js.map +1 -0
  418. package/dist/recorders/core/resilienceHooks.js +1 -0
  419. package/dist/recorders/core/resilienceHooks.js.map +1 -1
  420. package/dist/resilience/statedWait.js +39 -0
  421. package/dist/resilience/statedWait.js.map +1 -0
  422. package/dist/resilience/withRetry.js +16 -1
  423. package/dist/resilience/withRetry.js.map +1 -1
  424. package/dist/types/adapters/llm/AnthropicProvider.d.ts.map +1 -1
  425. package/dist/types/adapters/llm/BedrockProvider.d.ts.map +1 -1
  426. package/dist/types/adapters/llm/InvokeModelGatewayProvider.d.ts +38 -4
  427. package/dist/types/adapters/llm/InvokeModelGatewayProvider.d.ts.map +1 -1
  428. package/dist/types/adapters/llm/OpenAIProvider.d.ts.map +1 -1
  429. package/dist/types/adapters/llm/anthropicMessagesWire.d.ts +6 -1
  430. package/dist/types/adapters/llm/anthropicMessagesWire.d.ts.map +1 -1
  431. package/dist/types/adapters/llm/retryAfter.d.ts +28 -0
  432. package/dist/types/adapters/llm/retryAfter.d.ts.map +1 -0
  433. package/dist/types/adapters/types.d.ts +9 -0
  434. package/dist/types/adapters/types.d.ts.map +1 -1
  435. package/dist/types/artifacts/index.d.ts +1 -1
  436. package/dist/types/artifacts/index.d.ts.map +1 -1
  437. package/dist/types/artifacts/types.d.ts +2 -2
  438. package/dist/types/artifacts/types.d.ts.map +1 -1
  439. package/dist/types/core/Agent.d.ts +64 -0
  440. package/dist/types/core/Agent.d.ts.map +1 -1
  441. package/dist/types/core/agent/AgentBuilder.d.ts +60 -0
  442. package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
  443. package/dist/types/core/agent/arguments/ask.d.ts +88 -5
  444. package/dist/types/core/agent/arguments/ask.d.ts.map +1 -1
  445. package/dist/types/core/agent/arguments/checks.d.ts +1 -1
  446. package/dist/types/core/agent/arguments/checks.d.ts.map +1 -1
  447. package/dist/types/core/agent/arguments/declare.d.ts +76 -15
  448. package/dist/types/core/agent/arguments/declare.d.ts.map +1 -1
  449. package/dist/types/core/agent/arguments/dispatch.d.ts.map +1 -1
  450. package/dist/types/core/agent/arguments/resolve.d.ts +77 -7
  451. package/dist/types/core/agent/arguments/resolve.d.ts.map +1 -1
  452. package/dist/types/core/agent/arguments/rows.d.ts +31 -2
  453. package/dist/types/core/agent/arguments/rows.d.ts.map +1 -1
  454. package/dist/types/core/agent/arguments/serve.d.ts +133 -4
  455. package/dist/types/core/agent/arguments/serve.d.ts.map +1 -1
  456. package/dist/types/core/agent/arguments/subflow.d.ts +28 -0
  457. package/dist/types/core/agent/arguments/subflow.d.ts.map +1 -1
  458. package/dist/types/core/agent/assessment/assess.d.ts.map +1 -1
  459. package/dist/types/core/agent/assessment/compose.d.ts.map +1 -1
  460. package/dist/types/core/agent/assessment/reasons.d.ts.map +1 -1
  461. package/dist/types/core/agent/assessment/types.d.ts +15 -1
  462. package/dist/types/core/agent/assessment/types.d.ts.map +1 -1
  463. package/dist/types/core/agent/buildAgentChart.d.ts +41 -0
  464. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  465. package/dist/types/core/agent/buildDynamicAgentChart.d.ts +1 -1
  466. package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
  467. package/dist/types/core/agent/coverage/answer.d.ts +20 -1
  468. package/dist/types/core/agent/coverage/answer.d.ts.map +1 -1
  469. package/dist/types/core/agent/coverage/period.d.ts +49 -3
  470. package/dist/types/core/agent/coverage/period.d.ts.map +1 -1
  471. package/dist/types/core/agent/coverage/timeLimitFacts.d.ts +57 -0
  472. package/dist/types/core/agent/coverage/timeLimitFacts.d.ts.map +1 -0
  473. package/dist/types/core/agent/coverage/timeLimits.d.ts +47 -0
  474. package/dist/types/core/agent/coverage/timeLimits.d.ts.map +1 -0
  475. package/dist/types/core/agent/evidence/evidenceIndex.d.ts +25 -2
  476. package/dist/types/core/agent/evidence/evidenceIndex.d.ts.map +1 -1
  477. package/dist/types/core/agent/evidence/gate.d.ts +7 -0
  478. package/dist/types/core/agent/evidence/gate.d.ts.map +1 -1
  479. package/dist/types/core/agent/evidence/normalize.d.ts +0 -34
  480. package/dist/types/core/agent/evidence/normalize.d.ts.map +1 -1
  481. package/dist/types/core/agent/evidence/types.d.ts +12 -1
  482. package/dist/types/core/agent/evidence/types.d.ts.map +1 -1
  483. package/dist/types/core/agent/findings/ledger.d.ts.map +1 -1
  484. package/dist/types/core/agent/findings/types.d.ts +2 -1
  485. package/dist/types/core/agent/findings/types.d.ts.map +1 -1
  486. package/dist/types/core/agent/honesty/mounts.d.ts +25 -0
  487. package/dist/types/core/agent/honesty/mounts.d.ts.map +1 -1
  488. package/dist/types/core/agent/results/subflow.d.ts +34 -2
  489. package/dist/types/core/agent/results/subflow.d.ts.map +1 -1
  490. package/dist/types/core/agent/stages/argumentAsk.d.ts +19 -0
  491. package/dist/types/core/agent/stages/argumentAsk.d.ts.map +1 -1
  492. package/dist/types/core/agent/stages/callLLM.d.ts +6 -0
  493. package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
  494. package/dist/types/core/agent/stages/prepareFinal.d.ts +13 -1
  495. package/dist/types/core/agent/stages/prepareFinal.d.ts.map +1 -1
  496. package/dist/types/core/agent/stages/route.d.ts +29 -1
  497. package/dist/types/core/agent/stages/route.d.ts.map +1 -1
  498. package/dist/types/core/agent/stages/seed.d.ts +23 -0
  499. package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
  500. package/dist/types/core/agent/stages/timeLayer.d.ts +95 -0
  501. package/dist/types/core/agent/stages/timeLayer.d.ts.map +1 -0
  502. package/dist/types/core/agent/stages/timeLineage.d.ts +32 -0
  503. package/dist/types/core/agent/stages/timeLineage.d.ts.map +1 -0
  504. package/dist/types/core/agent/stages/toolCalls.d.ts +32 -0
  505. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  506. package/dist/types/core/agent/types.d.ts +37 -0
  507. package/dist/types/core/agent/types.d.ts.map +1 -1
  508. package/dist/types/core/inputRequest.d.ts +50 -6
  509. package/dist/types/core/inputRequest.d.ts.map +1 -1
  510. package/dist/types/core/messageFrom.d.ts +5 -2
  511. package/dist/types/core/messageFrom.d.ts.map +1 -1
  512. package/dist/types/core/runCheckpoint.d.ts.map +1 -1
  513. package/dist/types/core/slots/buildToolsSlot.d.ts +29 -0
  514. package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
  515. package/dist/types/core/time/ask.d.ts +127 -0
  516. package/dist/types/core/time/ask.d.ts.map +1 -0
  517. package/dist/types/core/time/axis.d.ts +225 -0
  518. package/dist/types/core/time/axis.d.ts.map +1 -0
  519. package/dist/types/core/time/bind.d.ts +144 -0
  520. package/dist/types/core/time/bind.d.ts.map +1 -0
  521. package/dist/types/core/time/check.d.ts +114 -0
  522. package/dist/types/core/time/check.d.ts.map +1 -0
  523. package/dist/types/core/time/checkRecord.d.ts +75 -0
  524. package/dist/types/core/time/checkRecord.d.ts.map +1 -0
  525. package/dist/types/core/time/clock.d.ts +184 -0
  526. package/dist/types/core/time/clock.d.ts.map +1 -0
  527. package/dist/types/core/time/convert.d.ts +179 -0
  528. package/dist/types/core/time/convert.d.ts.map +1 -0
  529. package/dist/types/core/time/drift.d.ts +86 -0
  530. package/dist/types/core/time/drift.d.ts.map +1 -0
  531. package/dist/types/core/time/duration.d.ts +72 -0
  532. package/dist/types/core/time/duration.d.ts.map +1 -0
  533. package/dist/types/core/time/forms.d.ts +85 -0
  534. package/dist/types/core/time/forms.d.ts.map +1 -0
  535. package/dist/types/core/time/instant.d.ts +76 -0
  536. package/dist/types/core/time/instant.d.ts.map +1 -0
  537. package/dist/types/core/time/periodForm.d.ts +185 -0
  538. package/dist/types/core/time/periodForm.d.ts.map +1 -0
  539. package/dist/types/core/time/present.d.ts +108 -0
  540. package/dist/types/core/time/present.d.ts.map +1 -0
  541. package/dist/types/core/time/range.d.ts +128 -0
  542. package/dist/types/core/time/range.d.ts.map +1 -0
  543. package/dist/types/core/time/reader.d.ts +163 -0
  544. package/dist/types/core/time/reader.d.ts.map +1 -0
  545. package/dist/types/core/time/readers/english.d.ts +100 -0
  546. package/dist/types/core/time/readers/english.d.ts.map +1 -0
  547. package/dist/types/core/time/readingAsk.d.ts +46 -0
  548. package/dist/types/core/time/readingAsk.d.ts.map +1 -0
  549. package/dist/types/core/time/resolve.d.ts +104 -0
  550. package/dist/types/core/time/resolve.d.ts.map +1 -0
  551. package/dist/types/core/time/resolveRecord.d.ts +161 -0
  552. package/dist/types/core/time/resolveRecord.d.ts.map +1 -0
  553. package/dist/types/core/time/rows.d.ts +298 -0
  554. package/dist/types/core/time/rows.d.ts.map +1 -0
  555. package/dist/types/core/time/rowsBuild.d.ts +83 -0
  556. package/dist/types/core/time/rowsBuild.d.ts.map +1 -0
  557. package/dist/types/core/time/textForms.d.ts +54 -0
  558. package/dist/types/core/time/textForms.d.ts.map +1 -0
  559. package/dist/types/core/time/windows.d.ts +114 -0
  560. package/dist/types/core/time/windows.d.ts.map +1 -0
  561. package/dist/types/core/time/wire.d.ts +64 -0
  562. package/dist/types/core/time/wire.d.ts.map +1 -0
  563. package/dist/types/core/time/zone.d.ts +116 -0
  564. package/dist/types/core/time/zone.d.ts.map +1 -0
  565. package/dist/types/core/tools.d.ts +26 -4
  566. package/dist/types/core/tools.d.ts.map +1 -1
  567. package/dist/types/events/payloads.d.ts +16 -2
  568. package/dist/types/events/payloads.d.ts.map +1 -1
  569. package/dist/types/index.d.ts +13 -1
  570. package/dist/types/index.d.ts.map +1 -1
  571. package/dist/types/lib/answer-account/facts/howSure.d.ts.map +1 -1
  572. package/dist/types/lib/answer-account/templates.d.ts +3 -0
  573. package/dist/types/lib/answer-account/templates.d.ts.map +1 -1
  574. package/dist/types/lib/mcp/elicitation.d.ts +85 -0
  575. package/dist/types/lib/mcp/elicitation.d.ts.map +1 -0
  576. package/dist/types/lib/mcp/mcpServe.d.ts.map +1 -1
  577. package/dist/types/lib/mcp/mockMcpClient.d.ts +9 -1
  578. package/dist/types/lib/mcp/mockMcpClient.d.ts.map +1 -1
  579. package/dist/types/lib/mcp/toolExtras.d.ts +21 -2
  580. package/dist/types/lib/mcp/toolExtras.d.ts.map +1 -1
  581. package/dist/types/lib/mcp/types.d.ts +8 -0
  582. package/dist/types/lib/mcp/types.d.ts.map +1 -1
  583. package/dist/types/lib/time-travel/receipt.d.ts +1 -1
  584. package/dist/types/lib/time-travel/receipt.d.ts.map +1 -1
  585. package/dist/types/lib/time-travel/servedView.d.ts +1 -1
  586. package/dist/types/lib/time-travel/servedView.d.ts.map +1 -1
  587. package/dist/types/locales/index.d.ts +6 -0
  588. package/dist/types/locales/index.d.ts.map +1 -1
  589. package/dist/types/locales/timeAsk.d.ts +30 -0
  590. package/dist/types/locales/timeAsk.d.ts.map +1 -0
  591. package/dist/types/recorders/core/resilienceHooks.d.ts.map +1 -1
  592. package/dist/types/resilience/statedWait.d.ts +23 -0
  593. package/dist/types/resilience/statedWait.d.ts.map +1 -0
  594. package/dist/types/resilience/withRetry.d.ts +13 -2
  595. package/dist/types/resilience/withRetry.d.ts.map +1 -1
  596. package/package.json +1 -1
  597. package/dist/artifacts/timeAxis.js +0 -218
  598. package/dist/artifacts/timeAxis.js.map +0 -1
  599. package/dist/esm/artifacts/timeAxis.d.ts +0 -114
  600. package/dist/esm/artifacts/timeAxis.js +0 -212
  601. package/dist/esm/artifacts/timeAxis.js.map +0 -1
  602. package/dist/types/artifacts/timeAxis.d.ts +0 -115
  603. package/dist/types/artifacts/timeAxis.d.ts.map +0 -1
@@ -0,0 +1,163 @@
1
+ /**
2
+ * core/time/reader — the port a strategy reads a person's words through, and
3
+ * the checks every reading passes before anything resolves it.
4
+ *
5
+ * Pattern: port + adapter (Duckling's value/resolution split). A strategy
6
+ * TOKENIZES: it returns the parts it sees and the verbatim quote,
7
+ * never an instant, never a date order, never a zone. Everything
8
+ * that turns parts into instants is `resolve.ts`'s, the same way for
9
+ * every strategy (time design § 5.1).
10
+ * Role: core/ leaf (the time layer). Imports nothing. The builder's
11
+ * `.time({ reader })` checks a reader through {@link readerIssue};
12
+ * seed checks what it returned through {@link checkReading}.
13
+ * Emits: N/A.
14
+ *
15
+ * ## What is checked — shape, never meaning
16
+ *
17
+ * | Check | A failure |
18
+ * |-------|-----------|
19
+ * | the reader: `id`, `version`, `locale` non-empty strings, `kind` `'rule'` or `'model'`, `read` a function | refused at build |
20
+ * | the reading: `{ mentions: [] }`, at most {@link MAX_MENTIONS} | the reader broke its port — the run fails, naming it |
21
+ * | each mention's `quote`: a non-empty VERBATIM substring of the text read | the mention is refused (`quote-not-in-text`) and keeps no text |
22
+ * | each mention's parts: the {@link TimeParts} shape, every field in range, no unknown key, at most {@link MAX_PARSES} | the mention is refused (`malformed`) |
23
+ *
24
+ * None of these checks what a word MEANS: a model that reads "yesterday" as
25
+ * the wrong day passes every one of them. That is why NO reading is ever the
26
+ * person's words — a `rule` reading as much as a `model` one (the owner's
27
+ * decision "Always confirm", time design TQ29): a reading only PROPOSES a
28
+ * window, offered through the time ask with its zone, and only what the
29
+ * person picks or types in that form is theirs (`rowsBuild.ts` ·
30
+ * `timeReadingRows`).
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const fixture: TimeReader = {
35
+ * id: 'fixture', version: '1.0.0', locale: 'en-US', kind: 'rule',
36
+ * read: () => ({ mentions: [{ quote: '10/09/26', parses: [{ date: { kind: 'numeric', fields: [10, 9, 26] } }] }] }),
37
+ * };
38
+ * readerIssue(fixture); // undefined — a well-formed reader
39
+ * checkReading('errors on 10/09/26', fixture.read('', { locale: 'en-US' }), 'fixture');
40
+ * // [{ quote: '10/09/26', parses: [{ date: { kind: 'numeric', fields: [10, 9, 26] } }] }]
41
+ * ```
42
+ */
43
+ /** What a reader is told besides the text: a hint for its tokenizer — no clock, no zone, no map. */
44
+ export interface TimeReadContext {
45
+ readonly locale: string;
46
+ }
47
+ /**
48
+ * A strategy that reads a person's words into zone-less PARTS (time design
49
+ * § 5.1). Armed with `.time({ reader })`; there is no default. It runs once
50
+ * per turn, at the seed, on the message a person wrote, and never again for
51
+ * that message — a resume and a retry read the recorded reading.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * const reader: TimeReader = {
56
+ * id: 'my-app/english', version: '1.2.0', locale: 'en-US', kind: 'rule',
57
+ * read: (text) => ({ mentions: tokenize(text) }),
58
+ * };
59
+ * Agent.create({ provider, model }).time({ zone: 'UTC', reader }).build();
60
+ * ```
61
+ */
62
+ export interface TimeReader {
63
+ /** Recorded on every reading with the version, e.g. `'agentfootprint/english'`. */
64
+ readonly id: string;
65
+ readonly version: string;
66
+ /** The language it reads, e.g. `'en-US'`. */
67
+ readonly locale: string;
68
+ /**
69
+ * `'rule'`: deterministic over the text. `'model'`: an LLM or other learned
70
+ * reader. Neither kind's reading is ever the person's words: a `rule`
71
+ * reading is offered through the time ask to confirm; a `model` reading
72
+ * fills as a reading (`derived-from-reading`) until the person confirms it.
73
+ */
74
+ readonly kind: 'rule' | 'model';
75
+ read(text: string, context: TimeReadContext): TimeReading | Promise<TimeReading>;
76
+ }
77
+ /** What a reader returns: every time mention it found, in the order the text wrote them. */
78
+ export interface TimeReading {
79
+ readonly mentions: readonly TimeMention[];
80
+ }
81
+ /** One mention of a time in the text. */
82
+ export interface TimeMention {
83
+ /** A VERBATIM substring of the text — the library checks it. */
84
+ readonly quote: string;
85
+ /** Usually one; more only when the TOKENS split two ways. Empty when `problem` is set. */
86
+ readonly parses: readonly TimeParts[];
87
+ /** The reader saw a time here and could not read it. */
88
+ readonly problem?: 'unreadable';
89
+ }
90
+ /** A date as the text wrote it. */
91
+ export type TimeDate =
92
+ /** `'10/09/26'` → `fields: [10, 9, 26]` — the ORDER is not decided by the reader. Two or three fields. */
93
+ {
94
+ readonly kind: 'numeric';
95
+ readonly fields: readonly number[];
96
+ readonly yearDigits?: 2 | 4;
97
+ }
98
+ /** ISO or a named month: the text fixes the order. */
99
+ | {
100
+ readonly kind: 'fixed';
101
+ readonly year?: number;
102
+ readonly month: number;
103
+ readonly day: number;
104
+ };
105
+ /** A wall-clock time as the text wrote it — no zone. */
106
+ export interface TimeWall {
107
+ readonly h: number;
108
+ readonly m?: number;
109
+ readonly s?: number;
110
+ readonly meridiem?: 'am' | 'pm';
111
+ }
112
+ /** A time said relative to the message's moment. */
113
+ export type TimeRelative =
114
+ /** `'yesterday'` = `{ unit: 'day', offset: -1 }`. */
115
+ {
116
+ readonly unit: 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';
117
+ readonly offset: number;
118
+ }
119
+ /** `'last 40 minutes'` = `{ unit: 'minute', count: 40 }` — a look-back. */
120
+ | {
121
+ readonly unit: 'second' | 'minute' | 'hour' | 'day' | 'week';
122
+ readonly count: number;
123
+ };
124
+ /** Zone-less parts, in the order the text wrote them. Every field present was said. */
125
+ export interface TimeParts {
126
+ readonly date?: TimeDate;
127
+ readonly wall?: TimeWall;
128
+ /** As written: `'PST'`, `'-07:00'`, `'America/Los_Angeles'` — `resolve.ts` maps it. */
129
+ readonly zoneToken?: string;
130
+ readonly relative?: TimeRelative;
131
+ /** `'morning'` — a KEY into a table, never hours. */
132
+ readonly partOfDay?: string;
133
+ /** `'the hour before that'` — resolved from the recorded previous window only. */
134
+ readonly anchor?: 'previous';
135
+ /** `'8 AM to 8:40 AM'`. */
136
+ readonly rangeOf?: readonly [TimeParts, TimeParts];
137
+ }
138
+ /** The most mentions one reading may hold — a bound on the record, not a guess at language. */
139
+ export declare const MAX_MENTIONS = 16;
140
+ /** The most parses one mention may hold. */
141
+ export declare const MAX_PARSES = 4;
142
+ /** Why `value` is not a {@link TimeReader}, or `undefined` when it is one. */
143
+ export declare function readerIssue(value: unknown): string | undefined;
144
+ /** Why one mention was refused. A refused mention keeps no text: its quote is not the person's words. */
145
+ export type MentionRefusal = 'quote-not-in-text' | 'malformed';
146
+ /** One mention after the checks. */
147
+ export type CheckedMention = {
148
+ readonly quote: string;
149
+ readonly parses: readonly TimeParts[];
150
+ readonly problem?: 'unreadable';
151
+ } | {
152
+ readonly refused: MentionRefusal;
153
+ };
154
+ /** Whether `value` is a well-formed {@link TimeParts} — `nested` refuses a range inside a range side. */
155
+ export declare function isTimeParts(value: unknown, nested?: boolean): value is TimeParts;
156
+ /**
157
+ * A reader's answer for `text`, checked: one {@link CheckedMention} per
158
+ * mention, in order. Throws a `TypeError` naming the reader when the answer
159
+ * is not `{ mentions: [] }` (at most {@link MAX_MENTIONS}) — the reader
160
+ * broke its port, and a run is never read by a guess at what it meant.
161
+ */
162
+ export declare function checkReading(text: string, value: unknown, readerId: string): CheckedMention[];
163
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../../../src/core/time/reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * core/time/readers/english — the library's careful English reader (time
3
+ * design § 5.3): a tokenizer over a small, closed set of phrases, and
4
+ * "unreadable" for every other time phrase it recognises.
5
+ *
6
+ * Pattern: Strategy behind the `TimeReader` port (`../reader.ts`). It
7
+ * TOKENIZES only: it returns the parts it sees and the verbatim
8
+ * quote. It never resolves an instant, never applies a date order,
9
+ * never maps a zone abbreviation and never refuses a future date —
10
+ * all of that is `resolve.ts`'s, the policy's or the ask's.
11
+ * Role: core/ leaf (the time layer). Imports only the port's types. Armed
12
+ * by the app: `.time({ reader: englishTimeReader() })` — there is no
13
+ * default reader.
14
+ * Emits: N/A.
15
+ *
16
+ * ## What it reads (the v1 rows of § 5.3)
17
+ *
18
+ * | Phrase | Example | Parts |
19
+ * |--------|---------|-------|
20
+ * | an ISO date or instant | `2026-10-09`, `2026-10-09T08:00-07:00` | `date: fixed`, `wall`, `zoneToken` |
21
+ * | a numeric date | `10/09/26`, `10/9` | `date: numeric` — the ORDER is not decided here |
22
+ * | a clock time | `8 AM`, `8:40`, `20:40`, `8:40 p.m.` | `wall` (a bare `8` is a time only as a range's first side: `8 to 9 AM`) |
23
+ * | a range between two of the above | `8 AM to 8:40 AM`, `08:00–08:40`, `between 8 and 9 AM` | `rangeOf` (a day or zone said once for both sides is the whole mention's) |
24
+ * | a zone after a time or date | `America/Los_Angeles`, `UTC-07:00`, `PST` | `zoneToken`, as written (an abbreviation is ASKED — v1 ships no map) |
25
+ * | a day word | today, yesterday, tomorrow | `relative: { unit: 'day', offset }` |
26
+ * | a relative span from now | last 40 minutes, past 2 hours, the last hour, the past week | `relative: { unit, count }` — a look-back in minutes, hours, days or weeks |
27
+ *
28
+ * ## What it says "unreadable" for — never a partial reading
29
+ *
30
+ * Parts of the day (`yesterday morning`, `tonight`, `noon`), calendar spans
31
+ * (`last week`, `this month`), week days and named months (`Friday`,
32
+ * `Oct 9`), `N hours ago`, spans in words (`last two hours`), in a unit it
33
+ * does not read (`last 30 seconds`, `last 3 months`) or said with `previous`
34
+ * (`previous 7 days` — often relative to another window), a look-ahead (`next 2 hours`), an
35
+ * ordinal day (`the 9th`), `8 o'clock`, and any v1 phrase a modifier changes
36
+ * (`since 8 AM`, `before yesterday`, `around 8:40`, `earlier today`,
37
+ * `8 AM to now`, `past 8 PM`, `8 AM-ish`, `from 3 PM yesterday` with no `to`) and
38
+ * a meridiem the number contradicts (`13:00 PM`). Such a phrase is ONE mention
39
+ * with `problem: 'unreadable'`, quoting the whole phrase: reading `yesterday`
40
+ * out of `yesterday morning` would silently widen what the person said.
41
+ *
42
+ * ## It only PROPOSES — the person confirms (the owner's decision "Always confirm")
43
+ *
44
+ * Nothing this reader reads is ever filed as the person's words. Seven review
45
+ * rounds each found the next English spelling a word list, an allow-list or a
46
+ * position rule missed (a zone named in words, a look-back tied to an event,
47
+ * an open end, a half-read range), so the owner decided (2026-09-30, time
48
+ * design TQ29): every reading of a chat message is a PROPOSAL, offered
49
+ * through the time ask pre-filled and editable, with its window AND its zone
50
+ * ("I read “last 2 hours” as … in America/Los_Angeles — is that right?").
51
+ * Only what the person picks or types in that form is theirs. The library
52
+ * owns the law (`../rowsBuild.ts` · `timeReadingRows`), so this reader returns
53
+ * parts and quotes only — no confirm flag, no leftover list, no allow-list.
54
+ * A form may later skip the click only when a registered benchmark shows it
55
+ * is always read right (TQ29's growth rule).
56
+ *
57
+ * A numeric date the tokens could split two ways stays ONE parse — `10/09/26`
58
+ * is three numbers; which is the month is the policy's or the person's.
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * const reader = englishTimeReader();
63
+ * reader.read('errors on 10/09/26 8 AM to 8:40 AM PST', { locale: 'en-US' });
64
+ * // { mentions: [{ quote: '10/09/26 8 AM to 8:40 AM PST', parses: [{
65
+ * // date: { kind: 'numeric', fields: [10, 9, 26], yearDigits: 2 }, zoneToken: 'PST',
66
+ * // rangeOf: [{ wall: { h: 8, meridiem: 'am' } }, { wall: { h: 8, m: 40, meridiem: 'am' } }] }] }] }
67
+ * reader.read('errors in the last 2 hours', { locale: 'en-US' });
68
+ * // { mentions: [{ quote: 'last 2 hours', parses: [{ relative: { unit: 'hour', count: 2 } }] }] }
69
+ * reader.read('what failed yesterday morning?', { locale: 'en-US' });
70
+ * // { mentions: [{ quote: 'yesterday morning', parses: [], problem: 'unreadable' }] }
71
+ * ```
72
+ */
73
+ import { type TimeReader } from '../reader.js';
74
+ /** The reader's recorded identity — on every `time-reading` row with its version. */
75
+ export declare const ENGLISH_TIME_READER_ID = "agentfootprint/english";
76
+ /** Raised whenever what the reader returns for some text changes. */
77
+ export declare const ENGLISH_TIME_READER_VERSION = "1.0.0";
78
+ /** Options for {@link englishTimeReader}. */
79
+ export interface EnglishTimeReaderOptions {
80
+ /**
81
+ * The language tag the time ask's labels are rendered in (`present.ts`),
82
+ * e.g. `'en-GB'`. Default `'en-US'`. It never decides a date order — that is
83
+ * the policy's (`dateOrder`) or the person's.
84
+ */
85
+ readonly locale?: string;
86
+ }
87
+ /**
88
+ * The library's careful English reader: a `kind: 'rule'` tokenizer over the
89
+ * v1 phrases of the time design's § 5.3, "unreadable" for every other time
90
+ * phrase it recognises. No dependency; deterministic over the text.
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * Agent.create({ provider, model })
95
+ * .time({ zone: 'America/Los_Angeles', reader: englishTimeReader() })
96
+ * .build();
97
+ * ```
98
+ */
99
+ export declare function englishTimeReader(options?: EnglishTimeReaderOptions): TimeReader;
100
+ //# sourceMappingURL=english.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"english.d.ts","sourceRoot":"","sources":["../../../../../src/core/time/readers/english.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AAEH,OAAO,EAML,KAAK,UAAU,EAIhB,MAAM,cAAc,CAAC;AAItB,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,qEAAqE;AACrE,eAAO,MAAM,2BAA2B,UAAU,CAAC;AA+iBnD,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,UAAU,CAQpF"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * core/time/readingAsk — the choices an OPEN reading offers (time design
3
+ * § 6.1, § 6.3): the one field a `time-reading` row whose choice is `open`
4
+ * needs.
5
+ *
6
+ * Pattern: a pure builder over the row — the candidates as labelled choices,
7
+ * a zone asked as `format: 'zone'`, a `model` reading offered to
8
+ * confirm. The judge of the answer stays `ask.ts` ·
9
+ * `checkTimeAnswer`.
10
+ * Role: core/ leaf (the time layer). Split from `ask.ts` because its
11
+ * labels render through `present.ts` (`presentRange`), and `ask.ts`
12
+ * is on the resume door's SYNCHRONOUS path (`core/inputRequest.ts`)
13
+ * while the renderer loads only under `.time()` — the
14
+ * optional-family law of docs-next's site budget.
15
+ * Emits: N/A.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const ask = timeAskOf(row, defaultTimeAskMessages);
20
+ * ask?.field.format; // 'time-range' — its `enum` the candidates left
21
+ * ```
22
+ */
23
+ import { type TimeAskMessages, type TimeFormat } from './ask.js';
24
+ import type { TimeReadingRow } from './rows.js';
25
+ /** A time field built from a reading — the fields of `core/inputRequest.ts` · `InputField` it sets. */
26
+ export interface TimeAskField {
27
+ readonly id: string;
28
+ readonly type: 'string';
29
+ readonly required: true;
30
+ readonly format: TimeFormat;
31
+ readonly enum?: readonly string[];
32
+ readonly labels?: readonly string[];
33
+ }
34
+ /** One question about one mention: the question and its field. */
35
+ export interface TimeAsk {
36
+ readonly question: string;
37
+ readonly field: TimeAskField;
38
+ }
39
+ /**
40
+ * The ask a `time-reading` row needs, or `undefined` when its reading is
41
+ * settled (`only`, `policy`) or cannot be asked about (`none`, a refused
42
+ * mention). `messages` is the whole catalog (the caller composes the app's
43
+ * overrides over `defaultTimeAskMessages`); `id` names the field.
44
+ */
45
+ export declare function timeAskOf(row: TimeReadingRow, messages: TimeAskMessages, id?: string): TimeAsk | undefined;
46
+ //# sourceMappingURL=readingAsk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readingAsk.d.ts","sourceRoot":"","sources":["../../../../src/core/time/readingAsk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAuB,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKhD,uGAAuG;AACvG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,kEAAkE;AAClE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B;AAWD;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,eAAe,EACzB,EAAE,SAAS,GACV,OAAO,GAAG,SAAS,CA+CrB"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * core/time/resolve — parts + clock + policy → every candidate window, and
3
+ * the one rule for which candidate a reading settles on.
4
+ *
5
+ * Pattern: the hard, universal half of reading time, written once (time
6
+ * design § 5.1): a strategy tokenizes (`reader.ts`); this module
7
+ * resolves, the same way for every strategy. It is the one place
8
+ * zone arithmetic meets the person's words.
9
+ * Role: core/ leaf (the time layer). Imports `instant.ts`, `zone.ts`,
10
+ * `range.ts`, `present.ts` (the `Grain` word), `reader.ts` (the
11
+ * parts) and `resolveRecord.ts` (the shapes, the policy and the
12
+ * record's checks — split out for the synchronous doors, and
13
+ * re-exported here). `rowsBuild.ts` · `timeReadingRows` calls it at the
14
+ * seed, which loads it only under `.time()`.
15
+ * Emits: N/A.
16
+ *
17
+ * ## Every candidate, then the policy (§ 5.1, § 11)
18
+ *
19
+ * {@link resolveMention} writes EVERY reading of the parts, each tagged with
20
+ * how it read them ({@link ReadingTags}):
21
+ *
22
+ * | Parts | Candidates |
23
+ * |-------|------------|
24
+ * | a numeric date `10/09/26` | up to three: `MDY`, `DMY`, `YMD` — each checked as a calendar day |
25
+ * | a numeric date of two fields `10/09` | `MDY` and `DMY`, each for the clock's year and the one before |
26
+ * | a date with no year | the clock's year (`current`) and the one before (`previous`) |
27
+ * | a two-digit year `26` | the clock's century, noted `century-implied` |
28
+ * | a clock time with no meridiem, hour 1–12 (`8:40`) | am and pm |
29
+ * | a wall time the clocks go back through (`01:30`) | both instants, each noted `dst-overlap` |
30
+ * | a wall time the clocks skip (`02:30`) | both readings Temporal names, each noted `dst-gap` |
31
+ * | a day word (`{ day, offset: -1 }`) | the calendar day in the zone, anchored on the clock |
32
+ * | a span (`{ minute, count: 40 }`) | a look-back until the clock's `now` |
33
+ * | a range | one per combination of its sides that agree on date order and year, `from` before `to` |
34
+ *
35
+ * The fixed laws: a time is read to the END OF ITS GRAIN ("to 8:40" is
36
+ * `[08:00, 08:41)`, noted `end-of-grain`); a day starts at its first instant
37
+ * (Temporal's `startOfDay`: a midnight the clocks skip starts the day at the
38
+ * first wall time that exists); a zone the person did not say is the clock's;
39
+ * a zone they said is an IANA name or a numeric offset — any other token (an
40
+ * abbreviation such as `PST`) resolves nothing and is ASKED (no map ships in
41
+ * v1). Parts v1 does not resolve — a part of the day, a calendar span other
42
+ * than a day, a window anchored on the previous one — are named
43
+ * `unsupported`, never guessed.
44
+ *
45
+ * {@link chooseReading} then applies the app's policy (`dateOrder`, `year`)
46
+ * and names what is left: one window (`only`, or `policy` when the policy
47
+ * removed a reading — a choice nobody said, recorded), several (`open`, with
48
+ * the questions an ask must settle), or none. A `kind: 'model'` reader's
49
+ * window is never settled by the library: it stays `open` until the person
50
+ * confirms it (§ 5.5), and its candidates carry `said: []`. Since the
51
+ * owner's decision "Always confirm" (time design TQ29) neither is ANY
52
+ * reading the record files: `rowsBuild.ts` · `timeReadingRows` passes
53
+ * `confirm: true` for every reader's reading, so only the person's answer
54
+ * in the time ask settles a window. The `confirm` parameter's default
55
+ * (`kind === 'model'`) is the unit's, for a caller that resolves parts
56
+ * outside the record.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * const clock = { now: '2026-10-09T15:40:00Z', zone: 'America/Los_Angeles' };
61
+ * const rule = { id: 'fixture', kind: 'rule' as const };
62
+ * const res = resolveMention([{ date: { kind: 'numeric', fields: [10, 9, 26] } }], clock, rule);
63
+ * res.candidates.map((c) => c.reading.dateOrder); // ['MDY', 'DMY', 'YMD']
64
+ * chooseReading(res, DEFAULT_TIME_POLICY, 'rule');
65
+ * // { by: 'open', remaining: [0, 1, 2], open: ['date-order'] }
66
+ * chooseReading(res, { dateOrder: 'DMY', year: 'ask' }, 'rule');
67
+ * // { by: 'policy', candidate: 1, policy: { dateOrder: 'DMY' } }
68
+ * ```
69
+ */
70
+ import { type ZoneName } from './zone.js';
71
+ import type { TimeParts } from './reader.js';
72
+ import { type MentionResolution, type ReadingChoice, type ResolveClock, type TimePolicy } from './resolveRecord.js';
73
+ export { candidateIsWellFormed, choiceIsWellFormed, DEFAULT_TIME_POLICY, readPolicy, } from './resolveRecord.js';
74
+ export type { MentionResolution, OpenQuestion, ReadingChoice, ReadingTags, ResolveClock, ResolvedWindow, TimeCandidate, TimeNote, TimePart, TimePolicy, TimeWindow, } from './resolveRecord.js';
75
+ /**
76
+ * The parts with every zone token this layer cannot read (an abbreviation such
77
+ * as `PST`) replaced by the zone the PERSON named when asked (§ 6.3) — the
78
+ * whole mention's and each range side's. A token it can read is kept.
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * withZoneAnswered([{ wall: { h: 8, meridiem: 'am' }, zoneToken: 'PST' }], 'America/Los_Angeles');
83
+ * // [{ wall: { h: 8, meridiem: 'am' }, zoneToken: 'America/Los_Angeles' }]
84
+ * ```
85
+ */
86
+ export declare function withZoneAnswered(parses: readonly TimeParts[], zone: ZoneName): TimeParts[];
87
+ /**
88
+ * Every candidate window of one mention's parses, resolved against the
89
+ * clock. A reading the person must confirm (`confirm: true` — every reading
90
+ * the record files, TQ29; a `model` reader's by default) carries `said: []`.
91
+ */
92
+ export declare function resolveMention(parses: readonly TimeParts[], clock: ResolveClock, reader: {
93
+ readonly id: string;
94
+ readonly kind: 'rule' | 'model';
95
+ }, confirm?: boolean): MentionResolution;
96
+ /**
97
+ * How one mention settles under the app's policy (§ 5.1, § 11). The policy
98
+ * only removes readings; it never adds one. A DST choice, a meridiem, a
99
+ * zone the person named that is no zone, and a reading to confirm
100
+ * (`confirm` — every reading the record files, TQ29) are never settled here
101
+ * — they stay `open` for the person.
102
+ */
103
+ export declare function chooseReading(resolution: MentionResolution, policy: TimePolicy, kind: 'rule' | 'model', problem?: 'unreadable', confirm?: boolean): ReadingChoice;
104
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../../src/core/time/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAIH,OAAO,EAQL,KAAK,QAAQ,EACd,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,aAAa,CAAC;AACvD,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EAElB,KAAK,YAAY,EAIjB,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,cAAc,EACd,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,GACX,MAAM,oBAAoB,CAAC;AA6B5B;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,CAW1F;AAqfD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAChE,OAAO,GAAE,OAAiC,GACzC,iBAAiB,CA4BnB;AAwCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,iBAAiB,EAC7B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,GAAG,OAAO,EACtB,OAAO,CAAC,EAAE,YAAY,EACtB,OAAO,GAAE,OAA0B,GAClC,aAAa,CAsCf"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * core/time/resolveRecord — what the resolver writes down: the candidate and
3
+ * choice shapes, the app's policy (read at `.time()`), and the checks the
4
+ * checkpoint door runs on a filed reading.
5
+ *
6
+ * Pattern: the record half of `resolve.ts`, split from the resolver so the
7
+ * SYNCHRONOUS doors — `.time({ policy })` (`clock.ts` ·
8
+ * `readTimeOptions`) and `validateCheckpoint` (`rows.ts` ·
9
+ * `timeRowIsWellFormed`) — reach the shapes and their checks without
10
+ * the resolver, which only an armed seed loads (`agent/stages/
11
+ * timeLayer.ts`, through `import()`: the optional-family law of
12
+ * docs-next's site budget). `resolve.ts` re-exports everything here.
13
+ * Role: core/ leaf (the time layer). Imports `range.ts` and `zone.ts`
14
+ * (the window check) only.
15
+ * Emits: N/A.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * readPolicy({ dateOrder: 'DMY' }); // { dateOrder: 'DMY', year: 'ask' }
20
+ * candidateIsWellFormed({ kind: 'range', range: { from: 'x', to: 'y' } }); // false
21
+ * ```
22
+ */
23
+ import type { InstantText } from './instant.js';
24
+ import type { DurationText } from './duration.js';
25
+ import { type TimeRange } from './range.js';
26
+ import { type ZoneName } from './zone.js';
27
+ import type { Grain } from './present.js';
28
+ /** A part of a time a person can say. `duration`: the length of a look-back ("last 40 minutes"). */
29
+ export type TimePart = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second' | 'meridiem' | 'zone' | 'duration';
30
+ /** What was asked, before the clock is applied. */
31
+ export type TimeWindow = {
32
+ readonly kind: 'range';
33
+ readonly range: TimeRange;
34
+ }
35
+ /** Always "until the clock's now". */
36
+ | {
37
+ readonly kind: 'lookback';
38
+ readonly duration: DurationText;
39
+ };
40
+ /** A library-written note on how a window was read. */
41
+ export type TimeNote =
42
+ /** The range runs to the end of its last said grain ("to 8:40" → `08:41`). */
43
+ {
44
+ readonly kind: 'end-of-grain';
45
+ }
46
+ /** A wall time the clocks go back through: which of its two instants this is (`end`: which end of a range). */
47
+ | {
48
+ readonly kind: 'dst-overlap';
49
+ readonly which: 'earlier' | 'later';
50
+ readonly end?: 'from' | 'to';
51
+ }
52
+ /** A wall time the clocks skip: which of Temporal's two readings this is. */
53
+ | {
54
+ readonly kind: 'dst-gap';
55
+ readonly which: 'earlier' | 'later';
56
+ readonly end?: 'from' | 'to';
57
+ }
58
+ /** The person said a numeric offset, not a zone: the instants carry it; `zone` is the clock's. */
59
+ | {
60
+ readonly kind: 'offset-said';
61
+ readonly offset: string;
62
+ }
63
+ /** A two-digit year, read in the clock's century. */
64
+ | {
65
+ readonly kind: 'century-implied';
66
+ readonly century: number;
67
+ };
68
+ /** Which reading of the PARTS produced a candidate, so a policy — or an ask — can choose among them. */
69
+ export interface ReadingTags {
70
+ readonly dateOrder?: 'MDY' | 'DMY' | 'YMD';
71
+ /** The meridiem this reading gave a clock time said without one (the `from` end of a range). */
72
+ readonly meridiem?: 'am' | 'pm';
73
+ /** The same, for the `to` end of a range. */
74
+ readonly endMeridiem?: 'am' | 'pm';
75
+ readonly year?: 'said' | 'current' | 'previous';
76
+ }
77
+ /** A window read from words, resolved against the clock (§ 3.2). */
78
+ export interface ResolvedWindow {
79
+ readonly window: TimeWindow;
80
+ /** Always present: a look-back resolved against the clock. Spelled in the offset the person meant. */
81
+ readonly range: TimeRange;
82
+ /** The zone the person meant, else the clock's. */
83
+ readonly zone: ZoneName;
84
+ /** The finest part the person said. */
85
+ readonly grain: Grain;
86
+ /** The parts the person said — empty for a `model` reader's reading (§ 5.5). */
87
+ readonly said: readonly TimePart[];
88
+ /** The parts this module filled: from the clock, the policy's candidates, the century. */
89
+ readonly implied: readonly TimePart[];
90
+ readonly anchor: 'message' | 'previous-window' | 'none';
91
+ readonly reader: {
92
+ readonly id: string;
93
+ readonly kind: 'rule' | 'model';
94
+ };
95
+ readonly notes: readonly TimeNote[];
96
+ }
97
+ /** One candidate — produced here, never by a strategy. */
98
+ export interface TimeCandidate extends ResolvedWindow {
99
+ readonly reading: ReadingTags;
100
+ /** Which of the mention's parses it came from. */
101
+ readonly parse: number;
102
+ }
103
+ /** The v1 policy (§ 11): the two switches with two careful answers. */
104
+ export interface TimePolicy {
105
+ /** `'ask'`: a numeric date's readings become choices. Or the one order this app's people write. */
106
+ readonly dateOrder: 'ask' | 'MDY' | 'DMY' | 'YMD';
107
+ /** `'ask'`: a date said without a year is asked. `'current'`: the clock's year, recorded as assumed. */
108
+ readonly year: 'ask' | 'current';
109
+ }
110
+ /** No silent MDY, no guessed year. */
111
+ export declare const DEFAULT_TIME_POLICY: TimePolicy;
112
+ /** What the clock gives the resolver. */
113
+ export interface ResolveClock {
114
+ readonly now: InstantText;
115
+ readonly zone: ZoneName;
116
+ }
117
+ /** Every candidate of one mention, and what kept a parse from any. */
118
+ export interface MentionResolution {
119
+ readonly candidates: readonly TimeCandidate[];
120
+ /** A zone the person said that names no zone this layer can read (`PST`): the zone must be asked. */
121
+ readonly needsZone: boolean;
122
+ /** Parts v1 does not resolve, named. */
123
+ readonly unsupported: readonly string[];
124
+ }
125
+ /** A question only the person can settle. */
126
+ export type OpenQuestion = 'date-order' | 'year' | 'meridiem' | 'dst' | 'zone' | 'parse' | 'confirm';
127
+ /** How a mention's reading settled — recorded on its `time-reading` row. */
128
+ export type ReadingChoice =
129
+ /** Every candidate left names the same window. */
130
+ {
131
+ readonly by: 'only';
132
+ readonly candidate: number;
133
+ }
134
+ /** The policy removed a reading and one window is left — assumed, recorded. */
135
+ | {
136
+ readonly by: 'policy';
137
+ readonly candidate: number;
138
+ readonly policy: Partial<TimePolicy>;
139
+ }
140
+ /** An ask must settle it (a later step raises it): the candidates left and the questions. */
141
+ | {
142
+ readonly by: 'open';
143
+ readonly remaining: readonly number[];
144
+ readonly open: readonly OpenQuestion[];
145
+ readonly policy?: Partial<TimePolicy>;
146
+ } | {
147
+ readonly by: 'none';
148
+ readonly why: 'unreadable' | 'unsupported' | 'no-candidate' | 'excluded-by-policy';
149
+ };
150
+ /**
151
+ * The app's `policy`, read with the v1 defaults filled in — or a problem in
152
+ * words (an unknown key, a value outside its switch).
153
+ */
154
+ export declare function readPolicy(value: unknown): TimePolicy | string;
155
+ /** The parts a candidate can name, in the order a record lists them. */
156
+ export declare const PART_ORDER: readonly TimePart[];
157
+ /** Whether `value` is a candidate this module would have written. */
158
+ export declare function candidateIsWellFormed(value: unknown): boolean;
159
+ /** Whether `value` is a choice this module would have written over `count` candidates. */
160
+ export declare function choiceIsWellFormed(value: unknown, count: number): boolean;
161
+ //# sourceMappingURL=resolveRecord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRecord.d.ts","sourceRoot":"","sources":["../../../../src/core/time/resolveRecord.ts"],"names":[],"mappings":"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"}