footprint-explainable-ui 0.20.0 → 0.22.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 (149) hide show
  1. package/README.md +1 -0
  2. package/dist/flowchart.cjs +1366 -343
  3. package/dist/flowchart.cjs.map +1 -1
  4. package/dist/flowchart.d.cts +513 -6
  5. package/dist/flowchart.d.ts +513 -6
  6. package/dist/flowchart.js +1257 -262
  7. package/dist/flowchart.js.map +1 -1
  8. package/dist/index.cjs +941 -436
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.cts +6 -0
  11. package/dist/index.d.ts +6 -0
  12. package/dist/index.js +852 -352
  13. package/dist/index.js.map +1 -1
  14. package/package.json +10 -3
  15. package/dist/adapters/fromRuntimeSnapshot.d.ts +0 -81
  16. package/dist/adapters/fromRuntimeSnapshot.d.ts.map +0 -1
  17. package/dist/adapters/fromRuntimeSnapshot.js +0 -226
  18. package/dist/adapters/fromRuntimeSnapshot.js.map +0 -1
  19. package/dist/components/ExplainableShell/ExplainableShell.d.ts +0 -169
  20. package/dist/components/ExplainableShell/ExplainableShell.d.ts.map +0 -1
  21. package/dist/components/ExplainableShell/ExplainableShell.js +0 -702
  22. package/dist/components/ExplainableShell/ExplainableShell.js.map +0 -1
  23. package/dist/components/ExplainableShell/index.d.ts +0 -3
  24. package/dist/components/ExplainableShell/index.d.ts.map +0 -1
  25. package/dist/components/ExplainableShell/index.js +0 -2
  26. package/dist/components/ExplainableShell/index.js.map +0 -1
  27. package/dist/components/FlowchartView/SubflowBreadcrumb.d.ts +0 -11
  28. package/dist/components/FlowchartView/SubflowBreadcrumb.d.ts.map +0 -1
  29. package/dist/components/FlowchartView/SubflowBreadcrumb.js +0 -49
  30. package/dist/components/FlowchartView/SubflowBreadcrumb.js.map +0 -1
  31. package/dist/components/FlowchartView/SubflowTree.d.ts +0 -29
  32. package/dist/components/FlowchartView/SubflowTree.d.ts.map +0 -1
  33. package/dist/components/FlowchartView/SubflowTree.js +0 -153
  34. package/dist/components/FlowchartView/SubflowTree.js.map +0 -1
  35. package/dist/components/FlowchartView/index.d.ts +0 -39
  36. package/dist/components/FlowchartView/index.d.ts.map +0 -1
  37. package/dist/components/FlowchartView/index.js +0 -26
  38. package/dist/components/FlowchartView/index.js.map +0 -1
  39. package/dist/components/FlowchartView/useSubflowNavigation.d.ts +0 -60
  40. package/dist/components/FlowchartView/useSubflowNavigation.d.ts.map +0 -1
  41. package/dist/components/FlowchartView/useSubflowNavigation.js +0 -99
  42. package/dist/components/FlowchartView/useSubflowNavigation.js.map +0 -1
  43. package/dist/components/GanttTimeline/GanttTimeline.d.ts +0 -18
  44. package/dist/components/GanttTimeline/GanttTimeline.d.ts.map +0 -1
  45. package/dist/components/GanttTimeline/GanttTimeline.js +0 -123
  46. package/dist/components/GanttTimeline/GanttTimeline.js.map +0 -1
  47. package/dist/components/GanttTimeline/index.d.ts +0 -3
  48. package/dist/components/GanttTimeline/index.d.ts.map +0 -1
  49. package/dist/components/GanttTimeline/index.js +0 -2
  50. package/dist/components/GanttTimeline/index.js.map +0 -1
  51. package/dist/components/MemoryInspector/MemoryInspector.d.ts +0 -19
  52. package/dist/components/MemoryInspector/MemoryInspector.d.ts.map +0 -1
  53. package/dist/components/MemoryInspector/MemoryInspector.js +0 -118
  54. package/dist/components/MemoryInspector/MemoryInspector.js.map +0 -1
  55. package/dist/components/MemoryInspector/index.d.ts +0 -3
  56. package/dist/components/MemoryInspector/index.d.ts.map +0 -1
  57. package/dist/components/MemoryInspector/index.js +0 -2
  58. package/dist/components/MemoryInspector/index.js.map +0 -1
  59. package/dist/components/NarrativeLog/NarrativeLog.d.ts +0 -15
  60. package/dist/components/NarrativeLog/NarrativeLog.d.ts.map +0 -1
  61. package/dist/components/NarrativeLog/NarrativeLog.js +0 -65
  62. package/dist/components/NarrativeLog/NarrativeLog.js.map +0 -1
  63. package/dist/components/NarrativeLog/index.d.ts +0 -3
  64. package/dist/components/NarrativeLog/index.d.ts.map +0 -1
  65. package/dist/components/NarrativeLog/index.js +0 -2
  66. package/dist/components/NarrativeLog/index.js.map +0 -1
  67. package/dist/components/NarrativeTrace/NarrativeTrace.d.ts +0 -13
  68. package/dist/components/NarrativeTrace/NarrativeTrace.d.ts.map +0 -1
  69. package/dist/components/NarrativeTrace/NarrativeTrace.js +0 -134
  70. package/dist/components/NarrativeTrace/NarrativeTrace.js.map +0 -1
  71. package/dist/components/NarrativeTrace/index.d.ts +0 -3
  72. package/dist/components/NarrativeTrace/index.d.ts.map +0 -1
  73. package/dist/components/NarrativeTrace/index.js +0 -2
  74. package/dist/components/NarrativeTrace/index.js.map +0 -1
  75. package/dist/components/ResultPanel/ResultPanel.d.ts +0 -11
  76. package/dist/components/ResultPanel/ResultPanel.d.ts.map +0 -1
  77. package/dist/components/ResultPanel/ResultPanel.js +0 -54
  78. package/dist/components/ResultPanel/ResultPanel.js.map +0 -1
  79. package/dist/components/ResultPanel/index.d.ts +0 -3
  80. package/dist/components/ResultPanel/index.d.ts.map +0 -1
  81. package/dist/components/ResultPanel/index.js +0 -2
  82. package/dist/components/ResultPanel/index.js.map +0 -1
  83. package/dist/components/ScopeDiff/ScopeDiff.d.ts +0 -17
  84. package/dist/components/ScopeDiff/ScopeDiff.d.ts.map +0 -1
  85. package/dist/components/ScopeDiff/ScopeDiff.js +0 -87
  86. package/dist/components/ScopeDiff/ScopeDiff.js.map +0 -1
  87. package/dist/components/ScopeDiff/index.d.ts +0 -3
  88. package/dist/components/ScopeDiff/index.d.ts.map +0 -1
  89. package/dist/components/ScopeDiff/index.js +0 -2
  90. package/dist/components/ScopeDiff/index.js.map +0 -1
  91. package/dist/components/SnapshotPanel/SnapshotPanel.d.ts +0 -17
  92. package/dist/components/SnapshotPanel/SnapshotPanel.d.ts.map +0 -1
  93. package/dist/components/SnapshotPanel/SnapshotPanel.js +0 -85
  94. package/dist/components/SnapshotPanel/SnapshotPanel.js.map +0 -1
  95. package/dist/components/SnapshotPanel/index.d.ts +0 -3
  96. package/dist/components/SnapshotPanel/index.d.ts.map +0 -1
  97. package/dist/components/SnapshotPanel/index.js +0 -2
  98. package/dist/components/SnapshotPanel/index.js.map +0 -1
  99. package/dist/components/StageNode/StageNode.d.ts +0 -52
  100. package/dist/components/StageNode/StageNode.d.ts.map +0 -1
  101. package/dist/components/StageNode/StageNode.js +0 -314
  102. package/dist/components/StageNode/StageNode.js.map +0 -1
  103. package/dist/components/StageNode/index.d.ts +0 -3
  104. package/dist/components/StageNode/index.d.ts.map +0 -1
  105. package/dist/components/StageNode/index.js +0 -2
  106. package/dist/components/StageNode/index.js.map +0 -1
  107. package/dist/components/TimeTravelControls/TimeTravelControls.d.ts +0 -13
  108. package/dist/components/TimeTravelControls/TimeTravelControls.d.ts.map +0 -1
  109. package/dist/components/TimeTravelControls/TimeTravelControls.js +0 -120
  110. package/dist/components/TimeTravelControls/TimeTravelControls.js.map +0 -1
  111. package/dist/components/TimeTravelControls/index.d.ts +0 -3
  112. package/dist/components/TimeTravelControls/index.d.ts.map +0 -1
  113. package/dist/components/TimeTravelControls/index.js +0 -2
  114. package/dist/components/TimeTravelControls/index.js.map +0 -1
  115. package/dist/components/TimeTravelDebugger/TimeTravelDebugger.d.ts +0 -33
  116. package/dist/components/TimeTravelDebugger/TimeTravelDebugger.d.ts.map +0 -1
  117. package/dist/components/TimeTravelDebugger/TimeTravelDebugger.js +0 -119
  118. package/dist/components/TimeTravelDebugger/TimeTravelDebugger.js.map +0 -1
  119. package/dist/components/TimeTravelDebugger/index.d.ts +0 -3
  120. package/dist/components/TimeTravelDebugger/index.d.ts.map +0 -1
  121. package/dist/components/TimeTravelDebugger/index.js +0 -2
  122. package/dist/components/TimeTravelDebugger/index.js.map +0 -1
  123. package/dist/flowchart.d.ts.map +0 -1
  124. package/dist/index.d.ts.map +0 -1
  125. package/dist/theme/ThemeProvider.d.ts +0 -27
  126. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  127. package/dist/theme/ThemeProvider.js +0 -30
  128. package/dist/theme/ThemeProvider.js.map +0 -1
  129. package/dist/theme/index.d.ts +0 -9
  130. package/dist/theme/index.d.ts.map +0 -1
  131. package/dist/theme/index.js +0 -6
  132. package/dist/theme/index.js.map +0 -1
  133. package/dist/theme/presets.d.ts +0 -18
  134. package/dist/theme/presets.d.ts.map +0 -1
  135. package/dist/theme/presets.js +0 -92
  136. package/dist/theme/presets.js.map +0 -1
  137. package/dist/theme/styles.d.ts +0 -32
  138. package/dist/theme/styles.d.ts.map +0 -1
  139. package/dist/theme/styles.js +0 -37
  140. package/dist/theme/styles.js.map +0 -1
  141. package/dist/theme/tokens.d.ts +0 -49
  142. package/dist/theme/tokens.d.ts.map +0 -1
  143. package/dist/theme/tokens.js +0 -79
  144. package/dist/theme/tokens.js.map +0 -1
  145. package/dist/tsconfig.tsbuildinfo +0 -1
  146. package/dist/types.d.ts +0 -60
  147. package/dist/types.d.ts.map +0 -1
  148. package/dist/types.js +0 -2
  149. package/dist/types.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "footprint-explainable-ui",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "Themeable React components for visualizing FootPrint pipeline execution",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -38,7 +38,9 @@
38
38
  "clean": "rm -rf dist",
39
39
  "release:patch": "bash scripts/release.sh patch",
40
40
  "release:minor": "bash scripts/release.sh minor",
41
- "release:major": "bash scripts/release.sh major"
41
+ "release:major": "bash scripts/release.sh major",
42
+ "test:coverage": "vitest run --coverage --coverage.reporter=json-summary --coverage.reporter=text-summary --coverage.reportsDirectory=coverage",
43
+ "coverage:badge": "npm run test:coverage; node scripts/coverage-badge.mjs"
42
44
  },
43
45
  "peerDependencies": {
44
46
  "react": ">=18.0.0",
@@ -52,8 +54,10 @@
52
54
  "devDependencies": {
53
55
  "@testing-library/jest-dom": "^6.9.1",
54
56
  "@testing-library/react": "^16.3.2",
57
+ "@types/dagre": "^0.7.54",
55
58
  "@types/react": "^19.0.0",
56
59
  "@types/react-dom": "^19.0.0",
60
+ "@vitest/coverage-v8": "^4.1.8",
57
61
  "@xyflow/react": "^12.10.2",
58
62
  "jsdom": "^29.0.1",
59
63
  "react": "^19.2.5",
@@ -75,5 +79,8 @@
75
79
  "react",
76
80
  "time-travel",
77
81
  "explainable-ai"
78
- ]
82
+ ],
83
+ "dependencies": {
84
+ "dagre": "^0.8.5"
85
+ }
79
86
  }
@@ -1,81 +0,0 @@
1
- import type { StageSnapshot, NarrativeEntry } from "../types";
2
- /**
3
- * Shape of FootPrint's RuntimeSnapshot (from FlowChartExecutor.getSnapshot()).
4
- * We define it here instead of importing to avoid a hard dependency on footprintjs.
5
- */
6
- interface RuntimeStageSnapshot {
7
- id: string;
8
- name?: string;
9
- isDecider?: boolean;
10
- isFork?: boolean;
11
- /** User-level writes made by this stage (pre-namespace keys → values). */
12
- stageWrites?: Record<string, unknown>;
13
- logs: Record<string, unknown>;
14
- errors: Record<string, unknown>;
15
- metrics: Record<string, unknown>;
16
- evals: Record<string, unknown>;
17
- flowMessages?: unknown[];
18
- description?: string;
19
- subflowId?: string;
20
- next?: RuntimeStageSnapshot;
21
- children?: RuntimeStageSnapshot[];
22
- }
23
- interface RecorderSnapshot {
24
- id: string;
25
- name: string;
26
- data: unknown;
27
- }
28
- interface RuntimeSnapshot {
29
- sharedState: Record<string, unknown>;
30
- executionTree: RuntimeStageSnapshot;
31
- commitLog: unknown[];
32
- /** Per-subflow execution results (keyed by subflowId). */
33
- subflowResults?: Record<string, unknown>;
34
- /** Snapshots from recorders that implement toSnapshot() (e.g. MetricRecorder). */
35
- recorders?: RecorderSnapshot[];
36
- }
37
- export type { NarrativeEntry } from '../types';
38
- /**
39
- * Converts a FootPrint RuntimeSnapshot into a flat array of StageSnapshots
40
- * suitable for visualization components.
41
- *
42
- * The `narrativeEntries` parameter (from `executor.getNarrativeEntries()`)
43
- * distributes the library's rich combined narrative per-stage.
44
- * When narrative is not enabled, stages get "Narrative not available" —
45
- * this adapter reflects what the library produces, nothing more.
46
- *
47
- * Usage:
48
- * ```ts
49
- * const executor = new FlowChartExecutor(chart);
50
- * await executor.run();
51
- * const snapshots = toVisualizationSnapshots(
52
- * executor.getSnapshot(),
53
- * executor.getNarrativeEntries(),
54
- * );
55
- * ```
56
- */
57
- export declare function toVisualizationSnapshots(runtime: RuntimeSnapshot, narrativeEntries?: NarrativeEntry[]): StageSnapshot[];
58
- /**
59
- * Converts a footprintjs SubflowResult (stored on StageSnapshot.subflowResult)
60
- * into visualization snapshots for drill-down views.
61
- *
62
- * SubflowResult shape (from footprintjs):
63
- * { subflowId, subflowName, treeContext: { globalContext, stageContexts, history }, parentStageId }
64
- *
65
- * Returns empty array if the input is not a valid SubflowResult.
66
- */
67
- export declare function subflowResultToSnapshots(subflowResult: unknown, narrativeEntries?: NarrativeEntry[]): StageSnapshot[];
68
- /**
69
- * Creates StageSnapshots from simple arrays (when you don't have a RuntimeSnapshot).
70
- * Useful for testing or custom data sources.
71
- */
72
- export declare function createSnapshots(stages: Array<{
73
- name: string;
74
- label?: string;
75
- memory?: Record<string, unknown>;
76
- narrative?: string;
77
- durationMs?: number;
78
- description?: string;
79
- subflowId?: string;
80
- }>): StageSnapshot[];
81
- //# sourceMappingURL=fromRuntimeSnapshot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fromRuntimeSnapshot.d.ts","sourceRoot":"","sources":["../../src/adapters/fromRuntimeSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE9D;;;GAGG;AACH,UAAU,oBAAoB;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,eAAe;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,aAAa,EAAE,oBAAoB,CAAC;IACpC,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,kFAAkF;IAClF,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAID,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,EACxB,gBAAgB,CAAC,EAAE,cAAc,EAAE,GAClC,aAAa,EAAE,CAWjB;AAgKD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,OAAO,EACtB,gBAAgB,CAAC,EAAE,cAAc,EAAE,GAClC,aAAa,EAAE,CAoCjB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,GACD,aAAa,EAAE,CAkBjB"}
@@ -1,226 +0,0 @@
1
- /**
2
- * Converts a FootPrint RuntimeSnapshot into a flat array of StageSnapshots
3
- * suitable for visualization components.
4
- *
5
- * The `narrativeEntries` parameter (from `executor.getNarrativeEntries()`)
6
- * distributes the library's rich combined narrative per-stage.
7
- * When narrative is not enabled, stages get "Narrative not available" —
8
- * this adapter reflects what the library produces, nothing more.
9
- *
10
- * Usage:
11
- * ```ts
12
- * const executor = new FlowChartExecutor(chart);
13
- * await executor.run();
14
- * const snapshots = toVisualizationSnapshots(
15
- * executor.getSnapshot(),
16
- * executor.getNarrativeEntries(),
17
- * );
18
- * ```
19
- */
20
- export function toVisualizationSnapshots(runtime, narrativeEntries) {
21
- const stageNarrativeMap = narrativeEntries?.length
22
- ? buildStageNarrativeMap(narrativeEntries)
23
- : new Map();
24
- // Extract per-stage timings from MetricRecorder if present in snapshot.recorders.
25
- const stageTimings = extractStageTimings(runtime.recorders);
26
- const snapshots = [];
27
- flattenTree(runtime.executionTree, snapshots, runtime.sharedState, 0, runtime.subflowResults, {}, stageNarrativeMap, stageTimings);
28
- return snapshots;
29
- }
30
- /**
31
- * Extracts per-stage duration data from recorder snapshots.
32
- *
33
- * Post-KeyedRecorder MetricRecorder serializes as
34
- * { name: 'Metrics', data: { steps: { [runtimeStageId]: { stageName, duration, ... } } } }
35
- *
36
- * Older versions emitted `data.stages[stageName].totalDuration` directly;
37
- * we still accept that shape for back-compat when loading old snapshots.
38
- *
39
- * Stages that ran multiple times (e.g. CallLLM inside a loop) have one
40
- * entry per invocation keyed by runtimeStageId — sum their durations by
41
- * stageName so the GanttTimeline shows cumulative wall time per stage.
42
- */
43
- function extractStageTimings(recorders) {
44
- const timings = new Map();
45
- if (!recorders)
46
- return timings;
47
- for (const rec of recorders) {
48
- if (rec.name !== 'Metrics' || !rec.data || typeof rec.data !== 'object')
49
- continue;
50
- const data = rec.data;
51
- // New shape: data.steps[runtimeStageId] = { stageName, duration, ... }
52
- if (data.steps) {
53
- for (const step of Object.values(data.steps)) {
54
- const name = step?.stageName;
55
- const d = step?.duration;
56
- if (!name || typeof d !== 'number' || d <= 0)
57
- continue;
58
- timings.set(name, Math.round((timings.get(name) ?? 0) + d));
59
- }
60
- }
61
- // Legacy shape: data.stages[stageName].totalDuration
62
- if (data.stages) {
63
- for (const [stageName, metrics] of Object.entries(data.stages)) {
64
- if (typeof metrics.totalDuration === 'number' && metrics.totalDuration > 0) {
65
- timings.set(stageName, Math.round(metrics.totalDuration));
66
- }
67
- }
68
- }
69
- }
70
- return timings;
71
- }
72
- /**
73
- * Groups narrative entries by stage name, preserving non-stage entries
74
- * (conditions, forks) attached to the preceding stage.
75
- */
76
- function buildStageNarrativeMap(entries) {
77
- const map = new Map();
78
- let currentStageName;
79
- for (const entry of entries) {
80
- if (entry.stageName) {
81
- currentStageName = entry.stageName;
82
- }
83
- if (currentStageName) {
84
- if (!map.has(currentStageName)) {
85
- map.set(currentStageName, []);
86
- }
87
- const indent = ' '.repeat(entry.depth);
88
- map.get(currentStageName).push(`${indent}${entry.text}`);
89
- }
90
- }
91
- return map;
92
- }
93
- function flattenTree(node, out, sharedState, accumulatedMs = 0, subflowResults, cumulativeMemory = {}, stageNarrativeMap = new Map(), stageTimings = new Map()) {
94
- // Prefer MetricRecorder timing (real wall-clock), then scope.$metric('durationMs'), then 0.
95
- const stageName = node.name ?? node.id;
96
- const durationMs = (stageName ? stageTimings.get(stageName) : undefined) ??
97
- (typeof node.metrics?.durationMs === "number" ? node.metrics.durationMs : 0);
98
- const startMs = accumulatedMs;
99
- // Use id for matching (stable, matches spec node ids).
100
- // name may carry display prefixes like "[service-name] STAGE".
101
- const stageId = node.id || node.name || 'unknown';
102
- const displayName = node.name || node.id || 'unknown';
103
- // Narrative comes from the library. When not available (e.g. subflow internals
104
- // where the root recorder only captures enter/exit markers), build a basic
105
- // narrative from the stage name, description, and data operations.
106
- // Try id first, then name — narrative entries use node.name (may be prefixed)
107
- // while snapshot uses node.id (stable). Both need to match for subflows.
108
- const stageLines = stageNarrativeMap.get(stageId) ?? stageNarrativeMap.get(displayName);
109
- let narrative;
110
- if (stageLines) {
111
- narrative = stageLines.join('\n');
112
- }
113
- else {
114
- const parts = [`${displayName} executed.`];
115
- if (node.description)
116
- parts.push(node.description);
117
- if (node.stageWrites) {
118
- const keys = Object.keys(node.stageWrites);
119
- if (keys.length > 0)
120
- parts.push(`Wrote: ${keys.join(', ')}`);
121
- }
122
- narrative = parts.join('\n');
123
- }
124
- // Build cumulative memory from stageWrites (actual setValue/updateValue calls)
125
- const memory = { ...cumulativeMemory };
126
- if (node.stageWrites) {
127
- for (const [key, value] of Object.entries(node.stageWrites)) {
128
- if (value === undefined) {
129
- delete memory[key];
130
- }
131
- else {
132
- memory[key] = value;
133
- }
134
- }
135
- }
136
- const sfResult = subflowResults?.[node.subflowId ?? stageId];
137
- out.push({
138
- stageName: displayName,
139
- stageLabel: stageId,
140
- runtimeStageId: node.runtimeStageId ?? undefined,
141
- memory,
142
- narrative,
143
- startMs,
144
- durationMs,
145
- status: "done",
146
- ...(node.description ? { description: node.description } : undefined),
147
- ...(node.subflowId ? { subflowId: node.subflowId } : undefined),
148
- ...(sfResult ? { subflowResult: sfResult } : undefined),
149
- });
150
- let nextMs = startMs + durationMs;
151
- // Handle parallel children (fork)
152
- if (node.children && node.children.length > 0) {
153
- let maxChildEnd = nextMs;
154
- for (const child of node.children) {
155
- const childEnd = flattenTree(child, out, sharedState, nextMs, subflowResults, memory, stageNarrativeMap, stageTimings);
156
- maxChildEnd = Math.max(maxChildEnd, childEnd);
157
- }
158
- nextMs = maxChildEnd;
159
- }
160
- // Handle linear continuation
161
- if (node.next) {
162
- nextMs = flattenTree(node.next, out, sharedState, nextMs, subflowResults, memory, stageNarrativeMap, stageTimings);
163
- }
164
- return nextMs;
165
- }
166
- /**
167
- * Converts a footprintjs SubflowResult (stored on StageSnapshot.subflowResult)
168
- * into visualization snapshots for drill-down views.
169
- *
170
- * SubflowResult shape (from footprintjs):
171
- * { subflowId, subflowName, treeContext: { globalContext, stageContexts, history }, parentStageId }
172
- *
173
- * Returns empty array if the input is not a valid SubflowResult.
174
- */
175
- export function subflowResultToSnapshots(subflowResult, narrativeEntries) {
176
- if (!subflowResult || typeof subflowResult !== 'object')
177
- return [];
178
- const sf = subflowResult;
179
- if (!sf.treeContext?.stageContexts)
180
- return [];
181
- const runtime = {
182
- sharedState: sf.treeContext.globalContext ?? {},
183
- executionTree: sf.treeContext.stageContexts,
184
- commitLog: sf.treeContext.history ?? [],
185
- };
186
- const snapshots = toVisualizationSnapshots(runtime, narrativeEntries);
187
- // Strip subflow prefix from stage names so they match the spec node names.
188
- // Runtime names are prefixed (e.g., "analyze/SeedScope") but spec nodes
189
- // use unprefixed names (e.g., "SeedScope").
190
- const prefix = sf.subflowId ? `${sf.subflowId}/` : '';
191
- if (prefix) {
192
- for (const snap of snapshots) {
193
- if (snap.stageName.startsWith(prefix)) {
194
- snap.stageName = snap.stageName.slice(prefix.length);
195
- }
196
- if (snap.stageLabel.startsWith(prefix)) {
197
- snap.stageLabel = snap.stageLabel.slice(prefix.length);
198
- }
199
- }
200
- }
201
- return snapshots;
202
- }
203
- /**
204
- * Creates StageSnapshots from simple arrays (when you don't have a RuntimeSnapshot).
205
- * Useful for testing or custom data sources.
206
- */
207
- export function createSnapshots(stages) {
208
- let accMs = 0;
209
- return stages.map((s) => {
210
- const duration = s.durationMs ?? 1;
211
- const snap = {
212
- stageName: s.name,
213
- stageLabel: s.label ?? s.name,
214
- memory: s.memory ?? {},
215
- narrative: s.narrative ?? `${s.label ?? s.name} completed.`,
216
- startMs: accMs,
217
- durationMs: duration,
218
- status: "done",
219
- ...(s.description ? { description: s.description } : undefined),
220
- ...(s.subflowId ? { subflowId: s.subflowId } : undefined),
221
- };
222
- accMs += duration;
223
- return snap;
224
- });
225
- }
226
- //# sourceMappingURL=fromRuntimeSnapshot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fromRuntimeSnapshot.js","sourceRoot":"","sources":["../../src/adapters/fromRuntimeSnapshot.ts"],"names":[],"mappings":"AA4CA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAwB,EACxB,gBAAmC;IAEnC,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,MAAM;QAChD,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;QAC1C,CAAC,CAAC,IAAI,GAAG,EAAoB,CAAC;IAEhC,kFAAkF;IAClF,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE5D,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,EAAE,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;IACnI,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,mBAAmB,CAAC,SAA8B;IACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,IAAI,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAClF,MAAM,IAAI,GAAG,GAAG,CAAC,IAGhB,CAAC;QACF,uEAAuE;QACvE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,IAAI,EAAE,SAAS,CAAC;gBAC7B,MAAM,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC;gBACzB,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACvD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,qDAAqD;QACrD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/D,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,IAAI,OAAO,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;oBAC3E,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,OAAyB;IACvD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxC,IAAI,gBAAoC,CAAC;IAEzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC;QACrC,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC/B,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAGD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAClB,IAA0B,EAC1B,GAAoB,EACpB,WAAoC,EACpC,gBAAwB,CAAC,EACzB,cAAwC,EACxC,mBAA4C,EAAE,EAC9C,oBAA2C,IAAI,GAAG,EAAE,EACpD,eAAoC,IAAI,GAAG,EAAE;IAE7C,4FAA4F;IAC5F,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;IACvC,MAAM,UAAU,GACd,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,MAAM,OAAO,GAAG,aAAa,CAAC;IAC9B,uDAAuD;IACvD,+DAA+D;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;IAClD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC;IAEtD,+EAA+E;IAC/E,2EAA2E;IAC3E,mEAAmE;IACnE,8EAA8E;IAC9E,yEAAyE;IACzE,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxF,IAAI,SAAiB,CAAC;IACtB,IAAI,UAAU,EAAE,CAAC;QACf,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAa,CAAC,GAAG,WAAW,YAAY,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,+EAA+E;IAC/E,MAAM,MAAM,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACvC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;IAE7D,GAAG,CAAC,IAAI,CAAC;QACP,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,OAAO;QACnB,cAAc,EAAG,IAAY,CAAC,cAAc,IAAI,SAAS;QACzD,MAAM;QACN,SAAS;QACT,OAAO;QACP,UAAU;QACV,MAAM,EAAE,MAAM;QACd,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACxD,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IAElC,kCAAkC;IAClC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,WAAW,GAAG,MAAM,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;YACvH,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,GAAG,WAAW,CAAC;IACvB,CAAC;IAED,6BAA6B;IAC7B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;IACrH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAAsB,EACtB,gBAAmC;IAEnC,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACnE,MAAM,EAAE,GAAG,aAOV,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,aAAa;QAAE,OAAO,EAAE,CAAC;IAE9C,MAAM,OAAO,GAAoB;QAC/B,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,IAAI,EAAE;QAC/C,aAAa,EAAE,EAAE,CAAC,WAAW,CAAC,aAAqC;QACnE,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE;KACxC,CAAC;IAEF,MAAM,SAAS,GAAG,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAEtE,2EAA2E;IAC3E,wEAAwE;IACxE,4CAA4C;IAC5C,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,MAQE;IAEF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;QACnC,MAAM,IAAI,GAAkB;YAC1B,SAAS,EAAE,CAAC,CAAC,IAAI;YACjB,UAAU,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI;YAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;YACtB,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,aAAa;YAC3D,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,MAAM;YACd,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/D,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;SAC1D,CAAC;QACF,KAAK,IAAI,QAAQ,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,169 +0,0 @@
1
- import type { StageSnapshot, BaseComponentProps, NarrativeEntry } from "../../types";
2
- /**
3
- * Minimal subflow-walking spec shape. Used INTERNALLY by drill-down
4
- * resolution (which navigates `subflowStructure` to find a child chart
5
- * inside the parent's serialized structure). No longer used for chart
6
- * rendering — that happens via `traceGraph` + `<TracedFlow>` exclusively.
7
- *
8
- * Kept as a local type so the file no longer depends on any legacy
9
- * spec-walk module.
10
- */
11
- export interface SpecNode {
12
- name: string;
13
- id?: string;
14
- description?: string;
15
- children?: SpecNode[];
16
- next?: SpecNode;
17
- isSubflowRoot?: boolean;
18
- subflowId?: string;
19
- subflowName?: string;
20
- subflowStructure?: SpecNode;
21
- }
22
- /** Tab ID — "result", "memory", "narrative", or any custom recorder view ID. */
23
- export type ShellTab = string;
24
- export interface PanelLabels {
25
- /** Left panel pill label (subflow tree). Default: "Topology" */
26
- topology?: string;
27
- /** Right panel pill label (memory/narrative). Default: "Details" */
28
- details?: string;
29
- /** Bottom panel pill label (timeline). Default: "Timeline" */
30
- timeline?: string;
31
- }
32
- /** Which panels start expanded. Default: `{ details: true }` (flowchart + memory). */
33
- export interface DefaultExpanded {
34
- topology?: boolean;
35
- details?: boolean;
36
- timeline?: boolean;
37
- }
38
- /**
39
- * Raw runtime snapshot from FlowChartExecutor.getSnapshot().
40
- * When provided, ExplainableShell converts it internally — zero boilerplate.
41
- */
42
- export interface RuntimeSnapshotInput {
43
- sharedState: Record<string, unknown>;
44
- executionTree: unknown;
45
- commitLog: unknown[];
46
- subflowResults?: Record<string, unknown>;
47
- /** Recorder snapshots from toSnapshot() — auto-generates detail tabs. */
48
- recorders?: Array<{
49
- id: string;
50
- name: string;
51
- description?: string;
52
- preferredOperation?: 'translate' | 'accumulate' | 'aggregate';
53
- data: unknown;
54
- }>;
55
- }
56
- /**
57
- * A recorder view that appears as a tab in the details panel.
58
- * Each recorder provides its own per-stage rendering.
59
- * Memory and Narrative are built-in defaults — add more via this prop.
60
- */
61
- export interface RecorderView {
62
- /** Unique key for this view tab */
63
- id: string;
64
- /** Display label on the tab */
65
- name: string;
66
- /** Short description shown as tooltip and header for auto-detected views.
67
- * e.g., "Per-step timing and I/O counts (KeyedRecorder)" */
68
- description?: string;
69
- /**
70
- * Render function — receives the current snapshot index and all snapshots.
71
- * Return a React node to display in the details panel.
72
- */
73
- render: (props: {
74
- snapshots: StageSnapshot[];
75
- selectedIndex: number;
76
- }) => React.ReactNode;
77
- }
78
- export interface ExplainableShellProps extends BaseComponentProps {
79
- /**
80
- * Pre-converted visualization snapshots. Use when you've already called
81
- * toVisualizationSnapshots() yourself.
82
- */
83
- snapshots?: StageSnapshot[];
84
- /**
85
- * Raw runtime snapshot from executor.getSnapshot(). The shell converts it
86
- * internally via toVisualizationSnapshots(). When provided, `snapshots`
87
- * and `resultData` are derived automatically. Pair with
88
- * `narrativeEntries` for rich per-stage narrative.
89
- *
90
- * Usage: `<ExplainableShell runtimeSnapshot={executor.getSnapshot()} narrativeEntries={executor.getNarrativeEntries()} spec={spec} />`
91
- */
92
- runtimeSnapshot?: RuntimeSnapshotInput | null;
93
- spec?: SpecNode | null;
94
- /**
95
- * Build-time graph captured live via `createTraceStructureRecorder`.
96
- * REQUIRED for chart rendering (v6+) — the legacy `spec` →
97
- * legacy spec-walk post-walk path was removed in favor of this
98
- * recorder-driven graph.
99
- *
100
- * Pair with `runtimeOverlay` for the full time-travel trace UI.
101
- * When `traceGraph` is set but `runtimeOverlay` is absent, the
102
- * chart renders without runtime coloring (build-time-only view).
103
- *
104
- * The `spec` prop, when also provided, is used INTERNALLY for
105
- * subflow drill-down resolution (navigating `subflowStructure` to
106
- * find a child chart inside the parent's serialized structure) —
107
- * NOT for rendering.
108
- */
109
- traceGraph?: import("../FlowchartView/traceStructureRecorder").TraceGraph | null;
110
- /**
111
- * Runtime overlay captured live via `createTraceRuntimeOverlay`.
112
- * Pair with `traceGraph` to drive `<TracedFlow>` for the full
113
- * time-travel trace UI.
114
- */
115
- runtimeOverlay?: import("../FlowchartView/createTraceRuntimeOverlay").RuntimeOverlay | null;
116
- title?: string;
117
- resultData?: Record<string, unknown> | null;
118
- logs?: string[];
119
- /** Structured narrative entries from `executor.getNarrativeEntries()`.
120
- * This is the only narrative input — the flat-string form was
121
- * removed; call `.map(e => e.text)` if you need it. */
122
- narrativeEntries?: NarrativeEntry[];
123
- tabs?: ShellTab[];
124
- defaultTab?: ShellTab;
125
- hideConsole?: boolean;
126
- /** Hide specific detail tabs (e.g., ['result', 'memory']). */
127
- hideTabs?: string[];
128
- /** Customize the labels on collapsible panel pills */
129
- panelLabels?: PanelLabels;
130
- /** Which panels start expanded. Default: `{ details: true }` */
131
- defaultExpanded?: DefaultExpanded;
132
- /**
133
- * Recorder views — each becomes a tab in the details panel.
134
- * Default: Memory + Narrative. Pass additional recorder views
135
- * to show tokens, cost, tools, permissions, or custom data.
136
- *
137
- * Usage:
138
- * recorderViews={[
139
- * { id: 'tokens', name: 'Tokens', render: ({ selectedIndex }) => <div>...</div> },
140
- * ]}
141
- */
142
- recorderViews?: RecorderView[];
143
- /**
144
- * Custom flowchart renderer. When omitted, ExplainableShell renders
145
- * via `<TracedFlow graph={traceGraph} overlay={runtimeOverlay} />` —
146
- * the recorder-driven path. Override to plug a custom chart UI; the
147
- * `spec` parameter is forwarded only for backward-compatible
148
- * signatures (it's the same SpecNode used for drill-down) and may
149
- * be `null` once consumers stop threading it in.
150
- */
151
- renderFlowchart?: (props: {
152
- spec: SpecNode | null;
153
- snapshots: StageSnapshot[];
154
- selectedIndex: number;
155
- onNodeClick?: (indexOrId: number | string) => void;
156
- showStageId?: boolean;
157
- }) => React.ReactNode;
158
- /**
159
- * When true, render each node's stable `stageId` as a small monospace
160
- * caption beneath the label in the default flowchart renderer.
161
- * Teaching aid: it reveals the key recorders use
162
- * (`runtimeStageId = [subflowPath/]stageId#executionIndex`) so a
163
- * consumer can map any recorder's per-stage data back to a node.
164
- * Default false.
165
- */
166
- showStageId?: boolean;
167
- }
168
- export declare function ExplainableShell({ snapshots: snapshotsProp, runtimeSnapshot, spec, title, resultData: resultDataProp, logs, narrativeEntries, tabs, defaultTab, hideConsole, hideTabs: hideTabsProp, panelLabels, defaultExpanded, recorderViews, renderFlowchart, showStageId, traceGraph, runtimeOverlay, size, unstyled, className, style, }: ExplainableShellProps): import("react/jsx-runtime").JSX.Element;
169
- //# sourceMappingURL=ExplainableShell.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExplainableShell.d.ts","sourceRoot":"","sources":["../../../src/components/ExplainableShell/ExplainableShell.tsx"],"names":[],"mappings":"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"}