footprintjs 10.0.1 → 10.2.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 (368) hide show
  1. package/AGENTS.md +2 -1
  2. package/CLAUDE.md +61 -7
  3. package/README.md +136 -312
  4. package/dist/esm/index.d.ts +62 -2
  5. package/dist/esm/index.js +13 -6
  6. package/dist/esm/lib/attempt/anySignal.d.ts +19 -0
  7. package/dist/esm/lib/attempt/anySignal.js +39 -0
  8. package/dist/esm/lib/attempt/call.d.ts +88 -0
  9. package/dist/esm/lib/attempt/call.js +129 -0
  10. package/dist/esm/lib/attempt/category.d.ts +37 -0
  11. package/dist/esm/lib/attempt/category.js +131 -0
  12. package/dist/esm/lib/attempt/correlation.d.ts +95 -0
  13. package/dist/esm/lib/attempt/correlation.js +178 -0
  14. package/dist/esm/lib/attempt/deadline.d.ts +44 -0
  15. package/dist/esm/lib/attempt/deadline.js +101 -0
  16. package/dist/esm/lib/attempt/decision.d.ts +52 -0
  17. package/dist/esm/lib/attempt/decision.js +134 -0
  18. package/dist/esm/lib/attempt/effect.d.ts +76 -0
  19. package/dist/esm/lib/attempt/effect.js +160 -0
  20. package/dist/esm/lib/attempt/errors.d.ts +41 -0
  21. package/dist/esm/lib/attempt/errors.js +44 -0
  22. package/dist/esm/lib/attempt/index.d.ts +18 -0
  23. package/dist/esm/lib/attempt/index.js +15 -0
  24. package/dist/esm/lib/attempt/name.d.ts +21 -0
  25. package/dist/esm/lib/attempt/name.js +43 -0
  26. package/dist/esm/lib/attempt/observed.d.ts +66 -0
  27. package/dist/esm/lib/attempt/observed.js +171 -0
  28. package/dist/esm/lib/attempt/policy.d.ts +45 -0
  29. package/dist/esm/lib/attempt/policy.js +83 -0
  30. package/dist/esm/lib/attempt/record.d.ts +11 -0
  31. package/dist/esm/lib/attempt/record.js +24 -0
  32. package/dist/esm/lib/attempt/retryLoopContext.d.ts +18 -0
  33. package/dist/esm/lib/attempt/retryLoopContext.js +24 -0
  34. package/dist/esm/lib/attempt/retryLoopTypes.d.ts +18 -0
  35. package/dist/esm/lib/attempt/retryLoopTypes.js +2 -0
  36. package/dist/esm/lib/attempt/runner.d.ts +157 -0
  37. package/dist/esm/lib/attempt/runner.js +523 -0
  38. package/dist/esm/lib/attempt/standalone.d.ts +47 -0
  39. package/dist/esm/lib/attempt/standalone.js +126 -0
  40. package/dist/esm/lib/attempt/types.d.ts +453 -0
  41. package/dist/esm/lib/attempt/types.js +16 -0
  42. package/dist/esm/lib/budget/index.d.ts +9 -0
  43. package/dist/esm/lib/budget/index.js +9 -0
  44. package/dist/esm/lib/budget/timeBudget.d.ts +136 -0
  45. package/dist/esm/lib/budget/timeBudget.js +666 -0
  46. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +88 -3
  47. package/dist/esm/lib/builder/FlowChartBuilder.js +199 -9
  48. package/dist/esm/lib/builder/retryLoop.d.ts +56 -0
  49. package/dist/esm/lib/builder/retryLoop.js +283 -0
  50. package/dist/esm/lib/builder/types.d.ts +35 -1
  51. package/dist/esm/lib/builder/types.js +1 -1
  52. package/dist/esm/lib/decide/decide.js +2 -2
  53. package/dist/esm/lib/decide/index.d.ts +1 -1
  54. package/dist/esm/lib/decide/index.js +2 -2
  55. package/dist/esm/lib/decide/types.d.ts +3 -0
  56. package/dist/esm/lib/decide/types.js +1 -8
  57. package/dist/esm/lib/engine/graph/StageNode.d.ts +11 -1
  58. package/dist/esm/lib/engine/graph/StageNode.js +1 -1
  59. package/dist/esm/lib/engine/graph/prefixNodeTree.js +5 -1
  60. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +36 -6
  61. package/dist/esm/lib/engine/handlers/DeciderHandler.js +9 -5
  62. package/dist/esm/lib/engine/handlers/ResumeEntry.js +3 -1
  63. package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
  64. package/dist/esm/lib/engine/handlers/StageRunner.d.ts +8 -1
  65. package/dist/esm/lib/engine/handlers/StageRunner.js +36 -9
  66. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +24 -5
  67. package/dist/esm/lib/engine/handlers/commitStage.d.ts +7 -0
  68. package/dist/esm/lib/engine/handlers/commitStage.js +22 -4
  69. package/dist/esm/lib/engine/handlers/stageError.d.ts +9 -0
  70. package/dist/esm/lib/engine/handlers/stageError.js +23 -1
  71. package/dist/esm/lib/engine/index.d.ts +2 -2
  72. package/dist/esm/lib/engine/index.js +1 -1
  73. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  74. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +68 -40
  75. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  76. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  77. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  78. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +61 -9
  79. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  80. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  81. package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  82. package/dist/esm/lib/engine/narrative/formatting/sentences.js +127 -1
  83. package/dist/esm/lib/engine/narrative/index.d.ts +2 -2
  84. package/dist/esm/lib/engine/narrative/index.js +1 -1
  85. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  86. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  87. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  88. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  89. package/dist/esm/lib/engine/narrative/recorders/index.d.ts +1 -1
  90. package/dist/esm/lib/engine/narrative/recorders/index.js +1 -1
  91. package/dist/esm/lib/engine/narrative/types.d.ts +74 -5
  92. package/dist/esm/lib/engine/narrative/types.js +1 -1
  93. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  94. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +194 -118
  95. package/dist/esm/lib/engine/traversalContext.d.ts +7 -2
  96. package/dist/esm/lib/engine/traversalContext.js +6 -3
  97. package/dist/esm/lib/engine/types.d.ts +52 -57
  98. package/dist/esm/lib/engine/types.js +1 -1
  99. package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
  100. package/dist/esm/lib/errors/terminalFailure.js +60 -0
  101. package/dist/esm/lib/{decide → filter}/evaluator.d.ts +7 -2
  102. package/dist/esm/lib/filter/evaluator.js +135 -0
  103. package/dist/esm/lib/ids/idempotencyKey.d.ts +14 -0
  104. package/dist/esm/lib/ids/idempotencyKey.js +24 -0
  105. package/dist/esm/lib/memory/StageContext.d.ts +123 -3
  106. package/dist/esm/lib/memory/StageContext.js +245 -4
  107. package/dist/esm/lib/memory/attention.d.ts +26 -0
  108. package/dist/esm/lib/memory/attention.js +171 -0
  109. package/dist/esm/lib/memory/borrowedMutation.d.ts +8 -0
  110. package/dist/esm/lib/memory/borrowedMutation.js +14 -1
  111. package/dist/esm/lib/memory/frameTypes.d.ts +38 -0
  112. package/dist/esm/lib/memory/frameTypes.js +3 -1
  113. package/dist/esm/lib/memory/redaction.d.ts +12 -0
  114. package/dist/esm/lib/memory/redaction.js +54 -5
  115. package/dist/esm/lib/pause/record.js +10 -1
  116. package/dist/esm/lib/pause/types.d.ts +19 -0
  117. package/dist/esm/lib/pause/types.js +17 -1
  118. package/dist/esm/lib/reactive/createTypedScope.js +3 -1
  119. package/dist/esm/lib/reactive/types.d.ts +36 -4
  120. package/dist/esm/lib/reactive/types.js +3 -1
  121. package/dist/esm/lib/recorder/AttemptRecorder.d.ts +141 -0
  122. package/dist/esm/lib/recorder/AttemptRecorder.js +412 -0
  123. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +36 -2
  124. package/dist/esm/lib/recorder/ControlDepRecorder.js +50 -2
  125. package/dist/esm/lib/recorder/EmitRecorder.d.ts +3 -0
  126. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  127. package/dist/esm/lib/recorder/InOutRecorder.d.ts +37 -1
  128. package/dist/esm/lib/recorder/InOutRecorder.js +75 -6
  129. package/dist/esm/lib/recorder/QualityRecorder.d.ts +32 -5
  130. package/dist/esm/lib/recorder/QualityRecorder.js +87 -29
  131. package/dist/esm/lib/recorder/TopologyRecorder.d.ts +35 -5
  132. package/dist/esm/lib/recorder/TopologyRecorder.js +76 -2
  133. package/dist/esm/lib/recorder/attemptMetricRows.d.ts +11 -0
  134. package/dist/esm/lib/recorder/attemptMetricRows.js +202 -0
  135. package/dist/esm/lib/recorder/attemptMetrics.d.ts +7 -0
  136. package/dist/esm/lib/recorder/attemptMetrics.js +165 -0
  137. package/dist/esm/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  138. package/dist/esm/lib/recorder/attemptMetricsTypes.js +2 -0
  139. package/dist/esm/lib/recorder/attemptOTel.d.ts +78 -0
  140. package/dist/esm/lib/recorder/attemptOTel.js +107 -0
  141. package/dist/esm/lib/recorder/attemptSeries.d.ts +81 -0
  142. package/dist/esm/lib/recorder/attemptSeries.js +103 -0
  143. package/dist/esm/lib/recorder/hooks.d.ts +9 -0
  144. package/dist/esm/lib/recorder/hooks.js +4 -1
  145. package/dist/esm/lib/runner/DeferredObserverTier.js +13 -1
  146. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +54 -6
  147. package/dist/esm/lib/runner/ExecutionRuntime.js +57 -5
  148. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +46 -2
  149. package/dist/esm/lib/runner/FlowChartExecutor.js +330 -101
  150. package/dist/esm/lib/runner/RunnableChart.d.ts +6 -0
  151. package/dist/esm/lib/runner/RunnableChart.js +5 -1
  152. package/dist/esm/lib/runner/attach.d.ts +2 -1
  153. package/dist/esm/lib/runner/attach.js +8 -2
  154. package/dist/esm/lib/runner/checkpoint.js +3 -1
  155. package/dist/esm/lib/runner/deadline.d.ts +42 -0
  156. package/dist/esm/lib/runner/deadline.js +90 -0
  157. package/dist/esm/lib/runner/index.d.ts +3 -1
  158. package/dist/esm/lib/runner/index.js +2 -1
  159. package/dist/esm/lib/runner/options.d.ts +17 -0
  160. package/dist/esm/lib/runner/options.js +3 -1
  161. package/dist/esm/lib/runner/recordSink.d.ts +128 -0
  162. package/dist/esm/lib/runner/recordSink.js +296 -0
  163. package/dist/esm/lib/runner/resume.d.ts +3 -0
  164. package/dist/esm/lib/runner/resume.js +22 -2
  165. package/dist/esm/lib/runner/snapshot.d.ts +2 -2
  166. package/dist/esm/lib/runner/snapshot.js +6 -2
  167. package/dist/esm/lib/scope/ScopeFacade.d.ts +118 -4
  168. package/dist/esm/lib/scope/ScopeFacade.js +304 -7
  169. package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  170. package/dist/esm/lib/scope/recorders/DebugRecorder.js +79 -13
  171. package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  172. package/dist/esm/lib/scope/recorders/MetricRecorder.js +15 -2
  173. package/dist/esm/lib/scope/runtime.d.ts +3 -0
  174. package/dist/esm/lib/scope/runtime.js +1 -1
  175. package/dist/esm/lib/scope/types.d.ts +6 -0
  176. package/dist/esm/lib/scope/types.js +1 -1
  177. package/dist/esm/lib/sinks/fileSink.d.ts +135 -0
  178. package/dist/esm/lib/sinks/fileSink.js +387 -0
  179. package/dist/esm/recorders.d.ts +8 -2
  180. package/dist/esm/recorders.js +7 -1
  181. package/dist/esm/sinks.d.ts +23 -0
  182. package/dist/esm/sinks.js +23 -0
  183. package/dist/esm/trace.d.ts +2 -2
  184. package/dist/esm/trace.js +1 -1
  185. package/dist/index.js +77 -60
  186. package/dist/lib/attempt/anySignal.js +43 -0
  187. package/dist/lib/attempt/call.js +134 -0
  188. package/dist/lib/attempt/category.js +136 -0
  189. package/dist/lib/attempt/correlation.js +186 -0
  190. package/dist/lib/attempt/deadline.js +112 -0
  191. package/dist/lib/attempt/decision.js +139 -0
  192. package/dist/lib/attempt/effect.js +174 -0
  193. package/dist/lib/attempt/errors.js +49 -0
  194. package/dist/lib/attempt/index.js +26 -0
  195. package/dist/lib/attempt/name.js +48 -0
  196. package/dist/lib/attempt/observed.js +177 -0
  197. package/dist/lib/attempt/policy.js +92 -0
  198. package/dist/lib/attempt/record.js +29 -0
  199. package/dist/lib/attempt/retryLoopContext.js +31 -0
  200. package/dist/lib/attempt/retryLoopTypes.js +3 -0
  201. package/dist/lib/attempt/runner.js +530 -0
  202. package/dist/lib/attempt/standalone.js +130 -0
  203. package/dist/lib/attempt/types.js +17 -0
  204. package/dist/lib/budget/index.js +17 -0
  205. package/dist/lib/budget/timeBudget.js +674 -0
  206. package/dist/lib/builder/FlowChartBuilder.js +199 -9
  207. package/dist/lib/builder/retryLoop.js +287 -0
  208. package/dist/lib/builder/types.js +1 -1
  209. package/dist/lib/decide/decide.js +2 -2
  210. package/dist/lib/decide/index.js +2 -2
  211. package/dist/lib/decide/types.js +1 -8
  212. package/dist/lib/engine/graph/StageNode.js +1 -1
  213. package/dist/lib/engine/graph/prefixNodeTree.js +5 -1
  214. package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
  215. package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
  216. package/dist/lib/engine/handlers/ResumeEntry.js +3 -1
  217. package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
  218. package/dist/lib/engine/handlers/StageRunner.js +36 -9
  219. package/dist/lib/engine/handlers/SubflowExecutor.js +24 -5
  220. package/dist/lib/engine/handlers/commitStage.js +24 -5
  221. package/dist/lib/engine/handlers/stageError.js +26 -2
  222. package/dist/lib/engine/index.js +1 -1
  223. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +67 -39
  224. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  225. package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +60 -8
  226. package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  227. package/dist/lib/engine/narrative/formatting/sentences.js +131 -2
  228. package/dist/lib/engine/narrative/index.js +1 -1
  229. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  230. package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  231. package/dist/lib/engine/narrative/recorders/index.js +1 -1
  232. package/dist/lib/engine/narrative/types.js +1 -1
  233. package/dist/lib/engine/traversal/FlowchartTraverser.js +192 -116
  234. package/dist/lib/engine/traversalContext.js +6 -3
  235. package/dist/lib/engine/types.js +1 -1
  236. package/dist/lib/errors/terminalFailure.js +64 -0
  237. package/dist/lib/filter/evaluator.js +139 -0
  238. package/dist/lib/ids/idempotencyKey.js +28 -0
  239. package/dist/lib/memory/StageContext.js +246 -5
  240. package/dist/lib/memory/attention.js +175 -0
  241. package/dist/lib/memory/borrowedMutation.js +16 -2
  242. package/dist/lib/memory/frameTypes.js +3 -1
  243. package/dist/lib/memory/redaction.js +54 -5
  244. package/dist/lib/pause/record.js +10 -1
  245. package/dist/lib/pause/types.js +17 -1
  246. package/dist/lib/reactive/createTypedScope.js +3 -1
  247. package/dist/lib/reactive/types.js +3 -1
  248. package/dist/lib/recorder/AttemptRecorder.js +417 -0
  249. package/dist/lib/recorder/ControlDepRecorder.js +50 -2
  250. package/dist/lib/recorder/EmitRecorder.js +1 -1
  251. package/dist/lib/recorder/InOutRecorder.js +75 -6
  252. package/dist/lib/recorder/QualityRecorder.js +87 -29
  253. package/dist/lib/recorder/TopologyRecorder.js +76 -2
  254. package/dist/lib/recorder/attemptMetricRows.js +209 -0
  255. package/dist/lib/recorder/attemptMetrics.js +174 -0
  256. package/dist/lib/recorder/attemptMetricsTypes.js +3 -0
  257. package/dist/lib/recorder/attemptOTel.js +111 -0
  258. package/dist/lib/recorder/attemptSeries.js +113 -0
  259. package/dist/lib/recorder/hooks.js +4 -1
  260. package/dist/lib/runner/DeferredObserverTier.js +13 -1
  261. package/dist/lib/runner/ExecutionRuntime.js +57 -5
  262. package/dist/lib/runner/FlowChartExecutor.js +330 -101
  263. package/dist/lib/runner/RunnableChart.js +5 -1
  264. package/dist/lib/runner/attach.js +8 -2
  265. package/dist/lib/runner/checkpoint.js +3 -1
  266. package/dist/lib/runner/deadline.js +94 -0
  267. package/dist/lib/runner/index.js +4 -2
  268. package/dist/lib/runner/options.js +3 -1
  269. package/dist/lib/runner/recordSink.js +302 -0
  270. package/dist/lib/runner/resume.js +22 -2
  271. package/dist/lib/runner/snapshot.js +6 -2
  272. package/dist/lib/scope/ScopeFacade.js +303 -6
  273. package/dist/lib/scope/recorders/DebugRecorder.js +79 -13
  274. package/dist/lib/scope/recorders/MetricRecorder.js +15 -2
  275. package/dist/lib/scope/runtime.js +1 -1
  276. package/dist/lib/scope/types.js +1 -1
  277. package/dist/lib/sinks/fileSink.js +392 -0
  278. package/dist/recorders.js +10 -2
  279. package/dist/sinks.js +32 -0
  280. package/dist/trace.js +1 -1
  281. package/dist/types/index.d.ts +62 -2
  282. package/dist/types/lib/attempt/anySignal.d.ts +19 -0
  283. package/dist/types/lib/attempt/call.d.ts +88 -0
  284. package/dist/types/lib/attempt/category.d.ts +37 -0
  285. package/dist/types/lib/attempt/correlation.d.ts +95 -0
  286. package/dist/types/lib/attempt/deadline.d.ts +44 -0
  287. package/dist/types/lib/attempt/decision.d.ts +52 -0
  288. package/dist/types/lib/attempt/effect.d.ts +76 -0
  289. package/dist/types/lib/attempt/errors.d.ts +41 -0
  290. package/dist/types/lib/attempt/index.d.ts +18 -0
  291. package/dist/types/lib/attempt/name.d.ts +21 -0
  292. package/dist/types/lib/attempt/observed.d.ts +66 -0
  293. package/dist/types/lib/attempt/policy.d.ts +45 -0
  294. package/dist/types/lib/attempt/record.d.ts +11 -0
  295. package/dist/types/lib/attempt/retryLoopContext.d.ts +18 -0
  296. package/dist/types/lib/attempt/retryLoopTypes.d.ts +18 -0
  297. package/dist/types/lib/attempt/runner.d.ts +157 -0
  298. package/dist/types/lib/attempt/standalone.d.ts +47 -0
  299. package/dist/types/lib/attempt/types.d.ts +453 -0
  300. package/dist/types/lib/budget/index.d.ts +9 -0
  301. package/dist/types/lib/budget/timeBudget.d.ts +136 -0
  302. package/dist/types/lib/builder/FlowChartBuilder.d.ts +88 -3
  303. package/dist/types/lib/builder/retryLoop.d.ts +56 -0
  304. package/dist/types/lib/builder/types.d.ts +35 -1
  305. package/dist/types/lib/decide/index.d.ts +1 -1
  306. package/dist/types/lib/decide/types.d.ts +3 -0
  307. package/dist/types/lib/engine/graph/StageNode.d.ts +11 -1
  308. package/dist/types/lib/engine/handlers/StageRunner.d.ts +8 -1
  309. package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
  310. package/dist/types/lib/engine/handlers/stageError.d.ts +9 -0
  311. package/dist/types/lib/engine/index.d.ts +2 -2
  312. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  313. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  314. package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  315. package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  316. package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  317. package/dist/types/lib/engine/narrative/index.d.ts +2 -2
  318. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  319. package/dist/types/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  320. package/dist/types/lib/engine/narrative/recorders/index.d.ts +1 -1
  321. package/dist/types/lib/engine/narrative/types.d.ts +74 -5
  322. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  323. package/dist/types/lib/engine/traversalContext.d.ts +7 -2
  324. package/dist/types/lib/engine/types.d.ts +52 -57
  325. package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
  326. package/dist/types/lib/{decide → filter}/evaluator.d.ts +7 -2
  327. package/dist/types/lib/ids/idempotencyKey.d.ts +14 -0
  328. package/dist/types/lib/memory/StageContext.d.ts +123 -3
  329. package/dist/types/lib/memory/attention.d.ts +26 -0
  330. package/dist/types/lib/memory/borrowedMutation.d.ts +8 -0
  331. package/dist/types/lib/memory/frameTypes.d.ts +38 -0
  332. package/dist/types/lib/memory/redaction.d.ts +12 -0
  333. package/dist/types/lib/pause/types.d.ts +19 -0
  334. package/dist/types/lib/reactive/types.d.ts +36 -4
  335. package/dist/types/lib/recorder/AttemptRecorder.d.ts +141 -0
  336. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +36 -2
  337. package/dist/types/lib/recorder/EmitRecorder.d.ts +3 -0
  338. package/dist/types/lib/recorder/InOutRecorder.d.ts +37 -1
  339. package/dist/types/lib/recorder/QualityRecorder.d.ts +32 -5
  340. package/dist/types/lib/recorder/TopologyRecorder.d.ts +35 -5
  341. package/dist/types/lib/recorder/attemptMetricRows.d.ts +11 -0
  342. package/dist/types/lib/recorder/attemptMetrics.d.ts +7 -0
  343. package/dist/types/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  344. package/dist/types/lib/recorder/attemptOTel.d.ts +78 -0
  345. package/dist/types/lib/recorder/attemptSeries.d.ts +81 -0
  346. package/dist/types/lib/recorder/hooks.d.ts +9 -0
  347. package/dist/types/lib/runner/ExecutionRuntime.d.ts +54 -6
  348. package/dist/types/lib/runner/FlowChartExecutor.d.ts +46 -2
  349. package/dist/types/lib/runner/RunnableChart.d.ts +6 -0
  350. package/dist/types/lib/runner/attach.d.ts +2 -1
  351. package/dist/types/lib/runner/deadline.d.ts +42 -0
  352. package/dist/types/lib/runner/index.d.ts +3 -1
  353. package/dist/types/lib/runner/options.d.ts +17 -0
  354. package/dist/types/lib/runner/recordSink.d.ts +128 -0
  355. package/dist/types/lib/runner/resume.d.ts +3 -0
  356. package/dist/types/lib/runner/snapshot.d.ts +2 -2
  357. package/dist/types/lib/scope/ScopeFacade.d.ts +118 -4
  358. package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  359. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  360. package/dist/types/lib/scope/runtime.d.ts +3 -0
  361. package/dist/types/lib/scope/types.d.ts +6 -0
  362. package/dist/types/lib/sinks/fileSink.d.ts +135 -0
  363. package/dist/types/recorders.d.ts +8 -2
  364. package/dist/types/sinks.d.ts +23 -0
  365. package/dist/types/trace.d.ts +2 -2
  366. package/package.json +20 -6
  367. package/dist/esm/lib/decide/evaluator.js +0 -130
  368. package/dist/lib/decide/evaluator.js +0 -134
@@ -47,4 +47,130 @@ export function errorSentence(ctx) {
47
47
  export function validationSentence(details) {
48
48
  return ` Validation issues: ${details}.`;
49
49
  }
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudGVuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL2Zvcm1hdHRpbmcvc2VudGVuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxHQUEwRDtJQUMxRixPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDO0FBQ3ZHLENBQUM7QUFFRCxxRkFBcUY7QUFDckYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQXdFO0lBQ3ZHLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDOUIsSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxPQUFPLE1BQU0sR0FBRyxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUMsU0FBUyxpQkFBaUIsVUFBVSxHQUFHLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLFdBQVc7UUFBRSxPQUFPLE1BQU0sR0FBRyxDQUFDLFdBQVcsY0FBYyxVQUFVLEdBQUcsQ0FBQztJQUM3RSxJQUFJLEdBQUcsQ0FBQyxTQUFTO1FBQUUsT0FBTyx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsMkJBQTJCLFVBQVUsR0FBRyxDQUFDO0lBQ3hHLE9BQU8sK0NBQStDLFVBQVUsR0FBRyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQXNCO0lBQ2pELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxvQkFBb0IsS0FBSyxHQUFHLENBQUM7QUFDekUsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBc0I7SUFDakQsT0FBTyxHQUFHLENBQUMsV0FBVztRQUNwQixDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxXQUFXLFNBQVM7UUFDdkQsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLFNBQVMsWUFBWSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDeEQsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBdUI7SUFDbkQsT0FBTyx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQTBDO0lBQ3RFLE9BQU8sdUJBQXVCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxHQUFvRDtJQUNqRixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNuRCxPQUFPLHdCQUF3QixHQUFHLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBa0M7SUFDbEUsT0FBTyxNQUFNO1NBQ1YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDYixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDckUsT0FBTyxHQUFHLElBQUksS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQXNEO0lBQ2xGLE9BQU8sd0JBQXdCLEdBQUcsQ0FBQyxTQUFTLEtBQUssR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWU7SUFDaEQsT0FBTyx1QkFBdUIsT0FBTyxHQUFHLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBTaGFyZWQgRW5nbGlzaCBzZW50ZW5jZSBib2RpZXMsIHdpdGggbm8gZXZlbnQgY2FwdHVyZSBvciByZWNvcmRlciBzdGF0ZS4gKi9cbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbklzc3VlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL2Vycm9ycy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEJyZWFrUmVuZGVyQ29udGV4dCxcbiAgRGVjaXNpb25SZW5kZXJDb250ZXh0LFxuICBFcnJvclJlbmRlckNvbnRleHQsXG4gIEZvcmtSZW5kZXJDb250ZXh0LFxuICBMb29wUmVuZGVyQ29udGV4dCxcbiAgU3RhZ2VSZW5kZXJDb250ZXh0LFxufSBmcm9tICcuLi9uYXJyYXRpdmVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dSZXN1bWVFdmVudCB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIG5leHRTdGFnZVNlbnRlbmNlKGN0eDogUGljazxTdGFnZVJlbmRlckNvbnRleHQsICdzdGFnZU5hbWUnIHwgJ2Rlc2NyaXB0aW9uJz4pOiBzdHJpbmcge1xuICByZXR1cm4gY3R4LmRlc2NyaXB0aW9uID8gYE5leHQgc3RlcDogJHtjdHguZGVzY3JpcHRpb259LmAgOiBgTmV4dCwgaXQgbW92ZWQgb24gdG8gJHtjdHguc3RhZ2VOYW1lfS5gO1xufVxuXG4vKiogRXZpZGVuY2UgdGFrZXMgcHJlY2VkZW5jZSBhdCB0aGUgQ29tYmluZWQgcmVjb3JkZXI7IHRoaXMgaXMgb25seSBpdHMgZmFsbGJhY2suICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaXNpb25TZW50ZW5jZShjdHg6IFBpY2s8RGVjaXNpb25SZW5kZXJDb250ZXh0LCAnY2hvc2VuJyB8ICdkZXNjcmlwdGlvbicgfCAncmF0aW9uYWxlJz4pOiBzdHJpbmcge1xuICBjb25zdCBicmFuY2hOYW1lID0gY3R4LmNob3NlbjtcbiAgaWYgKGN0eC5kZXNjcmlwdGlvbiAmJiBjdHgucmF0aW9uYWxlKSB7XG4gICAgcmV0dXJuIGBJdCAke2N0eC5kZXNjcmlwdGlvbn06ICR7Y3R4LnJhdGlvbmFsZX0sIHNvIGl0IGNob3NlICR7YnJhbmNoTmFtZX0uYDtcbiAgfVxuICBpZiAoY3R4LmRlc2NyaXB0aW9uKSByZXR1cm4gYEl0ICR7Y3R4LmRlc2NyaXB0aW9ufSBhbmQgY2hvc2UgJHticmFuY2hOYW1lfS5gO1xuICBpZiAoY3R4LnJhdGlvbmFsZSkgcmV0dXJuIGBBIGRlY2lzaW9uIHdhcyBtYWRlOiAke2N0eC5yYXRpb25hbGV9LCBzbyB0aGUgcGF0aCB0YWtlbiB3YXMgJHticmFuY2hOYW1lfS5gO1xuICByZXR1cm4gYEEgZGVjaXNpb24gd2FzIG1hZGUsIGFuZCB0aGUgcGF0aCB0YWtlbiB3YXMgJHticmFuY2hOYW1lfS5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ya1NlbnRlbmNlKGN0eDogRm9ya1JlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICBjb25zdCBuYW1lcyA9IGN0eC5jaGlsZHJlbi5qb2luKCcsICcpO1xuICByZXR1cm4gYEZvcmtpbmcgaW50byAke2N0eC5jaGlsZHJlbi5sZW5ndGh9IHBhcmFsbGVsIHBhdGhzOiAke25hbWVzfS5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9vcFNlbnRlbmNlKGN0eDogTG9vcFJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICByZXR1cm4gY3R4LmRlc2NyaXB0aW9uXG4gICAgPyBgT24gcGFzcyAke2N0eC5pdGVyYXRpb259OiAke2N0eC5kZXNjcmlwdGlvbn0gYWdhaW4uYFxuICAgIDogYE9uIHBhc3MgJHtjdHguaXRlcmF0aW9ufSB0aHJvdWdoICR7Y3R4LnRhcmdldH0uYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyZWFrU2VudGVuY2UoY3R4OiBCcmVha1JlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICByZXR1cm4gYEV4ZWN1dGlvbiBzdG9wcGVkIGF0ICR7Y3R4LnN0YWdlTmFtZX0uYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdXNlU2VudGVuY2UoY3R4OiBQaWNrPEJyZWFrUmVuZGVyQ29udGV4dCwgJ3N0YWdlTmFtZSc+KTogc3RyaW5nIHtcbiAgcmV0dXJuIGBFeGVjdXRpb24gcGF1c2VkIGF0ICR7Y3R4LnN0YWdlTmFtZX0uYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc3VtZVNlbnRlbmNlKGN0eDogUGljazxGbG93UmVzdW1lRXZlbnQsICdzdGFnZU5hbWUnIHwgJ2hhc0lucHV0Jz4pOiBzdHJpbmcge1xuICBjb25zdCBzdWZmaXggPSBjdHguaGFzSW5wdXQgPyAnIHdpdGggaW5wdXQuJyA6ICcuJztcbiAgcmV0dXJuIGBFeGVjdXRpb24gcmVzdW1lZCBhdCAke2N0eC5zdGFnZU5hbWV9JHtzdWZmaXh9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRpb25EZXRhaWxzKGlzc3VlczogcmVhZG9ubHkgVmFsaWRhdGlvbklzc3VlW10pOiBzdHJpbmcge1xuICByZXR1cm4gaXNzdWVzXG4gICAgLm1hcCgoaXNzdWUpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBpc3N1ZS5wYXRoLmxlbmd0aCA+IDAgPyBpc3N1ZS5wYXRoLmpvaW4oJy4nKSA6ICcocm9vdCknO1xuICAgICAgcmV0dXJuIGAke3BhdGh9OiAke2lzc3VlLm1lc3NhZ2V9YDtcbiAgICB9KVxuICAgIC5qb2luKCc7ICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JTZW50ZW5jZShjdHg6IFBpY2s8RXJyb3JSZW5kZXJDb250ZXh0LCAnc3RhZ2VOYW1lJyB8ICdtZXNzYWdlJz4pOiBzdHJpbmcge1xuICByZXR1cm4gYEFuIGVycm9yIG9jY3VycmVkIGF0ICR7Y3R4LnN0YWdlTmFtZX06ICR7Y3R4Lm1lc3NhZ2V9LmA7XG59XG5cbi8qKiBDYWxsZXJzIHJldGFpbiB0aGVpciBkaXN0aW5jdCBydWxlcyBmb3Igd2hldGhlciB0byBkaXNwbGF5IGVtcHR5IGRldGFpbHMuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGlvblNlbnRlbmNlKGRldGFpbHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgIFZhbGlkYXRpb24gaXNzdWVzOiAke2RldGFpbHN9LmA7XG59XG4iXX0=
50
+ /**
51
+ * Whether the narrative tells an attempt (P1b). A STAGE series of ONE attempt — a stage run on the attempt runner
52
+ * only because of a `timeoutMs` or the run's deadline — that succeeded or paused says nothing the stage's own line
53
+ * does not, so it is not told (its record is still on the tree and the hook). Every other attempt is — every call
54
+ * and every observed attempt too (P2): the stage's own line never mentions them.
55
+ */
56
+ export function isAttemptTold(record) {
57
+ return record.kind !== 'stage' || record.of !== 1 || (record.outcome !== 'ok' && record.outcome !== 'paused');
58
+ }
59
+ /**
60
+ * One attempt of a retried stage, as one sentence (10.1): its outcome and duration, the cause of a failure
61
+ * (`category: message`, the category left out when it is `unknown`), and the decision — the wait before a retry,
62
+ * or why the series stopped. The error is the record's SERVED message, so a redacted error reads redacted here.
63
+ * Under a run deadline the decision also says the time left (P1b).
64
+ *
65
+ * Attempt 1 of 3 at Fetch rate failed in 812ms (rate-limited: 429), retrying in 4s.
66
+ * Attempt 3 of 3 at Fetch rate succeeded in 31ms.
67
+ * Attempt 1 of 4 at Charge card failed in 120ms (permanent: card declined); stopped: retryOn declined.
68
+ * Attempt 2 of 3 at Fetch rate timed out after 40s, retrying in 2s (70s left).
69
+ * Attempt 2 of 4 at Charge card timed out after 20s; stopped: no time left (300ms left, next wait 2s).
70
+ */
71
+ export function attemptSentence(stageName, record) {
72
+ if (record.kind === 'call')
73
+ return callSentence(record);
74
+ if (record.kind === 'observed')
75
+ return observedSentence(record);
76
+ const ceiling = record.of !== undefined ? ` of ${record.of}` : '';
77
+ return `Attempt ${record.attempt}${ceiling} at ${stageName} ${attemptOutcome(record)}${effectClause(record)}${attemptDecision(record)}.`;
78
+ }
79
+ /**
80
+ * One attempt of a call a stage made (`scope.$call`, P2), by its target — a single call (`attempts: 1`) says only
81
+ * how it went, since "attempt 1 of 1" and "no attempts left" add nothing:
82
+ *
83
+ * Call inventory.lookup succeeded in 12ms.
84
+ * Call stripe.quotes.create, attempt 1 of 3, failed in 812ms (rate-limited: 429), retrying in 4s.
85
+ */
86
+ function callSentence(record) {
87
+ const target = record.target ?? 'call';
88
+ if (record.of === 1) {
89
+ const decision = record.reason === 'exhausted' ? '' : attemptDecision(record);
90
+ return `Call ${target} ${attemptOutcome(record)}${effectClause(record)}${decision}.`;
91
+ }
92
+ const ceiling = record.of !== undefined ? ` of ${record.of}` : '';
93
+ return `Call ${target}, attempt ${record.attempt}${ceiling}, ${attemptOutcome(record)}${effectClause(record)}${attemptDecision(record)}.`;
94
+ }
95
+ /**
96
+ * One attempt an outside system ran on its own, as its adapter reported it (`observed()`, P2). No decision clause:
97
+ * the system decided what followed, not the library.
98
+ *
99
+ * Observed: the stripe SDK made attempt 2 of 3, failed in 600ms (server: busy).
100
+ */
101
+ function observedSentence(record) {
102
+ const who = record.source === undefined || record.source === 'sdk'
103
+ ? `the ${record.target ?? 'outside'} SDK`
104
+ : `${record.target ?? 'outside'} (${record.source})`;
105
+ const ceiling = record.of !== undefined ? ` of ${record.of}` : '';
106
+ return `Observed: ${who} made attempt ${record.attempt}${ceiling}, ${attemptOutcome(record)}.`;
107
+ }
108
+ function attemptOutcome(record) {
109
+ const took = formatDuration(record.durationMs);
110
+ switch (record.outcome) {
111
+ case 'ok':
112
+ return `succeeded in ${took}`;
113
+ case 'timeout':
114
+ return `timed out after ${took}`;
115
+ case 'paused':
116
+ return `paused after ${took}`;
117
+ case 'aborted':
118
+ return `was aborted after ${took}${record.error ? ` (${record.error.message})` : ''}`;
119
+ default:
120
+ return `failed in ${took}${attemptCause(record)}`;
121
+ }
122
+ }
123
+ /**
124
+ * A touching attempt whose effect is unknown says so (P3) — the outcome alone ("failed", "timed out") would read as
125
+ * "nothing happened", and nothing may be retried blindly on that reading. `applied` and `none` add nothing the
126
+ * outcome does not say. Absent on a target that touches nothing (byte identity).
127
+ *
128
+ * Attempt 2 of 2 at Charge card timed out after 20s, effect on stripe unknown; stopped: no attempts left.
129
+ */
130
+ function effectClause(record) {
131
+ return record.effect === 'unknown' && record.system !== undefined ? `, effect on ${record.system} unknown` : '';
132
+ }
133
+ function attemptCause(record) {
134
+ if (!record.error)
135
+ return '';
136
+ const category = record.category && record.category !== 'unknown' ? `${record.category}: ` : '';
137
+ return ` (${category}${record.error.message})`;
138
+ }
139
+ function attemptDecision(record) {
140
+ if (record.next === 'retry') {
141
+ const left = record.timeLeftMs !== undefined ? ` (${formatDuration(Math.max(0, record.timeLeftMs))} left)` : '';
142
+ return (record.delayMs ? `, retrying in ${formatDuration(record.delayMs)}` : ', retrying immediately') + left;
143
+ }
144
+ if (record.next === 'done')
145
+ return '';
146
+ switch (record.reason) {
147
+ case 'exhausted':
148
+ return '; stopped: no attempts left';
149
+ case 'declined':
150
+ // A throwing predicate is "do not retry" too — but it is a broken predicate, not a verdict.
151
+ return record.retryOnThrew ? '; stopped: retryOn threw' : '; stopped: retryOn declined';
152
+ case 'no-time-left': {
153
+ const facts = [
154
+ ...(record.timeLeftMs !== undefined ? [`${formatDuration(Math.max(0, record.timeLeftMs))} left`] : []),
155
+ ...(record.delayMs !== undefined ? [`next wait ${formatDuration(record.delayMs)}`] : []),
156
+ ];
157
+ return `; stopped: no time left${facts.length > 0 ? ` (${facts.join(', ')})` : ''}`;
158
+ }
159
+ case 'aborted':
160
+ // An attempt that threw the abort's own reason already says it ("was aborted"); an attempt that failed on
161
+ // its own while the run aborted says its failure, then why the series stopped.
162
+ return record.outcome === 'aborted' ? '' : '; stopped: the run was aborted';
163
+ case 'paused':
164
+ // The outcome already says it.
165
+ return '';
166
+ default:
167
+ return `; stopped: ${record.reason}`;
168
+ }
169
+ }
170
+ /** A duration as the narrative says it: whole milliseconds under a second, seconds (one decimal at most) above. */
171
+ export function formatDuration(ms) {
172
+ if (ms < 1_000)
173
+ return `${Math.round(ms)}ms`;
174
+ return `${Number((ms / 1_000).toFixed(1))}s`;
175
+ }
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudGVuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL2Zvcm1hdHRpbmcvc2VudGVuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxHQUEwRDtJQUMxRixPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDO0FBQ3ZHLENBQUM7QUFFRCxxRkFBcUY7QUFDckYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQXdFO0lBQ3ZHLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDOUIsSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxPQUFPLE1BQU0sR0FBRyxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUMsU0FBUyxpQkFBaUIsVUFBVSxHQUFHLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLFdBQVc7UUFBRSxPQUFPLE1BQU0sR0FBRyxDQUFDLFdBQVcsY0FBYyxVQUFVLEdBQUcsQ0FBQztJQUM3RSxJQUFJLEdBQUcsQ0FBQyxTQUFTO1FBQUUsT0FBTyx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsMkJBQTJCLFVBQVUsR0FBRyxDQUFDO0lBQ3hHLE9BQU8sK0NBQStDLFVBQVUsR0FBRyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQXNCO0lBQ2pELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxvQkFBb0IsS0FBSyxHQUFHLENBQUM7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QUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDekYsQ0FBQztZQUNGLE9BQU8sMEJBQTBCLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEYsQ0FBQztRQUNELEtBQUssU0FBUztZQUNaLDBHQUEwRztZQUMxRywrRUFBK0U7WUFDL0UsT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQztRQUM5RSxLQUFLLFFBQVE7WUFDWCwrQkFBK0I7WUFDL0IsT0FBTyxFQUFFLENBQUM7UUFDWjtZQUNFLE9BQU8sY0FBYyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDekMsQ0FBQztBQUNILENBQUM7QUFFRCxtSEFBbUg7QUFDbkgsTUFBTSxVQUFVLGNBQWMsQ0FBQyxFQUFVO0lBQ3ZDLElBQUksRUFBRSxHQUFHLEtBQUs7UUFBRSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQzdDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFNoYXJlZCBFbmdsaXNoIHNlbnRlbmNlIGJvZGllcywgd2l0aCBubyBldmVudCBjYXB0dXJlIG9yIHJlY29yZGVyIHN0YXRlLiAqL1xuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vYXR0ZW1wdC90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25Jc3N1ZSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9lcnJvcnMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBCcmVha1JlbmRlckNvbnRleHQsXG4gIERlY2lzaW9uUmVuZGVyQ29udGV4dCxcbiAgRXJyb3JSZW5kZXJDb250ZXh0LFxuICBGb3JrUmVuZGVyQ29udGV4dCxcbiAgTG9vcFJlbmRlckNvbnRleHQsXG4gIFN0YWdlUmVuZGVyQ29udGV4dCxcbn0gZnJvbSAnLi4vbmFycmF0aXZlVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVzdW1lRXZlbnQgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0U3RhZ2VTZW50ZW5jZShjdHg6IFBpY2s8U3RhZ2VSZW5kZXJDb250ZXh0LCAnc3RhZ2VOYW1lJyB8ICdkZXNjcmlwdGlvbic+KTogc3RyaW5nIHtcbiAgcmV0dXJuIGN0eC5kZXNjcmlwdGlvbiA/IGBOZXh0IHN0ZXA6ICR7Y3R4LmRlc2NyaXB0aW9ufS5gIDogYE5leHQsIGl0IG1vdmVkIG9uIHRvICR7Y3R4LnN0YWdlTmFtZX0uYDtcbn1cblxuLyoqIEV2aWRlbmNlIHRha2VzIHByZWNlZGVuY2UgYXQgdGhlIENvbWJpbmVkIHJlY29yZGVyOyB0aGlzIGlzIG9ubHkgaXRzIGZhbGxiYWNrLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2lzaW9uU2VudGVuY2UoY3R4OiBQaWNrPERlY2lzaW9uUmVuZGVyQ29udGV4dCwgJ2Nob3NlbicgfCAnZGVzY3JpcHRpb24nIHwgJ3JhdGlvbmFsZSc+KTogc3RyaW5nIHtcbiAgY29uc3QgYnJhbmNoTmFtZSA9IGN0eC5jaG9zZW47XG4gIGlmIChjdHguZGVzY3JpcHRpb24gJiYgY3R4LnJhdGlvbmFsZSkge1xuICAgIHJldHVybiBgSXQgJHtjdHguZGVzY3JpcHRpb259OiAke2N0eC5yYXRpb25hbGV9LCBzbyBpdCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gIH1cbiAgaWYgKGN0eC5kZXNjcmlwdGlvbikgcmV0dXJuIGBJdCAke2N0eC5kZXNjcmlwdGlvbn0gYW5kIGNob3NlICR7YnJhbmNoTmFtZX0uYDtcbiAgaWYgKGN0eC5yYXRpb25hbGUpIHJldHVybiBgQSBkZWNpc2lvbiB3YXMgbWFkZTogJHtjdHgucmF0aW9uYWxlfSwgc28gdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYDtcbiAgcmV0dXJuIGBBIGRlY2lzaW9uIHdhcyBtYWRlLCBhbmQgdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcmtTZW50ZW5jZShjdHg6IEZvcmtSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgY29uc3QgbmFtZXMgPSBjdHguY2hpbGRyZW4uam9pbignLCAnKTtcbiAgcmV0dXJuIGBGb3JraW5nIGludG8gJHtjdHguY2hpbGRyZW4ubGVuZ3RofSBwYXJhbGxlbCBwYXRoczogJHtuYW1lc30uYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvb3BTZW50ZW5jZShjdHg6IExvb3BSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgcmV0dXJuIGN0eC5kZXNjcmlwdGlvblxuICAgID8gYE9uIHBhc3MgJHtjdHguaXRlcmF0aW9ufTogJHtjdHguZGVzY3JpcHRpb259IGFnYWluLmBcbiAgICA6IGBPbiBwYXNzICR7Y3R4Lml0ZXJhdGlvbn0gdGhyb3VnaCAke2N0eC50YXJnZXR9LmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmVha1NlbnRlbmNlKGN0eDogQnJlYWtSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgcmV0dXJuIGBFeGVjdXRpb24gc3RvcHBlZCBhdCAke2N0eC5zdGFnZU5hbWV9LmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXVzZVNlbnRlbmNlKGN0eDogUGljazxCcmVha1JlbmRlckNvbnRleHQsICdzdGFnZU5hbWUnPik6IHN0cmluZyB7XG4gIHJldHVybiBgRXhlY3V0aW9uIHBhdXNlZCBhdCAke2N0eC5zdGFnZU5hbWV9LmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN1bWVTZW50ZW5jZShjdHg6IFBpY2s8Rmxvd1Jlc3VtZUV2ZW50LCAnc3RhZ2VOYW1lJyB8ICdoYXNJbnB1dCc+KTogc3RyaW5nIHtcbiAgY29uc3Qgc3VmZml4ID0gY3R4Lmhhc0lucHV0ID8gJyB3aXRoIGlucHV0LicgOiAnLic7XG4gIHJldHVybiBgRXhlY3V0aW9uIHJlc3VtZWQgYXQgJHtjdHguc3RhZ2VOYW1lfSR7c3VmZml4fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0aW9uRGV0YWlscyhpc3N1ZXM6IHJlYWRvbmx5IFZhbGlkYXRpb25Jc3N1ZVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzc3Vlc1xuICAgIC5tYXAoKGlzc3VlKSA9PiB7XG4gICAgICBjb25zdCBwYXRoID0gaXNzdWUucGF0aC5sZW5ndGggPiAwID8gaXNzdWUucGF0aC5qb2luKCcuJykgOiAnKHJvb3QpJztcbiAgICAgIHJldHVybiBgJHtwYXRofTogJHtpc3N1ZS5tZXNzYWdlfWA7XG4gICAgfSlcbiAgICAuam9pbignOyAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yU2VudGVuY2UoY3R4OiBQaWNrPEVycm9yUmVuZGVyQ29udGV4dCwgJ3N0YWdlTmFtZScgfCAnbWVzc2FnZSc+KTogc3RyaW5nIHtcbiAgcmV0dXJuIGBBbiBlcnJvciBvY2N1cnJlZCBhdCAke2N0eC5zdGFnZU5hbWV9OiAke2N0eC5tZXNzYWdlfS5gO1xufVxuXG4vKiogQ2FsbGVycyByZXRhaW4gdGhlaXIgZGlzdGluY3QgcnVsZXMgZm9yIHdoZXRoZXIgdG8gZGlzcGxheSBlbXB0eSBkZXRhaWxzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRpb25TZW50ZW5jZShkZXRhaWxzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCBWYWxpZGF0aW9uIGlzc3VlczogJHtkZXRhaWxzfS5gO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdGhlIG5hcnJhdGl2ZSB0ZWxscyBhbiBhdHRlbXB0IChQMWIpLiBBIFNUQUdFIHNlcmllcyBvZiBPTkUgYXR0ZW1wdCDigJQgYSBzdGFnZSBydW4gb24gdGhlIGF0dGVtcHQgcnVubmVyXG4gKiBvbmx5IGJlY2F1c2Ugb2YgYSBgdGltZW91dE1zYCBvciB0aGUgcnVuJ3MgZGVhZGxpbmUg4oCUIHRoYXQgc3VjY2VlZGVkIG9yIHBhdXNlZCBzYXlzIG5vdGhpbmcgdGhlIHN0YWdlJ3Mgb3duIGxpbmVcbiAqIGRvZXMgbm90LCBzbyBpdCBpcyBub3QgdG9sZCAoaXRzIHJlY29yZCBpcyBzdGlsbCBvbiB0aGUgdHJlZSBhbmQgdGhlIGhvb2spLiBFdmVyeSBvdGhlciBhdHRlbXB0IGlzIOKAlCBldmVyeSBjYWxsXG4gKiBhbmQgZXZlcnkgb2JzZXJ2ZWQgYXR0ZW1wdCB0b28gKFAyKTogdGhlIHN0YWdlJ3Mgb3duIGxpbmUgbmV2ZXIgbWVudGlvbnMgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXR0ZW1wdFRvbGQocmVjb3JkOiBBdHRlbXB0UmVjb3JkKTogYm9vbGVhbiB7XG4gIHJldHVybiByZWNvcmQua2luZCAhPT0gJ3N0YWdlJyB8fCByZWNvcmQub2YgIT09IDEgfHwgKHJlY29yZC5vdXRjb21lICE9PSAnb2snICYmIHJlY29yZC5vdXRjb21lICE9PSAncGF1c2VkJyk7XG59XG5cbi8qKlxuICogT25lIGF0dGVtcHQgb2YgYSByZXRyaWVkIHN0YWdlLCBhcyBvbmUgc2VudGVuY2UgKDEwLjEpOiBpdHMgb3V0Y29tZSBhbmQgZHVyYXRpb24sIHRoZSBjYXVzZSBvZiBhIGZhaWx1cmVcbiAqIChgY2F0ZWdvcnk6IG1lc3NhZ2VgLCB0aGUgY2F0ZWdvcnkgbGVmdCBvdXQgd2hlbiBpdCBpcyBgdW5rbm93bmApLCBhbmQgdGhlIGRlY2lzaW9uIOKAlCB0aGUgd2FpdCBiZWZvcmUgYSByZXRyeSxcbiAqIG9yIHdoeSB0aGUgc2VyaWVzIHN0b3BwZWQuIFRoZSBlcnJvciBpcyB0aGUgcmVjb3JkJ3MgU0VSVkVEIG1lc3NhZ2UsIHNvIGEgcmVkYWN0ZWQgZXJyb3IgcmVhZHMgcmVkYWN0ZWQgaGVyZS5cbiAqIFVuZGVyIGEgcnVuIGRlYWRsaW5lIHRoZSBkZWNpc2lvbiBhbHNvIHNheXMgdGhlIHRpbWUgbGVmdCAoUDFiKS5cbiAqXG4gKiAgIEF0dGVtcHQgMSBvZiAzIGF0IEZldGNoIHJhdGUgZmFpbGVkIGluIDgxMm1zIChyYXRlLWxpbWl0ZWQ6IDQyOSksIHJldHJ5aW5nIGluIDRzLlxuICogICBBdHRlbXB0IDMgb2YgMyBhdCBGZXRjaCByYXRlIHN1Y2NlZWRlZCBpbiAzMW1zLlxuICogICBBdHRlbXB0IDEgb2YgNCBhdCBDaGFyZ2UgY2FyZCBmYWlsZWQgaW4gMTIwbXMgKHBlcm1hbmVudDogY2FyZCBkZWNsaW5lZCk7IHN0b3BwZWQ6IHJldHJ5T24gZGVjbGluZWQuXG4gKiAgIEF0dGVtcHQgMiBvZiAzIGF0IEZldGNoIHJhdGUgdGltZWQgb3V0IGFmdGVyIDQwcywgcmV0cnlpbmcgaW4gMnMgKDcwcyBsZWZ0KS5cbiAqICAgQXR0ZW1wdCAyIG9mIDQgYXQgQ2hhcmdlIGNhcmQgdGltZWQgb3V0IGFmdGVyIDIwczsgc3RvcHBlZDogbm8gdGltZSBsZWZ0ICgzMDBtcyBsZWZ0LCBuZXh0IHdhaXQgMnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0ZW1wdFNlbnRlbmNlKHN0YWdlTmFtZTogc3RyaW5nLCByZWNvcmQ6IEF0dGVtcHRSZWNvcmQpOiBzdHJpbmcge1xuICBpZiAocmVjb3JkLmtpbmQgPT09ICdjYWxsJykgcmV0dXJuIGNhbGxTZW50ZW5jZShyZWNvcmQpO1xuICBpZiAocmVjb3JkLmtpbmQgPT09ICdvYnNlcnZlZCcpIHJldHVybiBvYnNlcnZlZFNlbnRlbmNlKHJlY29yZCk7XG4gIGNvbnN0IGNlaWxpbmcgPSByZWNvcmQub2YgIT09IHVuZGVmaW5lZCA/IGAgb2YgJHtyZWNvcmQub2Z9YCA6ICcnO1xuICByZXR1cm4gYEF0dGVtcHQgJHtyZWNvcmQuYXR0ZW1wdH0ke2NlaWxpbmd9IGF0ICR7c3RhZ2VOYW1lfSAke2F0dGVtcHRPdXRjb21lKHJlY29yZCl9JHtlZmZlY3RDbGF1c2UoXG4gICAgcmVjb3JkLFxuICApfSR7YXR0ZW1wdERlY2lzaW9uKHJlY29yZCl9LmA7XG59XG5cbi8qKlxuICogT25lIGF0dGVtcHQgb2YgYSBjYWxsIGEgc3RhZ2UgbWFkZSAoYHNjb3BlLiRjYWxsYCwgUDIpLCBieSBpdHMgdGFyZ2V0IOKAlCBhIHNpbmdsZSBjYWxsIChgYXR0ZW1wdHM6IDFgKSBzYXlzIG9ubHlcbiAqIGhvdyBpdCB3ZW50LCBzaW5jZSBcImF0dGVtcHQgMSBvZiAxXCIgYW5kIFwibm8gYXR0ZW1wdHMgbGVmdFwiIGFkZCBub3RoaW5nOlxuICpcbiAqICAgQ2FsbCBpbnZlbnRvcnkubG9va3VwIHN1Y2NlZWRlZCBpbiAxMm1zLlxuICogICBDYWxsIHN0cmlwZS5xdW90ZXMuY3JlYXRlLCBhdHRlbXB0IDEgb2YgMywgZmFpbGVkIGluIDgxMm1zIChyYXRlLWxpbWl0ZWQ6IDQyOSksIHJldHJ5aW5nIGluIDRzLlxuICovXG5mdW5jdGlvbiBjYWxsU2VudGVuY2UocmVjb3JkOiBBdHRlbXB0UmVjb3JkKTogc3RyaW5nIHtcbiAgY29uc3QgdGFyZ2V0ID0gcmVjb3JkLnRhcmdldCA/PyAnY2FsbCc7XG4gIGlmIChyZWNvcmQub2YgPT09IDEpIHtcbiAgICBjb25zdCBkZWNpc2lvbiA9IHJlY29yZC5yZWFzb24gPT09ICdleGhhdXN0ZWQnID8gJycgOiBhdHRlbXB0RGVjaXNpb24ocmVjb3JkKTtcbiAgICByZXR1cm4gYENhbGwgJHt0YXJnZXR9ICR7YXR0ZW1wdE91dGNvbWUocmVjb3JkKX0ke2VmZmVjdENsYXVzZShyZWNvcmQpfSR7ZGVjaXNpb259LmA7XG4gIH1cbiAgY29uc3QgY2VpbGluZyA9IHJlY29yZC5vZiAhPT0gdW5kZWZpbmVkID8gYCBvZiAke3JlY29yZC5vZn1gIDogJyc7XG4gIHJldHVybiBgQ2FsbCAke3RhcmdldH0sIGF0dGVtcHQgJHtyZWNvcmQuYXR0ZW1wdH0ke2NlaWxpbmd9LCAke2F0dGVtcHRPdXRjb21lKHJlY29yZCl9JHtlZmZlY3RDbGF1c2UoXG4gICAgcmVjb3JkLFxuICApfSR7YXR0ZW1wdERlY2lzaW9uKHJlY29yZCl9LmA7XG59XG5cbi8qKlxuICogT25lIGF0dGVtcHQgYW4gb3V0c2lkZSBzeXN0ZW0gcmFuIG9uIGl0cyBvd24sIGFzIGl0cyBhZGFwdGVyIHJlcG9ydGVkIGl0IChgb2JzZXJ2ZWQoKWAsIFAyKS4gTm8gZGVjaXNpb24gY2xhdXNlOlxuICogdGhlIHN5c3RlbSBkZWNpZGVkIHdoYXQgZm9sbG93ZWQsIG5vdCB0aGUgbGlicmFyeS5cbiAqXG4gKiAgIE9ic2VydmVkOiB0aGUgc3RyaXBlIFNESyBtYWRlIGF0dGVtcHQgMiBvZiAzLCBmYWlsZWQgaW4gNjAwbXMgKHNlcnZlcjogYnVzeSkuXG4gKi9cbmZ1bmN0aW9uIG9ic2VydmVkU2VudGVuY2UocmVjb3JkOiBBdHRlbXB0UmVjb3JkKTogc3RyaW5nIHtcbiAgY29uc3Qgd2hvID1cbiAgICByZWNvcmQuc291cmNlID09PSB1bmRlZmluZWQgfHwgcmVjb3JkLnNvdXJjZSA9PT0gJ3NkaydcbiAgICAgID8gYHRoZSAke3JlY29yZC50YXJnZXQgPz8gJ291dHNpZGUnfSBTREtgXG4gICAgICA6IGAke3JlY29yZC50YXJnZXQgPz8gJ291dHNpZGUnfSAoJHtyZWNvcmQuc291cmNlfSlgO1xuICBjb25zdCBjZWlsaW5nID0gcmVjb3JkLm9mICE9PSB1bmRlZmluZWQgPyBgIG9mICR7cmVjb3JkLm9mfWAgOiAnJztcbiAgcmV0dXJuIGBPYnNlcnZlZDogJHt3aG99IG1hZGUgYXR0ZW1wdCAke3JlY29yZC5hdHRlbXB0fSR7Y2VpbGluZ30sICR7YXR0ZW1wdE91dGNvbWUocmVjb3JkKX0uYDtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdE91dGNvbWUocmVjb3JkOiBBdHRlbXB0UmVjb3JkKTogc3RyaW5nIHtcbiAgY29uc3QgdG9vayA9IGZvcm1hdER1cmF0aW9uKHJlY29yZC5kdXJhdGlvbk1zKTtcbiAgc3dpdGNoIChyZWNvcmQub3V0Y29tZSkge1xuICAgIGNhc2UgJ29rJzpcbiAgICAgIHJldHVybiBgc3VjY2VlZGVkIGluICR7dG9va31gO1xuICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgcmV0dXJuIGB0aW1lZCBvdXQgYWZ0ZXIgJHt0b29rfWA7XG4gICAgY2FzZSAncGF1c2VkJzpcbiAgICAgIHJldHVybiBgcGF1c2VkIGFmdGVyICR7dG9va31gO1xuICAgIGNhc2UgJ2Fib3J0ZWQnOlxuICAgICAgcmV0dXJuIGB3YXMgYWJvcnRlZCBhZnRlciAke3Rvb2t9JHtyZWNvcmQuZXJyb3IgPyBgICgke3JlY29yZC5lcnJvci5tZXNzYWdlfSlgIDogJyd9YDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGBmYWlsZWQgaW4gJHt0b29rfSR7YXR0ZW1wdENhdXNlKHJlY29yZCl9YDtcbiAgfVxufVxuXG4vKipcbiAqIEEgdG91Y2hpbmcgYXR0ZW1wdCB3aG9zZSBlZmZlY3QgaXMgdW5rbm93biBzYXlzIHNvIChQMykg4oCUIHRoZSBvdXRjb21lIGFsb25lIChcImZhaWxlZFwiLCBcInRpbWVkIG91dFwiKSB3b3VsZCByZWFkIGFzXG4gKiBcIm5vdGhpbmcgaGFwcGVuZWRcIiwgYW5kIG5vdGhpbmcgbWF5IGJlIHJldHJpZWQgYmxpbmRseSBvbiB0aGF0IHJlYWRpbmcuIGBhcHBsaWVkYCBhbmQgYG5vbmVgIGFkZCBub3RoaW5nIHRoZVxuICogb3V0Y29tZSBkb2VzIG5vdCBzYXkuIEFic2VudCBvbiBhIHRhcmdldCB0aGF0IHRvdWNoZXMgbm90aGluZyAoYnl0ZSBpZGVudGl0eSkuXG4gKlxuICogICBBdHRlbXB0IDIgb2YgMiBhdCBDaGFyZ2UgY2FyZCB0aW1lZCBvdXQgYWZ0ZXIgMjBzLCBlZmZlY3Qgb24gc3RyaXBlIHVua25vd247IHN0b3BwZWQ6IG5vIGF0dGVtcHRzIGxlZnQuXG4gKi9cbmZ1bmN0aW9uIGVmZmVjdENsYXVzZShyZWNvcmQ6IEF0dGVtcHRSZWNvcmQpOiBzdHJpbmcge1xuICByZXR1cm4gcmVjb3JkLmVmZmVjdCA9PT0gJ3Vua25vd24nICYmIHJlY29yZC5zeXN0ZW0gIT09IHVuZGVmaW5lZCA/IGAsIGVmZmVjdCBvbiAke3JlY29yZC5zeXN0ZW19IHVua25vd25gIDogJyc7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRDYXVzZShyZWNvcmQ6IEF0dGVtcHRSZWNvcmQpOiBzdHJpbmcge1xuICBpZiAoIXJlY29yZC5lcnJvcikgcmV0dXJuICcnO1xuICBjb25zdCBjYXRlZ29yeSA9IHJlY29yZC5jYXRlZ29yeSAmJiByZWNvcmQuY2F0ZWdvcnkgIT09ICd1bmtub3duJyA/IGAke3JlY29yZC5jYXRlZ29yeX06IGAgOiAnJztcbiAgcmV0dXJuIGAgKCR7Y2F0ZWdvcnl9JHtyZWNvcmQuZXJyb3IubWVzc2FnZX0pYDtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdERlY2lzaW9uKHJlY29yZDogQXR0ZW1wdFJlY29yZCk6IHN0cmluZyB7XG4gIGlmIChyZWNvcmQubmV4dCA9PT0gJ3JldHJ5Jykge1xuICAgIGNvbnN0IGxlZnQgPSByZWNvcmQudGltZUxlZnRNcyAhPT0gdW5kZWZpbmVkID8gYCAoJHtmb3JtYXREdXJhdGlvbihNYXRoLm1heCgwLCByZWNvcmQudGltZUxlZnRNcykpfSBsZWZ0KWAgOiAnJztcbiAgICByZXR1cm4gKHJlY29yZC5kZWxheU1zID8gYCwgcmV0cnlpbmcgaW4gJHtmb3JtYXREdXJhdGlvbihyZWNvcmQuZGVsYXlNcyl9YCA6ICcsIHJldHJ5aW5nIGltbWVkaWF0ZWx5JykgKyBsZWZ0O1xuICB9XG4gIGlmIChyZWNvcmQubmV4dCA9PT0gJ2RvbmUnKSByZXR1cm4gJyc7XG4gIHN3aXRjaCAocmVjb3JkLnJlYXNvbikge1xuICAgIGNhc2UgJ2V4aGF1c3RlZCc6XG4gICAgICByZXR1cm4gJzsgc3RvcHBlZDogbm8gYXR0ZW1wdHMgbGVmdCc7XG4gICAgY2FzZSAnZGVjbGluZWQnOlxuICAgICAgLy8gQSB0aHJvd2luZyBwcmVkaWNhdGUgaXMgXCJkbyBub3QgcmV0cnlcIiB0b28g4oCUIGJ1dCBpdCBpcyBhIGJyb2tlbiBwcmVkaWNhdGUsIG5vdCBhIHZlcmRpY3QuXG4gICAgICByZXR1cm4gcmVjb3JkLnJldHJ5T25UaHJldyA/ICc7IHN0b3BwZWQ6IHJldHJ5T24gdGhyZXcnIDogJzsgc3RvcHBlZDogcmV0cnlPbiBkZWNsaW5lZCc7XG4gICAgY2FzZSAnbm8tdGltZS1sZWZ0Jzoge1xuICAgICAgY29uc3QgZmFjdHMgPSBbXG4gICAgICAgIC4uLihyZWNvcmQudGltZUxlZnRNcyAhPT0gdW5kZWZpbmVkID8gW2Ake2Zvcm1hdER1cmF0aW9uKE1hdGgubWF4KDAsIHJlY29yZC50aW1lTGVmdE1zKSl9IGxlZnRgXSA6IFtdKSxcbiAgICAgICAgLi4uKHJlY29yZC5kZWxheU1zICE9PSB1bmRlZmluZWQgPyBbYG5leHQgd2FpdCAke2Zvcm1hdER1cmF0aW9uKHJlY29yZC5kZWxheU1zKX1gXSA6IFtdKSxcbiAgICAgIF07XG4gICAgICByZXR1cm4gYDsgc3RvcHBlZDogbm8gdGltZSBsZWZ0JHtmYWN0cy5sZW5ndGggPiAwID8gYCAoJHtmYWN0cy5qb2luKCcsICcpfSlgIDogJyd9YDtcbiAgICB9XG4gICAgY2FzZSAnYWJvcnRlZCc6XG4gICAgICAvLyBBbiBhdHRlbXB0IHRoYXQgdGhyZXcgdGhlIGFib3J0J3Mgb3duIHJlYXNvbiBhbHJlYWR5IHNheXMgaXQgKFwid2FzIGFib3J0ZWRcIik7IGFuIGF0dGVtcHQgdGhhdCBmYWlsZWQgb25cbiAgICAgIC8vIGl0cyBvd24gd2hpbGUgdGhlIHJ1biBhYm9ydGVkIHNheXMgaXRzIGZhaWx1cmUsIHRoZW4gd2h5IHRoZSBzZXJpZXMgc3RvcHBlZC5cbiAgICAgIHJldHVybiByZWNvcmQub3V0Y29tZSA9PT0gJ2Fib3J0ZWQnID8gJycgOiAnOyBzdG9wcGVkOiB0aGUgcnVuIHdhcyBhYm9ydGVkJztcbiAgICBjYXNlICdwYXVzZWQnOlxuICAgICAgLy8gVGhlIG91dGNvbWUgYWxyZWFkeSBzYXlzIGl0LlxuICAgICAgcmV0dXJuICcnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYDsgc3RvcHBlZDogJHtyZWNvcmQucmVhc29ufWA7XG4gIH1cbn1cblxuLyoqIEEgZHVyYXRpb24gYXMgdGhlIG5hcnJhdGl2ZSBzYXlzIGl0OiB3aG9sZSBtaWxsaXNlY29uZHMgdW5kZXIgYSBzZWNvbmQsIHNlY29uZHMgKG9uZSBkZWNpbWFsIGF0IG1vc3QpIGFib3ZlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uKG1zOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobXMgPCAxXzAwMCkgcmV0dXJuIGAke01hdGgucm91bmQobXMpfW1zYDtcbiAgcmV0dXJuIGAke051bWJlcigobXMgLyAxXzAwMCkudG9GaXhlZCgxKSl9c2A7XG59XG4iXX0=
@@ -1,11 +1,11 @@
1
1
  export type { CombinedNarrativeRecorderOptions } from './CombinedNarrativeRecorder.js';
2
2
  export { CombinedNarrativeRecorder } from './CombinedNarrativeRecorder.js';
3
- export type { BreakRenderContext, CombinedNarrativeEntry, CombinedNarrativeOptions, DecisionRenderContext, EmitRenderContext, ErrorRenderContext, ForkRenderContext, LoopRenderContext, NarrativeFormatter, OpRenderContext, SelectedRenderContext, StageRenderContext, SubflowRenderContext, } from './narrativeTypes.js';
3
+ export type { AttemptRenderContext, BreakRenderContext, CombinedNarrativeEntry, CombinedNarrativeOptions, DecisionRenderContext, EmitRenderContext, ErrorRenderContext, ForkRenderContext, LoopRenderContext, NarrativeFormatter, OpRenderContext, SelectedRenderContext, StageRenderContext, SubflowRenderContext, } from './narrativeTypes.js';
4
4
  export { NullControlFlowNarrativeGenerator } from './NullControlFlowNarrativeGenerator.js';
5
5
  export type { IControlFlowNarrative } from './types.js';
6
6
  export { FlowRecorderDispatcher } from './FlowRecorderDispatcher.js';
7
7
  export { NarrativeFlowRecorder } from './NarrativeFlowRecorder.js';
8
- export type { FlowBreakEvent, FlowDecisionEvent, FlowErrorEvent, FlowForkEvent, FlowLoopEvent, FlowNextEvent, FlowRecorder, FlowRunEvent, FlowRunFailedEvent, FlowSelectedEvent, FlowStageEvent, FlowSubflowEvent, } from './types.js';
8
+ export type { FlowAttemptEvent, FlowBreakEvent, FlowDecisionEvent, FlowErrorEvent, FlowForkEvent, FlowLoopEvent, FlowNextEvent, FlowRecorder, FlowRunEvent, FlowRunFailedEvent, FlowSelectedEvent, FlowStageEvent, FlowSubflowEvent, } from './types.js';
9
9
  export { AdaptiveNarrativeFlowRecorder } from './recorders/AdaptiveNarrativeFlowRecorder.js';
10
10
  export { MilestoneNarrativeFlowRecorder } from './recorders/MilestoneNarrativeFlowRecorder.js';
11
11
  export { ProgressiveNarrativeFlowRecorder } from './recorders/ProgressiveNarrativeFlowRecorder.js';
@@ -11,4 +11,4 @@ export { RLENarrativeFlowRecorder } from './recorders/RLENarrativeFlowRecorder.j
11
11
  export { SeparateNarrativeFlowRecorder } from './recorders/SeparateNarrativeFlowRecorder.js';
12
12
  export { SilentNarrativeFlowRecorder } from './recorders/SilentNarrativeFlowRecorder.js';
13
13
  export { WindowedNarrativeFlowRecorder } from './recorders/WindowedNarrativeFlowRecorder.js';
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFnQjNFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRzNGLHNCQUFzQjtBQUN0QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQWdCbkUsK0VBQStFO0FBQy9FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlck9wdGlvbnMgfSBmcm9tICcuL0NvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciB9IGZyb20gJy4vQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJyZWFrUmVuZGVyQ29udGV4dCxcbiAgQ29tYmluZWROYXJyYXRpdmVFbnRyeSxcbiAgQ29tYmluZWROYXJyYXRpdmVPcHRpb25zLFxuICBEZWNpc2lvblJlbmRlckNvbnRleHQsXG4gIEVtaXRSZW5kZXJDb250ZXh0LFxuICBFcnJvclJlbmRlckNvbnRleHQsXG4gIEZvcmtSZW5kZXJDb250ZXh0LFxuICBMb29wUmVuZGVyQ29udGV4dCxcbiAgTmFycmF0aXZlRm9ybWF0dGVyLFxuICBPcFJlbmRlckNvbnRleHQsXG4gIFNlbGVjdGVkUmVuZGVyQ29udGV4dCxcbiAgU3RhZ2VSZW5kZXJDb250ZXh0LFxuICBTdWJmbG93UmVuZGVyQ29udGV4dCxcbn0gZnJvbSAnLi9uYXJyYXRpdmVUeXBlcy5qcyc7XG5leHBvcnQgeyBOdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgfSBmcm9tICcuL051bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci5qcyc7XG5leHBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBGbG93UmVjb3JkZXIgc3lzdGVtXG5leHBvcnQgeyBGbG93UmVjb3JkZXJEaXNwYXRjaGVyIH0gZnJvbSAnLi9GbG93UmVjb3JkZXJEaXNwYXRjaGVyLmpzJztcbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93UnVuRXZlbnQsXG4gIEZsb3dSdW5GYWlsZWRFdmVudCxcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gQnVpbHQtaW4gRmxvd1JlY29yZGVyIHN0cmF0ZWdpZXMgKHRyZWUtc2hha2VhYmxlIOKAlCBvbmx5IGltcG9ydGVkIGNvZGUgc2hpcHMpXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL0FkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IE1pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL01pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1Byb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFJMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1JMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1NlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFNpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1NpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1dpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbiJdfQ==
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFpQjNFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRzNGLHNCQUFzQjtBQUN0QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQWlCbkUsK0VBQStFO0FBQy9FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlck9wdGlvbnMgfSBmcm9tICcuL0NvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciB9IGZyb20gJy4vQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEF0dGVtcHRSZW5kZXJDb250ZXh0LFxuICBCcmVha1JlbmRlckNvbnRleHQsXG4gIENvbWJpbmVkTmFycmF0aXZlRW50cnksXG4gIENvbWJpbmVkTmFycmF0aXZlT3B0aW9ucyxcbiAgRGVjaXNpb25SZW5kZXJDb250ZXh0LFxuICBFbWl0UmVuZGVyQ29udGV4dCxcbiAgRXJyb3JSZW5kZXJDb250ZXh0LFxuICBGb3JrUmVuZGVyQ29udGV4dCxcbiAgTG9vcFJlbmRlckNvbnRleHQsXG4gIE5hcnJhdGl2ZUZvcm1hdHRlcixcbiAgT3BSZW5kZXJDb250ZXh0LFxuICBTZWxlY3RlZFJlbmRlckNvbnRleHQsXG4gIFN0YWdlUmVuZGVyQ29udGV4dCxcbiAgU3ViZmxvd1JlbmRlckNvbnRleHQsXG59IGZyb20gJy4vbmFycmF0aXZlVHlwZXMuanMnO1xuZXhwb3J0IHsgTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIH0gZnJvbSAnLi9OdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IuanMnO1xuZXhwb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gRmxvd1JlY29yZGVyIHN5c3RlbVxuZXhwb3J0IHsgRmxvd1JlY29yZGVyRGlzcGF0Y2hlciB9IGZyb20gJy4vRmxvd1JlY29yZGVyRGlzcGF0Y2hlci5qcyc7XG5leHBvcnQgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL05hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIEJ1aWx0LWluIEZsb3dSZWNvcmRlciBzdHJhdGVnaWVzICh0cmVlLXNoYWtlYWJsZSDigJQgb25seSBpbXBvcnRlZCBjb2RlIHNoaXBzKVxuZXhwb3J0IHsgQWRhcHRpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL3JlY29yZGVycy9BZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBNaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL3JlY29yZGVycy9NaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgUHJvZ3Jlc3NpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL3JlY29yZGVycy9Qcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBSTEVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL3JlY29yZGVycy9STEVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgU2VwYXJhdGVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL3JlY29yZGVycy9TZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBTaWxlbnROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL3JlY29yZGVycy9TaWxlbnROYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL3JlY29yZGVycy9XaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG4iXX0=
@@ -5,12 +5,19 @@
5
5
  * The CombinedNarrativeBuilder class was removed in v1.0.
6
6
  * Use CombinedNarrativeRecorder (auto-attached by setEnableNarrative()) instead.
7
7
  */
8
+ import type { AttemptRecord } from '../../attempt/types.js';
8
9
  export interface CombinedNarrativeEntry {
9
10
  type: 'stage' | 'step' | 'condition' | 'fork' | 'selector' | 'subflow' | 'loop' | 'break' | 'error' | 'pause' | 'resume' | 'emit'
10
- /** A failed attempt at a stage with a declared retry policy, which was
11
- * retried. Rendered as a depth-1 sub-item of its stage, IN ORDER between
12
- * the attempts' reads and writes. */
13
- | 'retry';
11
+ /** A failed attempt that was retried — rendered by 9.15–10.0 only. Since
12
+ * 10.1 the built-in narrative renders one `'attempt'` line per attempt
13
+ * instead; the member stays so a narrative stored by an earlier release
14
+ * still type-checks. */
15
+ | 'retry'
16
+ /** One attempt of a stage with a declared retry policy (10.1): its outcome,
17
+ * duration, cause and decision. A depth-1 sub-item of its stage, IN ORDER
18
+ * between the attempts' reads and writes; for a stage that failed, the
19
+ * lines follow its `'error'` entry. */
20
+ | 'attempt';
14
21
  text: string;
15
22
  depth: number;
16
23
  stageName?: string;
@@ -108,21 +115,14 @@ export interface ErrorRenderContext {
108
115
  validationIssues?: string;
109
116
  }
110
117
  /**
111
- * Context passed to `NarrativeFormatter.renderRetry` — one failed attempt at a
112
- * stage with a declared retry policy, which the engine then retried. Fires only
113
- * for attempts followed by another attempt; the final failure goes to
114
- * `renderError`.
118
+ * Context passed to `NarrativeFormatter.renderAttempt` — one attempt of a stage
119
+ * with a declared retry policy (10.1), whatever its outcome.
115
120
  */
116
- export interface RetryRenderContext {
121
+ export interface AttemptRenderContext {
122
+ /** The stage the attempt ran. */
117
123
  stageName: string;
118
- /** Which attempt just failed, 1-based. */
119
- attempt: number;
120
- /** Total attempts the policy allows, including the first. */
121
- maxAttempts: number;
122
- /** Milliseconds waited before the next attempt. `0` = immediate. */
123
- delayMs: number;
124
- /** The failed attempt's error message. */
125
- message: string;
124
+ /** The attempt: outcome, duration, category, the served error, and the retry-or-stop decision. */
125
+ record: AttemptRecord;
126
126
  }
127
127
  /**
128
128
  * Context passed to `NarrativeFormatter.renderEmit` — fires for every
@@ -193,11 +193,17 @@ export interface NarrativeFormatter {
193
193
  renderBreak?(ctx: BreakRenderContext): string;
194
194
  renderError?(ctx: ErrorRenderContext): string;
195
195
  /**
196
- * Format a retried attempt into a narrative line. Rendered as a depth-1
197
- * sub-item of its stage, positioned between the attempts' reads and writes
198
- * so the narrative reads in the order things actually happened.
196
+ * Format one attempt of a retried stage (10.1) into a narrative line — a
197
+ * depth-1 sub-item of its stage, between the attempts' reads and writes (for
198
+ * a stage that failed for good, beneath its error line). It replaces the
199
+ * 9.15–10.0 `renderRetry`, which is removed: this line says "retrying" too.
200
+ *
201
+ * - `string` → use as the narrative line
202
+ * - `null` → deliberately exclude this entry
203
+ * - `undefined` → fall back to the library's default sentence
204
+ * (`Attempt 2 of 3 at Fetch failed in 12ms (…), retrying in 1s.`)
199
205
  */
200
- renderRetry?(ctx: RetryRenderContext): string;
206
+ renderAttempt?(ctx: AttemptRenderContext): string | null | undefined;
201
207
  /**
202
208
  * Format a consumer-emitted event (from `scope.$emit(name, payload)`)
203
209
  * into a narrative line.
@@ -6,4 +6,4 @@
6
6
  * Use CombinedNarrativeRecorder (auto-attached by setEnableNarrative()) instead.
7
7
  */
8
8
  export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFycmF0aXZlVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvbmFycmF0aXZlVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBuYXJyYXRpdmVUeXBlcyDigJQgU2hhcmVkIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBuYXJyYXRpdmUgcmVjb3JkZXIgc3lzdGVtLlxuICpcbiAqIFByZXZpb3VzbHk6IENvbWJpbmVkTmFycmF0aXZlQnVpbGRlci50cyAoZmlsZSByZW5hbWVkIGluIHBvc3QtcmVsZWFzZSBjbGVhbnVwKS5cbiAqIFRoZSBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIgY2xhc3Mgd2FzIHJlbW92ZWQgaW4gdjEuMC5cbiAqIFVzZSBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIChhdXRvLWF0dGFjaGVkIGJ5IHNldEVuYWJsZU5hcnJhdGl2ZSgpKSBpbnN0ZWFkLlxuICovXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHlwZXMgKGtlcHQg4oCUIHVzZWQgYnkgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciwgRmxvd0NoYXJ0RXhlY3V0b3IsIGV0Yy4pXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5IHtcbiAgdHlwZTpcbiAgICB8ICdzdGFnZSdcbiAgICB8ICdzdGVwJ1xuICAgIHwgJ2NvbmRpdGlvbidcbiAgICB8ICdmb3JrJ1xuICAgIHwgJ3NlbGVjdG9yJ1xuICAgIHwgJ3N1YmZsb3cnXG4gICAgfCAnbG9vcCdcbiAgICB8ICdicmVhaydcbiAgICB8ICdlcnJvcidcbiAgICB8ICdwYXVzZSdcbiAgICB8ICdyZXN1bWUnXG4gICAgfCAnZW1pdCdcbiAgICAvKiogQSBmYWlsZWQgYXR0ZW1wdCBhdCBhIHN0YWdlIHdpdGggYSBkZWNsYXJlZCByZXRyeSBwb2xpY3ksIHdoaWNoIHdhc1xuICAgICAqICByZXRyaWVkLiBSZW5kZXJlZCBhcyBhIGRlcHRoLTEgc3ViLWl0ZW0gb2YgaXRzIHN0YWdlLCBJTiBPUkRFUiBiZXR3ZWVuXG4gICAgICogIHRoZSBhdHRlbXB0cycgcmVhZHMgYW5kIHdyaXRlcy4gKi9cbiAgICB8ICdyZXRyeSc7XG4gIHRleHQ6IHN0cmluZztcbiAgZGVwdGg6IG51bWJlcjtcbiAgc3RhZ2VOYW1lPzogc3RyaW5nO1xuICAvKiogU3RhYmxlIHN0YWdlIGlkZW50aWZpZXIgZnJvbSB0aGUgYnVpbGRlciAobWF0Y2hlcyBzcGVjIG5vZGUgaWQpLiBVc2UgZm9yIFVJIHN5bmMuICovXG4gIHN0YWdlSWQ/OiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIEZvcm1hdDogW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4LlxuICAgKiAgTGlua3MgbmFycmF0aXZlIGVudHJpZXMgdG8gcmVjb3JkZXIgTWFwIGVudHJpZXMgZm9yIE8oMSkgdGltZS10cmF2ZWwgbG9va3VwLlxuICAgKiAgVW5kZWZpbmVkIG9ubHkgd2hlbiBUcmF2ZXJzYWxDb250ZXh0IGlzIGFic2VudCBmcm9tIHRoZSBzb3VyY2UgZXZlbnQuICovXG4gIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICBzdGVwTnVtYmVyPzogbnVtYmVyO1xuICAvKiogU3ViZmxvdyBJRCB3aGVuIHRoaXMgZW50cnkgd2FzIGdlbmVyYXRlZCBpbnNpZGUgYSBzdWJmbG93LiBVbmRlZmluZWQgZm9yIHJvb3QtbGV2ZWwuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgLyoqIERpcmVjdGlvbiBmb3Igc3ViZmxvdyBlbnRyaWVzOiAnZW50cnknIHdoZW4gZW50ZXJpbmcsICdleGl0JyB3aGVuIGxlYXZpbmcuXG4gICAqICBPbmx5IHByZXNlbnQgb24gZW50cmllcyB3aXRoIHR5cGUgPT09ICdzdWJmbG93Jy4gVXNlIHRoaXMgaW5zdGVhZCBvZiB0ZXh0IHNjYW5uaW5nLiAqL1xuICBkaXJlY3Rpb24/OiAnZW50cnknIHwgJ2V4aXQnO1xuICAvKiogU2NvcGUga2V5IHRoYXQgd2FzIHJlYWQgb3Igd3JpdHRlbi4gT25seSBwcmVzZW50IG9uICdzdGVwJyBlbnRyaWVzLlxuICAgKiAgVXNlIHRoaXMgZm9yIHN0cnVjdHVyZWQgZGF0YSBleHRyYWN0aW9uIChlLmcuLCBncm91bmRpbmcgYW5hbHlzaXMpXG4gICAqICBpbnN0ZWFkIG9mIG1hdGNoaW5nIG9uIHJlbmRlcmVkIHRleHQgc3RyaW5ncy4gKi9cbiAga2V5Pzogc3RyaW5nO1xuICAvKiogUmF3IHZhbHVlIGZyb20gdGhlIHNjb3BlIGV2ZW50IOKAlCBhdmFpbGFibGUgZm9yIHByb2dyYW1tYXRpYyBhY2Nlc3MgYW5kIGN1c3RvbSBmb3JtYXR0aW5nLlxuICAgKiAgT25seSBwcmVzZW50IG9uICdzdGVwJyBlbnRyaWVzIChyZWFkL3dyaXRlIG9wcykuIFRoaXMgaXMgYSBsaXZlIHJlZmVyZW5jZSwgbm90IGEgY2xvbmUuXG4gICAqICBXaGVuIHVzaW5nIFNjb3BlRmFjYWRlLCByZWRhY3RlZCBrZXlzIHdpbGwgaGF2ZSB2YWx1ZSAnW1JFREFDVEVEXScgKHNhbml0aXplZCB1cHN0cmVhbVxuICAgKiAgYnkgU2NvcGVGYWNhZGUgYmVmb3JlIGRpc3BhdGNoaW5nIGV2ZW50cyDigJQgdGhlIHJlY29yZGVyIGRvZXMgbm90IGVuZm9yY2UgcmVkYWN0aW9uKS4gKi9cbiAgcmF3VmFsdWU/OiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkTmFycmF0aXZlT3B0aW9ucyB7XG4gIGluY2x1ZGVTdGVwTnVtYmVycz86IGJvb2xlYW47XG4gIGluY2x1ZGVWYWx1ZXM/OiBib29sZWFuO1xuICBpbmRlbnQ/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTmFycmF0aXZlRm9ybWF0dGVyIOKAlCBQbHVnZ2FibGUgZm9ybWF0dGluZyBmb3IgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJTdGFnZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VSZW5kZXJDb250ZXh0IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHN0YWdlTnVtYmVyOiBudW1iZXI7XG4gIGlzRmlyc3Q6IGJvb2xlYW47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogTG9vcCBpdGVyYXRpb24gbnVtYmVyICgxLWJhc2VkKS4gUHJlc2VudCB3aGVuIHRoaXMgc3RhZ2UgaXMgdmlzaXRlZCB2aWEgbG9vcFRvKCkuICovXG4gIGxvb3BJdGVyYXRpb24/OiBudW1iZXI7XG4gIC8qKiBUcnVlIGZvciB0aGUgc3RhZ2UgYSByZXN1bWUgcmUtZW50ZXJlZDogaXRzIGFycml2YWwgd2FzIGFscmVhZHkgdG9sZCBieSB0aGUgcmVzdW1lIGVudHJ5LiAqL1xuICByZXN1bWVkPzogYm9vbGVhbjtcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlck9wLiBSZXR1cm4gbnVsbCB0byBleGNsdWRlIHRoZSBlbnRyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BSZW5kZXJDb250ZXh0IHtcbiAgdHlwZTogJ3JlYWQnIHwgJ3dyaXRlJztcbiAga2V5OiBzdHJpbmc7XG4gIHJhd1ZhbHVlOiB1bmtub3duO1xuICB2YWx1ZVN1bW1hcnk6IHN0cmluZztcbiAgb3BlcmF0aW9uPzogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnO1xuICBzdGVwTnVtYmVyOiBudW1iZXI7XG59XG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJEZWNpc2lvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVjaXNpb25SZW5kZXJDb250ZXh0IHtcbiAgZGVjaWRlcjogc3RyaW5nO1xuICBjaG9zZW46IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJhdGlvbmFsZT86IHN0cmluZztcbiAgLyoqIFJhdyBldmlkZW5jZSBmcm9tIGRlY2lkZSgpL3NlbGVjdCgpIOKAlCBhdmFpbGFibGUgZm9yIGN1c3RvbSByZW5kZXJpbmcuICovXG4gIGV2aWRlbmNlPzogdW5rbm93bjtcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlckZvcmsuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmtSZW5kZXJDb250ZXh0IHtcbiAgY2hpbGRyZW46IHN0cmluZ1tdO1xufVxuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gcmVuZGVyU3ViZmxvdy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlbmRlckNvbnRleHQge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRpcmVjdGlvbjogJ2VudHJ5JyB8ICdleGl0JztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBNYXBwZWQgaW5wdXQgdmFsdWVzIHNlbnQgaW50byB0aGUgc3ViZmxvdy4gUHJlc2VudCBvbiBlbnRyeS4gKi9cbiAgbWFwcGVkSW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIFN1YmZsb3cgc2hhcmVkIHN0YXRlIGF0IGV4aXQuIFByZXNlbnQgb24gZXhpdC4gKi9cbiAgb3V0cHV0U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlckxvb3AuICovXG5leHBvcnQgaW50ZXJmYWNlIExvb3BSZW5kZXJDb250ZXh0IHtcbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIGl0ZXJhdGlvbjogbnVtYmVyO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlckJyZWFrLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmVha1JlbmRlckNvbnRleHQge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlclNlbGVjdGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZFJlbmRlckNvbnRleHQge1xuICBzZWxlY3RlZDogc3RyaW5nW107XG4gIHRvdGFsOiBudW1iZXI7XG4gIC8qKiBSYXcgZXZpZGVuY2UgZnJvbSBzZWxlY3QoKSDigJQgYXZhaWxhYmxlIGZvciBjdXN0b20gcmVuZGVyaW5nLiAqL1xuICBldmlkZW5jZT86IHVua25vd247XG59XG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJFcnJvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JSZW5kZXJDb250ZXh0IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdmFsaWRhdGlvbklzc3Vlcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb250ZXh0IHBhc3NlZCB0byBgTmFycmF0aXZlRm9ybWF0dGVyLnJlbmRlclJldHJ5YCDigJQgb25lIGZhaWxlZCBhdHRlbXB0IGF0IGFcbiAqIHN0YWdlIHdpdGggYSBkZWNsYXJlZCByZXRyeSBwb2xpY3ksIHdoaWNoIHRoZSBlbmdpbmUgdGhlbiByZXRyaWVkLiBGaXJlcyBvbmx5XG4gKiBmb3IgYXR0ZW1wdHMgZm9sbG93ZWQgYnkgYW5vdGhlciBhdHRlbXB0OyB0aGUgZmluYWwgZmFpbHVyZSBnb2VzIHRvXG4gKiBgcmVuZGVyRXJyb3JgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5UmVuZGVyQ29udGV4dCB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICAvKiogV2hpY2ggYXR0ZW1wdCBqdXN0IGZhaWxlZCwgMS1iYXNlZC4gKi9cbiAgYXR0ZW1wdDogbnVtYmVyO1xuICAvKiogVG90YWwgYXR0ZW1wdHMgdGhlIHBvbGljeSBhbGxvd3MsIGluY2x1ZGluZyB0aGUgZmlyc3QuICovXG4gIG1heEF0dGVtcHRzOiBudW1iZXI7XG4gIC8qKiBNaWxsaXNlY29uZHMgd2FpdGVkIGJlZm9yZSB0aGUgbmV4dCBhdHRlbXB0LiBgMGAgPSBpbW1lZGlhdGUuICovXG4gIGRlbGF5TXM6IG51bWJlcjtcbiAgLyoqIFRoZSBmYWlsZWQgYXR0ZW1wdCdzIGVycm9yIG1lc3NhZ2UuICovXG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb250ZXh0IHBhc3NlZCB0byBgTmFycmF0aXZlRm9ybWF0dGVyLnJlbmRlckVtaXRgIOKAlCBmaXJlcyBmb3IgZXZlcnlcbiAqIGNvbnN1bWVyLWVtaXR0ZWQgZXZlbnQgKGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWApLiBDYXJyaWVzIHRoZSBmdWxsXG4gKiBgRW1pdEV2ZW50YCBzaGFwZSBzbyBmb3JtYXR0ZXJzIGNhbiByZW5kZXIgbmFtZSArIHBheWxvYWQgd2l0aCBmdWxsXG4gKiBjb250ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRSZW5kZXJDb250ZXh0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXlsb2FkOiB1bmtub3duO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICAvKiogU3VtbWFyeSBzdHJpbmcg4oCUIHRoZSBsaWJyYXJ5J3MgZGVmYXVsdCB0cnVuY2F0ZWQgcGF5bG9hZCBwcmV2aWV3LiAqL1xuICBwYXlsb2FkU3VtbWFyeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBsdWdnYWJsZSBmb3JtYXR0ZXIgZm9yIG5hcnJhdGl2ZSBvdXRwdXQuIFR1cm5zIHN0cnVjdHVyZWQgZXZlbnQgY29udGV4dFxuICogb2JqZWN0cyBpbnRvIHRoZSB0ZXh0IGxpbmVzIHRoYXQgbWFrZSB1cCB0aGUgbmFycmF0aXZlIGFycmF5LlxuICpcbiAqICMjIFdoeSBcIkZvcm1hdHRlclwiLCBub3QgXCJSZW5kZXJlclwiXG4gKlxuICogSW4gd2ViIHRlcm1pbm9sb2d5IFwicmVuZGVyZXJcIiB1c3VhbGx5IG1lYW5zIFwidHVybiBkYXRhIGludG8gYSB2aXNpYmxlIFVJXCJcbiAqIChwaXhlbHMsIERPTSwgSFRNTCkuIFRoaXMgaW50ZXJmYWNlIGRvZXMgc29tZXRoaW5nIHNtYWxsZXI6IGl0IGNvbnZlcnRzXG4gKiBldmVudCBjb250ZXh0IGludG8gYSB0ZXh0IHN0cmluZy4gVGhhdCBpcyBtb3JlIGFjY3VyYXRlbHkgY2FsbGVkIGFcbiAqICpmb3JtYXR0ZXIqLlxuICpcbiAqICMjIEJlaGF2aW91clxuICpcbiAqIEVhY2ggbWV0aG9kIGlzIG9wdGlvbmFsIOKAlCB1bmltcGxlbWVudGVkIG1ldGhvZHMgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0XG4gKiBFbmdsaXNoIGZvcm1hdHRlci4gUmV0dXJuIGBudWxsYCBmcm9tIGByZW5kZXJPcGAgdG8gZXhjbHVkZSB0aGF0IGVudHJ5XG4gKiBmcm9tIHRoZSBuYXJyYXRpdmUgZW50aXJlbHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlYyA9IG5hcnJhdGl2ZSh7XG4gKiAgIHJlbmRlcmVyOiB7XG4gKiAgICAgcmVuZGVyT3AoY3R4KSB7XG4gKiAgICAgICBpZiAoY3R4LmtleS5zdGFydHNXaXRoKCdfaW50ZXJuYWwnKSkgcmV0dXJuIG51bGw7IC8vIGZpbHRlciBvdXQgaW50ZXJuYWwga2V5c1xuICogICAgICAgcmV0dXJuIGAke2N0eC50eXBlID09PSAncmVhZCcgPyAnUmVhZCcgOiAnV3JvdGUnfSAke2N0eC5rZXl9OiAke2N0eC52YWx1ZVN1bW1hcnl9YDtcbiAqICAgICB9LFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXJyYXRpdmVGb3JtYXR0ZXIge1xuICByZW5kZXJTdGFnZT8oY3R4OiBTdGFnZVJlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGb3JtYXQgYW4gb3AgKHNjb3BlIHJlYWQvd3JpdGUsIG9yIHN1YmZsb3ctaW5wdXQga2V5KSBpbnRvIGEgbmFycmF0aXZlIGxpbmUuXG4gICAqXG4gICAqICAgLSBgc3RyaW5nYCAgICDihpIgdXNlIGFzIHRoZSBuYXJyYXRpdmUgbGluZVxuICAgKiAgIC0gYG51bGxgICAgICAg4oaSIGRlbGliZXJhdGVseSBleGNsdWRlIHRoaXMgZW50cnkgZnJvbSB0aGUgbmFycmF0aXZlXG4gICAqICAgLSBgdW5kZWZpbmVkYCDihpIgdGhpcyBmb3JtYXR0ZXIgZG9lcyBub3QgaGFuZGxlIHRoaXMgb3A7IGZhbGwgYmFjayB0b1xuICAgKiAgICAgICAgICAgICAgICAgICB0aGUgbGlicmFyeSdzIGRlZmF1bHQgdGVtcGxhdGVcbiAgICpcbiAgICogVGhlIGB1bmRlZmluZWRgIHJldHVybiBsZXRzIGEgZG9tYWluLWF3YXJlIGZvcm1hdHRlciBoYW5kbGUgb25seSB0aGVcbiAgICoga2V5cyBpdCBrbm93cyBhYm91dCBhbmQgbGVhdmUgdGhlIHJlc3QgdG8gdGhlIGxpYnJhcnkgZGVmYXVsdCDigJQgd2l0aG91dFxuICAgKiBoYXZpbmcgdG8gcmUtaW1wbGVtZW50IHRoZSB3aG9sZSBkZWZhdWx0IGlubGluZS5cbiAgICovXG4gIHJlbmRlck9wPyhjdHg6IE9wUmVuZGVyQ29udGV4dCk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHJlbmRlckRlY2lzaW9uPyhjdHg6IERlY2lzaW9uUmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgcmVuZGVyRm9yaz8oY3R4OiBGb3JrUmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgcmVuZGVyU2VsZWN0ZWQ/KGN0eDogU2VsZWN0ZWRSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICByZW5kZXJTdWJmbG93PyhjdHg6IFN1YmZsb3dSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICByZW5kZXJMb29wPyhjdHg6IExvb3BSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICByZW5kZXJCcmVhaz8oY3R4OiBCcmVha1JlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIHJlbmRlckVycm9yPyhjdHg6IEVycm9yUmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgLyoqXG4gICAqIEZvcm1hdCBhIHJldHJpZWQgYXR0ZW1wdCBpbnRvIGEgbmFycmF0aXZlIGxpbmUuIFJlbmRlcmVkIGFzIGEgZGVwdGgtMVxuICAgKiBzdWItaXRlbSBvZiBpdHMgc3RhZ2UsIHBvc2l0aW9uZWQgYmV0d2VlbiB0aGUgYXR0ZW1wdHMnIHJlYWRzIGFuZCB3cml0ZXNcbiAgICogc28gdGhlIG5hcnJhdGl2ZSByZWFkcyBpbiB0aGUgb3JkZXIgdGhpbmdzIGFjdHVhbGx5IGhhcHBlbmVkLlxuICAgKi9cbiAgcmVuZGVyUmV0cnk/KGN0eDogUmV0cnlSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICAvKipcbiAgICogRm9ybWF0IGEgY29uc3VtZXItZW1pdHRlZCBldmVudCAoZnJvbSBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgKVxuICAgKiBpbnRvIGEgbmFycmF0aXZlIGxpbmUuXG4gICAqXG4gICAqICAgLSBgc3RyaW5nYCAgICDihpIgdXNlIGFzIHRoZSBuYXJyYXRpdmUgbGluZVxuICAgKiAgIC0gYG51bGxgICAgICAg4oaSIGRlbGliZXJhdGVseSBleGNsdWRlIHRoaXMgZW50cnlcbiAgICogICAtIGB1bmRlZmluZWRgIOKGkiB0aGlzIGZvcm1hdHRlciBkb2VzIG5vdCBoYW5kbGUgdGhpcyBlbWl0OyBmYWxsIGJhY2tcbiAgICogICAgICAgICAgICAgICAgICAgdG8gdGhlIGxpYnJhcnkncyBkZWZhdWx0IHRlbXBsYXRlXG4gICAqXG4gICAqIFR5cGljYWwgcGF0dGVybjogc3dpdGNoIG9uIGBjdHgubmFtZWAgKG9yIGEgcHJlZml4IG9mIGl0KSBhbmQgcmV0dXJuIGFcbiAgICogZG9tYWluLXNwZWNpZmljIHRleHQgbGluZSBmb3IgdGhlIGV2ZW50IHR5cGVzIHlvdSBjYXJlIGFib3V0OyByZXR1cm5cbiAgICogYHVuZGVmaW5lZGAgZm9yIGV2ZXJ5dGhpbmcgZWxzZSBzbyB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBoYW5kbGVzIGl0LlxuICAgKi9cbiAgcmVuZGVyRW1pdD8oY3R4OiBFbWl0UmVuZGVyQ29udGV4dCk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG59XG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFycmF0aXZlVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvbmFycmF0aXZlVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBuYXJyYXRpdmVUeXBlcyDigJQgU2hhcmVkIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBuYXJyYXRpdmUgcmVjb3JkZXIgc3lzdGVtLlxuICpcbiAqIFByZXZpb3VzbHk6IENvbWJpbmVkTmFycmF0aXZlQnVpbGRlci50cyAoZmlsZSByZW5hbWVkIGluIHBvc3QtcmVsZWFzZSBjbGVhbnVwKS5cbiAqIFRoZSBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIgY2xhc3Mgd2FzIHJlbW92ZWQgaW4gdjEuMC5cbiAqIFVzZSBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIChhdXRvLWF0dGFjaGVkIGJ5IHNldEVuYWJsZU5hcnJhdGl2ZSgpKSBpbnN0ZWFkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXR0ZW1wdFJlY29yZCB9IGZyb20gJy4uLy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFR5cGVzIChrZXB0IOKAlCB1c2VkIGJ5IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIsIEZsb3dDaGFydEV4ZWN1dG9yLCBldGMuKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWROYXJyYXRpdmVFbnRyeSB7XG4gIHR5cGU6XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnc3RlcCdcbiAgICB8ICdjb25kaXRpb24nXG4gICAgfCAnZm9yaydcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAnYnJlYWsnXG4gICAgfCAnZXJyb3InXG4gICAgfCAncGF1c2UnXG4gICAgfCAncmVzdW1lJ1xuICAgIHwgJ2VtaXQnXG4gICAgLyoqIEEgZmFpbGVkIGF0dGVtcHQgdGhhdCB3YXMgcmV0cmllZCDigJQgcmVuZGVyZWQgYnkgOS4xNeKAkzEwLjAgb25seS4gU2luY2VcbiAgICAgKiAgMTAuMSB0aGUgYnVpbHQtaW4gbmFycmF0aXZlIHJlbmRlcnMgb25lIGAnYXR0ZW1wdCdgIGxpbmUgcGVyIGF0dGVtcHRcbiAgICAgKiAgaW5zdGVhZDsgdGhlIG1lbWJlciBzdGF5cyBzbyBhIG5hcnJhdGl2ZSBzdG9yZWQgYnkgYW4gZWFybGllciByZWxlYXNlXG4gICAgICogIHN0aWxsIHR5cGUtY2hlY2tzLiAqL1xuICAgIHwgJ3JldHJ5J1xuICAgIC8qKiBPbmUgYXR0ZW1wdCBvZiBhIHN0YWdlIHdpdGggYSBkZWNsYXJlZCByZXRyeSBwb2xpY3kgKDEwLjEpOiBpdHMgb3V0Y29tZSxcbiAgICAgKiAgZHVyYXRpb24sIGNhdXNlIGFuZCBkZWNpc2lvbi4gQSBkZXB0aC0xIHN1Yi1pdGVtIG9mIGl0cyBzdGFnZSwgSU4gT1JERVJcbiAgICAgKiAgYmV0d2VlbiB0aGUgYXR0ZW1wdHMnIHJlYWRzIGFuZCB3cml0ZXM7IGZvciBhIHN0YWdlIHRoYXQgZmFpbGVkLCB0aGVcbiAgICAgKiAgbGluZXMgZm9sbG93IGl0cyBgJ2Vycm9yJ2AgZW50cnkuICovXG4gICAgfCAnYXR0ZW1wdCc7XG4gIHRleHQ6IHN0cmluZztcbiAgZGVwdGg6IG51bWJlcjtcbiAgc3RhZ2VOYW1lPzogc3RyaW5nO1xuICAvKiogU3RhYmxlIHN0YWdlIGlkZW50aWZpZXIgZnJvbSB0aGUgYnVpbGRlciAobWF0Y2hlcyBzcGVjIG5vZGUgaWQpLiBVc2UgZm9yIFVJIHN5bmMuICovXG4gIHN0YWdlSWQ/OiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIEZvcm1hdDogW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4LlxuICAgKiAgTGlua3MgbmFycmF0aXZlIGVudHJpZXMgdG8gcmVjb3JkZXIgTWFwIGVudHJpZXMgZm9yIE8oMSkgdGltZS10cmF2ZWwgbG9va3VwLlxuICAgKiAgVW5kZWZpbmVkIG9ubHkgd2hlbiBUcmF2ZXJzYWxDb250ZXh0IGlzIGFic2VudCBmcm9tIHRoZSBzb3VyY2UgZXZlbnQuICovXG4gIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICBzdGVwTnVtYmVyPzogbnVtYmVyO1xuICAvKiogU3ViZmxvdyBJRCB3aGVuIHRoaXMgZW50cnkgd2FzIGdlbmVyYXRlZCBpbnNpZGUgYSBzdWJmbG93LiBVbmRlZmluZWQgZm9yIHJvb3QtbGV2ZWwuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgLyoqIERpcmVjdGlvbiBmb3Igc3ViZmxvdyBlbnRyaWVzOiAnZW50cnknIHdoZW4gZW50ZXJpbmcsICdleGl0JyB3aGVuIGxlYXZpbmcuXG4gICAqICBPbmx5IHByZXNlbnQgb24gZW50cmllcyB3aXRoIHR5cGUgPT09ICdzdWJmbG93Jy4gVXNlIHRoaXMgaW5zdGVhZCBvZiB0ZXh0IHNjYW5uaW5nLiAqL1xuICBkaXJlY3Rpb24/OiAnZW50cnknIHwgJ2V4aXQnO1xuICAvKiogU2NvcGUga2V5IHRoYXQgd2FzIHJlYWQgb3Igd3JpdHRlbi4gT25seSBwcmVzZW50IG9uICdzdGVwJyBlbnRyaWVzLlxuICAgKiAgVXNlIHRoaXMgZm9yIHN0cnVjdHVyZWQgZGF0YSBleHRyYWN0aW9uIChlLmcuLCBncm91bmRpbmcgYW5hbHlzaXMpXG4gICAqICBpbnN0ZWFkIG9mIG1hdGNoaW5nIG9uIHJlbmRlcmVkIHRleHQgc3RyaW5ncy4gKi9cbiAga2V5Pzogc3RyaW5nO1xuICAvKiogUmF3IHZhbHVlIGZyb20gdGhlIHNjb3BlIGV2ZW50IOKAlCBhdmFpbGFibGUgZm9yIHByb2dyYW1tYXRpYyBhY2Nlc3MgYW5kIGN1c3RvbSBmb3JtYXR0aW5nLlxuICAgKiAgT25seSBwcmVzZW50IG9uICdzdGVwJyBlbnRyaWVzIChyZWFkL3dyaXRlIG9wcykuIFRoaXMgaXMgYSBsaXZlIHJlZmVyZW5jZSwgbm90IGEgY2xvbmUuXG4gICAqICBXaGVuIHVzaW5nIFNjb3BlRmFjYWRlLCByZWRhY3RlZCBrZXlzIHdpbGwgaGF2ZSB2YWx1ZSAnW1JFREFDVEVEXScgKHNhbml0aXplZCB1cHN0cmVhbVxuICAgKiAgYnkgU2NvcGVGYWNhZGUgYmVmb3JlIGRpc3BhdGNoaW5nIGV2ZW50cyDigJQgdGhlIHJlY29yZGVyIGRvZXMgbm90IGVuZm9yY2UgcmVkYWN0aW9uKS4gKi9cbiAgcmF3VmFsdWU/OiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkTmFycmF0aXZlT3B0aW9ucyB7XG4gIGluY2x1ZGVTdGVwTnVtYmVycz86IGJvb2xlYW47XG4gIGluY2x1ZGVWYWx1ZXM/OiBib29sZWFuO1xuICBpbmRlbnQ/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTmFycmF0aXZlRm9ybWF0dGVyIOKAlCBQbHVnZ2FibGUgZm9ybWF0dGluZyBmb3IgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJTdGFnZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VSZW5kZXJDb250ZXh0IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHN0YWdlTnVtYmVyOiBudW1iZXI7XG4gIGlzRmlyc3Q6IGJvb2xlYW47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogTG9vcCBpdGVyYXRpb24gbnVtYmVyICgxLWJhc2VkKS4gUHJlc2VudCB3aGVuIHRoaXMgc3RhZ2UgaXMgdmlzaXRlZCB2aWEgbG9vcFRvKCkuICovXG4gIGxvb3BJdGVyYXRpb24/OiBudW1iZXI7XG4gIC8qKiBUcnVlIGZvciB0aGUgc3RhZ2UgYSByZXN1bWUgcmUtZW50ZXJlZDogaXRzIGFycml2YWwgd2FzIGFscmVhZHkgdG9sZCBieSB0aGUgcmVzdW1lIGVudHJ5LiAqL1xuICByZXN1bWVkPzogYm9vbGVhbjtcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlck9wLiBSZXR1cm4gbnVsbCB0byBleGNsdWRlIHRoZSBlbnRyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BSZW5kZXJDb250ZXh0IHtcbiAgdHlwZTogJ3JlYWQnIHwgJ3dyaXRlJztcbiAga2V5OiBzdHJpbmc7XG4gIHJhd1ZhbHVlOiB1bmtub3duO1xuICB2YWx1ZVN1bW1hcnk6IHN0cmluZztcbiAgb3BlcmF0aW9uPzogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnO1xuICBzdGVwTnVtYmVyOiBudW1iZXI7XG59XG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJEZWNpc2lvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVjaXNpb25SZW5kZXJDb250ZXh0IHtcbiAgZGVjaWRlcjogc3RyaW5nO1xuICBjaG9zZW46IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJhdGlvbmFsZT86IHN0cmluZztcbiAgLyoqIFJhdyBldmlkZW5jZSBmcm9tIGRlY2lkZSgpL3NlbGVjdCgpIOKAlCBhdmFpbGFibGUgZm9yIGN1c3RvbSByZW5kZXJpbmcuICovXG4gIGV2aWRlbmNlPzogdW5rbm93bjtcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlckZvcmsuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmtSZW5kZXJDb250ZXh0IHtcbiAgY2hpbGRyZW46IHN0cmluZ1tdO1xufVxuXG4vKiogQ29udGV4dCBwYXNzZWQgdG8gcmVuZGVyU3ViZmxvdy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlbmRlckNvbnRleHQge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRpcmVjdGlvbjogJ2VudHJ5JyB8ICdleGl0JztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBNYXBwZWQgaW5wdXQgdmFsdWVzIHNlbnQgaW50byB0aGUgc3ViZmxvdy4gUHJlc2VudCBvbiBlbnRyeS4gKi9cbiAgbWFwcGVkSW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIFN1YmZsb3cgc2hhcmVkIHN0YXRlIGF0IGV4aXQuIFByZXNlbnQgb24gZXhpdC4gKi9cbiAgb3V0cHV0U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlckxvb3AuICovXG5leHBvcnQgaW50ZXJmYWNlIExvb3BSZW5kZXJDb250ZXh0IHtcbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIGl0ZXJhdGlvbjogbnVtYmVyO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlckJyZWFrLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmVha1JlbmRlckNvbnRleHQge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbn1cblxuLyoqIENvbnRleHQgcGFzc2VkIHRvIHJlbmRlclNlbGVjdGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZFJlbmRlckNvbnRleHQge1xuICBzZWxlY3RlZDogc3RyaW5nW107XG4gIHRvdGFsOiBudW1iZXI7XG4gIC8qKiBSYXcgZXZpZGVuY2UgZnJvbSBzZWxlY3QoKSDigJQgYXZhaWxhYmxlIGZvciBjdXN0b20gcmVuZGVyaW5nLiAqL1xuICBldmlkZW5jZT86IHVua25vd247XG59XG5cbi8qKiBDb250ZXh0IHBhc3NlZCB0byByZW5kZXJFcnJvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JSZW5kZXJDb250ZXh0IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdmFsaWRhdGlvbklzc3Vlcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb250ZXh0IHBhc3NlZCB0byBgTmFycmF0aXZlRm9ybWF0dGVyLnJlbmRlckF0dGVtcHRgIOKAlCBvbmUgYXR0ZW1wdCBvZiBhIHN0YWdlXG4gKiB3aXRoIGEgZGVjbGFyZWQgcmV0cnkgcG9saWN5ICgxMC4xKSwgd2hhdGV2ZXIgaXRzIG91dGNvbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0ZW1wdFJlbmRlckNvbnRleHQge1xuICAvKiogVGhlIHN0YWdlIHRoZSBhdHRlbXB0IHJhbi4gKi9cbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgYXR0ZW1wdDogb3V0Y29tZSwgZHVyYXRpb24sIGNhdGVnb3J5LCB0aGUgc2VydmVkIGVycm9yLCBhbmQgdGhlIHJldHJ5LW9yLXN0b3AgZGVjaXNpb24uICovXG4gIHJlY29yZDogQXR0ZW1wdFJlY29yZDtcbn1cblxuLyoqXG4gKiBDb250ZXh0IHBhc3NlZCB0byBgTmFycmF0aXZlRm9ybWF0dGVyLnJlbmRlckVtaXRgIOKAlCBmaXJlcyBmb3IgZXZlcnlcbiAqIGNvbnN1bWVyLWVtaXR0ZWQgZXZlbnQgKGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWApLiBDYXJyaWVzIHRoZSBmdWxsXG4gKiBgRW1pdEV2ZW50YCBzaGFwZSBzbyBmb3JtYXR0ZXJzIGNhbiByZW5kZXIgbmFtZSArIHBheWxvYWQgd2l0aCBmdWxsXG4gKiBjb250ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRSZW5kZXJDb250ZXh0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXlsb2FkOiB1bmtub3duO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICAvKiogU3VtbWFyeSBzdHJpbmcg4oCUIHRoZSBsaWJyYXJ5J3MgZGVmYXVsdCB0cnVuY2F0ZWQgcGF5bG9hZCBwcmV2aWV3LiAqL1xuICBwYXlsb2FkU3VtbWFyeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBsdWdnYWJsZSBmb3JtYXR0ZXIgZm9yIG5hcnJhdGl2ZSBvdXRwdXQuIFR1cm5zIHN0cnVjdHVyZWQgZXZlbnQgY29udGV4dFxuICogb2JqZWN0cyBpbnRvIHRoZSB0ZXh0IGxpbmVzIHRoYXQgbWFrZSB1cCB0aGUgbmFycmF0aXZlIGFycmF5LlxuICpcbiAqICMjIFdoeSBcIkZvcm1hdHRlclwiLCBub3QgXCJSZW5kZXJlclwiXG4gKlxuICogSW4gd2ViIHRlcm1pbm9sb2d5IFwicmVuZGVyZXJcIiB1c3VhbGx5IG1lYW5zIFwidHVybiBkYXRhIGludG8gYSB2aXNpYmxlIFVJXCJcbiAqIChwaXhlbHMsIERPTSwgSFRNTCkuIFRoaXMgaW50ZXJmYWNlIGRvZXMgc29tZXRoaW5nIHNtYWxsZXI6IGl0IGNvbnZlcnRzXG4gKiBldmVudCBjb250ZXh0IGludG8gYSB0ZXh0IHN0cmluZy4gVGhhdCBpcyBtb3JlIGFjY3VyYXRlbHkgY2FsbGVkIGFcbiAqICpmb3JtYXR0ZXIqLlxuICpcbiAqICMjIEJlaGF2aW91clxuICpcbiAqIEVhY2ggbWV0aG9kIGlzIG9wdGlvbmFsIOKAlCB1bmltcGxlbWVudGVkIG1ldGhvZHMgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0XG4gKiBFbmdsaXNoIGZvcm1hdHRlci4gUmV0dXJuIGBudWxsYCBmcm9tIGByZW5kZXJPcGAgdG8gZXhjbHVkZSB0aGF0IGVudHJ5XG4gKiBmcm9tIHRoZSBuYXJyYXRpdmUgZW50aXJlbHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlYyA9IG5hcnJhdGl2ZSh7XG4gKiAgIHJlbmRlcmVyOiB7XG4gKiAgICAgcmVuZGVyT3AoY3R4KSB7XG4gKiAgICAgICBpZiAoY3R4LmtleS5zdGFydHNXaXRoKCdfaW50ZXJuYWwnKSkgcmV0dXJuIG51bGw7IC8vIGZpbHRlciBvdXQgaW50ZXJuYWwga2V5c1xuICogICAgICAgcmV0dXJuIGAke2N0eC50eXBlID09PSAncmVhZCcgPyAnUmVhZCcgOiAnV3JvdGUnfSAke2N0eC5rZXl9OiAke2N0eC52YWx1ZVN1bW1hcnl9YDtcbiAqICAgICB9LFxuICogICB9LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXJyYXRpdmVGb3JtYXR0ZXIge1xuICByZW5kZXJTdGFnZT8oY3R4OiBTdGFnZVJlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGb3JtYXQgYW4gb3AgKHNjb3BlIHJlYWQvd3JpdGUsIG9yIHN1YmZsb3ctaW5wdXQga2V5KSBpbnRvIGEgbmFycmF0aXZlIGxpbmUuXG4gICAqXG4gICAqICAgLSBgc3RyaW5nYCAgICDihpIgdXNlIGFzIHRoZSBuYXJyYXRpdmUgbGluZVxuICAgKiAgIC0gYG51bGxgICAgICAg4oaSIGRlbGliZXJhdGVseSBleGNsdWRlIHRoaXMgZW50cnkgZnJvbSB0aGUgbmFycmF0aXZlXG4gICAqICAgLSBgdW5kZWZpbmVkYCDihpIgdGhpcyBmb3JtYXR0ZXIgZG9lcyBub3QgaGFuZGxlIHRoaXMgb3A7IGZhbGwgYmFjayB0b1xuICAgKiAgICAgICAgICAgICAgICAgICB0aGUgbGlicmFyeSdzIGRlZmF1bHQgdGVtcGxhdGVcbiAgICpcbiAgICogVGhlIGB1bmRlZmluZWRgIHJldHVybiBsZXRzIGEgZG9tYWluLWF3YXJlIGZvcm1hdHRlciBoYW5kbGUgb25seSB0aGVcbiAgICoga2V5cyBpdCBrbm93cyBhYm91dCBhbmQgbGVhdmUgdGhlIHJlc3QgdG8gdGhlIGxpYnJhcnkgZGVmYXVsdCDigJQgd2l0aG91dFxuICAgKiBoYXZpbmcgdG8gcmUtaW1wbGVtZW50IHRoZSB3aG9sZSBkZWZhdWx0IGlubGluZS5cbiAgICovXG4gIHJlbmRlck9wPyhjdHg6IE9wUmVuZGVyQ29udGV4dCk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHJlbmRlckRlY2lzaW9uPyhjdHg6IERlY2lzaW9uUmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgcmVuZGVyRm9yaz8oY3R4OiBGb3JrUmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgcmVuZGVyU2VsZWN0ZWQ/KGN0eDogU2VsZWN0ZWRSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICByZW5kZXJTdWJmbG93PyhjdHg6IFN1YmZsb3dSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICByZW5kZXJMb29wPyhjdHg6IExvb3BSZW5kZXJDb250ZXh0KTogc3RyaW5nO1xuICByZW5kZXJCcmVhaz8oY3R4OiBCcmVha1JlbmRlckNvbnRleHQpOiBzdHJpbmc7XG4gIHJlbmRlckVycm9yPyhjdHg6IEVycm9yUmVuZGVyQ29udGV4dCk6IHN0cmluZztcbiAgLyoqXG4gICAqIEZvcm1hdCBvbmUgYXR0ZW1wdCBvZiBhIHJldHJpZWQgc3RhZ2UgKDEwLjEpIGludG8gYSBuYXJyYXRpdmUgbGluZSDigJQgYVxuICAgKiBkZXB0aC0xIHN1Yi1pdGVtIG9mIGl0cyBzdGFnZSwgYmV0d2VlbiB0aGUgYXR0ZW1wdHMnIHJlYWRzIGFuZCB3cml0ZXMgKGZvclxuICAgKiBhIHN0YWdlIHRoYXQgZmFpbGVkIGZvciBnb29kLCBiZW5lYXRoIGl0cyBlcnJvciBsaW5lKS4gSXQgcmVwbGFjZXMgdGhlXG4gICAqIDkuMTXigJMxMC4wIGByZW5kZXJSZXRyeWAsIHdoaWNoIGlzIHJlbW92ZWQ6IHRoaXMgbGluZSBzYXlzIFwicmV0cnlpbmdcIiB0b28uXG4gICAqXG4gICAqICAgLSBgc3RyaW5nYCAgICDihpIgdXNlIGFzIHRoZSBuYXJyYXRpdmUgbGluZVxuICAgKiAgIC0gYG51bGxgICAgICAg4oaSIGRlbGliZXJhdGVseSBleGNsdWRlIHRoaXMgZW50cnlcbiAgICogICAtIGB1bmRlZmluZWRgIOKGkiBmYWxsIGJhY2sgdG8gdGhlIGxpYnJhcnkncyBkZWZhdWx0IHNlbnRlbmNlXG4gICAqICAgICAgICAgICAgICAgICAgIChgQXR0ZW1wdCAyIG9mIDMgYXQgRmV0Y2ggZmFpbGVkIGluIDEybXMgKOKApiksIHJldHJ5aW5nIGluIDFzLmApXG4gICAqL1xuICByZW5kZXJBdHRlbXB0PyhjdHg6IEF0dGVtcHRSZW5kZXJDb250ZXh0KTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEZvcm1hdCBhIGNvbnN1bWVyLWVtaXR0ZWQgZXZlbnQgKGZyb20gYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYClcbiAgICogaW50byBhIG5hcnJhdGl2ZSBsaW5lLlxuICAgKlxuICAgKiAgIC0gYHN0cmluZ2AgICAg4oaSIHVzZSBhcyB0aGUgbmFycmF0aXZlIGxpbmVcbiAgICogICAtIGBudWxsYCAgICAgIOKGkiBkZWxpYmVyYXRlbHkgZXhjbHVkZSB0aGlzIGVudHJ5XG4gICAqICAgLSBgdW5kZWZpbmVkYCDihpIgdGhpcyBmb3JtYXR0ZXIgZG9lcyBub3QgaGFuZGxlIHRoaXMgZW1pdDsgZmFsbCBiYWNrXG4gICAqICAgICAgICAgICAgICAgICAgIHRvIHRoZSBsaWJyYXJ5J3MgZGVmYXVsdCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBUeXBpY2FsIHBhdHRlcm46IHN3aXRjaCBvbiBgY3R4Lm5hbWVgIChvciBhIHByZWZpeCBvZiBpdCkgYW5kIHJldHVybiBhXG4gICAqIGRvbWFpbi1zcGVjaWZpYyB0ZXh0IGxpbmUgZm9yIHRoZSBldmVudCB0eXBlcyB5b3UgY2FyZSBhYm91dDsgcmV0dXJuXG4gICAqIGB1bmRlZmluZWRgIGZvciBldmVyeXRoaW5nIGVsc2Ugc28gdGhlIGRlZmF1bHQgdGVtcGxhdGUgaGFuZGxlcyBpdC5cbiAgICovXG4gIHJlbmRlckVtaXQ/KGN0eDogRW1pdFJlbmRlckNvbnRleHQpOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufVxuIl19
@@ -9,6 +9,14 @@
9
9
  * The manifest reflects only subflows that were actually entered during
10
10
  * execution — unvisited branches are not included.
11
11
  *
12
+ * Attempts (10.1): a stage whose retry series retried, gave up or timed out gets a row —
13
+ * `{ stageId, stageName, runtimeStageId, attempts: AttemptSummary }` — on the
14
+ * entry of the subflow it ran in (`ManifestEntry.attempts`). The manifest has
15
+ * no entry for the top-level chart, so a top-level stage's row (or one whose
16
+ * subflow entry this recorder never saw) is served by `getRootAttempts()` and
17
+ * rides the snapshot bundle's `meta.rootAttempts` (absent when empty — the
18
+ * bundle's `data` keeps its shape).
19
+ *
12
20
  * @example
13
21
  * ```typescript
14
22
  * const manifest = new ManifestFlowRecorder();
@@ -22,7 +30,18 @@
22
30
  * const spec = manifest.getSpec('sf-credit-check');
23
31
  * ```
24
32
  */
25
- import type { FlowRecorder, FlowSubflowEvent, FlowSubflowRegisteredEvent } from '../types.js';
33
+ import type { AttemptSummary } from '../../../attempt/types.js';
34
+ import type { FlowAttemptEvent, FlowRecorder, FlowSubflowEvent, FlowSubflowRegisteredEvent } from '../types.js';
35
+ /** One stage execution whose retry series retried, gave up or timed out, at a glance. */
36
+ export interface ManifestAttemptRow {
37
+ /** Stable stage id (path-prefixed inside a subflow). */
38
+ stageId: string;
39
+ stageName: string;
40
+ /** The execution — the series' `runtimeStageId`. */
41
+ runtimeStageId: string;
42
+ /** The series at a glance — equal to the stage's `StageSnapshot.attemptSummary`. */
43
+ attempts: AttemptSummary;
44
+ }
26
45
  /** A single entry in the subflow manifest tree. */
27
46
  export interface ManifestEntry {
28
47
  /** Subflow identifier — use for on-demand spec lookup. */
@@ -33,6 +52,8 @@ export interface ManifestEntry {
33
52
  description?: string;
34
53
  /** Nested subflows entered within this subflow. */
35
54
  children: ManifestEntry[];
55
+ /** Stages run directly in this subflow whose series retried, gave up or timed out — absent when none did. */
56
+ attempts?: ManifestAttemptRow[];
36
57
  }
37
58
  export declare class ManifestFlowRecorder implements FlowRecorder {
38
59
  readonly id: string;
@@ -42,12 +63,31 @@ export declare class ManifestFlowRecorder implements FlowRecorder {
42
63
  private roots;
43
64
  /** Full specs stored from dynamic registration events. */
44
65
  private specs;
66
+ /**
67
+ * Open entries by subflowId — where a stage's row lands. Not the stack: parallel subflow siblings exit out of
68
+ * stack order, so the entry a row belongs to may no longer be on it.
69
+ */
70
+ private openEntries;
71
+ /** Rows of top-level stages — the manifest has no entry for the top-level chart. */
72
+ private rootAttempts;
73
+ /** Per-series tallies of the series that retried, gave up or timed out. */
74
+ private readonly attemptBook;
45
75
  constructor(id?: string);
46
76
  onSubflowEntry(event: FlowSubflowEvent): void;
47
- onSubflowExit(_event: FlowSubflowEvent): void;
77
+ onSubflowExit(event: FlowSubflowEvent): void;
78
+ /**
79
+ * A series' row lands once, when it ends, on the open entry of the subflow the stage ran in; a top-level
80
+ * stage's (or one whose entry this recorder never saw) on the root rows.
81
+ */
82
+ onAttempt(event: FlowAttemptEvent): void;
48
83
  onSubflowRegistered(event: FlowSubflowRegisteredEvent): void;
49
84
  /** Returns the manifest tree — lightweight, suitable for snapshot inclusion. */
50
85
  getManifest(): ManifestEntry[];
86
+ /**
87
+ * Rows of top-level stages whose series retried, gave up or timed out, in the order the series ended — plus any row of a
88
+ * subflow stage whose entry this recorder never saw (its path-prefixed `stageId` says where it ran).
89
+ */
90
+ getRootAttempts(): ManifestAttemptRow[];
51
91
  /**
52
92
  * Returns the full spec for a dynamically-registered subflow.
53
93
  * Only populated for subflows auto-registered at runtime (via StageNode
@@ -59,6 +99,9 @@ export declare class ManifestFlowRecorder implements FlowRecorder {
59
99
  /** Returns all stored spec IDs. */
60
100
  getSpecIds(): string[];
61
101
  toSnapshot(): {
102
+ meta?: {
103
+ rootAttempts: ManifestAttemptRow[];
104
+ } | undefined;
62
105
  name: string;
63
106
  description: string;
64
107
  preferredOperation: "translate";
@@ -9,6 +9,14 @@
9
9
  * The manifest reflects only subflows that were actually entered during
10
10
  * execution — unvisited branches are not included.
11
11
  *
12
+ * Attempts (10.1): a stage whose retry series retried, gave up or timed out gets a row —
13
+ * `{ stageId, stageName, runtimeStageId, attempts: AttemptSummary }` — on the
14
+ * entry of the subflow it ran in (`ManifestEntry.attempts`). The manifest has
15
+ * no entry for the top-level chart, so a top-level stage's row (or one whose
16
+ * subflow entry this recorder never saw) is served by `getRootAttempts()` and
17
+ * rides the snapshot bundle's `meta.rootAttempts` (absent when empty — the
18
+ * bundle's `data` keeps its shape).
19
+ *
12
20
  * @example
13
21
  * ```typescript
14
22
  * const manifest = new ManifestFlowRecorder();
@@ -22,6 +30,7 @@
22
30
  * const spec = manifest.getSpec('sf-credit-check');
23
31
  * ```
24
32
  */
33
+ import { AttemptSeriesBook, subflowOfAttempt } from '../../../recorder/attemptSeries.js';
25
34
  export class ManifestFlowRecorder {
26
35
  id;
27
36
  /** Stack tracks nesting depth — current subflow is top of stack. */
@@ -30,6 +39,15 @@ export class ManifestFlowRecorder {
30
39
  roots = [];
31
40
  /** Full specs stored from dynamic registration events. */
32
41
  specs = new Map();
42
+ /**
43
+ * Open entries by subflowId — where a stage's row lands. Not the stack: parallel subflow siblings exit out of
44
+ * stack order, so the entry a row belongs to may no longer be on it.
45
+ */
46
+ openEntries = new Map();
47
+ /** Rows of top-level stages — the manifest has no entry for the top-level chart. */
48
+ rootAttempts = [];
49
+ /** Per-series tallies of the series that retried, gave up or timed out. */
50
+ attemptBook = new AttemptSeriesBook();
33
51
  constructor(id) {
34
52
  this.id = id ?? 'manifest';
35
53
  }
@@ -41,8 +59,10 @@ export class ManifestFlowRecorder {
41
59
  children: [],
42
60
  };
43
61
  this.stack.push(entry);
62
+ this.openEntries.set(entry.subflowId, entry);
44
63
  }
45
- onSubflowExit(_event) {
64
+ onSubflowExit(event) {
65
+ this.openEntries.delete(event.subflowId ?? event.name);
46
66
  const completed = this.stack.pop();
47
67
  if (!completed)
48
68
  return;
@@ -54,6 +74,28 @@ export class ManifestFlowRecorder {
54
74
  this.roots.push(completed);
55
75
  }
56
76
  }
77
+ /**
78
+ * A series' row lands once, when it ends, on the open entry of the subflow the stage ran in; a top-level
79
+ * stage's (or one whose entry this recorder never saw) on the root rows.
80
+ */
81
+ onAttempt(event) {
82
+ const summary = this.attemptBook.add(event.record)?.summary;
83
+ if (!summary)
84
+ return;
85
+ const row = {
86
+ stageId: event.stageId,
87
+ stageName: event.stageName,
88
+ runtimeStageId: event.record.series,
89
+ attempts: summary,
90
+ };
91
+ const owner = this.openEntries.get(subflowOfAttempt(event) ?? '');
92
+ // A row whose subflow entry this recorder never saw (attached mid-run) is kept with the top-level rows — its
93
+ // path-prefixed `stageId` still says where it ran — never dropped.
94
+ if (owner)
95
+ (owner.attempts ??= []).push(row);
96
+ else
97
+ this.rootAttempts.push(row);
98
+ }
57
99
  onSubflowRegistered(event) {
58
100
  if (event.specStructure && !this.specs.has(event.subflowId)) {
59
101
  this.specs.set(event.subflowId, event.specStructure);
@@ -63,6 +105,13 @@ export class ManifestFlowRecorder {
63
105
  getManifest() {
64
106
  return [...this.roots];
65
107
  }
108
+ /**
109
+ * Rows of top-level stages whose series retried, gave up or timed out, in the order the series ended — plus any row of a
110
+ * subflow stage whose entry this recorder never saw (its path-prefixed `stageId` says where it ran).
111
+ */
112
+ getRootAttempts() {
113
+ return [...this.rootAttempts];
114
+ }
66
115
  /**
67
116
  * Returns the full spec for a dynamically-registered subflow.
68
117
  * Only populated for subflows auto-registered at runtime (via StageNode
@@ -83,6 +132,7 @@ export class ManifestFlowRecorder {
83
132
  description: 'Translator (FlowRecorder) — subflow catalog built during traversal',
84
133
  preferredOperation: 'translate',
85
134
  data: this.getManifest(),
135
+ ...(this.rootAttempts.length > 0 && { meta: { rootAttempts: this.getRootAttempts() } }),
86
136
  };
87
137
  }
88
138
  /** Clears state for reuse. */
@@ -90,6 +140,9 @@ export class ManifestFlowRecorder {
90
140
  this.stack = [];
91
141
  this.roots = [];
92
142
  this.specs.clear();
143
+ this.openEntries = new Map();
144
+ this.rootAttempts = [];
145
+ this.attemptBook.clear();
93
146
  }
94
147
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFuaWZlc3RGbG93UmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvcmVjb3JkZXJzL01hbmlmZXN0Rmxvd1JlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQWdCSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ3RCLEVBQUUsQ0FBUztJQUVwQixvRUFBb0U7SUFDNUQsS0FBSyxHQUFvQixFQUFFLENBQUM7SUFDcEMsK0RBQStEO0lBQ3ZELEtBQUssR0FBb0IsRUFBRSxDQUFDO0lBQ3BDLDBEQUEwRDtJQUNsRCxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7SUFFM0MsWUFBWSxFQUFXO1FBQ3JCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXVCO1FBQ3BDLE1BQU0sS0FBSyxHQUFrQjtZQUMzQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSTtZQUN4QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBd0I7UUFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWlDO1FBQ25ELElBQUksS0FBSyxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLFdBQVc7UUFDVCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE9BQU8sQ0FBQyxTQUFpQjtRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsVUFBVTtRQUNSLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVU7WUFDaEIsV0FBVyxFQUFFLG9FQUFvRTtZQUNqRixrQkFBa0IsRUFBRSxXQUFvQjtZQUN4QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELDhCQUE4QjtJQUM5QixLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hbmlmZXN0Rmxvd1JlY29yZGVyIOKAlCBCdWlsZHMgYSBsaWdodHdlaWdodCBzdWJmbG93IG1hbmlmZXN0IGR1cmluZyB0cmF2ZXJzYWwuXG4gKlxuICogQ29sbGVjdHMgc3ViZmxvdyBtZXRhZGF0YSAoSUQsIG5hbWUsIGRlc2NyaXB0aW9uKSBhcyBhIHNpZGUgZWZmZWN0IG9mXG4gKiBvYnNlcnZpbmcgdHJhdmVyc2FsIGV2ZW50cy4gUHJvZHVjZXMgYSB0cmVlIHN0cnVjdHVyZSBzdWl0YWJsZSBmb3IgTExNXG4gKiBuYXZpZ2F0aW9uOiBsaWdodHdlaWdodCBlbm91Z2ggdG8gaW5jbHVkZSBpbiBzbmFwc2hvdHMsIHdpdGggb24tZGVtYW5kXG4gKiBhY2Nlc3MgdG8gZnVsbCBzcGVjcyB2aWEgZ2V0U3BlYygpLlxuICpcbiAqIFRoZSBtYW5pZmVzdCByZWZsZWN0cyBvbmx5IHN1YmZsb3dzIHRoYXQgd2VyZSBhY3R1YWxseSBlbnRlcmVkIGR1cmluZ1xuICogZXhlY3V0aW9uIOKAlCB1bnZpc2l0ZWQgYnJhbmNoZXMgYXJlIG5vdCBpbmNsdWRlZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWFuaWZlc3QgPSBuZXcgTWFuaWZlc3RGbG93UmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaEZsb3dSZWNvcmRlcihtYW5pZmVzdCk7XG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dDogZGF0YSB9KTtcbiAqXG4gKiAvLyBMaWdodHdlaWdodCB0cmVlIG9mIHN1YmZsb3cgSURzICsgZGVzY3JpcHRpb25zXG4gKiBjb25zdCB0cmVlID0gbWFuaWZlc3QuZ2V0TWFuaWZlc3QoKTtcbiAqXG4gKiAvLyBGdWxsIHNwZWMgZm9yIGEgc3BlY2lmaWMgc3ViZmxvdyAoaWYgYXZhaWxhYmxlKVxuICogY29uc3Qgc3BlYyA9IG1hbmlmZXN0LmdldFNwZWMoJ3NmLWNyZWRpdC1jaGVjaycpO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIsIEZsb3dTdWJmbG93RXZlbnQsIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50IH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKiogQSBzaW5nbGUgZW50cnkgaW4gdGhlIHN1YmZsb3cgbWFuaWZlc3QgdHJlZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuaWZlc3RFbnRyeSB7XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIg4oCUIHVzZSBmb3Igb24tZGVtYW5kIHNwZWMgbG9va3VwLiAqL1xuICBzdWJmbG93SWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIEJ1aWxkLXRpbWUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHN1YmZsb3cgZG9lcy4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBOZXN0ZWQgc3ViZmxvd3MgZW50ZXJlZCB3aXRoaW4gdGhpcyBzdWJmbG93LiAqL1xuICBjaGlsZHJlbjogTWFuaWZlc3RFbnRyeVtdO1xufVxuXG5leHBvcnQgY2xhc3MgTWFuaWZlc3RGbG93UmVjb3JkZXIgaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKiBTdGFjayB0cmFja3MgbmVzdGluZyBkZXB0aCDigJQgY3VycmVudCBzdWJmbG93IGlzIHRvcCBvZiBzdGFjay4gKi9cbiAgcHJpdmF0ZSBzdGFjazogTWFuaWZlc3RFbnRyeVtdID0gW107XG4gIC8qKiBSb290LWxldmVsIHN1YmZsb3dzIChub3QgbmVzdGVkIGluc2lkZSBhbm90aGVyIHN1YmZsb3cpLiAqL1xuICBwcml2YXRlIHJvb3RzOiBNYW5pZmVzdEVudHJ5W10gPSBbXTtcbiAgLyoqIEZ1bGwgc3BlY3Mgc3RvcmVkIGZyb20gZHluYW1pYyByZWdpc3RyYXRpb24gZXZlbnRzLiAqL1xuICBwcml2YXRlIHNwZWNzID0gbmV3IE1hcDxzdHJpbmcsIHVua25vd24+KCk7XG5cbiAgY29uc3RydWN0b3IoaWQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlkID0gaWQgPz8gJ21hbmlmZXN0JztcbiAgfVxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZW50cnk6IE1hbmlmZXN0RW50cnkgPSB7XG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnN1YmZsb3dJZCA/PyBldmVudC5uYW1lLFxuICAgICAgbmFtZTogZXZlbnQubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9O1xuICAgIHRoaXMuc3RhY2sucHVzaChlbnRyeSk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KF9ldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBsZXRlZCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgaWYgKCFjb21wbGV0ZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChjb21wbGV0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvb3RzLnB1c2goY29tcGxldGVkKTtcbiAgICB9XG4gIH1cblxuICBvblN1YmZsb3dSZWdpc3RlcmVkKGV2ZW50OiBGbG93U3ViZmxvd1JlZ2lzdGVyZWRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5zcGVjU3RydWN0dXJlICYmICF0aGlzLnNwZWNzLmhhcyhldmVudC5zdWJmbG93SWQpKSB7XG4gICAgICB0aGlzLnNwZWNzLnNldChldmVudC5zdWJmbG93SWQsIGV2ZW50LnNwZWNTdHJ1Y3R1cmUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBtYW5pZmVzdCB0cmVlIOKAlCBsaWdodHdlaWdodCwgc3VpdGFibGUgZm9yIHNuYXBzaG90IGluY2x1c2lvbi4gKi9cbiAgZ2V0TWFuaWZlc3QoKTogTWFuaWZlc3RFbnRyeVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucm9vdHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZ1bGwgc3BlYyBmb3IgYSBkeW5hbWljYWxseS1yZWdpc3RlcmVkIHN1YmZsb3cuXG4gICAqIE9ubHkgcG9wdWxhdGVkIGZvciBzdWJmbG93cyBhdXRvLXJlZ2lzdGVyZWQgYXQgcnVudGltZSAodmlhIFN0YWdlTm9kZVxuICAgKiByZXR1cm4gd2l0aCBzdWJmbG93RGVmKS4gU3RhdGljYWxseS1jb25maWd1cmVkIHN1YmZsb3dzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogZXZlbiBpZiB0aGV5IGFwcGVhciBpbiBnZXRNYW5pZmVzdCgpLiBVc2UgRmxvd0NoYXJ0LmJ1aWxkVGltZVN0cnVjdHVyZVxuICAgKiB0byBhY2Nlc3Mgc3RhdGljYWxseS1kZWZpbmVkIHN1YmZsb3cgc3BlY3MuXG4gICAqL1xuICBnZXRTcGVjKHN1YmZsb3dJZDogc3RyaW5nKTogdW5rbm93biB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3BlY3MuZ2V0KHN1YmZsb3dJZCk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhbGwgc3RvcmVkIHNwZWMgSURzLiAqL1xuICBnZXRTcGVjSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNwZWNzLmtleXMoKSk7XG4gIH1cblxuICB0b1NuYXBzaG90KCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnTWFuaWZlc3QnLFxuICAgICAgZGVzY3JpcHRpb246ICdUcmFuc2xhdG9yIChGbG93UmVjb3JkZXIpIOKAlCBzdWJmbG93IGNhdGFsb2cgYnVpbHQgZHVyaW5nIHRyYXZlcnNhbCcsXG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb246ICd0cmFuc2xhdGUnIGFzIGNvbnN0LFxuICAgICAgZGF0YTogdGhpcy5nZXRNYW5pZmVzdCgpLFxuICAgIH07XG4gIH1cblxuICAvKiogQ2xlYXJzIHN0YXRlIGZvciByZXVzZS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdGFjayA9IFtdO1xuICAgIHRoaXMucm9vdHMgPSBbXTtcbiAgICB0aGlzLnNwZWNzLmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFuaWZlc3RGbG93UmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvcmVjb3JkZXJzL01hbmlmZXN0Rmxvd1JlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBR0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUE0QnpGLE1BQU0sT0FBTyxvQkFBb0I7SUFDdEIsRUFBRSxDQUFTO0lBRXBCLG9FQUFvRTtJQUM1RCxLQUFLLEdBQW9CLEVBQUUsQ0FBQztJQUNwQywrREFBK0Q7SUFDdkQsS0FBSyxHQUFvQixFQUFFLENBQUM7SUFDcEMsMERBQTBEO0lBQ2xELEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUMzQzs7O09BR0c7SUFDSyxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDdkQsb0ZBQW9GO0lBQzVFLFlBQVksR0FBeUIsRUFBRSxDQUFDO0lBQ2hELDJFQUEyRTtJQUMxRCxXQUFXLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBRXZELFlBQVksRUFBVztRQUNyQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUF1QjtRQUNwQyxNQUFNLEtBQUssR0FBa0I7WUFDM0IsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUk7WUFDeEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBdUI7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxLQUF1QjtRQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQzVELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNyQixNQUFNLEdBQUcsR0FBdUI7WUFDOUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixjQUFjLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQ25DLFFBQVEsRUFBRSxPQUFPO1NBQ2xCLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSw2R0FBNkc7UUFDN0csbUVBQW1FO1FBQ25FLElBQUksS0FBSztZQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O1lBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFpQztRQUNuRCxJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixXQUFXO1FBQ1QsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxPQUFPLENBQUMsU0FBaUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLFVBQVU7UUFDUixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTztZQUNMLElBQUksRUFBRSxVQUFVO1lBQ2hCLFdBQVcsRUFBRSxvRUFBb0U7WUFDakYsa0JBQWtCLEVBQUUsV0FBb0I7WUFDeEMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDeEIsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3hGLENBQUM7SUFDSixDQUFDO0lBRUQsOEJBQThCO0lBQzlCLEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWFuaWZlc3RGbG93UmVjb3JkZXIg4oCUIEJ1aWxkcyBhIGxpZ2h0d2VpZ2h0IHN1YmZsb3cgbWFuaWZlc3QgZHVyaW5nIHRyYXZlcnNhbC5cbiAqXG4gKiBDb2xsZWN0cyBzdWJmbG93IG1ldGFkYXRhIChJRCwgbmFtZSwgZGVzY3JpcHRpb24pIGFzIGEgc2lkZSBlZmZlY3Qgb2ZcbiAqIG9ic2VydmluZyB0cmF2ZXJzYWwgZXZlbnRzLiBQcm9kdWNlcyBhIHRyZWUgc3RydWN0dXJlIHN1aXRhYmxlIGZvciBMTE1cbiAqIG5hdmlnYXRpb246IGxpZ2h0d2VpZ2h0IGVub3VnaCB0byBpbmNsdWRlIGluIHNuYXBzaG90cywgd2l0aCBvbi1kZW1hbmRcbiAqIGFjY2VzcyB0byBmdWxsIHNwZWNzIHZpYSBnZXRTcGVjKCkuXG4gKlxuICogVGhlIG1hbmlmZXN0IHJlZmxlY3RzIG9ubHkgc3ViZmxvd3MgdGhhdCB3ZXJlIGFjdHVhbGx5IGVudGVyZWQgZHVyaW5nXG4gKiBleGVjdXRpb24g4oCUIHVudmlzaXRlZCBicmFuY2hlcyBhcmUgbm90IGluY2x1ZGVkLlxuICpcbiAqIEF0dGVtcHRzICgxMC4xKTogYSBzdGFnZSB3aG9zZSByZXRyeSBzZXJpZXMgcmV0cmllZCwgZ2F2ZSB1cCBvciB0aW1lZCBvdXQgZ2V0cyBhIHJvdyDigJRcbiAqIGB7IHN0YWdlSWQsIHN0YWdlTmFtZSwgcnVudGltZVN0YWdlSWQsIGF0dGVtcHRzOiBBdHRlbXB0U3VtbWFyeSB9YCDigJQgb24gdGhlXG4gKiBlbnRyeSBvZiB0aGUgc3ViZmxvdyBpdCByYW4gaW4gKGBNYW5pZmVzdEVudHJ5LmF0dGVtcHRzYCkuIFRoZSBtYW5pZmVzdCBoYXNcbiAqIG5vIGVudHJ5IGZvciB0aGUgdG9wLWxldmVsIGNoYXJ0LCBzbyBhIHRvcC1sZXZlbCBzdGFnZSdzIHJvdyAob3Igb25lIHdob3NlXG4gKiBzdWJmbG93IGVudHJ5IHRoaXMgcmVjb3JkZXIgbmV2ZXIgc2F3KSBpcyBzZXJ2ZWQgYnkgYGdldFJvb3RBdHRlbXB0cygpYCBhbmRcbiAqIHJpZGVzIHRoZSBzbmFwc2hvdCBidW5kbGUncyBgbWV0YS5yb290QXR0ZW1wdHNgIChhYnNlbnQgd2hlbiBlbXB0eSDigJQgdGhlXG4gKiBidW5kbGUncyBgZGF0YWAga2VlcHMgaXRzIHNoYXBlKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWFuaWZlc3QgPSBuZXcgTWFuaWZlc3RGbG93UmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaEZsb3dSZWNvcmRlcihtYW5pZmVzdCk7XG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dDogZGF0YSB9KTtcbiAqXG4gKiAvLyBMaWdodHdlaWdodCB0cmVlIG9mIHN1YmZsb3cgSURzICsgZGVzY3JpcHRpb25zXG4gKiBjb25zdCB0cmVlID0gbWFuaWZlc3QuZ2V0TWFuaWZlc3QoKTtcbiAqXG4gKiAvLyBGdWxsIHNwZWMgZm9yIGEgc3BlY2lmaWMgc3ViZmxvdyAoaWYgYXZhaWxhYmxlKVxuICogY29uc3Qgc3BlYyA9IG1hbmlmZXN0LmdldFNwZWMoJ3NmLWNyZWRpdC1jaGVjaycpO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0U3VtbWFyeSB9IGZyb20gJy4uLy4uLy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuaW1wb3J0IHsgQXR0ZW1wdFNlcmllc0Jvb2ssIHN1YmZsb3dPZkF0dGVtcHQgfSBmcm9tICcuLi8uLi8uLi9yZWNvcmRlci9hdHRlbXB0U2VyaWVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd0F0dGVtcHRFdmVudCwgRmxvd1JlY29yZGVyLCBGbG93U3ViZmxvd0V2ZW50LCBGbG93U3ViZmxvd1JlZ2lzdGVyZWRFdmVudCB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqIE9uZSBzdGFnZSBleGVjdXRpb24gd2hvc2UgcmV0cnkgc2VyaWVzIHJldHJpZWQsIGdhdmUgdXAgb3IgdGltZWQgb3V0LCBhdCBhIGdsYW5jZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuaWZlc3RBdHRlbXB0Um93IHtcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZCAocGF0aC1wcmVmaXhlZCBpbnNpZGUgYSBzdWJmbG93KS4gKi9cbiAgc3RhZ2VJZDogc3RyaW5nO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBleGVjdXRpb24g4oCUIHRoZSBzZXJpZXMnIGBydW50aW1lU3RhZ2VJZGAuICovXG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgc2VyaWVzIGF0IGEgZ2xhbmNlIOKAlCBlcXVhbCB0byB0aGUgc3RhZ2UncyBgU3RhZ2VTbmFwc2hvdC5hdHRlbXB0U3VtbWFyeWAuICovXG4gIGF0dGVtcHRzOiBBdHRlbXB0U3VtbWFyeTtcbn1cblxuLyoqIEEgc2luZ2xlIGVudHJ5IGluIHRoZSBzdWJmbG93IG1hbmlmZXN0IHRyZWUuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmlmZXN0RW50cnkge1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2UgZm9yIG9uLWRlbWFuZCBzcGVjIGxvb2t1cC4gKi9cbiAgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBCdWlsZC10aW1lIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBzdWJmbG93IGRvZXMuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogTmVzdGVkIHN1YmZsb3dzIGVudGVyZWQgd2l0aGluIHRoaXMgc3ViZmxvdy4gKi9cbiAgY2hpbGRyZW46IE1hbmlmZXN0RW50cnlbXTtcbiAgLyoqIFN0YWdlcyBydW4gZGlyZWN0bHkgaW4gdGhpcyBzdWJmbG93IHdob3NlIHNlcmllcyByZXRyaWVkLCBnYXZlIHVwIG9yIHRpbWVkIG91dCDigJQgYWJzZW50IHdoZW4gbm9uZSBkaWQuICovXG4gIGF0dGVtcHRzPzogTWFuaWZlc3RBdHRlbXB0Um93W107XG59XG5cbmV4cG9ydCBjbGFzcyBNYW5pZmVzdEZsb3dSZWNvcmRlciBpbXBsZW1lbnRzIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqIFN0YWNrIHRyYWNrcyBuZXN0aW5nIGRlcHRoIOKAlCBjdXJyZW50IHN1YmZsb3cgaXMgdG9wIG9mIHN0YWNrLiAqL1xuICBwcml2YXRlIHN0YWNrOiBNYW5pZmVzdEVudHJ5W10gPSBbXTtcbiAgLyoqIFJvb3QtbGV2ZWwgc3ViZmxvd3MgKG5vdCBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgc3ViZmxvdykuICovXG4gIHByaXZhdGUgcm9vdHM6IE1hbmlmZXN0RW50cnlbXSA9IFtdO1xuICAvKiogRnVsbCBzcGVjcyBzdG9yZWQgZnJvbSBkeW5hbWljIHJlZ2lzdHJhdGlvbiBldmVudHMuICovXG4gIHByaXZhdGUgc3BlY3MgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcbiAgLyoqXG4gICAqIE9wZW4gZW50cmllcyBieSBzdWJmbG93SWQg4oCUIHdoZXJlIGEgc3RhZ2UncyByb3cgbGFuZHMuIE5vdCB0aGUgc3RhY2s6IHBhcmFsbGVsIHN1YmZsb3cgc2libGluZ3MgZXhpdCBvdXQgb2ZcbiAgICogc3RhY2sgb3JkZXIsIHNvIHRoZSBlbnRyeSBhIHJvdyBiZWxvbmdzIHRvIG1heSBubyBsb25nZXIgYmUgb24gaXQuXG4gICAqL1xuICBwcml2YXRlIG9wZW5FbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE1hbmlmZXN0RW50cnk+KCk7XG4gIC8qKiBSb3dzIG9mIHRvcC1sZXZlbCBzdGFnZXMg4oCUIHRoZSBtYW5pZmVzdCBoYXMgbm8gZW50cnkgZm9yIHRoZSB0b3AtbGV2ZWwgY2hhcnQuICovXG4gIHByaXZhdGUgcm9vdEF0dGVtcHRzOiBNYW5pZmVzdEF0dGVtcHRSb3dbXSA9IFtdO1xuICAvKiogUGVyLXNlcmllcyB0YWxsaWVzIG9mIHRoZSBzZXJpZXMgdGhhdCByZXRyaWVkLCBnYXZlIHVwIG9yIHRpbWVkIG91dC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBhdHRlbXB0Qm9vayA9IG5ldyBBdHRlbXB0U2VyaWVzQm9vaygpO1xuXG4gIGNvbnN0cnVjdG9yKGlkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5pZCA9IGlkID8/ICdtYW5pZmVzdCc7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJ5OiBNYW5pZmVzdEVudHJ5ID0ge1xuICAgICAgc3ViZmxvd0lkOiBldmVudC5zdWJmbG93SWQgPz8gZXZlbnQubmFtZSxcbiAgICAgIG5hbWU6IGV2ZW50Lm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgfTtcbiAgICB0aGlzLnN0YWNrLnB1c2goZW50cnkpO1xuICAgIHRoaXMub3BlbkVudHJpZXMuc2V0KGVudHJ5LnN1YmZsb3dJZCwgZW50cnkpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkVudHJpZXMuZGVsZXRlKGV2ZW50LnN1YmZsb3dJZCA/PyBldmVudC5uYW1lKTtcbiAgICBjb25zdCBjb21wbGV0ZWQgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgIGlmICghY29tcGxldGVkKSByZXR1cm47XG5cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2goY29tcGxldGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb290cy5wdXNoKGNvbXBsZXRlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgc2VyaWVzJyByb3cgbGFuZHMgb25jZSwgd2hlbiBpdCBlbmRzLCBvbiB0aGUgb3BlbiBlbnRyeSBvZiB0aGUgc3ViZmxvdyB0aGUgc3RhZ2UgcmFuIGluOyBhIHRvcC1sZXZlbFxuICAgKiBzdGFnZSdzIChvciBvbmUgd2hvc2UgZW50cnkgdGhpcyByZWNvcmRlciBuZXZlciBzYXcpIG9uIHRoZSByb290IHJvd3MuXG4gICAqL1xuICBvbkF0dGVtcHQoZXZlbnQ6IEZsb3dBdHRlbXB0RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5hdHRlbXB0Qm9vay5hZGQoZXZlbnQucmVjb3JkKT8uc3VtbWFyeTtcbiAgICBpZiAoIXN1bW1hcnkpIHJldHVybjtcbiAgICBjb25zdCByb3c6IE1hbmlmZXN0QXR0ZW1wdFJvdyA9IHtcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnN0YWdlSWQsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC5yZWNvcmQuc2VyaWVzLFxuICAgICAgYXR0ZW1wdHM6IHN1bW1hcnksXG4gICAgfTtcbiAgICBjb25zdCBvd25lciA9IHRoaXMub3BlbkVudHJpZXMuZ2V0KHN1YmZsb3dPZkF0dGVtcHQoZXZlbnQpID8/ICcnKTtcbiAgICAvLyBBIHJvdyB3aG9zZSBzdWJmbG93IGVudHJ5IHRoaXMgcmVjb3JkZXIgbmV2ZXIgc2F3IChhdHRhY2hlZCBtaWQtcnVuKSBpcyBrZXB0IHdpdGggdGhlIHRvcC1sZXZlbCByb3dzIOKAlCBpdHNcbiAgICAvLyBwYXRoLXByZWZpeGVkIGBzdGFnZUlkYCBzdGlsbCBzYXlzIHdoZXJlIGl0IHJhbiDigJQgbmV2ZXIgZHJvcHBlZC5cbiAgICBpZiAob3duZXIpIChvd25lci5hdHRlbXB0cyA/Pz0gW10pLnB1c2gocm93KTtcbiAgICBlbHNlIHRoaXMucm9vdEF0dGVtcHRzLnB1c2gocm93KTtcbiAgfVxuXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQoZXZlbnQ6IEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnNwZWNTdHJ1Y3R1cmUgJiYgIXRoaXMuc3BlY3MuaGFzKGV2ZW50LnN1YmZsb3dJZCkpIHtcbiAgICAgIHRoaXMuc3BlY3Muc2V0KGV2ZW50LnN1YmZsb3dJZCwgZXZlbnQuc3BlY1N0cnVjdHVyZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIG1hbmlmZXN0IHRyZWUg4oCUIGxpZ2h0d2VpZ2h0LCBzdWl0YWJsZSBmb3Igc25hcHNob3QgaW5jbHVzaW9uLiAqL1xuICBnZXRNYW5pZmVzdCgpOiBNYW5pZmVzdEVudHJ5W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5yb290c107XG4gIH1cblxuICAvKipcbiAgICogUm93cyBvZiB0b3AtbGV2ZWwgc3RhZ2VzIHdob3NlIHNlcmllcyByZXRyaWVkLCBnYXZlIHVwIG9yIHRpbWVkIG91dCwgaW4gdGhlIG9yZGVyIHRoZSBzZXJpZXMgZW5kZWQg4oCUIHBsdXMgYW55IHJvdyBvZiBhXG4gICAqIHN1YmZsb3cgc3RhZ2Ugd2hvc2UgZW50cnkgdGhpcyByZWNvcmRlciBuZXZlciBzYXcgKGl0cyBwYXRoLXByZWZpeGVkIGBzdGFnZUlkYCBzYXlzIHdoZXJlIGl0IHJhbikuXG4gICAqL1xuICBnZXRSb290QXR0ZW1wdHMoKTogTWFuaWZlc3RBdHRlbXB0Um93W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5yb290QXR0ZW1wdHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZ1bGwgc3BlYyBmb3IgYSBkeW5hbWljYWxseS1yZWdpc3RlcmVkIHN1YmZsb3cuXG4gICAqIE9ubHkgcG9wdWxhdGVkIGZvciBzdWJmbG93cyBhdXRvLXJlZ2lzdGVyZWQgYXQgcnVudGltZSAodmlhIFN0YWdlTm9kZVxuICAgKiByZXR1cm4gd2l0aCBzdWJmbG93RGVmKS4gU3RhdGljYWxseS1jb25maWd1cmVkIHN1YmZsb3dzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogZXZlbiBpZiB0aGV5IGFwcGVhciBpbiBnZXRNYW5pZmVzdCgpLiBVc2UgRmxvd0NoYXJ0LmJ1aWxkVGltZVN0cnVjdHVyZVxuICAgKiB0byBhY2Nlc3Mgc3RhdGljYWxseS1kZWZpbmVkIHN1YmZsb3cgc3BlY3MuXG4gICAqL1xuICBnZXRTcGVjKHN1YmZsb3dJZDogc3RyaW5nKTogdW5rbm93biB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3BlY3MuZ2V0KHN1YmZsb3dJZCk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhbGwgc3RvcmVkIHNwZWMgSURzLiAqL1xuICBnZXRTcGVjSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNwZWNzLmtleXMoKSk7XG4gIH1cblxuICB0b1NuYXBzaG90KCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnTWFuaWZlc3QnLFxuICAgICAgZGVzY3JpcHRpb246ICdUcmFuc2xhdG9yIChGbG93UmVjb3JkZXIpIOKAlCBzdWJmbG93IGNhdGFsb2cgYnVpbHQgZHVyaW5nIHRyYXZlcnNhbCcsXG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb246ICd0cmFuc2xhdGUnIGFzIGNvbnN0LFxuICAgICAgZGF0YTogdGhpcy5nZXRNYW5pZmVzdCgpLFxuICAgICAgLi4uKHRoaXMucm9vdEF0dGVtcHRzLmxlbmd0aCA+IDAgJiYgeyBtZXRhOiB7IHJvb3RBdHRlbXB0czogdGhpcy5nZXRSb290QXR0ZW1wdHMoKSB9IH0pLFxuICAgIH07XG4gIH1cblxuICAvKiogQ2xlYXJzIHN0YXRlIGZvciByZXVzZS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdGFjayA9IFtdO1xuICAgIHRoaXMucm9vdHMgPSBbXTtcbiAgICB0aGlzLnNwZWNzLmNsZWFyKCk7XG4gICAgdGhpcy5vcGVuRW50cmllcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLnJvb3RBdHRlbXB0cyA9IFtdO1xuICAgIHRoaXMuYXR0ZW1wdEJvb2suY2xlYXIoKTtcbiAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  export { AdaptiveNarrativeFlowRecorder } from './AdaptiveNarrativeFlowRecorder.js';
2
- export type { ManifestEntry } from './ManifestFlowRecorder.js';
2
+ export type { ManifestAttemptRow, ManifestEntry } from './ManifestFlowRecorder.js';
3
3
  export { ManifestFlowRecorder } from './ManifestFlowRecorder.js';
4
4
  export { MilestoneNarrativeFlowRecorder } from './MilestoneNarrativeFlowRecorder.js';
5
5
  export { ProgressiveNarrativeFlowRecorder } from './ProgressiveNarrativeFlowRecorder.js';