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