agentfootprint 9.86.1 → 9.87.1

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 (276) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/README.md +14 -0
  3. package/dist/artifacts/placement.js +4 -0
  4. package/dist/artifacts/placement.js.map +1 -1
  5. package/dist/artifacts/present.js +6 -0
  6. package/dist/artifacts/present.js.map +1 -1
  7. package/dist/artifacts/wants.js +8 -0
  8. package/dist/artifacts/wants.js.map +1 -1
  9. package/dist/core/Agent.js +21 -7
  10. package/dist/core/Agent.js.map +1 -1
  11. package/dist/core/LLMCall.js +2 -1
  12. package/dist/core/LLMCall.js.map +1 -1
  13. package/dist/core/agent/buildMessageApiChart.js +2 -1
  14. package/dist/core/agent/buildMessageApiChart.js.map +1 -1
  15. package/dist/core/agent/buildToolRegistry.js +4 -0
  16. package/dist/core/agent/buildToolRegistry.js.map +1 -1
  17. package/dist/core/agent/coverage/answer.js +4 -0
  18. package/dist/core/agent/coverage/answer.js.map +1 -1
  19. package/dist/core/agent/evidence/evidenceIndex.js +3 -0
  20. package/dist/core/agent/evidence/evidenceIndex.js.map +1 -1
  21. package/dist/core/agent/evidence/gate.js +3 -0
  22. package/dist/core/agent/evidence/gate.js.map +1 -1
  23. package/dist/core/agent/outputEnforcement.js +3 -0
  24. package/dist/core/agent/outputEnforcement.js.map +1 -1
  25. package/dist/core/agent/presentTool.js +3 -0
  26. package/dist/core/agent/presentTool.js.map +1 -1
  27. package/dist/core/agent/repeatedCall.js +3 -0
  28. package/dist/core/agent/repeatedCall.js.map +1 -1
  29. package/dist/core/agent/resultCeiling.js +3 -0
  30. package/dist/core/agent/resultCeiling.js.map +1 -1
  31. package/dist/core/agent/selfCallNotice.js +5 -0
  32. package/dist/core/agent/selfCallNotice.js.map +1 -1
  33. package/dist/core/agent/stagedRefs.js +5 -0
  34. package/dist/core/agent/stagedRefs.js.map +1 -1
  35. package/dist/core/agent/stages/callLLM.js +9 -0
  36. package/dist/core/agent/stages/callLLM.js.map +1 -1
  37. package/dist/core/agent/stages/evidenceRecheck.js +6 -0
  38. package/dist/core/agent/stages/evidenceRecheck.js.map +1 -1
  39. package/dist/core/agent/stages/stepNudge.js +5 -0
  40. package/dist/core/agent/stages/stepNudge.js.map +1 -1
  41. package/dist/core/agent/stages/toolCalls.js +27 -0
  42. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  43. package/dist/core/agent/stages/wrapUp.js +4 -0
  44. package/dist/core/agent/stages/wrapUp.js.map +1 -1
  45. package/dist/core/agent/window/notice.js +6 -0
  46. package/dist/core/agent/window/notice.js.map +1 -1
  47. package/dist/core/agent/window/summarize.js +4 -0
  48. package/dist/core/agent/window/summarize.js.map +1 -1
  49. package/dist/core/runbook/verdicts.js +3 -0
  50. package/dist/core/runbook/verdicts.js.map +1 -1
  51. package/dist/core/slots/buildToolsSlot.js +11 -0
  52. package/dist/core/slots/buildToolsSlot.js.map +1 -1
  53. package/dist/esm/artifacts/placement.js +4 -0
  54. package/dist/esm/artifacts/placement.js.map +1 -1
  55. package/dist/esm/artifacts/present.js +6 -0
  56. package/dist/esm/artifacts/present.js.map +1 -1
  57. package/dist/esm/artifacts/wants.js +8 -0
  58. package/dist/esm/artifacts/wants.js.map +1 -1
  59. package/dist/esm/core/Agent.js +21 -7
  60. package/dist/esm/core/Agent.js.map +1 -1
  61. package/dist/esm/core/LLMCall.js +2 -1
  62. package/dist/esm/core/LLMCall.js.map +1 -1
  63. package/dist/esm/core/agent/buildMessageApiChart.d.ts +2 -1
  64. package/dist/esm/core/agent/buildMessageApiChart.js +2 -1
  65. package/dist/esm/core/agent/buildMessageApiChart.js.map +1 -1
  66. package/dist/esm/core/agent/buildToolRegistry.js +4 -0
  67. package/dist/esm/core/agent/buildToolRegistry.js.map +1 -1
  68. package/dist/esm/core/agent/coverage/answer.js +4 -0
  69. package/dist/esm/core/agent/coverage/answer.js.map +1 -1
  70. package/dist/esm/core/agent/evidence/evidenceIndex.js +3 -0
  71. package/dist/esm/core/agent/evidence/evidenceIndex.js.map +1 -1
  72. package/dist/esm/core/agent/evidence/gate.js +3 -0
  73. package/dist/esm/core/agent/evidence/gate.js.map +1 -1
  74. package/dist/esm/core/agent/outputEnforcement.js +3 -0
  75. package/dist/esm/core/agent/outputEnforcement.js.map +1 -1
  76. package/dist/esm/core/agent/presentTool.js +3 -0
  77. package/dist/esm/core/agent/presentTool.js.map +1 -1
  78. package/dist/esm/core/agent/repeatedCall.js +3 -0
  79. package/dist/esm/core/agent/repeatedCall.js.map +1 -1
  80. package/dist/esm/core/agent/resultCeiling.js +3 -0
  81. package/dist/esm/core/agent/resultCeiling.js.map +1 -1
  82. package/dist/esm/core/agent/selfCallNotice.js +5 -0
  83. package/dist/esm/core/agent/selfCallNotice.js.map +1 -1
  84. package/dist/esm/core/agent/stagedRefs.js +5 -0
  85. package/dist/esm/core/agent/stagedRefs.js.map +1 -1
  86. package/dist/esm/core/agent/stages/callLLM.js +9 -0
  87. package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
  88. package/dist/esm/core/agent/stages/evidenceRecheck.js +6 -0
  89. package/dist/esm/core/agent/stages/evidenceRecheck.js.map +1 -1
  90. package/dist/esm/core/agent/stages/stepNudge.js +5 -0
  91. package/dist/esm/core/agent/stages/stepNudge.js.map +1 -1
  92. package/dist/esm/core/agent/stages/toolCalls.js +27 -0
  93. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  94. package/dist/esm/core/agent/stages/wrapUp.js +4 -0
  95. package/dist/esm/core/agent/stages/wrapUp.js.map +1 -1
  96. package/dist/esm/core/agent/window/notice.js +6 -0
  97. package/dist/esm/core/agent/window/notice.js.map +1 -1
  98. package/dist/esm/core/agent/window/summarize.js +4 -0
  99. package/dist/esm/core/agent/window/summarize.js.map +1 -1
  100. package/dist/esm/core/runbook/verdicts.js +3 -0
  101. package/dist/esm/core/runbook/verdicts.js.map +1 -1
  102. package/dist/esm/core/slots/buildToolsSlot.js +11 -0
  103. package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
  104. package/dist/esm/events/eventTail.js +4 -0
  105. package/dist/esm/events/eventTail.js.map +1 -1
  106. package/dist/esm/index.d.ts +1 -0
  107. package/dist/esm/index.js +9 -0
  108. package/dist/esm/index.js.map +1 -1
  109. package/dist/esm/integrity/disposition/ledger.js +0 -0
  110. package/dist/esm/integrity/disposition/ledger.js.map +1 -1
  111. package/dist/esm/lib/context-ledger/contextLedger.js +3 -0
  112. package/dist/esm/lib/context-ledger/contextLedger.js.map +1 -1
  113. package/dist/esm/lib/injection-engine/evaluator.js +3 -0
  114. package/dist/esm/lib/injection-engine/evaluator.js.map +1 -1
  115. package/dist/esm/lib/injection-engine/promptTemplate.js +4 -0
  116. package/dist/esm/lib/injection-engine/promptTemplate.js.map +1 -1
  117. package/dist/esm/lib/injection-engine/skillGraph.js +17 -0
  118. package/dist/esm/lib/injection-engine/skillGraph.js.map +1 -1
  119. package/dist/esm/lib/injection-engine/skillSteps.js +20 -0
  120. package/dist/esm/lib/injection-engine/skillSteps.js.map +1 -1
  121. package/dist/esm/lib/injection-engine/skillToolDescriptors.js +26 -0
  122. package/dist/esm/lib/injection-engine/skillToolDescriptors.js.map +1 -1
  123. package/dist/esm/lib/iterationBudget.js +4 -0
  124. package/dist/esm/lib/iterationBudget.js.map +1 -1
  125. package/dist/esm/lib/rag/defineRAG.js +4 -0
  126. package/dist/esm/lib/rag/defineRAG.js.map +1 -1
  127. package/dist/esm/lib/saidByPerson.js +4 -0
  128. package/dist/esm/lib/saidByPerson.js.map +1 -1
  129. package/dist/esm/lib/semantics/envelope.js +3 -0
  130. package/dist/esm/lib/semantics/envelope.js.map +1 -1
  131. package/dist/esm/lib/spokenIds.js +5 -0
  132. package/dist/esm/lib/spokenIds.js.map +1 -1
  133. package/dist/esm/lib/time-travel/index.d.ts +8 -0
  134. package/dist/esm/lib/time-travel/index.js +9 -0
  135. package/dist/esm/lib/time-travel/index.js.map +1 -0
  136. package/dist/esm/lib/time-travel/milestoneStops.d.ts +128 -0
  137. package/dist/esm/lib/time-travel/milestoneStops.js +179 -0
  138. package/dist/esm/lib/time-travel/milestoneStops.js.map +1 -0
  139. package/dist/esm/lib/trace-toolpack/debugPrompt.js +3 -0
  140. package/dist/esm/lib/trace-toolpack/debugPrompt.js.map +1 -1
  141. package/dist/esm/lib/trace-toolpack/traceToolpack.js +5 -0
  142. package/dist/esm/lib/trace-toolpack/traceToolpack.js.map +1 -1
  143. package/dist/esm/maps/engagement/lease.js +4 -0
  144. package/dist/esm/maps/engagement/lease.js.map +1 -1
  145. package/dist/esm/maps/engagement/parkCard.js +5 -0
  146. package/dist/esm/maps/engagement/parkCard.js.map +1 -1
  147. package/dist/esm/memory/beats/formatAsNarrative.js +4 -0
  148. package/dist/esm/memory/beats/formatAsNarrative.js.map +1 -1
  149. package/dist/esm/memory/causal/loadSnapshot.js +4 -0
  150. package/dist/esm/memory/causal/loadSnapshot.js.map +1 -1
  151. package/dist/esm/memory/facts/formatFacts.js +4 -0
  152. package/dist/esm/memory/facts/formatFacts.js.map +1 -1
  153. package/dist/esm/memory/stages/formatDefault.js +4 -0
  154. package/dist/esm/memory/stages/formatDefault.js.map +1 -1
  155. package/dist/esm/recorders/observability/FlowchartRecorder.js +3 -0
  156. package/dist/esm/recorders/observability/FlowchartRecorder.js.map +1 -1
  157. package/dist/esm/recorders/observability/recordRun.js +5 -0
  158. package/dist/esm/recorders/observability/recordRun.js.map +1 -1
  159. package/dist/esm/tool-providers/gatedTools.js +7 -0
  160. package/dist/esm/tool-providers/gatedTools.js.map +1 -1
  161. package/dist/esm/tool-providers/skillScopedTools.js +6 -0
  162. package/dist/esm/tool-providers/skillScopedTools.js.map +1 -1
  163. package/dist/events/eventTail.js +4 -0
  164. package/dist/events/eventTail.js.map +1 -1
  165. package/dist/index.js +115 -102
  166. package/dist/index.js.map +1 -1
  167. package/dist/integrity/disposition/ledger.js +0 -0
  168. package/dist/integrity/disposition/ledger.js.map +1 -1
  169. package/dist/lib/context-ledger/contextLedger.js +3 -0
  170. package/dist/lib/context-ledger/contextLedger.js.map +1 -1
  171. package/dist/lib/injection-engine/evaluator.js +3 -0
  172. package/dist/lib/injection-engine/evaluator.js.map +1 -1
  173. package/dist/lib/injection-engine/promptTemplate.js +4 -0
  174. package/dist/lib/injection-engine/promptTemplate.js.map +1 -1
  175. package/dist/lib/injection-engine/skillGraph.js +17 -0
  176. package/dist/lib/injection-engine/skillGraph.js.map +1 -1
  177. package/dist/lib/injection-engine/skillSteps.js +20 -0
  178. package/dist/lib/injection-engine/skillSteps.js.map +1 -1
  179. package/dist/lib/injection-engine/skillToolDescriptors.js +26 -0
  180. package/dist/lib/injection-engine/skillToolDescriptors.js.map +1 -1
  181. package/dist/lib/iterationBudget.js +4 -0
  182. package/dist/lib/iterationBudget.js.map +1 -1
  183. package/dist/lib/rag/defineRAG.js +4 -0
  184. package/dist/lib/rag/defineRAG.js.map +1 -1
  185. package/dist/lib/saidByPerson.js +4 -0
  186. package/dist/lib/saidByPerson.js.map +1 -1
  187. package/dist/lib/semantics/envelope.js +3 -0
  188. package/dist/lib/semantics/envelope.js.map +1 -1
  189. package/dist/lib/spokenIds.js +5 -0
  190. package/dist/lib/spokenIds.js.map +1 -1
  191. package/dist/lib/time-travel/index.js +15 -0
  192. package/dist/lib/time-travel/index.js.map +1 -0
  193. package/dist/lib/time-travel/milestoneStops.js +184 -0
  194. package/dist/lib/time-travel/milestoneStops.js.map +1 -0
  195. package/dist/lib/trace-toolpack/debugPrompt.js +3 -0
  196. package/dist/lib/trace-toolpack/debugPrompt.js.map +1 -1
  197. package/dist/lib/trace-toolpack/traceToolpack.js +5 -0
  198. package/dist/lib/trace-toolpack/traceToolpack.js.map +1 -1
  199. package/dist/maps/engagement/lease.js +4 -0
  200. package/dist/maps/engagement/lease.js.map +1 -1
  201. package/dist/maps/engagement/parkCard.js +5 -0
  202. package/dist/maps/engagement/parkCard.js.map +1 -1
  203. package/dist/memory/beats/formatAsNarrative.js +4 -0
  204. package/dist/memory/beats/formatAsNarrative.js.map +1 -1
  205. package/dist/memory/causal/loadSnapshot.js +4 -0
  206. package/dist/memory/causal/loadSnapshot.js.map +1 -1
  207. package/dist/memory/facts/formatFacts.js +4 -0
  208. package/dist/memory/facts/formatFacts.js.map +1 -1
  209. package/dist/memory/stages/formatDefault.js +4 -0
  210. package/dist/memory/stages/formatDefault.js.map +1 -1
  211. package/dist/recorders/observability/FlowchartRecorder.js +3 -0
  212. package/dist/recorders/observability/FlowchartRecorder.js.map +1 -1
  213. package/dist/recorders/observability/recordRun.js +5 -0
  214. package/dist/recorders/observability/recordRun.js.map +1 -1
  215. package/dist/tool-providers/gatedTools.js +7 -0
  216. package/dist/tool-providers/gatedTools.js.map +1 -1
  217. package/dist/tool-providers/skillScopedTools.js +6 -0
  218. package/dist/tool-providers/skillScopedTools.js.map +1 -1
  219. package/dist/types/artifacts/placement.d.ts.map +1 -1
  220. package/dist/types/artifacts/present.d.ts.map +1 -1
  221. package/dist/types/artifacts/wants.d.ts.map +1 -1
  222. package/dist/types/core/Agent.d.ts.map +1 -1
  223. package/dist/types/core/LLMCall.d.ts.map +1 -1
  224. package/dist/types/core/agent/buildMessageApiChart.d.ts +2 -1
  225. package/dist/types/core/agent/buildMessageApiChart.d.ts.map +1 -1
  226. package/dist/types/core/agent/buildToolRegistry.d.ts.map +1 -1
  227. package/dist/types/core/agent/coverage/answer.d.ts.map +1 -1
  228. package/dist/types/core/agent/evidence/evidenceIndex.d.ts.map +1 -1
  229. package/dist/types/core/agent/evidence/gate.d.ts.map +1 -1
  230. package/dist/types/core/agent/outputEnforcement.d.ts.map +1 -1
  231. package/dist/types/core/agent/presentTool.d.ts.map +1 -1
  232. package/dist/types/core/agent/repeatedCall.d.ts.map +1 -1
  233. package/dist/types/core/agent/resultCeiling.d.ts.map +1 -1
  234. package/dist/types/core/agent/selfCallNotice.d.ts.map +1 -1
  235. package/dist/types/core/agent/stagedRefs.d.ts.map +1 -1
  236. package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
  237. package/dist/types/core/agent/stages/evidenceRecheck.d.ts.map +1 -1
  238. package/dist/types/core/agent/stages/stepNudge.d.ts.map +1 -1
  239. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  240. package/dist/types/core/agent/stages/wrapUp.d.ts.map +1 -1
  241. package/dist/types/core/agent/window/notice.d.ts.map +1 -1
  242. package/dist/types/core/agent/window/summarize.d.ts.map +1 -1
  243. package/dist/types/core/runbook/verdicts.d.ts.map +1 -1
  244. package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
  245. package/dist/types/events/eventTail.d.ts.map +1 -1
  246. package/dist/types/index.d.ts +1 -0
  247. package/dist/types/index.d.ts.map +1 -1
  248. package/dist/types/integrity/disposition/ledger.d.ts.map +1 -1
  249. package/dist/types/lib/context-ledger/contextLedger.d.ts.map +1 -1
  250. package/dist/types/lib/injection-engine/evaluator.d.ts.map +1 -1
  251. package/dist/types/lib/injection-engine/promptTemplate.d.ts.map +1 -1
  252. package/dist/types/lib/injection-engine/skillGraph.d.ts.map +1 -1
  253. package/dist/types/lib/injection-engine/skillSteps.d.ts.map +1 -1
  254. package/dist/types/lib/injection-engine/skillToolDescriptors.d.ts.map +1 -1
  255. package/dist/types/lib/iterationBudget.d.ts.map +1 -1
  256. package/dist/types/lib/rag/defineRAG.d.ts.map +1 -1
  257. package/dist/types/lib/saidByPerson.d.ts.map +1 -1
  258. package/dist/types/lib/semantics/envelope.d.ts.map +1 -1
  259. package/dist/types/lib/spokenIds.d.ts.map +1 -1
  260. package/dist/types/lib/time-travel/index.d.ts +9 -0
  261. package/dist/types/lib/time-travel/index.d.ts.map +1 -0
  262. package/dist/types/lib/time-travel/milestoneStops.d.ts +129 -0
  263. package/dist/types/lib/time-travel/milestoneStops.d.ts.map +1 -0
  264. package/dist/types/lib/trace-toolpack/debugPrompt.d.ts.map +1 -1
  265. package/dist/types/lib/trace-toolpack/traceToolpack.d.ts.map +1 -1
  266. package/dist/types/maps/engagement/lease.d.ts.map +1 -1
  267. package/dist/types/maps/engagement/parkCard.d.ts.map +1 -1
  268. package/dist/types/memory/beats/formatAsNarrative.d.ts.map +1 -1
  269. package/dist/types/memory/causal/loadSnapshot.d.ts.map +1 -1
  270. package/dist/types/memory/facts/formatFacts.d.ts.map +1 -1
  271. package/dist/types/memory/stages/formatDefault.d.ts.map +1 -1
  272. package/dist/types/recorders/observability/FlowchartRecorder.d.ts.map +1 -1
  273. package/dist/types/recorders/observability/recordRun.d.ts.map +1 -1
  274. package/dist/types/tool-providers/gatedTools.d.ts.map +1 -1
  275. package/dist/types/tool-providers/skillScopedTools.d.ts.map +1 -1
  276. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -7,6 +7,146 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [9.87.1] - 2026-09-06
11
+
12
+ 9.87.0 never reached npm. Its publish job failed the docs site's byte budget —
13
+ `export bytes: 621.21 MB exceeds 617.00 MB` — after six new routes (the
14
+ time-travel guide and the API pages for `milestoneStops`,
15
+ `milestoneStopsStrategy`, `milestoneOf`) added 5.47 MB to a static export
16
+ that had 1.26 MB of headroom left. No library code changes in this release.
17
+
18
+ ### Fixed
19
+
20
+ - **The site-budget ceilings are re-baselined** the way the script's own history
21
+ says to: ~2% over the measured export (634 MB, 6,750 files), with the reason
22
+ written beside the number in `docs-next/scripts/check-site-budget.mjs`. The
23
+ gate did its job — growth nobody was watching is exactly what it exists to
24
+ stop — and the number to look at next is the ~0.9 MB a single docs route
25
+ costs, not the ceiling.
26
+
27
+ ## [9.87.0] - 2026-09-06
28
+
29
+ The agent now supplies the stops for its own runs.
30
+
31
+ footprintjs 9.17.0 opens a reader's cursor over a finished commit log —
32
+ `timeTravel(snapshot, { strategy })` — with a fold at every stop, and a seam that
33
+ says where the cursor may rest. It ships one strategy, `commitStops`, which stops
34
+ on every executed stage: the truth, and unreadable. A two-turn agent in
35
+ `reactMode: 'dynamic'` commits **42** bundles, and most of them are called
36
+ `context`, `sf-cache` or `sf-thinking`.
37
+
38
+ `milestoneFor` has classified stage ids into `iteration` · `slot` · `llm-turn` ·
39
+ `tool-call` · `decision` for releases, and every consumer that wanted a milestone
40
+ slider mapped that classifier onto commits itself. This release does that join
41
+ once, on the seam: the same 42-commit run yields **15** stops — Run start →
42
+ Iteration → System prompt → Messages → Tools → LLM turn → Route → Tool call →
43
+ Iteration → … → Run end.
44
+
45
+ ### Added
46
+
47
+ - **`milestoneStops` / `milestoneStopsStrategy` / `milestoneOf`** (`src/lib/time-travel/`,
48
+ exported from the root barrel). A footprintjs `TimeTravelStrategy` built by
49
+ FILTERING footprintjs's own per-stage axis rather than re-deriving it: it calls
50
+ `commitStops` and keeps the stages `milestoneFor` classifies, so the collapsing
51
+ that axis already solved — one stop per `runtimeStageId` at its first commit
52
+ (mounts and fork children commit more than once), the mount set read off the
53
+ execution tree, the `'start'` / `'end'` bookends, the id-less commit that
54
+ carries a subflow's `inputMapper` seed — is used, not repeated. A stage that
55
+ classifies `null` contributes no stop and its commits fold into the stop before
56
+ it, so the survivors still partition the log end to end and `stateAt(stop)`
57
+ stays "the state that existed when the next milestone started".
58
+
59
+ - **Both chart shapes, one strategy.** The classifier reads the LOCAL segment of
60
+ a stage id, so nothing has to tell it which log it is holding. Under
61
+ `reactMode: 'dynamic'` the `call-llm` bundle is on the run's own log and the
62
+ llm-turn stop is on the outer cursor. Under `'dynamic-grouped'` the same run
63
+ commits **10** bundles outside — the `sf-llm-call` mounts, which become the
64
+ iteration stops — and `drill(mountRuntimeStageId)` opens that turn's own
65
+ cursor, where the same strategy finds **7** stops including its LLM turn.
66
+
67
+ - **`examples/observability/23-time-travel-milestones.ts`** — the same agent run
68
+ at both chart shapes, printing each axis, the skill the run stood in at each
69
+ turn, `changedSince` between two turns, a mark that survives a jump, and a
70
+ refused jump that leaves the cursor put. It also calls `milestoneStops` on the
71
+ log directly, for the reader who holds a recording rather than a cursor, and
72
+ shows the two axes agree. Offline, mock provider.
73
+
74
+ - **`docs-next/content/docs/debug/time-travel.mdx`** — why milestones rather than
75
+ one-stop-per-stage, the three questions the cursor answers, and where the LLM
76
+ turn lives in each chart shape.
77
+
78
+ ### Changed
79
+
80
+ - **`footprintjs` is now `^9.17.0`** (peer + dev), for `timeTravel`,
81
+ `commitStops` and the `TimeTravelStrategy` seam.
82
+
83
+ ### Honest notes
84
+
85
+ - **The milestone kind is a function, not a field.** footprintjs's `Stop` is a
86
+ closed shape with no slot a strategy may write its own vocabulary into, and its
87
+ `kind` is the port's own `StopKind` (`'commit' | 'mount' | 'start' | 'end'`),
88
+ not ours to overload. So the kind travels the only way it honestly can:
89
+ `milestoneOf(stop)` re-derives it from the stop's `runtimeStageId` with the
90
+ same classifier that put the stop on the axis — one source of truth, read
91
+ twice. If a later footprintjs gives `Stop` an extension slot, `milestoneOf`
92
+ becomes a one-line reader of it.
93
+
94
+ - **Which keys are visible where, in the grouped shape.** The settled skill
95
+ cursor for turn *k* is on the OUTER axis, at iteration *k* (`currentSkillId`).
96
+ Inside the drill, `currentSkillId` is the value the turn STARTED from — it
97
+ crosses the mount as a read-only input — and the move the turn made is
98
+ `nextSkillCursor`, merged back out by the outputMapper. Both logs are truthful
99
+ about different questions, and `test/lib/time-travel/milestone-stops.test.ts`
100
+ pins both rather than picking the flattering one.
101
+
102
+ - **`'start'` is not the fold base on this axis.** footprintjs's `'start'`
103
+ bookend is the state before any stage ran; this one also absorbs every stage
104
+ that ran before the FIRST milestone, because the stops must still partition
105
+ the log. Measured on a two-turn `dynamic` run: `commitStops`' start folds
106
+ commits `-1..-1` and 0 keys, `milestoneStops`' start folds `-1..0` and 32 —
107
+ `seed`'s writes have already landed. So `stateAt(startStop)` here is the state
108
+ the first milestone READ, not the run's raw base, and a renderer keyed on
109
+ `kind === 'start'` to show "what the run began with" is showing post-seed
110
+ state. Said in the folder README, on the docs page, and pinned by a test.
111
+
112
+ - **A resumed run gets an axis of its own.** The cursor reads the snapshot it is
113
+ handed, and a resume is its own execution with its own log: after
114
+ `agent.resume(checkpoint, answer)`, `getSnapshot()` carries the resumed half —
115
+ the axis begins at the stage the resume re-entered and the pre-pause
116
+ milestones are not on it. They are on the snapshot taken at the pause. The
117
+ strategy itself holds across the break (both axes tile, both keep unique
118
+ stops); it is the snapshot that split, not the cursor.
119
+
120
+ - **A log with no milestones is not an empty log.** A non-empty log the
121
+ classifier recognises nothing in — a non-agent chart handed this strategy —
122
+ yields the two bookends and nothing between them, and every `jumpTo` refuses
123
+ with `'miss'`. An EMPTY log yields `[]`. Two different facts, two different
124
+ answers.
125
+
126
+ - **The performance guards get a stated allowance under coverage.** v8
127
+ instrumentation is not machine load: it is a per-call counter, so it taxes the
128
+ two sides of a ratio in proportion to how many calls each makes, and a
129
+ comparison between two differently-shaped paths moves even on an idle machine.
130
+ Measured on this suite, the tightest guard sat ~2.8× under its ceiling
131
+ uninstrumented and ~1.1× under it with `--coverage` — which is why it went red
132
+ under whole-suite parallelism and green on a re-run. `test:coverage` now sets
133
+ `AF_COVERAGE=1` and `test/helpers/perf.ts` widens the ceilings by a documented
134
+ 3× when it sees it. The plain `npm test` ceilings are unchanged, which is where
135
+ a real regression is still caught; the multiplier is a floor on effort, not a
136
+ promise that instrumentation costs exactly 3×.
137
+
138
+ - **17 tests over real runs**, not fixtures: the axis in both chart shapes, the
139
+ partition property (every commit belongs to exactly one stop), a jump that
140
+ lands and a miss that names a nearest without moving, the skill graph read
141
+ along the commits with the wire as witness (the skill whose body rode turn *k*
142
+ is the one that iteration's own log settled on), marks that survive jumps and
143
+ never appear in the recording, what `'start'` folds on this axis versus the
144
+ port's, a resumed run's axis, and a log with no milestones in it. One more
145
+ file — 5 tests in `milestone-stops-contract.test.ts` — mocks `commitStops` to check the one
146
+ assumption this strategy makes of footprintjs — that a non-empty log yields
147
+ `[start, …stages, end]` — is refused loudly rather than silently mistaken for
148
+ an empty axis.
149
+
10
150
  ## [9.86.1] - 2026-09-06
11
151
 
12
152
  The release that removed hand-counted lists shipped with one, and with main red.
package/README.md CHANGED
@@ -37,6 +37,20 @@
37
37
 
38
38
  ---
39
39
 
40
+ ## Map, Walker, Trace, Fold, Lens
41
+
42
+ Five words for the five jobs every file in this library does.
43
+
44
+ - **Map** — what could happen: the chart an `Agent` or `LLMCall` declares, the skills and the edges between them. Still; a run never changes it.
45
+ - **Walker** — what is happening: the ReAct loop, one stage at a time, with its cursor and its guards.
46
+ - **Trace** — what happened and why: the typed event stream and the commit log, written as the run happens, never reconstructed after.
47
+ - **Fold** — what may be claimed now: everything derived from that record — the evidence corpus, the reachable set, the influence ranking, the context ledger — each computed by one owner and handed out detached.
48
+ - **Lens** — what this reader is served: for an agent that means **the wire** — the system prompt, the messages and the tool list the model actually gets, plus every sentence composed into them. A Lens may leave something out; it may never say the run holds nothing when it does.
49
+
50
+ Every folder under `src/` opens its README with its role. The map of the whole tree, with the laws and worked examples, is [docs/design/map-walker-trace-fold-lens.md](docs/design/map-walker-trace-fold-lens.md).
51
+
52
+ ---
53
+
40
54
  ## The new error class
41
55
 
42
56
  For decades, software had two kinds of errors — and developers never needed deep
@@ -80,6 +80,10 @@ function isPlacedToolResult(value) {
80
80
  typeof value.reason === 'string');
81
81
  }
82
82
  exports.isPlacedToolResult = isPlacedToolResult;
83
+ // LENS · tool-result · persistent-history
84
+ // reads: ref/kind/mediaType/bytes ← the ArtifactMeta the dispatch layer minted; size and threshold ← its measure
85
+ // it SUBSTITUTES the result the model would have read, so the ticket and the reason travel together.
86
+ // law: may omit, never deny; every clause anchored to the call it was composed on.
83
87
  /** Compose the ticket from the mint the dispatch layer performed. */
84
88
  function placedToolResult(toolName, meta, sizeChars, maxInlineChars) {
85
89
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"placement.js","sourceRoot":"","sources":["../../src/artifacts/placement.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;AAyBH;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,IAAY,EACZ,SAAwC;IAExC,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,cAAc,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,0EAA0E;YAC/E,mBAAmB,MAAM,CAAC,KAAK,CAAC,qDAAqD;YACrF,iFAAiF;YACjF,sFAAsF;YACtF,+CAA+C,CAClD,CAAC;IACJ,CAAC;AACH,CAAC;AAfD,0DAeC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,QAAiB;IAClE,OAAO,QAAQ,IAAI,eAAe,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAFD,4CAEC;AAsBD,4EAA4E;AAC5E,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAA8B,CAAC,MAAM,KAAK,IAAI;QAC/C,OAAQ,KAA2B,CAAC,GAAG,KAAK,QAAQ;QACpD,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ,CAC3D,CAAC;AACJ,CAAC;AARD,gDAQC;AAED,qEAAqE;AACrE,SAAgB,gBAAgB,CAC9B,QAAgB,EAChB,IAAkB,EAClB,SAAiB,EACjB,cAAsB;IAEtB,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EACJ,GAAG,QAAQ,aAAa,SAAS,oBAAoB,cAAc,kBAAkB;YACrF,yDAAyD,IAAI,CAAC,GAAG,IAAI;YACrE,IAAI,IAAI,CAAC,IAAI,mEAAmE;YAChF,WAAW,IAAI,CAAC,GAAG,qCAAqC,IAAI,CAAC,IAAI,aAAa;YAC9E,mBAAmB,IAAI,CAAC,GAAG,yDAAyD;YACpF,sCAAsC;KACzC,CAAC;AACJ,CAAC;AApBD,4CAoBC"}
1
+ {"version":3,"file":"placement.js","sourceRoot":"","sources":["../../src/artifacts/placement.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;AAyBH;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,IAAY,EACZ,SAAwC;IAExC,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,cAAc,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,0EAA0E;YAC/E,mBAAmB,MAAM,CAAC,KAAK,CAAC,qDAAqD;YACrF,iFAAiF;YACjF,sFAAsF;YACtF,+CAA+C,CAClD,CAAC;IACJ,CAAC;AACH,CAAC;AAfD,0DAeC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,QAAiB;IAClE,OAAO,QAAQ,IAAI,eAAe,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAFD,4CAEC;AAsBD,4EAA4E;AAC5E,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAA8B,CAAC,MAAM,KAAK,IAAI;QAC/C,OAAQ,KAA2B,CAAC,GAAG,KAAK,QAAQ;QACpD,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ,CAC3D,CAAC;AACJ,CAAC;AARD,gDAQC;AAED,0CAA0C;AAC1C,iHAAiH;AACjH,qGAAqG;AACrG,mFAAmF;AACnF,qEAAqE;AACrE,SAAgB,gBAAgB,CAC9B,QAAgB,EAChB,IAAkB,EAClB,SAAiB,EACjB,cAAsB;IAEtB,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EACJ,GAAG,QAAQ,aAAa,SAAS,oBAAoB,cAAc,kBAAkB;YACrF,yDAAyD,IAAI,CAAC,GAAG,IAAI;YACrE,IAAI,IAAI,CAAC,IAAI,mEAAmE;YAChF,WAAW,IAAI,CAAC,GAAG,qCAAqC,IAAI,CAAC,IAAI,aAAa;YAC9E,mBAAmB,IAAI,CAAC,GAAG,yDAAyD;YACpF,sCAAsC;KACzC,CAAC;AACJ,CAAC;AApBD,4CAoBC"}
@@ -40,6 +40,12 @@ const PRESENT_LIST_LIMIT = 10;
40
40
  function describeRef(meta) {
41
41
  return `${meta.ref} [${meta.kind} · ${meta.bytes} bytes${meta.label !== undefined ? ` · '${meta.label}'` : ''}]`;
42
42
  }
43
+ // LENS · tool-result · persistent-history
44
+ // reads: the artifact's meta ← store.head(scope, ref); the live refs ← store.list(scope, {limit:10})
45
+ // both from the ArtifactStore port, the sole owner of those facts
46
+ // the source is LIVE, so every clause is past tense and bound to the named call: a census rendered into a
47
+ // result is re-read after the store has changed.
48
+ // law: may omit, never deny; every clause anchored to the call it was composed on.
43
49
  /**
44
50
  * Resolve one `present` call over the port — ONE law for every dispatch
45
51
  * door. `head`, never `get`: presenting is the render-by-ref decision, and
@@ -1 +1 @@
1
- {"version":3,"file":"present.js","sourceRoot":"","sources":["../../src/artifacts/present.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"present.js","sourceRoot":"","sources":["../../src/artifacts/present.ts"],"names":[],"mappings":"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"}
@@ -161,6 +161,11 @@ function liveRefsClause(kind, live) {
161
161
  .map(describeLiveRef)
162
162
  .join(', ')}. Pass one of these.`;
163
163
  }
164
+ // LENS · tool-result · persistent-history
165
+ // reads: whether a ref resolves and its kind ← store.get; the live refs of a kind ← store.list, bounded 10/200
166
+ // LIVE source, same repair as present.ts: past tense, bound to the named call. inputSchema.required is
167
+ // read again here as a deliberate second belt (`wants.ts` · requiredArgNames), not as a re-derivation of a fold.
168
+ // law: may omit, never deny; every clause anchored to the call it was composed on.
164
169
  /**
165
170
  * Resolve one tool's declared `wants` against the run's scope — the whole
166
171
  * Leg-1 law in one place, shared by every dispatch door.
@@ -290,6 +295,9 @@ async function resolveToolWants(store, scope, toolName, wants, args, inputSchema
290
295
  return { ok: true, args: nextArgs, wanted, resolved: resolvedList };
291
296
  }
292
297
  exports.resolveToolWants = resolveToolWants;
298
+ // LENS · tool-result · persistent-history
299
+ // reads: the tool's own wants declaration only — it states configuration and cannot go stale
300
+ // law: may omit, never deny; every clause anchored to the call it was composed on.
293
301
  /**
294
302
  * The teaching refusal for a `wants`-declaring tool dispatched where NO
295
303
  * artifact store is attached — fail-closed, naming the config fix, because
@@ -1 +1 @@
1
- {"version":3,"file":"wants.js","sourceRoot":"","sources":["../../src/artifacts/wants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wants.js","sourceRoot":"","sources":["../../src/artifacts/wants.ts"],"names":[],"mappings":"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"}
@@ -1988,6 +1988,9 @@ class Agent extends RunnerBase_js_1.RunnerBase {
1988
1988
  !this.skillGraphEdgeTargets.has(i.id))
1989
1989
  .map((i) => i.id);
1990
1990
  }
1991
+ // FOLD (resolver) · assembles the ReadSkillOffer the read_skill DESCRIPTION (a Lens) is built from:
1992
+ // grantable ← makeReachableSkills ∪ openSkillIds, cursor ← scope, hidden ← hiddenSkillIdsNow.
1993
+ // It assembles; it never composes a sentence. The sentence is skillToolDescriptors.describeOffer.
1991
1994
  /**
1992
1995
  * The per-iteration `read_skill` offer builder — or `undefined` to leave the tool
1993
1996
  * exactly as it has always been (8.5.0).
@@ -2075,6 +2078,11 @@ class Agent extends RunnerBase_js_1.RunnerBase {
2075
2078
  governsSkillVisibility() {
2076
2079
  return (0, types_js_2.checkerGoverns)(this.permissionChecker, 'skill_read');
2077
2080
  }
2081
+ // FOLD (resolver) · computes "which skill ids may this caller be told about".
2082
+ // The OWNER of the published fact is src/core/slots/buildToolsSlot.ts · discoverStage, which
2083
+ // resolves it once per iteration and publishes it on scope; every model-facing composer reads THAT.
2084
+ // Second caller: the turn router (stages/routeTurn.ts · resolveHidden) resolves it again, with different
2085
+ // failure semantics, and publishes nothing — two sweeps of one policy question per turn.
2078
2086
  /**
2079
2087
  * Which skills the caller's role may NOT see, asked once per iteration
2080
2088
  * (9.11.0).
@@ -3116,13 +3124,19 @@ class Agent extends RunnerBase_js_1.RunnerBase {
3116
3124
  // so concurrent runs don't share state.
3117
3125
  const providerToolCache = { current: [] };
3118
3126
  const readSkillFor = this.readSkillOfferFor();
3119
- // Per-role skill visibility. Resolved by the tools slot, for the DESCRIPTION
3120
- // and nothing else. An earlier draft of 9.84.0 cached the resolved ids here
3121
- // so the read_skill gate could filter the self-call notice's move offer
3122
- // through them; the notice no longer names a destination at all (see
3123
- // `selfCallNotice`), so there is nothing left to filter and the cache is
3124
- // gone with the clause that needed it. One resolver call per iteration, on
3125
- // the one surface that speaks in the present tense.
3127
+ // Per-role skill visibility. The RESOLVER is handed to the tools slot, which
3128
+ // is the fact's one owner: it resolves the ids once per iteration and
3129
+ // publishes them on scope (`buildToolsSlot.ts` · `discoverStage`). Since 9.86.0 the
3130
+ // description is NOT the only reader — the read_skill gate's refusals, the
3131
+ // `skill.rejected` payload, the propose-transition refusal and the dispatch
3132
+ // roster all filter through that published set
3133
+ // (`stages/toolCalls.ts` · "── Skill-graph read_skill GATE" the gate, `toolCalls.ts` ·
3134
+ // "── THE REFUSAL SPEAKS WITH THE FILTERED SETS" the propose-transition refusal,
3135
+ // `toolCalls.ts` · `dispatchRoster`). Nothing is cached here: an
3136
+ // earlier draft of 9.84.0 cached the resolved ids so the gate could filter
3137
+ // the self-call notice's move offer through them; the notice no longer names
3138
+ // a destination at all (see `selfCallNotice`), so there is nothing left to
3139
+ // filter and the cache went with the clause that needed it.
3126
3140
  const hiddenSkillIds = this.hiddenSkillIdsNow();
3127
3141
  // Registration-time owner stamps (9.60.0) — the identity edges the
3128
3142
  // integrity checks read. Built once per chart from the registry.