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,185 @@
1
+ /**
2
+ * core/time/rowsBuild — the builders of the time layer's rows (`rows.ts` owns
3
+ * the shapes, the readers and the checkpoint door's checks).
4
+ *
5
+ * Pattern: one builder per row kind, each returning the plain record the
6
+ * ledger's one writer files.
7
+ * Role: core/ leaf (the time layer). Split from `rows.ts` because
8
+ * `timeReadingRows` runs the resolver (`resolve.ts`), which only an
9
+ * armed agent loads — its callers (`agent/stages/timeLayer.ts`, the
10
+ * inputs layer's `arguments/resolve.ts`) are reached through
11
+ * `import()` — while `rows.ts` sits on the checkpoint door's
12
+ * synchronous path (the optional-family law of docs-next's site
13
+ * budget). Import a builder from HERE — `rows.ts` does not re-export
14
+ * them, or a bundler would place them on its synchronous path.
15
+ * Emits: N/A.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * clockRow(clock, { turn: 1, iteration: 1 }); // { kind: 'clock', turn: 1, … }
20
+ * ```
21
+ */
22
+ import { clockChange } from './clock.js';
23
+ import { chooseReading, resolveMention } from './resolve.js';
24
+ // ─── Building ────────────────────────────────────────────────────────────
25
+ /** The clock stamp for one turn. */
26
+ export function clockRow(clock, at, window) {
27
+ return {
28
+ kind: 'clock',
29
+ turn: at.turn,
30
+ iteration: at.iteration,
31
+ now: clock.now,
32
+ nowSource: clock.nowSource,
33
+ zone: clock.zone,
34
+ zoneSource: clock.zoneSource,
35
+ ...(window !== undefined && {
36
+ window: { from: window.from, to: window.to, source: 'control' },
37
+ }),
38
+ };
39
+ }
40
+ /**
41
+ * The row for one dispatched call. `nowMs` is the wall clock — the second of
42
+ * the layer's two recorded wall-clock reads (the first is a default `now`).
43
+ */
44
+ export function callRow(call, at, nowMs, drift) {
45
+ return {
46
+ kind: 'call',
47
+ turn: at.turn,
48
+ iteration: at.iteration,
49
+ toolCallId: call.toolCallId,
50
+ toolName: call.toolName,
51
+ dispatchedAt: new Date(nowMs).toISOString(),
52
+ ...(drift !== undefined && { drift }),
53
+ };
54
+ }
55
+ /**
56
+ * The row for a resume whose passed `time` differs from the turn's kept clock
57
+ * (`clock.ts` · `clockChange`), or `undefined` when nothing differs. The kept
58
+ * clock is the turn's `clock` row; it is never replaced.
59
+ */
60
+ export function clockOnResumeRow(passed, kept, at) {
61
+ const change = clockChange(passed, {
62
+ now: kept.now,
63
+ zone: kept.zone,
64
+ ...(kept.window !== undefined && { window: { from: kept.window.from, to: kept.window.to } }),
65
+ });
66
+ if (change === undefined)
67
+ return undefined;
68
+ return {
69
+ kind: 'clock-on-resume',
70
+ turn: at.turn,
71
+ iteration: at.iteration,
72
+ passed: change.passed,
73
+ kept: change.kept,
74
+ };
75
+ }
76
+ /**
77
+ * The `time-reading` rows for one checked reading (`reader.ts` ·
78
+ * `checkReading`): one per mention, resolved against the turn's clock — or
79
+ * one `mentions: 0` row. The one owner of the law "a reading only PROPOSES"
80
+ * (the owner's decision "Always confirm", time design TQ29): whatever the
81
+ * reader's kind, no reading is settled by the library and none is the
82
+ * person's words — its candidates carry `said: []` and its choice stays
83
+ * `open` with `confirm` (the policy may still remove readings), so the time
84
+ * ask offers it, pre-filled with its window and zone, and only the person's
85
+ * answer settles it (`rows.ts` · `TimeAnswerRow`).
86
+ */
87
+ export function timeReadingRows(input) {
88
+ const { mentions, clock, policy, reader, tzdata, at } = input;
89
+ const base = {
90
+ kind: 'time-reading',
91
+ turn: at.turn,
92
+ iteration: at.iteration,
93
+ reader: { id: reader.id, version: reader.version, kind: reader.kind, locale: reader.locale },
94
+ tzdata,
95
+ mentions: mentions.length,
96
+ };
97
+ if (mentions.length === 0)
98
+ return [base];
99
+ return mentions.map((m, mention) => {
100
+ if ('refused' in m)
101
+ return { ...base, mention, refused: m.refused };
102
+ const resolution = resolveMention(m.parses, clock, { id: reader.id, kind: reader.kind }, true);
103
+ return {
104
+ ...base,
105
+ mention,
106
+ quote: m.quote,
107
+ parses: m.parses,
108
+ ...(m.problem !== undefined && { problem: m.problem }),
109
+ candidates: resolution.candidates,
110
+ choice: chooseReading(resolution, policy, reader.kind, m.problem, true),
111
+ };
112
+ });
113
+ }
114
+ const personOf = (w) => ({
115
+ from: w.range.from,
116
+ to: w.range.to,
117
+ source: w.source,
118
+ ...(w.mention !== undefined && { mention: w.mention }),
119
+ });
120
+ /** The `call-window` row for one call's decision (`bind.ts` · `callWindowOf`). */
121
+ export function callWindowRow(call, decision, at) {
122
+ const base = {
123
+ kind: 'call-window',
124
+ turn: at.turn,
125
+ iteration: at.iteration,
126
+ toolCallId: call.toolCallId,
127
+ toolName: call.toolName,
128
+ how: decision.how,
129
+ };
130
+ const partly = 'partlyBeyondRetention' in decision && decision.partlyBeyondRetention === true
131
+ ? { partlyBeyondRetention: true }
132
+ : {};
133
+ switch (decision.how) {
134
+ case 'filled': {
135
+ const c = decision.conversion;
136
+ const widened = 'sent' in c ? c : undefined;
137
+ return {
138
+ ...base,
139
+ form: c.form,
140
+ asked: { from: decision.window.range.from, to: decision.window.range.to },
141
+ person: personOf(decision.window),
142
+ ...(c.rounded === true && { rounded: true }),
143
+ ...(widened !== undefined && { sent: widened.sent }),
144
+ ...(widened !== undefined &&
145
+ (decision.trimmedByTool === true
146
+ ? { trimmedByTool: true }
147
+ : { differs: { extra: widened.extra } })),
148
+ ...partly,
149
+ };
150
+ }
151
+ case 'bound':
152
+ return {
153
+ ...base,
154
+ form: decision.form,
155
+ asked: decision.asked,
156
+ person: personOf(decision.window),
157
+ by: decision.by,
158
+ ...partly,
159
+ };
160
+ case 'model-chosen':
161
+ return {
162
+ ...base,
163
+ form: decision.form,
164
+ asked: decision.asked,
165
+ ...(decision.person !== undefined && { person: personOf(decision.person) }),
166
+ ...partly,
167
+ };
168
+ case 'model':
169
+ return { ...base, form: decision.form, asked: decision.asked, ...partly };
170
+ case 'unread':
171
+ return base;
172
+ case 'not-filled':
173
+ return { ...base, why: decision.why };
174
+ case 'refused':
175
+ return {
176
+ ...base,
177
+ refused: decision.refused,
178
+ ...(decision.form !== undefined && { form: decision.form }),
179
+ ...(decision.asked !== undefined && { asked: decision.asked }),
180
+ ...(decision.person !== undefined && { person: personOf(decision.person) }),
181
+ ...(decision.argument !== undefined && { argument: decision.argument }),
182
+ };
183
+ }
184
+ }
185
+ //# sourceMappingURL=rowsBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rowsBuild.js","sourceRoot":"","sources":["../../../../src/core/time/rowsBuild.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * core/time/textForms — the spellings of the times written in TEXT (time
3
+ * design § 9.5, step T7): the text rule of `forms.ts` · `timeFormsOf`, and
4
+ * the small spelling parts both halves share.
5
+ *
6
+ * Pattern: pure regular expressions over the text — no reading, no resolver.
7
+ * Role: split from `forms.ts` BY FILE for the synchronous doors: the
8
+ * evidence gate's exempt corpus (`evidence/evidenceIndex.ts` ·
9
+ * `addExempt`) runs on every agent with a gate, and a bundler places
10
+ * a whole file on the synchronous graph — so the window half, which
11
+ * re-resolves a recorded reading (`resolve.ts`), stays behind
12
+ * `import()` (the optional-family law,
13
+ * `test/lib/trace-toolpack/browserGraph.test.ts`). Imports nothing.
14
+ * Emits: N/A.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * timeFormsOfText('2026-10-09').said; // ['2026', '10', '9']
19
+ * timeFormsOfText('took 2h'); // { said: [], derived: [] }
20
+ * ```
21
+ */
22
+ /** The two lineages of the spellings of one source — see the file header. */
23
+ export interface TimeForms {
24
+ readonly said: readonly string[];
25
+ readonly derived: readonly string[];
26
+ }
27
+ /**
28
+ * The spellings of the times written in `text` — `said` only (the text rule of
29
+ * `forms.ts` · `timeFormsOf`, which delegates here): an ISO date → its year,
30
+ * month and day; a 12-hour or 24-hour clock reading → its spellings. Slash
31
+ * dates and durations are never read.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * timeFormsOfText('what connected 8 Am to 8:40 AM PST').said;
36
+ * // ['8:00', '08:00', '8:00am', '8:40', '08:40', '8:40am']
37
+ * ```
38
+ */
39
+ export declare function timeFormsOfText(text: string): TimeForms;
40
+ /**
41
+ * The spellings of ONE clock time: the 24-hour form bare and padded
42
+ * (`8:00`, `08:00`, `20:00`), the 12-hour colon form (`8:00`) and its glued
43
+ * suffix form (`8:00pm`). After tokenizing, `8:00 PM` and `8:00 AM` both read
44
+ * `8:00` — the same hour on a 12-hour dial.
45
+ */
46
+ export declare function clockSpellings(h24: number, minutes: string): readonly string[];
47
+ export declare const pad2: (n: number) => string;
48
+ /** An insertion-ordered set of spellings. */
49
+ export declare class Spellings {
50
+ private readonly seen;
51
+ push(...forms: readonly string[]): void;
52
+ list(): readonly string[];
53
+ }
@@ -0,0 +1,126 @@
1
+ /**
2
+ * core/time/textForms — the spellings of the times written in TEXT (time
3
+ * design § 9.5, step T7): the text rule of `forms.ts` · `timeFormsOf`, and
4
+ * the small spelling parts both halves share.
5
+ *
6
+ * Pattern: pure regular expressions over the text — no reading, no resolver.
7
+ * Role: split from `forms.ts` BY FILE for the synchronous doors: the
8
+ * evidence gate's exempt corpus (`evidence/evidenceIndex.ts` ·
9
+ * `addExempt`) runs on every agent with a gate, and a bundler places
10
+ * a whole file on the synchronous graph — so the window half, which
11
+ * re-resolves a recorded reading (`resolve.ts`), stays behind
12
+ * `import()` (the optional-family law,
13
+ * `test/lib/trace-toolpack/browserGraph.test.ts`). Imports nothing.
14
+ * Emits: N/A.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * timeFormsOfText('2026-10-09').said; // ['2026', '10', '9']
19
+ * timeFormsOfText('took 2h'); // { said: [], derived: [] }
20
+ * ```
21
+ */
22
+ // ─── The person's text ─────────────────────────────────────────────────────
23
+ /** An ISO calendar date in text — `2026-10-09`, also the date half of `2026-10-09T08:00`. */
24
+ const ISO_DATE = /(?<![\d-])(\d{4})-(\d{2})-(\d{2})(?![\d])/g;
25
+ /**
26
+ * A 12-hour clock reading in text — `8 Am`, `8:40 AM`, `8pm`, `8:40 p.m.`.
27
+ * Read off the TEXT, not tokens, because the suffix is its own token.
28
+ */
29
+ const TWELVE_HOUR = /(?<![\d:.])(\d{1,2})(?::(\d{2}))?\s*([ap])\.?m(?![a-z])/gi;
30
+ /**
31
+ * The evidence tokenizer's boundary (`evidence/normalize.ts` · `tokenize`),
32
+ * restated for this leaf so a 24-hour reading is recognised as the same
33
+ * whole token the gate compares — pinned equal by `test/core/time/forms.test.ts`.
34
+ */
35
+ const NOT_IN_TOKEN = /[^A-Za-z0-9:_\-/.,%+@#$]+/;
36
+ const LIST_COMMA = /,(?!\d)|(?<!\d),/;
37
+ const LEADING = /^[$#@+'"`([{<]+/;
38
+ const TRAILING = /[.,;:!?%'"`)\]}>]+$/;
39
+ const TWENTY_FOUR_HOUR = /^(\d{1,2}):(\d{2})$/;
40
+ /** The whole tokens of `text` that are a 24-hour clock reading, lower-cased as the gate reads them. */
41
+ function clockTokens(text) {
42
+ const out = [];
43
+ for (const rough of text.split(NOT_IN_TOKEN)) {
44
+ for (const piece of rough.split(LIST_COMMA)) {
45
+ const token = piece.toLowerCase().trim().replace(LEADING, '').replace(TRAILING, '');
46
+ if (TWENTY_FOUR_HOUR.test(token))
47
+ out.push(token);
48
+ }
49
+ }
50
+ return out;
51
+ }
52
+ /**
53
+ * The spellings of the times written in `text` — `said` only (the text rule of
54
+ * `forms.ts` · `timeFormsOf`, which delegates here): an ISO date → its year,
55
+ * month and day; a 12-hour or 24-hour clock reading → its spellings. Slash
56
+ * dates and durations are never read.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * timeFormsOfText('what connected 8 Am to 8:40 AM PST').said;
61
+ * // ['8:00', '08:00', '8:00am', '8:40', '08:40', '8:40am']
62
+ * ```
63
+ */
64
+ export function timeFormsOfText(text) {
65
+ return { said: textForms(text), derived: [] };
66
+ }
67
+ /** The said spellings of every date and clock time written in `text` (the file header's text rule). */
68
+ function textForms(text) {
69
+ const out = new Spellings();
70
+ for (const [, year = '', mm, dd] of text.matchAll(ISO_DATE)) {
71
+ const month = Number(mm);
72
+ const day = Number(dd);
73
+ if (month < 1 || month > 12 || day < 1 || day > 31)
74
+ continue;
75
+ out.push(year, String(month), String(day));
76
+ }
77
+ for (const [, hh, mm, half = ''] of text.matchAll(TWELVE_HOUR)) {
78
+ const hour = Number(hh);
79
+ const minutes = mm ?? '00';
80
+ if (hour < 1 || hour > 12 || Number(minutes) > 59)
81
+ continue;
82
+ const h24 = (hour % 12) + (half.toLowerCase() === 'p' ? 12 : 0);
83
+ out.push(...clockSpellings(h24, minutes));
84
+ }
85
+ // A reading the 12-hour pass already took is not read again as 24-hour:
86
+ // `8:40 p.m.` is 20:40, never also 08:40.
87
+ for (const token of clockTokens(text.replace(TWELVE_HOUR, ' '))) {
88
+ const [, hh = '', minutes = ''] = TWENTY_FOUR_HOUR.exec(token) ?? [];
89
+ const h24 = Number(hh);
90
+ if (h24 > 23 || Number(minutes) > 59)
91
+ continue;
92
+ out.push(...clockSpellings(h24, minutes));
93
+ }
94
+ return out.list();
95
+ }
96
+ /**
97
+ * The spellings of ONE clock time: the 24-hour form bare and padded
98
+ * (`8:00`, `08:00`, `20:00`), the 12-hour colon form (`8:00`) and its glued
99
+ * suffix form (`8:00pm`). After tokenizing, `8:00 PM` and `8:00 AM` both read
100
+ * `8:00` — the same hour on a 12-hour dial.
101
+ */
102
+ export function clockSpellings(h24, minutes) {
103
+ const h12 = h24 % 12 === 0 ? 12 : h24 % 12;
104
+ const suffix = h24 < 12 ? 'am' : 'pm';
105
+ return [
106
+ `${h24}:${minutes}`,
107
+ `${pad2(h24)}:${minutes}`,
108
+ `${h12}:${minutes}`,
109
+ `${h12}:${minutes}${suffix}`,
110
+ ];
111
+ }
112
+ // ─── Small parts ─────────────────────────────────────────────────────────────
113
+ export const pad2 = (n) => String(n).padStart(2, '0');
114
+ /** An insertion-ordered set of spellings. */
115
+ export class Spellings {
116
+ seen = new Set();
117
+ push(...forms) {
118
+ for (const form of forms)
119
+ if (form !== '')
120
+ this.seen.add(form);
121
+ }
122
+ list() {
123
+ return [...this.seen];
124
+ }
125
+ }
126
+ //# sourceMappingURL=textForms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textForms.js","sourceRoot":"","sources":["../../../../src/core/time/textForms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,8EAA8E;AAE9E,6FAA6F;AAC7F,MAAM,QAAQ,GAAG,4CAA4C,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,GAAG,2DAA2D,CAAC;AAEhF;;;;GAIG;AACH,MAAM,YAAY,GAAG,2BAA2B,CAAC;AACjD,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAClC,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AACvC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAE/C,uGAAuG;AACvG,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACpF,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAChD,CAAC;AAED,uGAAuG;AACvG,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE;YAAE,SAAS;QAC7D,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,EAAE,IAAI,IAAI,CAAC;QAC3B,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;YAAE,SAAS;QAC5D,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,wEAAwE;IACxE,0CAA0C;IAC1C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACrE,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,GAAG,GAAG,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;YAAE,SAAS;QAC/C,GAAG,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,OAAe;IACzD,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,OAAO;QACL,GAAG,GAAG,IAAI,OAAO,EAAE;QACnB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE;QACzB,GAAG,GAAG,IAAI,OAAO,EAAE;QACnB,GAAG,GAAG,IAAI,OAAO,GAAG,MAAM,EAAE;KAC7B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAEtE,6CAA6C;AAC7C,MAAM,OAAO,SAAS;IACH,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,IAAI,CAAC,GAAG,KAAwB;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,IAAI,KAAK,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IACD,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * core/time/windows — the turn's windows, read from the record (time design
3
+ * § 5.6): the window the person settled in the time ask (`answered`), a
4
+ * `model` reader's one reading waiting for confirmation
5
+ * (`derived-from-reading`) and the clock's `control` window; the quotes still
6
+ * waiting on the person; and what the served sentence names
7
+ * (`readerWindowsOf`).
8
+ *
9
+ * Pattern: Walker over recorded rows — never over words, never the resolver.
10
+ * Role: the record half of `bind.ts`, split out BY FILE for the synchronous
11
+ * doors: the Tools mount's `inputMapper` (`agent/buildAgentChart.ts` ·
12
+ * `timeWindowsArg`) and the evidence gate's lineage read it before
13
+ * any `import()` can run, and a bundler places a whole file on the
14
+ * synchronous graph — so this file imports only the leaves and the
15
+ * row readers, never `convert.ts` or `resolve.ts` (the optional-family
16
+ * law, `test/lib/trace-toolpack/browserGraph.test.ts`). `bind.ts`
17
+ * re-exports every public name.
18
+ * Emits: N/A (pure).
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * readerWindowsOf(ledger);
23
+ * // { now: '2026-10-09T15:40:00Z', windows: [{ source: 'answered', quote: 'yesterday', … }] }
24
+ * ```
25
+ */
26
+ import type { DurationText } from './duration.js';
27
+ import type { InstantText } from './instant.js';
28
+ import { type TimeRange } from './range.js';
29
+ import { type ClockRow, type TimeAnswerRow, type TimeReadingRow } from './rows.js';
30
+ import type { ZoneName } from './zone.js';
31
+ /**
32
+ * Who a window is: the window the person settled in the time ask
33
+ * (`answered`), a `model` reader's unconfirmed reading (`derived-from-reading`),
34
+ * or a UI control. `said` — a `rule` reading filed as the person's words — is
35
+ * no longer filed (the owner's decision "Always confirm", time design TQ29);
36
+ * it stays in the union so a record an earlier version filed still reads.
37
+ */
38
+ export type WindowSource = 'said' | 'derived-from-reading' | 'answered' | 'control';
39
+ /** One window of the turn — a mention that resolved to one window, or the `control` window. */
40
+ export interface TurnWindow {
41
+ readonly source: WindowSource;
42
+ /** The `time-reading` row's mention index — absent on the `control` window. */
43
+ readonly mention?: number;
44
+ /** The person's words it was read from — absent on the `control` window. */
45
+ readonly quote?: string;
46
+ readonly range: TimeRange;
47
+ /** The look-back it was said as, when it was one. */
48
+ readonly lookback?: DurationText;
49
+ /** The zone the person meant, else the clock's. */
50
+ readonly zone: ZoneName;
51
+ /** On an `answered` window: whether the person picked the offered reading (`confirmed`) or wrote their own (`edited`). */
52
+ readonly answer?: TimeAnswerRow['how'];
53
+ }
54
+ /** The turn's windows, and how many mentions the turn holds in all (resolved or not). */
55
+ export interface TurnWindows {
56
+ readonly windows: readonly TurnWindow[];
57
+ /** Every mention with a quote, plus the `control` window — the "exactly one" count. */
58
+ readonly mentions: number;
59
+ /**
60
+ * Per mention still OPEN (the person has not chosen), the ranges of the
61
+ * readings left — what a tool's facts can already rule out (§ 6.3: every
62
+ * reading outside a tool's `direction` → nothing is asked, the call is
63
+ * refused). Absent when no mention is open with candidates.
64
+ */
65
+ readonly open?: readonly (readonly TimeRange[])[];
66
+ }
67
+ /**
68
+ * This turn's windows, read from the record: per mention, the window the
69
+ * person settled in the time ask (`answered`, its latest `time-answer` row),
70
+ * else a `model` reader's one window waiting for confirmation
71
+ * (`derived-from-reading`); and the clock's `control` window. A `rule`
72
+ * reading the person has not answered is counted and is OPEN.
73
+ */
74
+ export declare function turnWindowsOf(readings: readonly TimeReadingRow[], clock: ClockRow | undefined, answers?: readonly TimeAnswerRow[]): TurnWindows;
75
+ /** The windows of the person's words this turn, with the turn's clock — what the served sentence names. */
76
+ export interface ReaderWindows {
77
+ readonly now: InstantText;
78
+ /** Each settled mention's window (`answered`, or a `model` reading's), in mention order — never the `control` window. */
79
+ readonly windows: readonly TurnWindow[];
80
+ /**
81
+ * The quote of each mention the library holds only as a PROPOSAL — a `rule`
82
+ * reading the person has not answered yet (its choice still `open`: a zone
83
+ * to name, readings to confirm) — in mention order. The served sentence
84
+ * names them as not confirmed, so a model that would write its own window
85
+ * leaves the period out and the time ask confirms it (step T6b bench,
86
+ * `bench/time/`). Absent when none is pending.
87
+ */
88
+ readonly pending?: readonly string[];
89
+ /**
90
+ * A mention is pending AND a call of this turn already ran on a window the
91
+ * model wrote into it (a `call-window` row `how: 'model'` — § 7.3: it runs
92
+ * as sent, unconfirmed). The served line then names that limit for the
93
+ * answer instead of the move that would have asked the person. Absent
94
+ * otherwise.
95
+ */
96
+ readonly ranUnconfirmed?: true;
97
+ }
98
+ /**
99
+ * The quotes of this turn's mentions still waiting on the person: a reading
100
+ * with a quote whose choice is `open`, not answered in the time ask, and not a
101
+ * `model` reading's one window (that one is served as a reading). Unreadable
102
+ * and refused mentions offer nothing to confirm and are not named.
103
+ */
104
+ export declare function pendingQuotesOf(readings: readonly TimeReadingRow[], answers?: readonly TimeAnswerRow[]): readonly string[];
105
+ /**
106
+ * The latest turn's windows of the person's words, read off the ledger (its
107
+ * last `clock` row and that turn's `time-reading` and `time-answer` rows) —
108
+ * `undefined` when the turn has no clock, no settled mention and none
109
+ * pending. A `rule` reading is named as a window only once the person
110
+ * answered it in the time ask; before that its quote is `pending`. The
111
+ * `control` window is not a reading and is not named (TQ13).
112
+ */
113
+ export declare function readerWindowsOf(ledger: readonly unknown[] | undefined): ReaderWindows | undefined;
@@ -0,0 +1,166 @@
1
+ /**
2
+ * core/time/windows — the turn's windows, read from the record (time design
3
+ * § 5.6): the window the person settled in the time ask (`answered`), a
4
+ * `model` reader's one reading waiting for confirmation
5
+ * (`derived-from-reading`) and the clock's `control` window; the quotes still
6
+ * waiting on the person; and what the served sentence names
7
+ * (`readerWindowsOf`).
8
+ *
9
+ * Pattern: Walker over recorded rows — never over words, never the resolver.
10
+ * Role: the record half of `bind.ts`, split out BY FILE for the synchronous
11
+ * doors: the Tools mount's `inputMapper` (`agent/buildAgentChart.ts` ·
12
+ * `timeWindowsArg`) and the evidence gate's lineage read it before
13
+ * any `import()` can run, and a bundler places a whole file on the
14
+ * synchronous graph — so this file imports only the leaves and the
15
+ * row readers, never `convert.ts` or `resolve.ts` (the optional-family
16
+ * law, `test/lib/trace-toolpack/browserGraph.test.ts`). `bind.ts`
17
+ * re-exports every public name.
18
+ * Emits: N/A (pure).
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * readerWindowsOf(ledger);
23
+ * // { now: '2026-10-09T15:40:00Z', windows: [{ source: 'answered', quote: 'yesterday', … }] }
24
+ * ```
25
+ */
26
+ import { sameRange } from './range.js';
27
+ import { answersOf, clockOf, readingsOf, } from './rows.js';
28
+ /**
29
+ * The one window a `model` reading offers, when it waits only for the
30
+ * person's confirmation — a reading, filled as `derived-from-reading`. A
31
+ * `rule` reading settles on nothing: it is a PROPOSAL the time ask offers,
32
+ * and only the person's answer settles it (the owner's decision "Always
33
+ * confirm", time design TQ29).
34
+ */
35
+ function readingCandidate(row) {
36
+ const choice = row.choice;
37
+ if (row.reader.kind !== 'model' || choice?.by !== 'open')
38
+ return undefined;
39
+ if (choice.open.length !== 1 || choice.open[0] !== 'confirm')
40
+ return undefined;
41
+ return row.candidates?.[choice.remaining[0]];
42
+ }
43
+ /**
44
+ * This turn's windows, read from the record: per mention, the window the
45
+ * person settled in the time ask (`answered`, its latest `time-answer` row),
46
+ * else a `model` reader's one window waiting for confirmation
47
+ * (`derived-from-reading`); and the clock's `control` window. A `rule`
48
+ * reading the person has not answered is counted and is OPEN.
49
+ */
50
+ export function turnWindowsOf(readings, clock, answers = []) {
51
+ const windows = [];
52
+ const open = [];
53
+ let mentions = 0;
54
+ const answered = new Map(answers.map((a) => [a.mention, a]));
55
+ for (const row of readings) {
56
+ if (row.mentions === 0 || row.refused !== undefined || row.quote === undefined)
57
+ continue;
58
+ mentions++;
59
+ const answer = row.mention === undefined ? undefined : answered.get(row.mention);
60
+ if (answer !== undefined) {
61
+ const range = { from: answer.from, to: answer.to };
62
+ // The person picked a look-back the library offered: it stays a look-back from now.
63
+ const offered = row.candidates?.find((c) => c.window.kind === 'lookback' && sameRange(c.range, range))?.window;
64
+ windows.push({
65
+ source: 'answered',
66
+ mention: answer.mention,
67
+ quote: row.quote,
68
+ range,
69
+ ...(offered?.kind === 'lookback' && { lookback: offered.duration }),
70
+ zone: answer.zone,
71
+ answer: answer.how,
72
+ });
73
+ continue;
74
+ }
75
+ const candidate = readingCandidate(row);
76
+ if (candidate === undefined) {
77
+ const choice = row.choice;
78
+ const left = choice?.by === 'open'
79
+ ? choice.remaining.flatMap((i) => {
80
+ const c = row.candidates?.[i];
81
+ return c === undefined ? [] : [c.range];
82
+ })
83
+ : [];
84
+ if (left.length > 0)
85
+ open.push(left);
86
+ continue;
87
+ }
88
+ windows.push({
89
+ source: 'derived-from-reading',
90
+ ...(row.mention !== undefined && { mention: row.mention }),
91
+ quote: row.quote,
92
+ range: candidate.range,
93
+ ...(candidate.window.kind === 'lookback' && { lookback: candidate.window.duration }),
94
+ zone: candidate.zone,
95
+ });
96
+ }
97
+ if (clock?.window !== undefined) {
98
+ mentions++;
99
+ windows.push({
100
+ source: 'control',
101
+ range: { from: clock.window.from, to: clock.window.to },
102
+ zone: clock.zone,
103
+ });
104
+ }
105
+ return { windows, mentions, ...(open.length > 0 && { open }) };
106
+ }
107
+ /** Whether a call of `turn` ran on a window the model wrote (`call-window` `how: 'model'`). */
108
+ function ranOnSentWindow(ledger, turn) {
109
+ return (ledger ?? []).some((row) => {
110
+ const r = row;
111
+ return (r !== null &&
112
+ typeof r === 'object' &&
113
+ r.kind === 'call-window' &&
114
+ r.turn === turn &&
115
+ r.how === 'model');
116
+ });
117
+ }
118
+ /**
119
+ * The quotes of this turn's mentions still waiting on the person: a reading
120
+ * with a quote whose choice is `open`, not answered in the time ask, and not a
121
+ * `model` reading's one window (that one is served as a reading). Unreadable
122
+ * and refused mentions offer nothing to confirm and are not named.
123
+ */
124
+ export function pendingQuotesOf(readings, answers = []) {
125
+ const answered = new Set(answers.map((a) => a.mention));
126
+ const quotes = [];
127
+ for (const row of readings) {
128
+ if (row.mentions === 0 || row.refused !== undefined || row.quote === undefined)
129
+ continue;
130
+ if (row.choice?.by !== 'open')
131
+ continue;
132
+ if (row.mention !== undefined && answered.has(row.mention))
133
+ continue;
134
+ if (readingCandidate(row) !== undefined)
135
+ continue;
136
+ quotes.push(row.quote);
137
+ }
138
+ return quotes;
139
+ }
140
+ /**
141
+ * The latest turn's windows of the person's words, read off the ledger (its
142
+ * last `clock` row and that turn's `time-reading` and `time-answer` rows) —
143
+ * `undefined` when the turn has no clock, no settled mention and none
144
+ * pending. A `rule` reading is named as a window only once the person
145
+ * answered it in the time ask; before that its quote is `pending`. The
146
+ * `control` window is not a reading and is not named (TQ13).
147
+ */
148
+ export function readerWindowsOf(ledger) {
149
+ const clock = clockOf(ledger);
150
+ if (clock === undefined)
151
+ return undefined;
152
+ const turn = clock.turn;
153
+ const readings = readingsOf(ledger, turn);
154
+ const answers = answersOf(ledger, turn);
155
+ const { windows } = turnWindowsOf(readings, undefined, answers);
156
+ const pending = pendingQuotesOf(readings, answers);
157
+ if (windows.length === 0 && pending.length === 0)
158
+ return undefined;
159
+ return {
160
+ now: clock.now,
161
+ windows,
162
+ ...(pending.length > 0 && { pending }),
163
+ ...(pending.length > 0 && ranOnSentWindow(ledger, turn) && { ranUnconfirmed: true }),
164
+ };
165
+ }
166
+ //# sourceMappingURL=windows.js.map