footprintjs 9.48.2 → 10.0.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 (326) hide show
  1. package/AGENTS.md +12 -10
  2. package/CLAUDE.md +21 -23
  3. package/README.md +1 -1
  4. package/dist/advanced.js +71 -128
  5. package/dist/esm/advanced.d.ts +24 -58
  6. package/dist/esm/advanced.js +13 -51
  7. package/dist/esm/index.d.ts +5 -8
  8. package/dist/esm/index.js +3 -3
  9. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -1
  10. package/dist/esm/lib/builder/FlowChartBuilder.js +3 -3
  11. package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +1 -1
  12. package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
  13. package/dist/esm/lib/capture/index.d.ts +0 -1
  14. package/dist/esm/lib/capture/index.js +1 -2
  15. package/dist/esm/lib/engine/graph/prefixNodeTree.js +2 -2
  16. package/dist/esm/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  17. package/dist/esm/lib/engine/handlers/ResumeEntry.js +4 -4
  18. package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  19. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +4 -8
  20. package/dist/esm/lib/engine/index.d.ts +1 -1
  21. package/dist/esm/lib/engine/index.js +1 -1
  22. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  23. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  24. package/dist/esm/lib/engine/narrative/index.d.ts +1 -1
  25. package/dist/esm/lib/engine/narrative/index.js +1 -1
  26. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  27. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  28. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  29. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +4 -6
  30. package/dist/esm/lib/engine/traversalContext.d.ts +1 -1
  31. package/dist/esm/lib/engine/traversalContext.js +2 -2
  32. package/dist/esm/lib/engine/types.d.ts +2 -10
  33. package/dist/esm/lib/engine/types.js +1 -1
  34. package/dist/esm/lib/engine/walkSubflowSpec.js +2 -2
  35. package/dist/esm/lib/ids/reservedIds.js +2 -2
  36. package/dist/esm/lib/memory/DiagnosticCollector.js +2 -2
  37. package/dist/esm/lib/memory/StageContext.d.ts +2 -4
  38. package/dist/esm/lib/memory/StageContext.js +2 -2
  39. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  40. package/dist/esm/lib/memory/index.d.ts +6 -21
  41. package/dist/esm/lib/memory/index.js +4 -22
  42. package/dist/esm/lib/memory/redaction.d.ts +1 -1
  43. package/dist/esm/lib/memory/redaction.js +2 -2
  44. package/dist/esm/lib/memory/runPolicy.d.ts +3 -2
  45. package/dist/esm/lib/memory/runPolicy.js +1 -1
  46. package/dist/esm/lib/reactive/createTypedScope.js +2 -2
  47. package/dist/esm/lib/reactive/writeTraps.js +2 -2
  48. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +3 -2
  49. package/dist/esm/lib/recorder/ControlDepRecorder.js +3 -2
  50. package/dist/esm/lib/recorder/EmitRecorder.d.ts +1 -1
  51. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  52. package/dist/esm/lib/recorder/InOutRecorder.js +2 -2
  53. package/dist/esm/lib/recorder/qualityTrace.d.ts +1 -1
  54. package/dist/esm/lib/recorder/qualityTrace.js +2 -2
  55. package/dist/esm/lib/runner/DeferredObserverTier.js +2 -2
  56. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +4 -5
  57. package/dist/esm/lib/runner/ExecutionRuntime.js +2 -5
  58. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +1 -1
  59. package/dist/esm/lib/runner/FlowChartExecutor.js +1 -1
  60. package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  61. package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -4
  62. package/dist/esm/lib/runner/resume.js +2 -2
  63. package/dist/esm/lib/runner/snapshot.js +3 -2
  64. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  65. package/dist/esm/lib/scope/state/zod/scopeFactory.js +2 -2
  66. package/dist/esm/recorders.d.ts +2 -3
  67. package/dist/esm/recorders.js +1 -1
  68. package/dist/esm/trace.d.ts +11 -57
  69. package/dist/esm/trace.js +10 -68
  70. package/dist/index.js +3 -3
  71. package/dist/lib/builder/FlowChartBuilder.js +5 -5
  72. package/dist/lib/builder/structure/StructureRecorder.js +1 -1
  73. package/dist/lib/capture/index.js +2 -4
  74. package/dist/lib/engine/graph/prefixNodeTree.js +5 -5
  75. package/dist/lib/engine/handlers/ResumeEntry.js +4 -4
  76. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -9
  77. package/dist/lib/engine/index.js +1 -1
  78. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  79. package/dist/lib/engine/narrative/index.js +1 -1
  80. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  81. package/dist/lib/engine/traversal/FlowchartTraverser.js +8 -10
  82. package/dist/lib/engine/traversalContext.js +4 -4
  83. package/dist/lib/engine/types.js +1 -1
  84. package/dist/lib/engine/walkSubflowSpec.js +3 -3
  85. package/dist/lib/ids/reservedIds.js +5 -5
  86. package/dist/lib/memory/DiagnosticCollector.js +3 -3
  87. package/dist/lib/memory/StageContext.js +3 -3
  88. package/dist/lib/memory/borrowedMutation.js +3 -3
  89. package/dist/lib/memory/index.js +7 -42
  90. package/dist/lib/memory/redaction.js +3 -3
  91. package/dist/lib/memory/runPolicy.js +1 -1
  92. package/dist/lib/reactive/createTypedScope.js +3 -3
  93. package/dist/lib/reactive/writeTraps.js +4 -4
  94. package/dist/lib/recorder/ControlDepRecorder.js +3 -2
  95. package/dist/lib/recorder/EmitRecorder.js +1 -1
  96. package/dist/lib/recorder/InOutRecorder.js +3 -3
  97. package/dist/lib/recorder/qualityTrace.js +4 -4
  98. package/dist/lib/runner/DeferredObserverTier.js +3 -3
  99. package/dist/lib/runner/ExecutionRuntime.js +6 -9
  100. package/dist/lib/runner/FlowChartExecutor.js +1 -1
  101. package/dist/lib/runner/getSubtreeSnapshot.js +6 -6
  102. package/dist/lib/runner/resume.js +3 -3
  103. package/dist/lib/runner/snapshot.js +6 -5
  104. package/dist/lib/scope/ScopeFacade.js +3 -3
  105. package/dist/lib/scope/state/zod/scopeFactory.js +4 -4
  106. package/dist/recorders.js +1 -1
  107. package/dist/trace.js +18 -120
  108. package/dist/types/advanced.d.ts +24 -58
  109. package/dist/types/index.d.ts +5 -8
  110. package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -1
  111. package/dist/types/lib/builder/structure/StructureRecorder.d.ts +1 -1
  112. package/dist/types/lib/capture/index.d.ts +0 -1
  113. package/dist/types/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  114. package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  115. package/dist/types/lib/engine/index.d.ts +1 -1
  116. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  117. package/dist/types/lib/engine/narrative/index.d.ts +1 -1
  118. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  119. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  120. package/dist/types/lib/engine/traversalContext.d.ts +1 -1
  121. package/dist/types/lib/engine/types.d.ts +2 -10
  122. package/dist/types/lib/memory/StageContext.d.ts +2 -4
  123. package/dist/types/lib/memory/index.d.ts +6 -21
  124. package/dist/types/lib/memory/redaction.d.ts +1 -1
  125. package/dist/types/lib/memory/runPolicy.d.ts +3 -2
  126. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +3 -2
  127. package/dist/types/lib/recorder/EmitRecorder.d.ts +1 -1
  128. package/dist/types/lib/recorder/qualityTrace.d.ts +1 -1
  129. package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -5
  130. package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
  131. package/dist/types/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  132. package/dist/types/recorders.d.ts +2 -3
  133. package/dist/types/trace.d.ts +11 -57
  134. package/package.json +6 -15
  135. package/dist/esm/lib/capture/freeze.d.ts +0 -91
  136. package/dist/esm/lib/capture/freeze.js +0 -314
  137. package/dist/esm/lib/capture/ownData.d.ts +0 -7
  138. package/dist/esm/lib/capture/ownData.js +0 -15
  139. package/dist/esm/lib/capture/valueKinds.d.ts +0 -57
  140. package/dist/esm/lib/capture/valueKinds.js +0 -142
  141. package/dist/esm/lib/ids/runtimeStageId.d.ts +0 -173
  142. package/dist/esm/lib/ids/runtimeStageId.js +0 -194
  143. package/dist/esm/lib/memory/EventLog.d.ts +0 -105
  144. package/dist/esm/lib/memory/EventLog.js +0 -148
  145. package/dist/esm/lib/memory/RecordFrame.d.ts +0 -232
  146. package/dist/esm/lib/memory/RecordFrame.js +0 -296
  147. package/dist/esm/lib/memory/SharedMemory.d.ts +0 -46
  148. package/dist/esm/lib/memory/SharedMemory.js +0 -88
  149. package/dist/esm/lib/memory/TransactionBuffer.d.ts +0 -521
  150. package/dist/esm/lib/memory/TransactionBuffer.js +0 -946
  151. package/dist/esm/lib/memory/admission.d.ts +0 -81
  152. package/dist/esm/lib/memory/admission.js +0 -153
  153. package/dist/esm/lib/memory/backtrack.d.ts +0 -286
  154. package/dist/esm/lib/memory/backtrack.js +0 -457
  155. package/dist/esm/lib/memory/commitLogUtils.d.ts +0 -217
  156. package/dist/esm/lib/memory/commitLogUtils.js +0 -384
  157. package/dist/esm/lib/memory/deltaEncoding.d.ts +0 -66
  158. package/dist/esm/lib/memory/deltaEncoding.js +0 -122
  159. package/dist/esm/lib/memory/equality.d.ts +0 -93
  160. package/dist/esm/lib/memory/equality.js +0 -262
  161. package/dist/esm/lib/memory/eventPosition.d.ts +0 -18
  162. package/dist/esm/lib/memory/eventPosition.js +0 -2
  163. package/dist/esm/lib/memory/honesty.d.ts +0 -93
  164. package/dist/esm/lib/memory/honesty.js +0 -92
  165. package/dist/esm/lib/memory/keyPaths.d.ts +0 -125
  166. package/dist/esm/lib/memory/keyPaths.js +0 -227
  167. package/dist/esm/lib/memory/logModel.d.ts +0 -76
  168. package/dist/esm/lib/memory/logModel.js +0 -364
  169. package/dist/esm/lib/memory/merge.d.ts +0 -26
  170. package/dist/esm/lib/memory/merge.js +0 -60
  171. package/dist/esm/lib/memory/pathOps.d.ts +0 -115
  172. package/dist/esm/lib/memory/pathOps.js +0 -290
  173. package/dist/esm/lib/memory/paths.d.ts +0 -52
  174. package/dist/esm/lib/memory/paths.js +0 -57
  175. package/dist/esm/lib/memory/placeholders.d.ts +0 -39
  176. package/dist/esm/lib/memory/placeholders.js +0 -40
  177. package/dist/esm/lib/memory/recordCommit.d.ts +0 -45
  178. package/dist/esm/lib/memory/recordCommit.js +0 -61
  179. package/dist/esm/lib/memory/scrub.d.ts +0 -53
  180. package/dist/esm/lib/memory/scrub.js +0 -74
  181. package/dist/esm/lib/memory/types.d.ts +0 -209
  182. package/dist/esm/lib/memory/types.js +0 -10
  183. package/dist/esm/lib/memory/utils.d.ts +0 -73
  184. package/dist/esm/lib/memory/utils.js +0 -159
  185. package/dist/esm/lib/memory/verbs.d.ts +0 -333
  186. package/dist/esm/lib/memory/verbs.js +0 -427
  187. package/dist/esm/lib/recorder/CommitRangeIndex.d.ts +0 -147
  188. package/dist/esm/lib/recorder/CommitRangeIndex.js +0 -207
  189. package/dist/esm/lib/scope/detectCircular.d.ts +0 -13
  190. package/dist/esm/lib/scope/detectCircular.js +0 -14
  191. package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +0 -5
  192. package/dist/esm/lib/scope/recorders/summarizeValue.js +0 -6
  193. package/dist/esm/lib/slice/elementProvenance.d.ts +0 -81
  194. package/dist/esm/lib/slice/elementProvenance.js +0 -190
  195. package/dist/esm/lib/slice/forwardSliceForKey.d.ts +0 -88
  196. package/dist/esm/lib/slice/forwardSliceForKey.js +0 -243
  197. package/dist/esm/lib/slice/index.d.ts +0 -25
  198. package/dist/esm/lib/slice/index.js +0 -25
  199. package/dist/esm/lib/slice/keyIndex.d.ts +0 -137
  200. package/dist/esm/lib/slice/keyIndex.js +0 -293
  201. package/dist/esm/lib/slice/keyTimeline.d.ts +0 -49
  202. package/dist/esm/lib/slice/keyTimeline.js +0 -113
  203. package/dist/esm/lib/slice/keysReadSources.d.ts +0 -51
  204. package/dist/esm/lib/slice/keysReadSources.js +0 -95
  205. package/dist/esm/lib/slice/serialize.d.ts +0 -78
  206. package/dist/esm/lib/slice/serialize.js +0 -278
  207. package/dist/esm/lib/slice/sliceForKey.d.ts +0 -47
  208. package/dist/esm/lib/slice/sliceForKey.js +0 -88
  209. package/dist/esm/lib/slice/types.d.ts +0 -567
  210. package/dist/esm/lib/slice/types.js +0 -25
  211. package/dist/esm/lib/time-travel/axis.d.ts +0 -119
  212. package/dist/esm/lib/time-travel/axis.js +0 -179
  213. package/dist/esm/lib/time-travel/bundles.d.ts +0 -77
  214. package/dist/esm/lib/time-travel/bundles.js +0 -136
  215. package/dist/esm/lib/time-travel/chain.d.ts +0 -93
  216. package/dist/esm/lib/time-travel/chain.js +0 -188
  217. package/dist/esm/lib/time-travel/commitStops.d.ts +0 -55
  218. package/dist/esm/lib/time-travel/commitStops.js +0 -202
  219. package/dist/esm/lib/time-travel/index.d.ts +0 -22
  220. package/dist/esm/lib/time-travel/index.js +0 -21
  221. package/dist/esm/lib/time-travel/stateAt.d.ts +0 -102
  222. package/dist/esm/lib/time-travel/stateAt.js +0 -153
  223. package/dist/esm/lib/time-travel/tagStops.d.ts +0 -72
  224. package/dist/esm/lib/time-travel/tagStops.js +0 -102
  225. package/dist/esm/lib/time-travel/timeTravel.d.ts +0 -70
  226. package/dist/esm/lib/time-travel/timeTravel.js +0 -360
  227. package/dist/esm/lib/time-travel/types.d.ts +0 -470
  228. package/dist/esm/lib/time-travel/types.js +0 -23
  229. package/dist/esm/write.d.ts +0 -47
  230. package/dist/esm/write.js +0 -46
  231. package/dist/lib/capture/freeze.js +0 -320
  232. package/dist/lib/capture/ownData.js +0 -19
  233. package/dist/lib/capture/valueKinds.js +0 -146
  234. package/dist/lib/ids/runtimeStageId.js +0 -210
  235. package/dist/lib/memory/EventLog.js +0 -152
  236. package/dist/lib/memory/RecordFrame.js +0 -300
  237. package/dist/lib/memory/SharedMemory.js +0 -92
  238. package/dist/lib/memory/TransactionBuffer.js +0 -950
  239. package/dist/lib/memory/admission.js +0 -159
  240. package/dist/lib/memory/backtrack.js +0 -463
  241. package/dist/lib/memory/commitLogUtils.js +0 -399
  242. package/dist/lib/memory/deltaEncoding.js +0 -128
  243. package/dist/lib/memory/equality.js +0 -266
  244. package/dist/lib/memory/eventPosition.js +0 -3
  245. package/dist/lib/memory/honesty.js +0 -95
  246. package/dist/lib/memory/keyPaths.js +0 -243
  247. package/dist/lib/memory/logModel.js +0 -372
  248. package/dist/lib/memory/merge.js +0 -64
  249. package/dist/lib/memory/pathOps.js +0 -306
  250. package/dist/lib/memory/paths.js +0 -62
  251. package/dist/lib/memory/placeholders.js +0 -43
  252. package/dist/lib/memory/recordCommit.js +0 -65
  253. package/dist/lib/memory/scrub.js +0 -79
  254. package/dist/lib/memory/types.js +0 -11
  255. package/dist/lib/memory/utils.js +0 -178
  256. package/dist/lib/memory/verbs.js +0 -444
  257. package/dist/lib/recorder/CommitRangeIndex.js +0 -211
  258. package/dist/lib/scope/detectCircular.js +0 -21
  259. package/dist/lib/scope/recorders/summarizeValue.js +0 -10
  260. package/dist/lib/slice/elementProvenance.js +0 -195
  261. package/dist/lib/slice/forwardSliceForKey.js +0 -247
  262. package/dist/lib/slice/index.js +0 -42
  263. package/dist/lib/slice/keyIndex.js +0 -313
  264. package/dist/lib/slice/keyTimeline.js +0 -117
  265. package/dist/lib/slice/keysReadSources.js +0 -101
  266. package/dist/lib/slice/serialize.js +0 -286
  267. package/dist/lib/slice/sliceForKey.js +0 -93
  268. package/dist/lib/slice/types.js +0 -26
  269. package/dist/lib/time-travel/axis.js +0 -184
  270. package/dist/lib/time-travel/bundles.js +0 -144
  271. package/dist/lib/time-travel/chain.js +0 -193
  272. package/dist/lib/time-travel/commitStops.js +0 -206
  273. package/dist/lib/time-travel/index.js +0 -32
  274. package/dist/lib/time-travel/stateAt.js +0 -160
  275. package/dist/lib/time-travel/tagStops.js +0 -106
  276. package/dist/lib/time-travel/timeTravel.js +0 -364
  277. package/dist/lib/time-travel/types.js +0 -24
  278. package/dist/types/lib/capture/freeze.d.ts +0 -91
  279. package/dist/types/lib/capture/ownData.d.ts +0 -7
  280. package/dist/types/lib/capture/valueKinds.d.ts +0 -57
  281. package/dist/types/lib/ids/runtimeStageId.d.ts +0 -173
  282. package/dist/types/lib/memory/EventLog.d.ts +0 -105
  283. package/dist/types/lib/memory/RecordFrame.d.ts +0 -232
  284. package/dist/types/lib/memory/SharedMemory.d.ts +0 -46
  285. package/dist/types/lib/memory/TransactionBuffer.d.ts +0 -521
  286. package/dist/types/lib/memory/admission.d.ts +0 -81
  287. package/dist/types/lib/memory/backtrack.d.ts +0 -286
  288. package/dist/types/lib/memory/commitLogUtils.d.ts +0 -217
  289. package/dist/types/lib/memory/deltaEncoding.d.ts +0 -66
  290. package/dist/types/lib/memory/equality.d.ts +0 -93
  291. package/dist/types/lib/memory/eventPosition.d.ts +0 -18
  292. package/dist/types/lib/memory/honesty.d.ts +0 -93
  293. package/dist/types/lib/memory/keyPaths.d.ts +0 -125
  294. package/dist/types/lib/memory/logModel.d.ts +0 -76
  295. package/dist/types/lib/memory/merge.d.ts +0 -26
  296. package/dist/types/lib/memory/pathOps.d.ts +0 -115
  297. package/dist/types/lib/memory/paths.d.ts +0 -52
  298. package/dist/types/lib/memory/placeholders.d.ts +0 -39
  299. package/dist/types/lib/memory/recordCommit.d.ts +0 -45
  300. package/dist/types/lib/memory/scrub.d.ts +0 -53
  301. package/dist/types/lib/memory/types.d.ts +0 -209
  302. package/dist/types/lib/memory/utils.d.ts +0 -73
  303. package/dist/types/lib/memory/verbs.d.ts +0 -333
  304. package/dist/types/lib/recorder/CommitRangeIndex.d.ts +0 -147
  305. package/dist/types/lib/scope/detectCircular.d.ts +0 -13
  306. package/dist/types/lib/scope/recorders/summarizeValue.d.ts +0 -5
  307. package/dist/types/lib/slice/elementProvenance.d.ts +0 -81
  308. package/dist/types/lib/slice/forwardSliceForKey.d.ts +0 -88
  309. package/dist/types/lib/slice/index.d.ts +0 -25
  310. package/dist/types/lib/slice/keyIndex.d.ts +0 -137
  311. package/dist/types/lib/slice/keyTimeline.d.ts +0 -49
  312. package/dist/types/lib/slice/keysReadSources.d.ts +0 -51
  313. package/dist/types/lib/slice/serialize.d.ts +0 -78
  314. package/dist/types/lib/slice/sliceForKey.d.ts +0 -47
  315. package/dist/types/lib/slice/types.d.ts +0 -567
  316. package/dist/types/lib/time-travel/axis.d.ts +0 -119
  317. package/dist/types/lib/time-travel/bundles.d.ts +0 -77
  318. package/dist/types/lib/time-travel/chain.d.ts +0 -93
  319. package/dist/types/lib/time-travel/commitStops.d.ts +0 -55
  320. package/dist/types/lib/time-travel/index.d.ts +0 -22
  321. package/dist/types/lib/time-travel/stateAt.d.ts +0 -102
  322. package/dist/types/lib/time-travel/tagStops.d.ts +0 -72
  323. package/dist/types/lib/time-travel/timeTravel.d.ts +0 -70
  324. package/dist/types/lib/time-travel/types.d.ts +0 -470
  325. package/dist/types/write.d.ts +0 -47
  326. package/dist/write.js +0 -52
@@ -1,72 +0,0 @@
1
- /**
2
- * tagStops — the stops a chart DECLARED, read back off its commit log.
3
- *
4
- * WHY THIS FILE EXISTS. `commitStops` is the only stop grammar the substrate
5
- * knows: one stop per executed stage. Every richer axis — milestones, turns,
6
- * tool calls — was a consumer's classifier over `runtimeStageId`: a switch
7
- * that parses `#` and `/`, lives outside the recording, and goes stale when
8
- * a stage is renamed. Since 9.21.0 the author can put NAMES on a stage at
9
- * build time (`FlowChartBuilder.tag` / `options.tags`) and the engine stamps
10
- * them on the stage's commit bundle (`CommitBundle.tags`). This strategy
11
- * reads them back: a stored recording from ANY chart scrubs by its own
12
- * milestones, with no id conventions in the reader.
13
- *
14
- * WHAT IT IS. One expression over `filterStops(commitStops(...))`: keep the
15
- * stops whose FIRST bundle carries a tag (any of the asked-for ones, or any
16
- * tag at all when none are asked for), give the survivors the log back, and
17
- * carry the bundle's whole tag array as `Stop.meta`. Everything a filtering
18
- * axis owes — the bookend guard, the re-partition so a dropped stage's
19
- * commits fold into the tagged stop BEFORE them, `prologue` on a start that
20
- * absorbed stages — comes from `filterStops`, stated once, in `axis.ts`.
21
- *
22
- * WHAT IT IS NOT. Not a second vocabulary: the strings are the consumer's,
23
- * carried verbatim. Not a derivation: a stage with no declared tag gets no
24
- * stop here, however recognisable its id — a reader that wants ids classified
25
- * writes that keep rule itself (`filterStops`), or reads the fold
26
- * (`stateAt`) and keeps by what changed. And not a re-walk: only a tag the
27
- * engine actually stamped can put a stop on this axis.
28
- */
29
- import type { TimeTravelStrategy } from './types.js';
30
- /**
31
- * A {@link TimeTravelStrategy} whose stops are the stages that carry a
32
- * declared tag.
33
- *
34
- * **Keep rule: any-of.** A stop survives when its bundle's `tags` shares at
35
- * least one name with `tags`; with `tags` omitted (or empty), every tagged
36
- * stop survives. All-of, or a rule over more than the tags, is a
37
- * `filterStops` call away — the library owns no vocabulary, so it owns no
38
- * richer rule either.
39
- *
40
- * **Attribution by precedence.** An untagged stage's commits fold into the
41
- * tagged stop BEFORE it (what `filterStops` does); the commits before the
42
- * first tagged stage are absorbed by `'start'`, which then says
43
- * `prologue: true`. A run with no tagged stage yields the two bookends only.
44
- *
45
- * **`meta` is the array.** Each kept stop carries its bundle's full `tags`
46
- * (not just the ones asked for), so a reader that filtered on
47
- * `'milestone:llm-turn'` can still see the stage was also `'audit'`.
48
- *
49
- * **The equivalence law.** `stateAt(stop)` at every kept stop equals
50
- * `commitStops`'s fold at the same commit index — a filtering axis moves the
51
- * stops, never the log.
52
- *
53
- * @example
54
- * ```typescript
55
- * import { flowChart } from 'footprintjs';
56
- * import { tagStops, timeTravel } from 'footprintjs/trace';
57
- *
58
- * const chart = flowChart<State>('Seed', seedFn, 'seed')
59
- * .addFunction('Call model', callFn, 'call-llm')
60
- * .tag('milestone:llm-turn')
61
- * .addFunction('Route', routeFn, 'route')
62
- * .tag('milestone:decision')
63
- * .build();
64
- *
65
- * // …run it, keep the snapshot…
66
- * const cursor = timeTravel(snapshot, { strategy: tagStops(['milestone:llm-turn']) });
67
- * cursor.stops.map((s) => s.label); // ['Run start', 'Call model', 'Run end']
68
- * cursor.stops[1].meta; // ['milestone:llm-turn']
69
- * cursor.stops[0].prologue; // true — 'seed' ran before the first turn
70
- * ```
71
- */
72
- export declare function tagStops(tags?: readonly string[]): TimeTravelStrategy<readonly string[]>;
@@ -1,102 +0,0 @@
1
- /**
2
- * tagStops — the stops a chart DECLARED, read back off its commit log.
3
- *
4
- * WHY THIS FILE EXISTS. `commitStops` is the only stop grammar the substrate
5
- * knows: one stop per executed stage. Every richer axis — milestones, turns,
6
- * tool calls — was a consumer's classifier over `runtimeStageId`: a switch
7
- * that parses `#` and `/`, lives outside the recording, and goes stale when
8
- * a stage is renamed. Since 9.21.0 the author can put NAMES on a stage at
9
- * build time (`FlowChartBuilder.tag` / `options.tags`) and the engine stamps
10
- * them on the stage's commit bundle (`CommitBundle.tags`). This strategy
11
- * reads them back: a stored recording from ANY chart scrubs by its own
12
- * milestones, with no id conventions in the reader.
13
- *
14
- * WHAT IT IS. One expression over `filterStops(commitStops(...))`: keep the
15
- * stops whose FIRST bundle carries a tag (any of the asked-for ones, or any
16
- * tag at all when none are asked for), give the survivors the log back, and
17
- * carry the bundle's whole tag array as `Stop.meta`. Everything a filtering
18
- * axis owes — the bookend guard, the re-partition so a dropped stage's
19
- * commits fold into the tagged stop BEFORE them, `prologue` on a start that
20
- * absorbed stages — comes from `filterStops`, stated once, in `axis.ts`.
21
- *
22
- * WHAT IT IS NOT. Not a second vocabulary: the strings are the consumer's,
23
- * carried verbatim. Not a derivation: a stage with no declared tag gets no
24
- * stop here, however recognisable its id — a reader that wants ids classified
25
- * writes that keep rule itself (`filterStops`), or reads the fold
26
- * (`stateAt`) and keeps by what changed. And not a re-walk: only a tag the
27
- * engine actually stamped can put a stop on this axis.
28
- */
29
- import { filterStops } from './axis.js';
30
- import { commitStops } from './commitStops.js';
31
- /**
32
- * The tags a stop's first bundle carries, or `undefined` when it carries
33
- * none. Reads the bundle at `stop.commitIdx` — the FIRST commit of the
34
- * stage, which is where `StageContext.commit` records the stamp (a fork
35
- * child's repeat and a mount's exit — the bundles with a `phase` — carry
36
- * none).
37
- */
38
- function tagsAt(log, stop) {
39
- const raw = log[stop.commitIdx]?.tags;
40
- // A stored row is `unknown[]`-shaped until narrowed: keep only the strings,
41
- // so a damaged row can never put a non-name into `Stop.meta`.
42
- const tags = Array.isArray(raw) ? raw.filter((t) => typeof t === 'string') : [];
43
- return tags.length > 0 ? tags : undefined;
44
- }
45
- /**
46
- * A {@link TimeTravelStrategy} whose stops are the stages that carry a
47
- * declared tag.
48
- *
49
- * **Keep rule: any-of.** A stop survives when its bundle's `tags` shares at
50
- * least one name with `tags`; with `tags` omitted (or empty), every tagged
51
- * stop survives. All-of, or a rule over more than the tags, is a
52
- * `filterStops` call away — the library owns no vocabulary, so it owns no
53
- * richer rule either.
54
- *
55
- * **Attribution by precedence.** An untagged stage's commits fold into the
56
- * tagged stop BEFORE it (what `filterStops` does); the commits before the
57
- * first tagged stage are absorbed by `'start'`, which then says
58
- * `prologue: true`. A run with no tagged stage yields the two bookends only.
59
- *
60
- * **`meta` is the array.** Each kept stop carries its bundle's full `tags`
61
- * (not just the ones asked for), so a reader that filtered on
62
- * `'milestone:llm-turn'` can still see the stage was also `'audit'`.
63
- *
64
- * **The equivalence law.** `stateAt(stop)` at every kept stop equals
65
- * `commitStops`'s fold at the same commit index — a filtering axis moves the
66
- * stops, never the log.
67
- *
68
- * @example
69
- * ```typescript
70
- * import { flowChart } from 'footprintjs';
71
- * import { tagStops, timeTravel } from 'footprintjs/trace';
72
- *
73
- * const chart = flowChart<State>('Seed', seedFn, 'seed')
74
- * .addFunction('Call model', callFn, 'call-llm')
75
- * .tag('milestone:llm-turn')
76
- * .addFunction('Route', routeFn, 'route')
77
- * .tag('milestone:decision')
78
- * .build();
79
- *
80
- * // …run it, keep the snapshot…
81
- * const cursor = timeTravel(snapshot, { strategy: tagStops(['milestone:llm-turn']) });
82
- * cursor.stops.map((s) => s.label); // ['Run start', 'Call model', 'Run end']
83
- * cursor.stops[1].meta; // ['milestone:llm-turn']
84
- * cursor.stops[0].prologue; // true — 'seed' ran before the first turn
85
- * ```
86
- */
87
- export function tagStops(tags) {
88
- const wanted = tags && tags.length > 0 ? new Set(tags) : undefined;
89
- return {
90
- stopsFor(commitLog, executionTree, subflowResults) {
91
- return filterStops(commitStops(commitLog, executionTree, subflowResults), (stop) => {
92
- const stamped = tagsAt(commitLog, stop);
93
- if (!stamped)
94
- return null;
95
- if (wanted && !stamped.some((tag) => wanted.has(tag)))
96
- return null;
97
- return { meta: stamped };
98
- });
99
- },
100
- };
101
- }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnU3RvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RpbWUtdHJhdmVsL3RhZ1N0b3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFHSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUcvQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLE1BQU0sQ0FBQyxHQUE0QixFQUFFLElBQW1CO0lBQy9ELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ3RDLDRFQUE0RTtJQUM1RSw4REFBOEQ7SUFDOUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3RixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUF3QjtJQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDbkUsT0FBTztRQUNMLFFBQVEsQ0FDTixTQUFrQyxFQUNsQyxhQUE2QixFQUM3QixjQUF3QjtZQUV4QixPQUFPLFdBQVcsQ0FBb0IsV0FBVyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDcEcsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQzFCLElBQUksTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQztnQkFDbkUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdGFnU3RvcHMg4oCUIHRoZSBzdG9wcyBhIGNoYXJ0IERFQ0xBUkVELCByZWFkIGJhY2sgb2ZmIGl0cyBjb21taXQgbG9nLlxuICpcbiAqIFdIWSBUSElTIEZJTEUgRVhJU1RTLiBgY29tbWl0U3RvcHNgIGlzIHRoZSBvbmx5IHN0b3AgZ3JhbW1hciB0aGUgc3Vic3RyYXRlXG4gKiBrbm93czogb25lIHN0b3AgcGVyIGV4ZWN1dGVkIHN0YWdlLiBFdmVyeSByaWNoZXIgYXhpcyDigJQgbWlsZXN0b25lcywgdHVybnMsXG4gKiB0b29sIGNhbGxzIOKAlCB3YXMgYSBjb25zdW1lcidzIGNsYXNzaWZpZXIgb3ZlciBgcnVudGltZVN0YWdlSWRgOiBhIHN3aXRjaFxuICogdGhhdCBwYXJzZXMgYCNgIGFuZCBgL2AsIGxpdmVzIG91dHNpZGUgdGhlIHJlY29yZGluZywgYW5kIGdvZXMgc3RhbGUgd2hlblxuICogYSBzdGFnZSBpcyByZW5hbWVkLiBTaW5jZSA5LjIxLjAgdGhlIGF1dGhvciBjYW4gcHV0IE5BTUVTIG9uIGEgc3RhZ2UgYXRcbiAqIGJ1aWxkIHRpbWUgKGBGbG93Q2hhcnRCdWlsZGVyLnRhZ2AgLyBgb3B0aW9ucy50YWdzYCkgYW5kIHRoZSBlbmdpbmUgc3RhbXBzXG4gKiB0aGVtIG9uIHRoZSBzdGFnZSdzIGNvbW1pdCBidW5kbGUgKGBDb21taXRCdW5kbGUudGFnc2ApLiBUaGlzIHN0cmF0ZWd5XG4gKiByZWFkcyB0aGVtIGJhY2s6IGEgc3RvcmVkIHJlY29yZGluZyBmcm9tIEFOWSBjaGFydCBzY3J1YnMgYnkgaXRzIG93blxuICogbWlsZXN0b25lcywgd2l0aCBubyBpZCBjb252ZW50aW9ucyBpbiB0aGUgcmVhZGVyLlxuICpcbiAqIFdIQVQgSVQgSVMuIE9uZSBleHByZXNzaW9uIG92ZXIgYGZpbHRlclN0b3BzKGNvbW1pdFN0b3BzKC4uLikpYDoga2VlcCB0aGVcbiAqIHN0b3BzIHdob3NlIEZJUlNUIGJ1bmRsZSBjYXJyaWVzIGEgdGFnIChhbnkgb2YgdGhlIGFza2VkLWZvciBvbmVzLCBvciBhbnlcbiAqIHRhZyBhdCBhbGwgd2hlbiBub25lIGFyZSBhc2tlZCBmb3IpLCBnaXZlIHRoZSBzdXJ2aXZvcnMgdGhlIGxvZyBiYWNrLCBhbmRcbiAqIGNhcnJ5IHRoZSBidW5kbGUncyB3aG9sZSB0YWcgYXJyYXkgYXMgYFN0b3AubWV0YWAuIEV2ZXJ5dGhpbmcgYSBmaWx0ZXJpbmdcbiAqIGF4aXMgb3dlcyDigJQgdGhlIGJvb2tlbmQgZ3VhcmQsIHRoZSByZS1wYXJ0aXRpb24gc28gYSBkcm9wcGVkIHN0YWdlJ3NcbiAqIGNvbW1pdHMgZm9sZCBpbnRvIHRoZSB0YWdnZWQgc3RvcCBCRUZPUkUgdGhlbSwgYHByb2xvZ3VlYCBvbiBhIHN0YXJ0IHRoYXRcbiAqIGFic29yYmVkIHN0YWdlcyDigJQgY29tZXMgZnJvbSBgZmlsdGVyU3RvcHNgLCBzdGF0ZWQgb25jZSwgaW4gYGF4aXMudHNgLlxuICpcbiAqIFdIQVQgSVQgSVMgTk9ULiBOb3QgYSBzZWNvbmQgdm9jYWJ1bGFyeTogdGhlIHN0cmluZ3MgYXJlIHRoZSBjb25zdW1lcidzLFxuICogY2FycmllZCB2ZXJiYXRpbS4gTm90IGEgZGVyaXZhdGlvbjogYSBzdGFnZSB3aXRoIG5vIGRlY2xhcmVkIHRhZyBnZXRzIG5vXG4gKiBzdG9wIGhlcmUsIGhvd2V2ZXIgcmVjb2duaXNhYmxlIGl0cyBpZCDigJQgYSByZWFkZXIgdGhhdCB3YW50cyBpZHMgY2xhc3NpZmllZFxuICogd3JpdGVzIHRoYXQga2VlcCBydWxlIGl0c2VsZiAoYGZpbHRlclN0b3BzYCksIG9yIHJlYWRzIHRoZSBmb2xkXG4gKiAoYHN0YXRlQXRgKSBhbmQga2VlcHMgYnkgd2hhdCBjaGFuZ2VkLiBBbmQgbm90IGEgcmUtd2Fsazogb25seSBhIHRhZyB0aGVcbiAqIGVuZ2luZSBhY3R1YWxseSBzdGFtcGVkIGNhbiBwdXQgYSBzdG9wIG9uIHRoaXMgYXhpcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgRXhlY3V0aW9uVHJlZSB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJTdG9wcyB9IGZyb20gJy4vYXhpcy5qcyc7XG5pbXBvcnQgeyBjb21taXRTdG9wcyB9IGZyb20gJy4vY29tbWl0U3RvcHMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdG9wLCBUaW1lVHJhdmVsU3RyYXRlZ3kgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBUaGUgdGFncyBhIHN0b3AncyBmaXJzdCBidW5kbGUgY2Fycmllcywgb3IgYHVuZGVmaW5lZGAgd2hlbiBpdCBjYXJyaWVzXG4gKiBub25lLiBSZWFkcyB0aGUgYnVuZGxlIGF0IGBzdG9wLmNvbW1pdElkeGAg4oCUIHRoZSBGSVJTVCBjb21taXQgb2YgdGhlXG4gKiBzdGFnZSwgd2hpY2ggaXMgd2hlcmUgYFN0YWdlQ29udGV4dC5jb21taXRgIHJlY29yZHMgdGhlIHN0YW1wIChhIGZvcmtcbiAqIGNoaWxkJ3MgcmVwZWF0IGFuZCBhIG1vdW50J3MgZXhpdCDigJQgdGhlIGJ1bmRsZXMgd2l0aCBhIGBwaGFzZWAg4oCUIGNhcnJ5XG4gKiBub25lKS5cbiAqL1xuZnVuY3Rpb24gdGFnc0F0KGxvZzogcmVhZG9ubHkgQ29tbWl0QnVuZGxlW10sIHN0b3A6IFN0b3A8dW5rbm93bj4pOiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJhdyA9IGxvZ1tzdG9wLmNvbW1pdElkeF0/LnRhZ3M7XG4gIC8vIEEgc3RvcmVkIHJvdyBpcyBgdW5rbm93bltdYC1zaGFwZWQgdW50aWwgbmFycm93ZWQ6IGtlZXAgb25seSB0aGUgc3RyaW5ncyxcbiAgLy8gc28gYSBkYW1hZ2VkIHJvdyBjYW4gbmV2ZXIgcHV0IGEgbm9uLW5hbWUgaW50byBgU3RvcC5tZXRhYC5cbiAgY29uc3QgdGFncyA9IEFycmF5LmlzQXJyYXkocmF3KSA/IHJhdy5maWx0ZXIoKHQpOiB0IGlzIHN0cmluZyA9PiB0eXBlb2YgdCA9PT0gJ3N0cmluZycpIDogW107XG4gIHJldHVybiB0YWdzLmxlbmd0aCA+IDAgPyB0YWdzIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEEge0BsaW5rIFRpbWVUcmF2ZWxTdHJhdGVneX0gd2hvc2Ugc3RvcHMgYXJlIHRoZSBzdGFnZXMgdGhhdCBjYXJyeSBhXG4gKiBkZWNsYXJlZCB0YWcuXG4gKlxuICogKipLZWVwIHJ1bGU6IGFueS1vZi4qKiBBIHN0b3Agc3Vydml2ZXMgd2hlbiBpdHMgYnVuZGxlJ3MgYHRhZ3NgIHNoYXJlcyBhdFxuICogbGVhc3Qgb25lIG5hbWUgd2l0aCBgdGFnc2A7IHdpdGggYHRhZ3NgIG9taXR0ZWQgKG9yIGVtcHR5KSwgZXZlcnkgdGFnZ2VkXG4gKiBzdG9wIHN1cnZpdmVzLiBBbGwtb2YsIG9yIGEgcnVsZSBvdmVyIG1vcmUgdGhhbiB0aGUgdGFncywgaXMgYVxuICogYGZpbHRlclN0b3BzYCBjYWxsIGF3YXkg4oCUIHRoZSBsaWJyYXJ5IG93bnMgbm8gdm9jYWJ1bGFyeSwgc28gaXQgb3ducyBub1xuICogcmljaGVyIHJ1bGUgZWl0aGVyLlxuICpcbiAqICoqQXR0cmlidXRpb24gYnkgcHJlY2VkZW5jZS4qKiBBbiB1bnRhZ2dlZCBzdGFnZSdzIGNvbW1pdHMgZm9sZCBpbnRvIHRoZVxuICogdGFnZ2VkIHN0b3AgQkVGT1JFIGl0ICh3aGF0IGBmaWx0ZXJTdG9wc2AgZG9lcyk7IHRoZSBjb21taXRzIGJlZm9yZSB0aGVcbiAqIGZpcnN0IHRhZ2dlZCBzdGFnZSBhcmUgYWJzb3JiZWQgYnkgYCdzdGFydCdgLCB3aGljaCB0aGVuIHNheXNcbiAqIGBwcm9sb2d1ZTogdHJ1ZWAuIEEgcnVuIHdpdGggbm8gdGFnZ2VkIHN0YWdlIHlpZWxkcyB0aGUgdHdvIGJvb2tlbmRzIG9ubHkuXG4gKlxuICogKipgbWV0YWAgaXMgdGhlIGFycmF5LioqIEVhY2gga2VwdCBzdG9wIGNhcnJpZXMgaXRzIGJ1bmRsZSdzIGZ1bGwgYHRhZ3NgXG4gKiAobm90IGp1c3QgdGhlIG9uZXMgYXNrZWQgZm9yKSwgc28gYSByZWFkZXIgdGhhdCBmaWx0ZXJlZCBvblxuICogYCdtaWxlc3RvbmU6bGxtLXR1cm4nYCBjYW4gc3RpbGwgc2VlIHRoZSBzdGFnZSB3YXMgYWxzbyBgJ2F1ZGl0J2AuXG4gKlxuICogKipUaGUgZXF1aXZhbGVuY2UgbGF3LioqIGBzdGF0ZUF0KHN0b3ApYCBhdCBldmVyeSBrZXB0IHN0b3AgZXF1YWxzXG4gKiBgY29tbWl0U3RvcHNgJ3MgZm9sZCBhdCB0aGUgc2FtZSBjb21taXQgaW5kZXgg4oCUIGEgZmlsdGVyaW5nIGF4aXMgbW92ZXMgdGhlXG4gKiBzdG9wcywgbmV2ZXIgdGhlIGxvZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZmxvd0NoYXJ0IH0gZnJvbSAnZm9vdHByaW50anMnO1xuICogaW1wb3J0IHsgdGFnU3RvcHMsIHRpbWVUcmF2ZWwgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgY2hhcnQgPSBmbG93Q2hhcnQ8U3RhdGU+KCdTZWVkJywgc2VlZEZuLCAnc2VlZCcpXG4gKiAgIC5hZGRGdW5jdGlvbignQ2FsbCBtb2RlbCcsIGNhbGxGbiwgJ2NhbGwtbGxtJylcbiAqICAgLnRhZygnbWlsZXN0b25lOmxsbS10dXJuJylcbiAqICAgLmFkZEZ1bmN0aW9uKCdSb3V0ZScsIHJvdXRlRm4sICdyb3V0ZScpXG4gKiAgIC50YWcoJ21pbGVzdG9uZTpkZWNpc2lvbicpXG4gKiAgIC5idWlsZCgpO1xuICpcbiAqIC8vIOKApnJ1biBpdCwga2VlcCB0aGUgc25hcHNob3TigKZcbiAqIGNvbnN0IGN1cnNvciA9IHRpbWVUcmF2ZWwoc25hcHNob3QsIHsgc3RyYXRlZ3k6IHRhZ1N0b3BzKFsnbWlsZXN0b25lOmxsbS10dXJuJ10pIH0pO1xuICogY3Vyc29yLnN0b3BzLm1hcCgocykgPT4gcy5sYWJlbCk7ICAgLy8gWydSdW4gc3RhcnQnLCAnQ2FsbCBtb2RlbCcsICdSdW4gZW5kJ11cbiAqIGN1cnNvci5zdG9wc1sxXS5tZXRhOyAgICAgICAgICAgICAgIC8vIFsnbWlsZXN0b25lOmxsbS10dXJuJ11cbiAqIGN1cnNvci5zdG9wc1swXS5wcm9sb2d1ZTsgICAgICAgICAgIC8vIHRydWUg4oCUICdzZWVkJyByYW4gYmVmb3JlIHRoZSBmaXJzdCB0dXJuXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhZ1N0b3BzKHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXSk6IFRpbWVUcmF2ZWxTdHJhdGVneTxyZWFkb25seSBzdHJpbmdbXT4ge1xuICBjb25zdCB3YW50ZWQgPSB0YWdzICYmIHRhZ3MubGVuZ3RoID4gMCA/IG5ldyBTZXQodGFncykgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgc3RvcHNGb3IoXG4gICAgICBjb21taXRMb2c6IHJlYWRvbmx5IENvbW1pdEJ1bmRsZVtdLFxuICAgICAgZXhlY3V0aW9uVHJlZT86IEV4ZWN1dGlvblRyZWUsXG4gICAgICBzdWJmbG93UmVzdWx0cz86IHVua25vd24sXG4gICAgKTogU3RvcDxyZWFkb25seSBzdHJpbmdbXT5bXSB7XG4gICAgICByZXR1cm4gZmlsdGVyU3RvcHM8cmVhZG9ubHkgc3RyaW5nW10+KGNvbW1pdFN0b3BzKGNvbW1pdExvZywgZXhlY3V0aW9uVHJlZSwgc3ViZmxvd1Jlc3VsdHMpLCAoc3RvcCkgPT4ge1xuICAgICAgICBjb25zdCBzdGFtcGVkID0gdGFnc0F0KGNvbW1pdExvZywgc3RvcCk7XG4gICAgICAgIGlmICghc3RhbXBlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICh3YW50ZWQgJiYgIXN0YW1wZWQuc29tZSgodGFnKSA9PiB3YW50ZWQuaGFzKHRhZykpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHsgbWV0YTogc3RhbXBlZCB9O1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
@@ -1,70 +0,0 @@
1
- /**
2
- * timeTravel — a reader's cursor over a finished trace.
3
- *
4
- * The five laws this file implements (and the folder README states with an
5
- * example each):
6
- *
7
- * 1. ONE cursor. This object holds the only position. `drill()` returns a
8
- * separate cursor over a separate log, never a second position here.
9
- * 2. A miss never moves. Every refusal returns the reason and leaves the
10
- * cursor exactly where it was.
11
- * 3. A fold result is detached. `stateAt` returns frozen, cloned state that
12
- * shares nothing with the engine.
13
- * 4. Marks live beside the log. They are the reader's notes, never written
14
- * into the run's record.
15
- * 5. Stops are DERIVED from the recorded log — read-time queries over
16
- * collected data, never a re-walk that invents what was not recorded.
17
- *
18
- * A CHAIN (9.18.0) does not add a sixth law and does not bend these five: it
19
- * is still one cursor, over sources that are still only read. What it adds is
20
- * that the STEPS run across a pause/resume — see `chain.ts` for the ordering
21
- * and lineage checks, and for why commit indices stay run-local.
22
- */
23
- import type { TimeTravel, TimeTravelOptions, TimeTravelSource } from './types.js';
24
- /**
25
- * Open a reader's cursor over a finished run.
26
- *
27
- * Nothing here executes anything: `snapshot` is a record of a run that already
28
- * happened, and every question is answered by reading it. A stored JSON
29
- * snapshot works exactly like a live one — since 9.18.0 its `commitLog` may be
30
- * an unvalidated `unknown[]`, narrowed per bundle where the fold reads it, so
31
- * a replayed recording needs no cast.
32
- *
33
- * @param snapshot `executor.getSnapshot()`, or any object with the same
34
- * shape — including one round-tripped through JSON, or a subflow subtree
35
- * (`getSubtreeSnapshot()`, whose log is spelled `history`). An ARRAY of them
36
- * is a CHAIN: a pause and its resume read as one axis (see below).
37
- * @param options `strategy` chooses how stops are derived (default:
38
- * `commitStops`, one stop per executed stage); `marks` seeds the cursor with
39
- * bookmarks, e.g. restored from a saved reading session.
40
- *
41
- * @throws when a chain is not in run order, or its legs are not from one
42
- * lineage — three checks, each with its own reason (see `chain.ts`):
43
- * no `runtimeStageId` may appear in two legs; each leg's first execution
44
- * index must be past the previous leg's last (the engine never resets the
45
- * counter across a resume); and each leg's `initialState` must deep-equal
46
- * the state the legs before it fold to — on a resume that base IS the state
47
- * at the pause, so a foreign leg whose indices merely happen to be higher
48
- * is refused too. The third check runs only where the record allows it: the
49
- * later leg must carry an `initialState` and the earlier legs must fold from
50
- * a real base with no unreadable rows; otherwise (an older recording with
51
- * no base) the chain rests on the two index checks alone, and the fold's
52
- * `basis` says what it stood on.
53
- *
54
- * @example
55
- * ```typescript
56
- * const tt = timeTravel(executor.getSnapshot());
57
- * tt.jumpTo('score-risk#4');
58
- * console.log(tt.changedSince()); // ['riskScore', 'tier']
59
- * console.log(tt.stateAt().state); // state as that stage left it
60
- * tt.mark('the bad one');
61
- * const inner = tt.drill('sf-payment#7'); // a separate cursor, its own log
62
- *
63
- * // A pause and its resume, read as ONE axis:
64
- * const chained = timeTravel([pausedSnapshot, resumedSnapshot]);
65
- * chained.last(); // the run's real end
66
- * chained.at()!.sourceIdx; // 1 — which leg the indices are in
67
- * chained.jumpTo('approve#3'); // finds it in either leg
68
- * ```
69
- */
70
- export declare function timeTravel<TMeta = unknown>(snapshot: TimeTravelSource | readonly TimeTravelSource[], options?: TimeTravelOptions<TMeta>): TimeTravel<TMeta>;