footprintjs 0.1.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 (251) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +658 -0
  3. package/dist/advanced.js +84 -0
  4. package/dist/esm/advanced.js +26 -0
  5. package/dist/esm/index.js +30 -0
  6. package/dist/esm/lib/builder/FlowChartBuilder.js +809 -0
  7. package/dist/esm/lib/builder/index.js +12 -0
  8. package/dist/esm/lib/builder/types.js +9 -0
  9. package/dist/esm/lib/engine/graph/StageNode.js +38 -0
  10. package/dist/esm/lib/engine/graph/index.js +2 -0
  11. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +116 -0
  12. package/dist/esm/lib/engine/handlers/ContinuationResolver.js +121 -0
  13. package/dist/esm/lib/engine/handlers/DeciderHandler.js +78 -0
  14. package/dist/esm/lib/engine/handlers/ExtractorRunner.js +117 -0
  15. package/dist/esm/lib/engine/handlers/NodeResolver.js +72 -0
  16. package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +154 -0
  17. package/dist/esm/lib/engine/handlers/SelectorHandler.js +79 -0
  18. package/dist/esm/lib/engine/handlers/StageRunner.js +86 -0
  19. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +322 -0
  20. package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +113 -0
  21. package/dist/esm/lib/engine/handlers/index.js +23 -0
  22. package/dist/esm/lib/engine/index.js +18 -0
  23. package/dist/esm/lib/engine/narrative/CombinedNarrativeBuilder.js +158 -0
  24. package/dist/esm/lib/engine/narrative/ControlFlowNarrativeGenerator.js +90 -0
  25. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +24 -0
  26. package/dist/esm/lib/engine/narrative/index.js +4 -0
  27. package/dist/esm/lib/engine/narrative/types.js +11 -0
  28. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +419 -0
  29. package/dist/esm/lib/engine/traversal/index.js +2 -0
  30. package/dist/esm/lib/engine/types.js +16 -0
  31. package/dist/esm/lib/memory/DiagnosticCollector.js +44 -0
  32. package/dist/esm/lib/memory/EventLog.js +44 -0
  33. package/dist/esm/lib/memory/SharedMemory.js +53 -0
  34. package/dist/esm/lib/memory/StageContext.js +221 -0
  35. package/dist/esm/lib/memory/TransactionBuffer.js +66 -0
  36. package/dist/esm/lib/memory/index.js +16 -0
  37. package/dist/esm/lib/memory/types.js +7 -0
  38. package/dist/esm/lib/memory/utils.js +155 -0
  39. package/dist/esm/lib/runner/ExecutionRuntime.js +64 -0
  40. package/dist/esm/lib/runner/FlowChartExecutor.js +108 -0
  41. package/dist/esm/lib/runner/index.js +3 -0
  42. package/dist/esm/lib/scope/ScopeFacade.js +175 -0
  43. package/dist/esm/lib/scope/index.js +19 -0
  44. package/dist/esm/lib/scope/protection/createProtectedScope.js +59 -0
  45. package/dist/esm/lib/scope/protection/index.js +3 -0
  46. package/dist/esm/lib/scope/protection/types.js +8 -0
  47. package/dist/esm/lib/scope/providers/baseStateCompatible.js +29 -0
  48. package/dist/esm/lib/scope/providers/guards.js +43 -0
  49. package/dist/esm/lib/scope/providers/index.js +7 -0
  50. package/dist/esm/lib/scope/providers/providers.js +18 -0
  51. package/dist/esm/lib/scope/providers/registry.js +36 -0
  52. package/dist/esm/lib/scope/providers/resolve.js +11 -0
  53. package/dist/esm/lib/scope/providers/types.js +8 -0
  54. package/dist/esm/lib/scope/recorders/DebugRecorder.js +81 -0
  55. package/dist/esm/lib/scope/recorders/MetricRecorder.js +81 -0
  56. package/dist/esm/lib/scope/recorders/NarrativeRecorder.js +167 -0
  57. package/dist/esm/lib/scope/recorders/index.js +4 -0
  58. package/dist/esm/lib/scope/state/installResolvers.js +15 -0
  59. package/dist/esm/lib/scope/state/zod/defineScopeFromZod.js +14 -0
  60. package/dist/esm/lib/scope/state/zod/index.js +5 -0
  61. package/dist/esm/lib/scope/state/zod/resolver.js +28 -0
  62. package/dist/esm/lib/scope/state/zod/schema/builder.js +16 -0
  63. package/dist/esm/lib/scope/state/zod/scopeFactory.js +156 -0
  64. package/dist/esm/lib/scope/state/zod/utils/validateHelper.js +97 -0
  65. package/dist/esm/lib/scope/types.js +9 -0
  66. package/dist/esm/types/advanced.d.ts +35 -0
  67. package/dist/esm/types/index.d.ts +22 -0
  68. package/dist/esm/types/lib/builder/FlowChartBuilder.d.ts +121 -0
  69. package/dist/esm/types/lib/builder/index.d.ts +9 -0
  70. package/dist/esm/types/lib/builder/types.d.ts +152 -0
  71. package/dist/esm/types/lib/engine/graph/StageNode.d.ts +78 -0
  72. package/dist/esm/types/lib/engine/graph/index.d.ts +2 -0
  73. package/dist/esm/types/lib/engine/handlers/ChildrenExecutor.d.ts +33 -0
  74. package/dist/esm/types/lib/engine/handlers/ContinuationResolver.d.ts +57 -0
  75. package/dist/esm/types/lib/engine/handlers/DeciderHandler.d.ts +34 -0
  76. package/dist/esm/types/lib/engine/handlers/ExtractorRunner.d.ts +41 -0
  77. package/dist/esm/types/lib/engine/handlers/NodeResolver.d.ts +26 -0
  78. package/dist/esm/types/lib/engine/handlers/RuntimeStructureManager.d.ts +36 -0
  79. package/dist/esm/types/lib/engine/handlers/SelectorHandler.d.ts +26 -0
  80. package/dist/esm/types/lib/engine/handlers/StageRunner.d.ts +17 -0
  81. package/dist/esm/types/lib/engine/handlers/SubflowExecutor.d.ts +57 -0
  82. package/dist/esm/types/lib/engine/handlers/SubflowInputMapper.d.ts +40 -0
  83. package/dist/esm/types/lib/engine/handlers/index.d.ts +15 -0
  84. package/dist/esm/types/lib/engine/index.d.ts +16 -0
  85. package/dist/esm/types/lib/engine/narrative/CombinedNarrativeBuilder.d.ts +33 -0
  86. package/dist/esm/types/lib/engine/narrative/ControlFlowNarrativeGenerator.d.ts +29 -0
  87. package/dist/esm/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +21 -0
  88. package/dist/esm/types/lib/engine/narrative/index.d.ts +5 -0
  89. package/dist/esm/types/lib/engine/narrative/types.d.ts +33 -0
  90. package/dist/esm/types/lib/engine/traversal/FlowchartTraverser.d.ts +87 -0
  91. package/dist/esm/types/lib/engine/traversal/index.d.ts +2 -0
  92. package/dist/esm/types/lib/engine/types.d.ts +208 -0
  93. package/dist/esm/types/lib/memory/DiagnosticCollector.d.ts +33 -0
  94. package/dist/esm/types/lib/memory/EventLog.d.ts +27 -0
  95. package/dist/esm/types/lib/memory/SharedMemory.d.ts +34 -0
  96. package/dist/esm/types/lib/memory/StageContext.d.ts +74 -0
  97. package/dist/esm/types/lib/memory/TransactionBuffer.d.ts +38 -0
  98. package/dist/esm/types/lib/memory/index.d.ts +13 -0
  99. package/dist/esm/types/lib/memory/types.d.ts +60 -0
  100. package/dist/esm/types/lib/memory/utils.d.ts +67 -0
  101. package/dist/esm/types/lib/runner/ExecutionRuntime.d.ts +39 -0
  102. package/dist/esm/types/lib/runner/FlowChartExecutor.d.ts +34 -0
  103. package/dist/esm/types/lib/runner/index.d.ts +3 -0
  104. package/dist/esm/types/lib/scope/ScopeFacade.d.ts +47 -0
  105. package/dist/esm/types/lib/scope/index.d.ts +23 -0
  106. package/dist/esm/types/lib/scope/protection/createProtectedScope.d.ts +9 -0
  107. package/dist/esm/types/lib/scope/protection/index.d.ts +2 -0
  108. package/dist/esm/types/lib/scope/protection/types.d.ts +13 -0
  109. package/dist/esm/types/lib/scope/providers/baseStateCompatible.d.ts +26 -0
  110. package/dist/esm/types/lib/scope/providers/guards.d.ts +14 -0
  111. package/dist/esm/types/lib/scope/providers/index.d.ts +6 -0
  112. package/dist/esm/types/lib/scope/providers/providers.d.ts +8 -0
  113. package/dist/esm/types/lib/scope/providers/registry.d.ts +11 -0
  114. package/dist/esm/types/lib/scope/providers/resolve.d.ts +8 -0
  115. package/dist/esm/types/lib/scope/providers/types.d.ts +40 -0
  116. package/dist/esm/types/lib/scope/recorders/DebugRecorder.d.ts +35 -0
  117. package/dist/esm/types/lib/scope/recorders/MetricRecorder.d.ts +36 -0
  118. package/dist/esm/types/lib/scope/recorders/NarrativeRecorder.d.ts +45 -0
  119. package/dist/esm/types/lib/scope/recorders/index.d.ts +7 -0
  120. package/dist/esm/types/lib/scope/state/installResolvers.d.ts +4 -0
  121. package/dist/esm/types/lib/scope/state/zod/defineScopeFromZod.d.ts +9 -0
  122. package/dist/esm/types/lib/scope/state/zod/index.d.ts +5 -0
  123. package/dist/esm/types/lib/scope/state/zod/resolver.d.ts +5 -0
  124. package/dist/esm/types/lib/scope/state/zod/schema/builder.d.ts +12 -0
  125. package/dist/esm/types/lib/scope/state/zod/scopeFactory.d.ts +9 -0
  126. package/dist/esm/types/lib/scope/state/zod/utils/validateHelper.d.ts +10 -0
  127. package/dist/esm/types/lib/scope/types.d.ts +53 -0
  128. package/dist/index.js +42 -0
  129. package/dist/lib/builder/FlowChartBuilder.js +817 -0
  130. package/dist/lib/builder/index.js +20 -0
  131. package/dist/lib/builder/types.js +10 -0
  132. package/dist/lib/engine/graph/StageNode.js +42 -0
  133. package/dist/lib/engine/graph/index.js +6 -0
  134. package/dist/lib/engine/handlers/ChildrenExecutor.js +120 -0
  135. package/dist/lib/engine/handlers/ContinuationResolver.js +125 -0
  136. package/dist/lib/engine/handlers/DeciderHandler.js +82 -0
  137. package/dist/lib/engine/handlers/ExtractorRunner.js +121 -0
  138. package/dist/lib/engine/handlers/NodeResolver.js +76 -0
  139. package/dist/lib/engine/handlers/RuntimeStructureManager.js +159 -0
  140. package/dist/lib/engine/handlers/SelectorHandler.js +83 -0
  141. package/dist/lib/engine/handlers/StageRunner.js +90 -0
  142. package/dist/lib/engine/handlers/SubflowExecutor.js +326 -0
  143. package/dist/lib/engine/handlers/SubflowInputMapper.js +121 -0
  144. package/dist/lib/engine/handlers/index.js +42 -0
  145. package/dist/lib/engine/index.js +40 -0
  146. package/dist/lib/engine/narrative/CombinedNarrativeBuilder.js +162 -0
  147. package/dist/lib/engine/narrative/ControlFlowNarrativeGenerator.js +94 -0
  148. package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +28 -0
  149. package/dist/lib/engine/narrative/index.js +10 -0
  150. package/dist/lib/engine/narrative/types.js +12 -0
  151. package/dist/lib/engine/traversal/FlowchartTraverser.js +423 -0
  152. package/dist/lib/engine/traversal/index.js +6 -0
  153. package/dist/lib/engine/types.js +19 -0
  154. package/dist/lib/memory/DiagnosticCollector.js +48 -0
  155. package/dist/lib/memory/EventLog.js +48 -0
  156. package/dist/lib/memory/SharedMemory.js +60 -0
  157. package/dist/lib/memory/StageContext.js +225 -0
  158. package/dist/lib/memory/TransactionBuffer.js +73 -0
  159. package/dist/lib/memory/index.js +34 -0
  160. package/dist/lib/memory/types.js +8 -0
  161. package/dist/lib/memory/utils.js +170 -0
  162. package/dist/lib/runner/ExecutionRuntime.js +68 -0
  163. package/dist/lib/runner/FlowChartExecutor.js +112 -0
  164. package/dist/lib/runner/index.js +8 -0
  165. package/dist/lib/scope/ScopeFacade.js +179 -0
  166. package/dist/lib/scope/index.js +44 -0
  167. package/dist/lib/scope/protection/createProtectedScope.js +64 -0
  168. package/dist/lib/scope/protection/index.js +8 -0
  169. package/dist/lib/scope/protection/types.js +9 -0
  170. package/dist/lib/scope/providers/baseStateCompatible.js +33 -0
  171. package/dist/lib/scope/providers/guards.js +49 -0
  172. package/dist/lib/scope/providers/index.js +21 -0
  173. package/dist/lib/scope/providers/providers.js +23 -0
  174. package/dist/lib/scope/providers/registry.js +42 -0
  175. package/dist/lib/scope/providers/resolve.js +16 -0
  176. package/dist/lib/scope/providers/types.js +9 -0
  177. package/dist/lib/scope/recorders/DebugRecorder.js +85 -0
  178. package/dist/lib/scope/recorders/MetricRecorder.js +85 -0
  179. package/dist/lib/scope/recorders/NarrativeRecorder.js +171 -0
  180. package/dist/lib/scope/recorders/index.js +10 -0
  181. package/dist/lib/scope/state/installResolvers.js +19 -0
  182. package/dist/lib/scope/state/zod/defineScopeFromZod.js +18 -0
  183. package/dist/lib/scope/state/zod/index.js +13 -0
  184. package/dist/lib/scope/state/zod/resolver.js +31 -0
  185. package/dist/lib/scope/state/zod/schema/builder.js +21 -0
  186. package/dist/lib/scope/state/zod/scopeFactory.js +160 -0
  187. package/dist/lib/scope/state/zod/utils/validateHelper.js +104 -0
  188. package/dist/lib/scope/types.js +10 -0
  189. package/dist/types/advanced.d.ts +35 -0
  190. package/dist/types/index.d.ts +22 -0
  191. package/dist/types/lib/builder/FlowChartBuilder.d.ts +121 -0
  192. package/dist/types/lib/builder/index.d.ts +9 -0
  193. package/dist/types/lib/builder/types.d.ts +152 -0
  194. package/dist/types/lib/engine/graph/StageNode.d.ts +78 -0
  195. package/dist/types/lib/engine/graph/index.d.ts +2 -0
  196. package/dist/types/lib/engine/handlers/ChildrenExecutor.d.ts +33 -0
  197. package/dist/types/lib/engine/handlers/ContinuationResolver.d.ts +57 -0
  198. package/dist/types/lib/engine/handlers/DeciderHandler.d.ts +34 -0
  199. package/dist/types/lib/engine/handlers/ExtractorRunner.d.ts +41 -0
  200. package/dist/types/lib/engine/handlers/NodeResolver.d.ts +26 -0
  201. package/dist/types/lib/engine/handlers/RuntimeStructureManager.d.ts +36 -0
  202. package/dist/types/lib/engine/handlers/SelectorHandler.d.ts +26 -0
  203. package/dist/types/lib/engine/handlers/StageRunner.d.ts +17 -0
  204. package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +57 -0
  205. package/dist/types/lib/engine/handlers/SubflowInputMapper.d.ts +40 -0
  206. package/dist/types/lib/engine/handlers/index.d.ts +15 -0
  207. package/dist/types/lib/engine/index.d.ts +16 -0
  208. package/dist/types/lib/engine/narrative/CombinedNarrativeBuilder.d.ts +33 -0
  209. package/dist/types/lib/engine/narrative/ControlFlowNarrativeGenerator.d.ts +29 -0
  210. package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +21 -0
  211. package/dist/types/lib/engine/narrative/index.d.ts +5 -0
  212. package/dist/types/lib/engine/narrative/types.d.ts +33 -0
  213. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +87 -0
  214. package/dist/types/lib/engine/traversal/index.d.ts +2 -0
  215. package/dist/types/lib/engine/types.d.ts +208 -0
  216. package/dist/types/lib/memory/DiagnosticCollector.d.ts +33 -0
  217. package/dist/types/lib/memory/EventLog.d.ts +27 -0
  218. package/dist/types/lib/memory/SharedMemory.d.ts +34 -0
  219. package/dist/types/lib/memory/StageContext.d.ts +74 -0
  220. package/dist/types/lib/memory/TransactionBuffer.d.ts +38 -0
  221. package/dist/types/lib/memory/index.d.ts +13 -0
  222. package/dist/types/lib/memory/types.d.ts +60 -0
  223. package/dist/types/lib/memory/utils.d.ts +67 -0
  224. package/dist/types/lib/runner/ExecutionRuntime.d.ts +39 -0
  225. package/dist/types/lib/runner/FlowChartExecutor.d.ts +34 -0
  226. package/dist/types/lib/runner/index.d.ts +3 -0
  227. package/dist/types/lib/scope/ScopeFacade.d.ts +47 -0
  228. package/dist/types/lib/scope/index.d.ts +23 -0
  229. package/dist/types/lib/scope/protection/createProtectedScope.d.ts +9 -0
  230. package/dist/types/lib/scope/protection/index.d.ts +2 -0
  231. package/dist/types/lib/scope/protection/types.d.ts +13 -0
  232. package/dist/types/lib/scope/providers/baseStateCompatible.d.ts +26 -0
  233. package/dist/types/lib/scope/providers/guards.d.ts +14 -0
  234. package/dist/types/lib/scope/providers/index.d.ts +6 -0
  235. package/dist/types/lib/scope/providers/providers.d.ts +8 -0
  236. package/dist/types/lib/scope/providers/registry.d.ts +11 -0
  237. package/dist/types/lib/scope/providers/resolve.d.ts +8 -0
  238. package/dist/types/lib/scope/providers/types.d.ts +40 -0
  239. package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +35 -0
  240. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +36 -0
  241. package/dist/types/lib/scope/recorders/NarrativeRecorder.d.ts +45 -0
  242. package/dist/types/lib/scope/recorders/index.d.ts +7 -0
  243. package/dist/types/lib/scope/state/installResolvers.d.ts +4 -0
  244. package/dist/types/lib/scope/state/zod/defineScopeFromZod.d.ts +9 -0
  245. package/dist/types/lib/scope/state/zod/index.d.ts +5 -0
  246. package/dist/types/lib/scope/state/zod/resolver.d.ts +5 -0
  247. package/dist/types/lib/scope/state/zod/schema/builder.d.ts +12 -0
  248. package/dist/types/lib/scope/state/zod/scopeFactory.d.ts +9 -0
  249. package/dist/types/lib/scope/state/zod/utils/validateHelper.d.ts +10 -0
  250. package/dist/types/lib/scope/types.d.ts +53 -0
  251. package/package.json +148 -0
@@ -0,0 +1,158 @@
1
+ /**
2
+ * CombinedNarrativeBuilder — Merges flow-level narrative with data-level operations.
3
+ *
4
+ * ControlFlowNarrativeGenerator captures FLOW — what stages ran, which branches were taken.
5
+ * NarrativeRecorder (scope/) captures DATA — what values were read, written, updated.
6
+ *
7
+ * This builder weaves both into a single unified narrative:
8
+ * Stage 1: "Receive Application"
9
+ * Step 1: Write applicantName = 'Bob'
10
+ * [Condition]: risk tier is high → chose "Reject Application"
11
+ */
12
+ // ---------------------------------------------------------------------------
13
+ // Builder
14
+ // ---------------------------------------------------------------------------
15
+ export class CombinedNarrativeBuilder {
16
+ constructor(options) {
17
+ var _a, _b, _c;
18
+ this.options = {
19
+ includeStepNumbers: (_a = options === null || options === void 0 ? void 0 : options.includeStepNumbers) !== null && _a !== void 0 ? _a : true,
20
+ includeValues: (_b = options === null || options === void 0 ? void 0 : options.includeValues) !== null && _b !== void 0 ? _b : true,
21
+ indent: (_c = options === null || options === void 0 ? void 0 : options.indent) !== null && _c !== void 0 ? _c : ' ',
22
+ };
23
+ }
24
+ buildEntries(flowSentences, recorder) {
25
+ const entries = [];
26
+ const stageData = recorder.getStageData();
27
+ const usedStages = new Set();
28
+ let stageCounter = 0;
29
+ for (const sentence of flowSentences) {
30
+ const parsed = this.parseSentence(sentence);
31
+ if (parsed.type === 'stage') {
32
+ stageCounter++;
33
+ entries.push({
34
+ type: 'stage',
35
+ text: `Stage ${stageCounter}: ${sentence}`,
36
+ depth: 0,
37
+ stageName: parsed.stageName,
38
+ });
39
+ if (parsed.stageName) {
40
+ const data = this.findStageData(parsed.stageName, stageData);
41
+ if (data) {
42
+ usedStages.add(data.stageName);
43
+ this.addStepEntries(entries, data);
44
+ }
45
+ }
46
+ }
47
+ else if (parsed.type === 'condition') {
48
+ entries.push({ type: 'condition', text: `[Condition]: ${sentence}`, depth: 0 });
49
+ if (parsed.stageName) {
50
+ const data = this.findStageData(parsed.stageName, stageData);
51
+ if (data) {
52
+ usedStages.add(data.stageName);
53
+ this.addStepEntries(entries, data);
54
+ }
55
+ }
56
+ }
57
+ else if (parsed.type === 'fork') {
58
+ entries.push({ type: 'fork', text: `[Parallel]: ${sentence}`, depth: 0 });
59
+ }
60
+ else if (parsed.type === 'subflow') {
61
+ entries.push({ type: 'subflow', text: sentence, depth: 0 });
62
+ }
63
+ else if (parsed.type === 'loop') {
64
+ entries.push({ type: 'loop', text: sentence, depth: 0 });
65
+ }
66
+ else if (parsed.type === 'break') {
67
+ entries.push({ type: 'break', text: sentence, depth: 0 });
68
+ }
69
+ else if (parsed.type === 'error') {
70
+ entries.push({ type: 'error', text: `[Error]: ${sentence}`, depth: 0 });
71
+ }
72
+ }
73
+ // Add stages with operations that weren't referenced in flow sentences
74
+ for (const [stageName, data] of Array.from(stageData.entries())) {
75
+ if (!usedStages.has(stageName) && data.operations.length > 0) {
76
+ stageCounter++;
77
+ entries.push({ type: 'stage', text: `Stage ${stageCounter}: ${stageName}`, depth: 0, stageName });
78
+ this.addStepEntries(entries, data);
79
+ }
80
+ }
81
+ return entries;
82
+ }
83
+ build(flowSentences, recorder) {
84
+ return this.buildEntries(flowSentences, recorder).map((entry) => {
85
+ const indent = this.options.indent.repeat(entry.depth);
86
+ return `${indent}${entry.text}`;
87
+ });
88
+ }
89
+ // ── Private helpers ──
90
+ addStepEntries(entries, data) {
91
+ for (const op of data.operations) {
92
+ const stepPrefix = this.options.includeStepNumbers && op.stepNumber ? `Step ${op.stepNumber}: ` : '';
93
+ let text;
94
+ if (op.type === 'read') {
95
+ text =
96
+ this.options.includeValues && op.valueSummary
97
+ ? `${stepPrefix}Read ${op.key} = ${op.valueSummary}`
98
+ : `${stepPrefix}Read ${op.key}`;
99
+ }
100
+ else if (op.operation === 'delete') {
101
+ text = `${stepPrefix}Delete ${op.key}`;
102
+ }
103
+ else if (op.operation === 'update') {
104
+ text = this.options.includeValues
105
+ ? `${stepPrefix}Update ${op.key} = ${op.valueSummary}`
106
+ : `${stepPrefix}Update ${op.key}`;
107
+ }
108
+ else {
109
+ text = this.options.includeValues
110
+ ? `${stepPrefix}Write ${op.key} = ${op.valueSummary}`
111
+ : `${stepPrefix}Write ${op.key}`;
112
+ }
113
+ entries.push({ type: 'step', text, depth: 1, stageName: data.stageName, stepNumber: op.stepNumber });
114
+ }
115
+ }
116
+ findStageData(name, stageData) {
117
+ if (stageData.has(name))
118
+ return stageData.get(name);
119
+ for (const [stageName, data] of Array.from(stageData.entries())) {
120
+ if (stageName.toLowerCase().includes(name.toLowerCase()) ||
121
+ name.toLowerCase().includes(stageName.toLowerCase())) {
122
+ return data;
123
+ }
124
+ }
125
+ return undefined;
126
+ }
127
+ parseSentence(sentence) {
128
+ var _a, _b, _c, _d;
129
+ if (sentence.startsWith('The process began')) {
130
+ const match = sentence.match(/The process began(?:: (.+)| with (.+))\./);
131
+ return { type: 'stage', stageName: (_a = match === null || match === void 0 ? void 0 : match[2]) === null || _a === void 0 ? void 0 : _a.trim() };
132
+ }
133
+ if (sentence.startsWith('Next')) {
134
+ const match = sentence.match(/Next(?:,? it moved on to (.+)| step: (.+))\./);
135
+ return { type: 'stage', stageName: (_b = match === null || match === void 0 ? void 0 : match[1]) === null || _b === void 0 ? void 0 : _b.trim() };
136
+ }
137
+ if (sentence.includes('decision was made') || sentence.includes('it chose') || sentence.includes('so it chose')) {
138
+ const match = sentence.match(/chose (.+)\./);
139
+ return { type: 'condition', stageName: (_c = match === null || match === void 0 ? void 0 : match[1]) === null || _c === void 0 ? void 0 : _c.trim() };
140
+ }
141
+ if (sentence.startsWith('It ') && sentence.includes('chose')) {
142
+ const match = sentence.match(/chose (.+)\./);
143
+ return { type: 'condition', stageName: (_d = match === null || match === void 0 ? void 0 : match[1]) === null || _d === void 0 ? void 0 : _d.trim() };
144
+ }
145
+ if (sentence.includes('paths were executed in parallel') || sentence.includes('paths were selected'))
146
+ return { type: 'fork' };
147
+ if (sentence.startsWith('Entering') || sentence.startsWith('Exiting'))
148
+ return { type: 'subflow' };
149
+ if (sentence.startsWith('On pass'))
150
+ return { type: 'loop' };
151
+ if (sentence.startsWith('Execution stopped'))
152
+ return { type: 'break' };
153
+ if (sentence.startsWith('An error occurred'))
154
+ return { type: 'error' };
155
+ return { type: 'stage' };
156
+ }
157
+ }
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL0NvbWJpbmVkTmFycmF0aXZlQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBc0JILDhFQUE4RTtBQUM5RSxVQUFVO0FBQ1YsOEVBQThFO0FBRTlFLE1BQU0sT0FBTyx3QkFBd0I7SUFHbkMsWUFBWSxPQUFrQzs7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLGtCQUFrQixFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLGtCQUFrQixtQ0FBSSxJQUFJO1lBQ3ZELGFBQWEsRUFBRSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxhQUFhLG1DQUFJLElBQUk7WUFDN0MsTUFBTSxFQUFFLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE1BQU0sbUNBQUksSUFBSTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxhQUF1QixFQUFFLFFBQTJCO1FBQy9ELE1BQU0sT0FBTyxHQUE2QixFQUFFLENBQUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDckMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLEtBQUssTUFBTSxRQUFRLElBQUksYUFBYSxFQUFFLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU1QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQzVCLFlBQVksRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsSUFBSSxFQUFFLE9BQU87b0JBQ2IsSUFBSSxFQUFFLFNBQVMsWUFBWSxLQUFLLFFBQVEsRUFBRTtvQkFDMUMsS0FBSyxFQUFFLENBQUM7b0JBQ1IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO2lCQUM1QixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDVCxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3JDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUM3RCxJQUFJLElBQUksRUFBRSxDQUFDO3dCQUNULFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDckMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxlQUFlLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlELENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNELENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxDQUFDO1FBQ0gsQ0FBQztRQUVELHVFQUF1RTtRQUN2RSxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxVQUFVLENB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QyxTQUFTLENBQUM7WUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzVELElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztZQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDdkUsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDO1lBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tYmluZWROYXJyYXRpdmVCdWlsZGVyIOKAlCBNZXJnZXMgZmxvdy1sZXZlbCBuYXJyYXRpdmUgd2l0aCBkYXRhLWxldmVsIG9wZXJhdGlvbnMuXG4gKlxuICogQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgY2FwdHVyZXMgRkxPVyDigJQgd2hhdCBzdGFnZXMgcmFuLCB3aGljaCBicmFuY2hlcyB3ZXJlIHRha2VuLlxuICogTmFycmF0aXZlUmVjb3JkZXIgKHNjb3BlLykgY2FwdHVyZXMgREFUQSDigJQgd2hhdCB2YWx1ZXMgd2VyZSByZWFkLCB3cml0dGVuLCB1cGRhdGVkLlxuICpcbiAqIFRoaXMgYnVpbGRlciB3ZWF2ZXMgYm90aCBpbnRvIGEgc2luZ2xlIHVuaWZpZWQgbmFycmF0aXZlOlxuICogICBTdGFnZSAxOiBcIlJlY2VpdmUgQXBwbGljYXRpb25cIlxuICogICAgIFN0ZXAgMTogV3JpdGUgYXBwbGljYW50TmFtZSA9ICdCb2InXG4gKiAgIFtDb25kaXRpb25dOiByaXNrIHRpZXIgaXMgaGlnaCDihpIgY2hvc2UgXCJSZWplY3QgQXBwbGljYXRpb25cIlxuICovXG5cbmltcG9ydCB0eXBlIHsgTmFycmF0aXZlUmVjb3JkZXIsIFN0YWdlTmFycmF0aXZlRGF0YSB9IGZyb20gJy4uLy4uL3Njb3BlL3JlY29yZGVycy9OYXJyYXRpdmVSZWNvcmRlcic7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHlwZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVkTmFycmF0aXZlRW50cnkge1xuICB0eXBlOiAnc3RhZ2UnIHwgJ3N0ZXAnIHwgJ2NvbmRpdGlvbicgfCAnZm9yaycgfCAnc3ViZmxvdycgfCAnbG9vcCcgfCAnYnJlYWsnIHwgJ2Vycm9yJztcbiAgdGV4dDogc3RyaW5nO1xuICBkZXB0aDogbnVtYmVyO1xuICBzdGFnZU5hbWU/OiBzdHJpbmc7XG4gIHN0ZXBOdW1iZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWROYXJyYXRpdmVPcHRpb25zIHtcbiAgaW5jbHVkZVN0ZXBOdW1iZXJzPzogYm9vbGVhbjtcbiAgaW5jbHVkZVZhbHVlcz86IGJvb2xlYW47XG4gIGluZGVudD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCdWlsZGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNsYXNzIENvbWJpbmVkTmFycmF0aXZlQnVpbGRlciB7XG4gIHByaXZhdGUgb3B0aW9uczogUmVxdWlyZWQ8Q29tYmluZWROYXJyYXRpdmVPcHRpb25zPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ29tYmluZWROYXJyYXRpdmVPcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgaW5jbHVkZVN0ZXBOdW1iZXJzOiBvcHRpb25zPy5pbmNsdWRlU3RlcE51bWJlcnMgPz8gdHJ1ZSxcbiAgICAgIGluY2x1ZGVWYWx1ZXM6IG9wdGlvbnM/LmluY2x1ZGVWYWx1ZXMgPz8gdHJ1ZSxcbiAgICAgIGluZGVudDogb3B0aW9ucz8uaW5kZW50ID8/ICcgICcsXG4gICAgfTtcbiAgfVxuXG4gIGJ1aWxkRW50cmllcyhmbG93U2VudGVuY2VzOiBzdHJpbmdbXSwgcmVjb3JkZXI6IE5hcnJhdGl2ZVJlY29yZGVyKTogQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdIHtcbiAgICBjb25zdCBlbnRyaWVzOiBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBzdGFnZURhdGEgPSByZWNvcmRlci5nZXRTdGFnZURhdGEoKTtcbiAgICBjb25zdCB1c2VkU3RhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgbGV0IHN0YWdlQ291bnRlciA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHNlbnRlbmNlIG9mIGZsb3dTZW50ZW5jZXMpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VTZW50ZW5jZShzZW50ZW5jZSk7XG5cbiAgICAgIGlmIChwYXJzZWQudHlwZSA9PT0gJ3N0YWdlJykge1xuICAgICAgICBzdGFnZUNvdW50ZXIrKztcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnc3RhZ2UnLFxuICAgICAgICAgIHRleHQ6IGBTdGFnZSAke3N0YWdlQ291bnRlcn06ICR7c2VudGVuY2V9YCxcbiAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICBzdGFnZU5hbWU6IHBhcnNlZC5zdGFnZU5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGFyc2VkLnN0YWdlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbmRTdGFnZURhdGEocGFyc2VkLnN0YWdlTmFtZSwgc3RhZ2VEYXRhKTtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdXNlZFN0YWdlcy5hZGQoZGF0YS5zdGFnZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hZGRTdGVwRW50cmllcyhlbnRyaWVzLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdjb25kaXRpb24nKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdjb25kaXRpb24nLCB0ZXh0OiBgW0NvbmRpdGlvbl06ICR7c2VudGVuY2V9YCwgZGVwdGg6IDAgfSk7XG4gICAgICAgIGlmIChwYXJzZWQuc3RhZ2VOYW1lKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmluZFN0YWdlRGF0YShwYXJzZWQuc3RhZ2VOYW1lLCBzdGFnZURhdGEpO1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB1c2VkU3RhZ2VzLmFkZChkYXRhLnN0YWdlTmFtZSk7XG4gICAgICAgICAgICB0aGlzLmFkZFN0ZXBFbnRyaWVzKGVudHJpZXMsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJzZWQudHlwZSA9PT0gJ2ZvcmsnKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdmb3JrJywgdGV4dDogYFtQYXJhbGxlbF06ICR7c2VudGVuY2V9YCwgZGVwdGg6IDAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnc3ViZmxvdycpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ3N1YmZsb3cnLCB0ZXh0OiBzZW50ZW5jZSwgZGVwdGg6IDAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ2xvb3AnLCB0ZXh0OiBzZW50ZW5jZSwgZGVwdGg6IDAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlZC50eXBlID09PSAnYnJlYWsnKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCh7IHR5cGU6ICdicmVhaycsIHRleHQ6IHNlbnRlbmNlLCBkZXB0aDogMCB9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ2Vycm9yJywgdGV4dDogYFtFcnJvcl06ICR7c2VudGVuY2V9YCwgZGVwdGg6IDAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIHN0YWdlcyB3aXRoIG9wZXJhdGlvbnMgdGhhdCB3ZXJlbid0IHJlZmVyZW5jZWQgaW4gZmxvdyBzZW50ZW5jZXNcbiAgICBmb3IgKGNvbnN0IFtzdGFnZU5hbWUsIGRhdGFdIG9mIEFycmF5LmZyb20oc3RhZ2VEYXRhLmVudHJpZXMoKSkpIHtcbiAgICAgIGlmICghdXNlZFN0YWdlcy5oYXMoc3RhZ2VOYW1lKSAmJiBkYXRhLm9wZXJhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBzdGFnZUNvdW50ZXIrKztcbiAgICAgICAgZW50cmllcy5wdXNoKHsgdHlwZTogJ3N0YWdlJywgdGV4dDogYFN0YWdlICR7c3RhZ2VDb3VudGVyfTogJHtzdGFnZU5hbWV9YCwgZGVwdGg6IDAsIHN0YWdlTmFtZSB9KTtcbiAgICAgICAgdGhpcy5hZGRTdGVwRW50cmllcyhlbnRyaWVzLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxuXG4gIGJ1aWxkKGZsb3dTZW50ZW5jZXM6IHN0cmluZ1tdLCByZWNvcmRlcjogTmFycmF0aXZlUmVjb3JkZXIpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRFbnRyaWVzKGZsb3dTZW50ZW5jZXMsIHJlY29yZGVyKS5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBpbmRlbnQgPSB0aGlzLm9wdGlvbnMuaW5kZW50LnJlcGVhdChlbnRyeS5kZXB0aCk7XG4gICAgICByZXR1cm4gYCR7aW5kZW50fSR7ZW50cnkudGV4dH1gO1xuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFByaXZhdGUgaGVscGVycyDilIDilIBcblxuICBwcml2YXRlIGFkZFN0ZXBFbnRyaWVzKGVudHJpZXM6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXSwgZGF0YTogU3RhZ2VOYXJyYXRpdmVEYXRhKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBvcCBvZiBkYXRhLm9wZXJhdGlvbnMpIHtcbiAgICAgIGNvbnN0IHN0ZXBQcmVmaXggPSB0aGlzLm9wdGlvbnMuaW5jbHVkZVN0ZXBOdW1iZXJzICYmIG9wLnN0ZXBOdW1iZXIgPyBgU3RlcCAke29wLnN0ZXBOdW1iZXJ9OiBgIDogJyc7XG5cbiAgICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgICBpZiAob3AudHlwZSA9PT0gJ3JlYWQnKSB7XG4gICAgICAgIHRleHQgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5pbmNsdWRlVmFsdWVzICYmIG9wLnZhbHVlU3VtbWFyeVxuICAgICAgICAgICAgPyBgJHtzdGVwUHJlZml4fVJlYWQgJHtvcC5rZXl9ID0gJHtvcC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgICAgOiBgJHtzdGVwUHJlZml4fVJlYWQgJHtvcC5rZXl9YDtcbiAgICAgIH0gZWxzZSBpZiAob3Aub3BlcmF0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgICB0ZXh0ID0gYCR7c3RlcFByZWZpeH1EZWxldGUgJHtvcC5rZXl9YDtcbiAgICAgIH0gZWxzZSBpZiAob3Aub3BlcmF0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgICB0ZXh0ID0gdGhpcy5vcHRpb25zLmluY2x1ZGVWYWx1ZXNcbiAgICAgICAgICA/IGAke3N0ZXBQcmVmaXh9VXBkYXRlICR7b3Aua2V5fSA9ICR7b3AudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgICA6IGAke3N0ZXBQcmVmaXh9VXBkYXRlICR7b3Aua2V5fWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ID0gdGhpcy5vcHRpb25zLmluY2x1ZGVWYWx1ZXNcbiAgICAgICAgICA/IGAke3N0ZXBQcmVmaXh9V3JpdGUgJHtvcC5rZXl9ID0gJHtvcC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgIDogYCR7c3RlcFByZWZpeH1Xcml0ZSAke29wLmtleX1gO1xuICAgICAgfVxuXG4gICAgICBlbnRyaWVzLnB1c2goeyB0eXBlOiAnc3RlcCcsIHRleHQsIGRlcHRoOiAxLCBzdGFnZU5hbWU6IGRhdGEuc3RhZ2VOYW1lLCBzdGVwTnVtYmVyOiBvcC5zdGVwTnVtYmVyIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZFN0YWdlRGF0YShuYW1lOiBzdHJpbmcsIHN0YWdlRGF0YTogTWFwPHN0cmluZywgU3RhZ2VOYXJyYXRpdmVEYXRhPik6IFN0YWdlTmFycmF0aXZlRGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHN0YWdlRGF0YS5oYXMobmFtZSkpIHJldHVybiBzdGFnZURhdGEuZ2V0KG5hbWUpO1xuICAgIGZvciAoY29uc3QgW3N0YWdlTmFtZSwgZGF0YV0gb2YgQXJyYXkuZnJvbShzdGFnZURhdGEuZW50cmllcygpKSkge1xuICAgICAgaWYgKFxuICAgICAgICBzdGFnZU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgIG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzdGFnZU5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VTZW50ZW5jZShzZW50ZW5jZTogc3RyaW5nKTogeyB0eXBlOiBzdHJpbmc7IHN0YWdlTmFtZT86IHN0cmluZyB9IHtcbiAgICBpZiAoc2VudGVuY2Uuc3RhcnRzV2l0aCgnVGhlIHByb2Nlc3MgYmVnYW4nKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBzZW50ZW5jZS5tYXRjaCgvVGhlIHByb2Nlc3MgYmVnYW4oPzo6ICguKyl8IHdpdGggKC4rKSlcXC4vKTtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdzdGFnZScsIHN0YWdlTmFtZTogbWF0Y2g/LlsyXT8udHJpbSgpIH07XG4gICAgfVxuICAgIGlmIChzZW50ZW5jZS5zdGFydHNXaXRoKCdOZXh0JykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gc2VudGVuY2UubWF0Y2goL05leHQoPzosPyBpdCBtb3ZlZCBvbiB0byAoLispfCBzdGVwOiAoLispKVxcLi8pO1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ3N0YWdlJywgc3RhZ2VOYW1lOiBtYXRjaD8uWzFdPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLmluY2x1ZGVzKCdkZWNpc2lvbiB3YXMgbWFkZScpIHx8IHNlbnRlbmNlLmluY2x1ZGVzKCdpdCBjaG9zZScpIHx8IHNlbnRlbmNlLmluY2x1ZGVzKCdzbyBpdCBjaG9zZScpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHNlbnRlbmNlLm1hdGNoKC9jaG9zZSAoLispXFwuLyk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnY29uZGl0aW9uJywgc3RhZ2VOYW1lOiBtYXRjaD8uWzFdPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0l0ICcpICYmIHNlbnRlbmNlLmluY2x1ZGVzKCdjaG9zZScpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHNlbnRlbmNlLm1hdGNoKC9jaG9zZSAoLispXFwuLyk7XG4gICAgICByZXR1cm4geyB0eXBlOiAnY29uZGl0aW9uJywgc3RhZ2VOYW1lOiBtYXRjaD8uWzFdPy50cmltKCkgfTtcbiAgICB9XG4gICAgaWYgKHNlbnRlbmNlLmluY2x1ZGVzKCdwYXRocyB3ZXJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsJykgfHwgc2VudGVuY2UuaW5jbHVkZXMoJ3BhdGhzIHdlcmUgc2VsZWN0ZWQnKSlcbiAgICAgIHJldHVybiB7IHR5cGU6ICdmb3JrJyB9O1xuICAgIGlmIChzZW50ZW5jZS5zdGFydHNXaXRoKCdFbnRlcmluZycpIHx8IHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0V4aXRpbmcnKSkgcmV0dXJuIHsgdHlwZTogJ3N1YmZsb3cnIH07XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ09uIHBhc3MnKSkgcmV0dXJuIHsgdHlwZTogJ2xvb3AnIH07XG4gICAgaWYgKHNlbnRlbmNlLnN0YXJ0c1dpdGgoJ0V4ZWN1dGlvbiBzdG9wcGVkJykpIHJldHVybiB7IHR5cGU6ICdicmVhaycgfTtcbiAgICBpZiAoc2VudGVuY2Uuc3RhcnRzV2l0aCgnQW4gZXJyb3Igb2NjdXJyZWQnKSkgcmV0dXJuIHsgdHlwZTogJ2Vycm9yJyB9O1xuICAgIHJldHVybiB7IHR5cGU6ICdzdGFnZScgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,90 @@
1
+ /**
2
+ * ControlFlowNarrativeGenerator — Active implementation of IControlFlowNarrative.
3
+ *
4
+ * Converts traversal events into plain-English sentences at traversal time.
5
+ * Produces a human-readable story as a first-class output, enabling any consumer
6
+ * (cheaper LLM, follow-up agent, logging system) to understand what happened
7
+ * without parsing technical structures.
8
+ *
9
+ * This is the FLOW narrative — it captures control flow decisions.
10
+ * The DATA narrative comes from scope/recorders/NarrativeRecorder.
11
+ * CombinedNarrativeBuilder merges both into one story.
12
+ */
13
+ export class ControlFlowNarrativeGenerator {
14
+ constructor() {
15
+ this.sentences = [];
16
+ this.isFirstStage = true;
17
+ }
18
+ onStageExecuted(stageName, displayName, description) {
19
+ if (this.isFirstStage) {
20
+ if (description) {
21
+ this.sentences.push(`The process began: ${description}.`);
22
+ }
23
+ else {
24
+ const name = displayName || stageName;
25
+ this.sentences.push(`The process began with ${name}.`);
26
+ }
27
+ this.isFirstStage = false;
28
+ }
29
+ }
30
+ onNext(fromStage, toStage, toDisplayName, description) {
31
+ if (description) {
32
+ this.sentences.push(`Next step: ${description}.`);
33
+ }
34
+ else {
35
+ const name = toDisplayName || toStage;
36
+ this.sentences.push(`Next, it moved on to ${name}.`);
37
+ }
38
+ }
39
+ onDecision(deciderName, chosenBranch, chosenDisplayName, rationale, deciderDescription) {
40
+ const branchName = chosenDisplayName || chosenBranch;
41
+ if (deciderDescription && rationale) {
42
+ this.sentences.push(`It ${deciderDescription}: ${rationale}, so it chose ${branchName}.`);
43
+ }
44
+ else if (deciderDescription) {
45
+ this.sentences.push(`It ${deciderDescription} and chose ${branchName}.`);
46
+ }
47
+ else if (rationale) {
48
+ this.sentences.push(`A decision was made: ${rationale}, so the path taken was ${branchName}.`);
49
+ }
50
+ else {
51
+ this.sentences.push(`A decision was made, and the path taken was ${branchName}.`);
52
+ }
53
+ }
54
+ onFork(parentStage, childNames) {
55
+ const names = childNames.join(', ');
56
+ this.sentences.push(`${childNames.length} paths were executed in parallel: ${names}.`);
57
+ }
58
+ onSelected(parentStage, selectedNames, totalCount) {
59
+ const names = selectedNames.join(', ');
60
+ this.sentences.push(`${selectedNames.length} of ${totalCount} paths were selected: ${names}.`);
61
+ }
62
+ onSubflowEntry(subflowName) {
63
+ this.sentences.push(`Entering the ${subflowName} subflow.`);
64
+ }
65
+ onSubflowExit(subflowName) {
66
+ this.sentences.push(`Exiting the ${subflowName} subflow.`);
67
+ }
68
+ onLoop(targetStage, targetDisplayName, iteration, description) {
69
+ if (description) {
70
+ this.sentences.push(`On pass ${iteration}: ${description} again.`);
71
+ }
72
+ else {
73
+ const name = targetDisplayName || targetStage;
74
+ this.sentences.push(`On pass ${iteration} through ${name}.`);
75
+ }
76
+ }
77
+ onBreak(stageName, displayName) {
78
+ const name = displayName || stageName;
79
+ this.sentences.push(`Execution stopped at ${name}.`);
80
+ }
81
+ onError(stageName, errorMessage, displayName) {
82
+ const name = displayName || stageName;
83
+ this.sentences.push(`An error occurred at ${name}: ${errorMessage}.`);
84
+ }
85
+ /** Returns a defensive copy of accumulated sentences. */
86
+ getSentences() {
87
+ return [...this.sentences];
88
+ }
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFJSCxNQUFNLE9BQU8sNkJBQTZCO0lBQTFDO1FBQ1UsY0FBUyxHQUFhLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUFHLElBQUksQ0FBQztJQW1GOUIsQ0FBQztJQWpGQyxlQUFlLENBQUMsU0FBaUIsRUFBRSxXQUFvQixFQUFFLFdBQW9CO1FBQzNFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQzVELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksR0FBRyxXQUFXLElBQUksU0FBUyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBMEIsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUN6RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsU0FBaUIsRUFBRSxPQUFlLEVBQUUsYUFBc0IsRUFBRSxXQUFvQjtRQUNyRixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNwRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxHQUFHLGFBQWEsSUFBSSxPQUFPLENBQUM7WUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsd0JBQXdC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SUFFRCx5REFBeUQ7SUFDekQsWUFBWTtRQUNWLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIOKAlCBBY3RpdmUgaW1wbGVtZW50YXRpb24gb2YgSUNvbnRyb2xGbG93TmFycmF0aXZlLlxuICpcbiAqIENvbnZlcnRzIHRyYXZlcnNhbCBldmVudHMgaW50byBwbGFpbi1FbmdsaXNoIHNlbnRlbmNlcyBhdCB0cmF2ZXJzYWwgdGltZS5cbiAqIFByb2R1Y2VzIGEgaHVtYW4tcmVhZGFibGUgc3RvcnkgYXMgYSBmaXJzdC1jbGFzcyBvdXRwdXQsIGVuYWJsaW5nIGFueSBjb25zdW1lclxuICogKGNoZWFwZXIgTExNLCBmb2xsb3ctdXAgYWdlbnQsIGxvZ2dpbmcgc3lzdGVtKSB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVuZWRcbiAqIHdpdGhvdXQgcGFyc2luZyB0ZWNobmljYWwgc3RydWN0dXJlcy5cbiAqXG4gKiBUaGlzIGlzIHRoZSBGTE9XIG5hcnJhdGl2ZSDigJQgaXQgY2FwdHVyZXMgY29udHJvbCBmbG93IGRlY2lzaW9ucy5cbiAqIFRoZSBEQVRBIG5hcnJhdGl2ZSBjb21lcyBmcm9tIHNjb3BlL3JlY29yZGVycy9OYXJyYXRpdmVSZWNvcmRlci5cbiAqIENvbWJpbmVkTmFycmF0aXZlQnVpbGRlciBtZXJnZXMgYm90aCBpbnRvIG9uZSBzdG9yeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgaW1wbGVtZW50cyBJQ29udHJvbEZsb3dOYXJyYXRpdmUge1xuICBwcml2YXRlIHNlbnRlbmNlczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBpc0ZpcnN0U3RhZ2UgPSB0cnVlO1xuXG4gIG9uU3RhZ2VFeGVjdXRlZChzdGFnZU5hbWU6IHN0cmluZywgZGlzcGxheU5hbWU/OiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNGaXJzdFN0YWdlKSB7XG4gICAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgVGhlIHByb2Nlc3MgYmVnYW46ICR7ZGVzY3JpcHRpb259LmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGRpc3BsYXlOYW1lIHx8IHN0YWdlTmFtZTtcbiAgICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgVGhlIHByb2Nlc3MgYmVnYW4gd2l0aCAke25hbWV9LmApO1xuICAgICAgfVxuICAgICAgdGhpcy5pc0ZpcnN0U3RhZ2UgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvbk5leHQoZnJvbVN0YWdlOiBzdHJpbmcsIHRvU3RhZ2U6IHN0cmluZywgdG9EaXNwbGF5TmFtZT86IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYE5leHQgc3RlcDogJHtkZXNjcmlwdGlvbn0uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0b0Rpc3BsYXlOYW1lIHx8IHRvU3RhZ2U7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBOZXh0LCBpdCBtb3ZlZCBvbiB0byAke25hbWV9LmApO1xuICAgIH1cbiAgfVxuXG4gIG9uRGVjaXNpb24oXG4gICAgZGVjaWRlck5hbWU6IHN0cmluZyxcbiAgICBjaG9zZW5CcmFuY2g6IHN0cmluZyxcbiAgICBjaG9zZW5EaXNwbGF5TmFtZT86IHN0cmluZyxcbiAgICByYXRpb25hbGU/OiBzdHJpbmcsXG4gICAgZGVjaWRlckRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBicmFuY2hOYW1lID0gY2hvc2VuRGlzcGxheU5hbWUgfHwgY2hvc2VuQnJhbmNoO1xuICAgIGlmIChkZWNpZGVyRGVzY3JpcHRpb24gJiYgcmF0aW9uYWxlKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBJdCAke2RlY2lkZXJEZXNjcmlwdGlvbn06ICR7cmF0aW9uYWxlfSwgc28gaXQgY2hvc2UgJHticmFuY2hOYW1lfS5gKTtcbiAgICB9IGVsc2UgaWYgKGRlY2lkZXJEZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgSXQgJHtkZWNpZGVyRGVzY3JpcHRpb259IGFuZCBjaG9zZSAke2JyYW5jaE5hbWV9LmApO1xuICAgIH0gZWxzZSBpZiAocmF0aW9uYWxlKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBBIGRlY2lzaW9uIHdhcyBtYWRlOiAke3JhdGlvbmFsZX0sIHNvIHRoZSBwYXRoIHRha2VuIHdhcyAke2JyYW5jaE5hbWV9LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBBIGRlY2lzaW9uIHdhcyBtYWRlLCBhbmQgdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb3JrKHBhcmVudFN0YWdlOiBzdHJpbmcsIGNoaWxkTmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZXMgPSBjaGlsZE5hbWVzLmpvaW4oJywgJyk7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChgJHtjaGlsZE5hbWVzLmxlbmd0aH0gcGF0aHMgd2VyZSBleGVjdXRlZCBpbiBwYXJhbGxlbDogJHtuYW1lc30uYCk7XG4gIH1cblxuICBvblNlbGVjdGVkKHBhcmVudFN0YWdlOiBzdHJpbmcsIHNlbGVjdGVkTmFtZXM6IHN0cmluZ1tdLCB0b3RhbENvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lcyA9IHNlbGVjdGVkTmFtZXMuam9pbignLCAnKTtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGAke3NlbGVjdGVkTmFtZXMubGVuZ3RofSBvZiAke3RvdGFsQ291bnR9IHBhdGhzIHdlcmUgc2VsZWN0ZWQ6ICR7bmFtZXN9LmApO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoc3ViZmxvd05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYEVudGVyaW5nIHRoZSAke3N1YmZsb3dOYW1lfSBzdWJmbG93LmApO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChzdWJmbG93TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChgRXhpdGluZyB0aGUgJHtzdWJmbG93TmFtZX0gc3ViZmxvdy5gKTtcbiAgfVxuXG4gIG9uTG9vcCh0YXJnZXRTdGFnZTogc3RyaW5nLCB0YXJnZXREaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBpdGVyYXRpb246IG51bWJlciwgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYE9uIHBhc3MgJHtpdGVyYXRpb259OiAke2Rlc2NyaXB0aW9ufSBhZ2Fpbi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmFtZSA9IHRhcmdldERpc3BsYXlOYW1lIHx8IHRhcmdldFN0YWdlO1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgT24gcGFzcyAke2l0ZXJhdGlvbn0gdGhyb3VnaCAke25hbWV9LmApO1xuICAgIH1cbiAgfVxuXG4gIG9uQnJlYWsoc3RhZ2VOYW1lOiBzdHJpbmcsIGRpc3BsYXlOYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IGRpc3BsYXlOYW1lIHx8IHN0YWdlTmFtZTtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBFeGVjdXRpb24gc3RvcHBlZCBhdCAke25hbWV9LmApO1xuICB9XG5cbiAgb25FcnJvcihzdGFnZU5hbWU6IHN0cmluZywgZXJyb3JNZXNzYWdlOiBzdHJpbmcsIGRpc3BsYXlOYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IGRpc3BsYXlOYW1lIHx8IHN0YWdlTmFtZTtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBBbiBlcnJvciBvY2N1cnJlZCBhdCAke25hbWV9OiAke2Vycm9yTWVzc2FnZX0uYCk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5IG9mIGFjY3VtdWxhdGVkIHNlbnRlbmNlcy4gKi9cbiAgZ2V0U2VudGVuY2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuc2VudGVuY2VzXTtcbiAgfVxufVxuIl19
@@ -0,0 +1,24 @@
1
+ /**
2
+ * NullControlFlowNarrativeGenerator — Zero-cost no-op (Null Object pattern).
3
+ *
4
+ * When narrative is disabled, handlers call this unconditionally.
5
+ * All methods are empty bodies — zero allocation, zero string formatting.
6
+ * getSentences() returns a bare [] literal to avoid even a single array allocation.
7
+ */
8
+ /* eslint-disable @typescript-eslint/no-empty-function */
9
+ export class NullControlFlowNarrativeGenerator {
10
+ onStageExecuted() { }
11
+ onNext() { }
12
+ onDecision() { }
13
+ onFork() { }
14
+ onSelected() { }
15
+ onSubflowEntry() { }
16
+ onSubflowExit() { }
17
+ onLoop() { }
18
+ onBreak() { }
19
+ onError() { }
20
+ getSentences() {
21
+ return [];
22
+ }
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL051bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCx5REFBeUQ7QUFDekQsTUFBTSxPQUFPLGlDQUFpQztJQUM1QyxlQUFlLEtBQVUsQ0FBQztJQUMxQixNQUFNLEtBQVUsQ0FBQztJQUNqQixVQUFVLEtBQVUsQ0FBQztJQUNyQixNQUFNLEtBQVUsQ0FBQztJQUNqQixVQUFVLEtBQVUsQ0FBQztJQUNyQixjQUFjLEtBQVUsQ0FBQztJQUN6QixhQUFhLEtBQVUsQ0FBQztJQUN4QixNQUFNLEtBQVUsQ0FBQztJQUNqQixPQUFPLEtBQVUsQ0FBQztJQUNsQixPQUFPLEtBQVUsQ0FBQztJQUNsQixZQUFZO1FBQ1YsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE51bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvciDigJQgWmVyby1jb3N0IG5vLW9wIChOdWxsIE9iamVjdCBwYXR0ZXJuKS5cbiAqXG4gKiBXaGVuIG5hcnJhdGl2ZSBpcyBkaXNhYmxlZCwgaGFuZGxlcnMgY2FsbCB0aGlzIHVuY29uZGl0aW9uYWxseS5cbiAqIEFsbCBtZXRob2RzIGFyZSBlbXB0eSBib2RpZXMg4oCUIHplcm8gYWxsb2NhdGlvbiwgemVybyBzdHJpbmcgZm9ybWF0dGluZy5cbiAqIGdldFNlbnRlbmNlcygpIHJldHVybnMgYSBiYXJlIFtdIGxpdGVyYWwgdG8gYXZvaWQgZXZlbiBhIHNpbmdsZSBhcnJheSBhbGxvY2F0aW9uLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSUNvbnRyb2xGbG93TmFycmF0aXZlIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIE51bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvciBpbXBsZW1lbnRzIElDb250cm9sRmxvd05hcnJhdGl2ZSB7XG4gIG9uU3RhZ2VFeGVjdXRlZCgpOiB2b2lkIHt9XG4gIG9uTmV4dCgpOiB2b2lkIHt9XG4gIG9uRGVjaXNpb24oKTogdm9pZCB7fVxuICBvbkZvcmsoKTogdm9pZCB7fVxuICBvblNlbGVjdGVkKCk6IHZvaWQge31cbiAgb25TdWJmbG93RW50cnkoKTogdm9pZCB7fVxuICBvblN1YmZsb3dFeGl0KCk6IHZvaWQge31cbiAgb25Mb29wKCk6IHZvaWQge31cbiAgb25CcmVhaygpOiB2b2lkIHt9XG4gIG9uRXJyb3IoKTogdm9pZCB7fVxuICBnZXRTZW50ZW5jZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ export { CombinedNarrativeBuilder } from './CombinedNarrativeBuilder';
2
+ export { ControlFlowNarrativeGenerator } from './ControlFlowNarrativeGenerator';
3
+ export { NullControlFlowNarrativeGenerator } from './NullControlFlowNarrativeGenerator';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0scUNBQXFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5LCBDb21iaW5lZE5hcnJhdGl2ZU9wdGlvbnMgfSBmcm9tICcuL0NvbWJpbmVkTmFycmF0aXZlQnVpbGRlcic7XG5leHBvcnQgeyBDb21iaW5lZE5hcnJhdGl2ZUJ1aWxkZXIgfSBmcm9tICcuL0NvbWJpbmVkTmFycmF0aXZlQnVpbGRlcic7XG5leHBvcnQgeyBDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvciB9IGZyb20gJy4vQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3InO1xuZXhwb3J0IHsgTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIH0gZnJvbSAnLi9OdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3InO1xuZXhwb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL3R5cGVzJztcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ /**
2
+ * IControlFlowNarrative — Interface for control flow narrative generation.
3
+ *
4
+ * Captures FLOW events during traversal: decisions, forks, loops, subflows.
5
+ * Complementary to scope/recorders/NarrativeRecorder which captures DATA events.
6
+ *
7
+ * Uses Null Object pattern: NullControlFlowNarrativeGenerator satisfies this
8
+ * interface with empty methods for zero-cost disabled path.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIElDb250cm9sRmxvd05hcnJhdGl2ZSDigJQgSW50ZXJmYWNlIGZvciBjb250cm9sIGZsb3cgbmFycmF0aXZlIGdlbmVyYXRpb24uXG4gKlxuICogQ2FwdHVyZXMgRkxPVyBldmVudHMgZHVyaW5nIHRyYXZlcnNhbDogZGVjaXNpb25zLCBmb3JrcywgbG9vcHMsIHN1YmZsb3dzLlxuICogQ29tcGxlbWVudGFyeSB0byBzY29wZS9yZWNvcmRlcnMvTmFycmF0aXZlUmVjb3JkZXIgd2hpY2ggY2FwdHVyZXMgREFUQSBldmVudHMuXG4gKlxuICogVXNlcyBOdWxsIE9iamVjdCBwYXR0ZXJuOiBOdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3Igc2F0aXNmaWVzIHRoaXNcbiAqIGludGVyZmFjZSB3aXRoIGVtcHR5IG1ldGhvZHMgZm9yIHplcm8tY29zdCBkaXNhYmxlZCBwYXRoLlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRyb2xGbG93TmFycmF0aXZlIHtcbiAgLyoqIENhbGxlZCB3aGVuIGEgc3RhZ2UgZXhlY3V0ZXMuIEZpcnN0IHN0YWdlIHVzZXMgZGlzdGluY3Qgb3BlbmluZyBwYXR0ZXJuLiAqL1xuICBvblN0YWdlRXhlY3V0ZWQoc3RhZ2VOYW1lOiBzdHJpbmcsIGRpc3BsYXlOYW1lPzogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqIENhbGxlZCBvbiBsaW5lYXIgY29udGludWF0aW9uIGZyb20gb25lIHN0YWdlIHRvIHRoZSBuZXh0LiAqL1xuICBvbk5leHQoZnJvbVN0YWdlOiBzdHJpbmcsIHRvU3RhZ2U6IHN0cmluZywgdG9EaXNwbGF5TmFtZT86IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgd2hlbiBhIGRlY2lkZXIgc2VsZWN0cyBhIGJyYW5jaC4gTW9zdCB2YWx1YWJsZSBmb3IgTExNIGNvbnRleHQuICovXG4gIG9uRGVjaXNpb24oXG4gICAgZGVjaWRlck5hbWU6IHN0cmluZyxcbiAgICBjaG9zZW5CcmFuY2g6IHN0cmluZyxcbiAgICBjaG9zZW5EaXNwbGF5TmFtZT86IHN0cmluZyxcbiAgICByYXRpb25hbGU/OiBzdHJpbmcsXG4gICAgZGVjaWRlckRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICApOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgd2hlbiBhIGZvcmsgZXhlY3V0ZXMgYWxsIGNoaWxkcmVuIGluIHBhcmFsbGVsLiAqL1xuICBvbkZvcmsocGFyZW50U3RhZ2U6IHN0cmluZywgY2hpbGROYW1lczogc3RyaW5nW10pOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgd2hlbiBhIHNlbGVjdG9yIHBpY2tzIGEgc3Vic2V0IG9mIGNoaWxkcmVuLiAqL1xuICBvblNlbGVjdGVkKHBhcmVudFN0YWdlOiBzdHJpbmcsIHNlbGVjdGVkTmFtZXM6IHN0cmluZ1tdLCB0b3RhbENvdW50OiBudW1iZXIpOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgd2hlbiBlbnRlcmluZyBhIHN1YmZsb3cgKG5lc3RlZCBjb250ZXh0IGJvdW5kYXJ5KS4gKi9cbiAgb25TdWJmbG93RW50cnkoc3ViZmxvd05hbWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqIENhbGxlZCB3aGVuIGV4aXRpbmcgYSBzdWJmbG93LiAqL1xuICBvblN1YmZsb3dFeGl0KHN1YmZsb3dOYW1lOiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgb24gbG9vcCBpdGVyYXRpb24gKGJhY2stZWRnZSB0cmF2ZXJzYWwpLiAqL1xuICBvbkxvb3AodGFyZ2V0U3RhZ2U6IHN0cmluZywgdGFyZ2V0RGlzcGxheU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgaXRlcmF0aW9uOiBudW1iZXIsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZDtcblxuICAvKiogQ2FsbGVkIHdoZW4gYSBzdGFnZSB0cmlnZ2VycyBicmVhayAoZWFybHkgdGVybWluYXRpb24pLiAqL1xuICBvbkJyZWFrKHN0YWdlTmFtZTogc3RyaW5nLCBkaXNwbGF5TmFtZT86IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqIENhbGxlZCB3aGVuIGEgc3RhZ2UgdGhyb3dzIGFuIGVycm9yLiAqL1xuICBvbkVycm9yKHN0YWdlTmFtZTogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZywgZGlzcGxheU5hbWU/OiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKiBSZXR1cm5zIGFjY3VtdWxhdGVkIG5hcnJhdGl2ZSBzZW50ZW5jZXMgaW4gZXhlY3V0aW9uIG9yZGVyLiAqL1xuICBnZXRTZW50ZW5jZXMoKTogc3RyaW5nW107XG59XG4iXX0=