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
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import * as _xyflow_react from '@xyflow/react';
3
- import { Node, Edge, NodeTypes, EdgeTypes } from '@xyflow/react';
3
+ import { Node, Edge, NodeTypes, EdgeTypes, NodeProps, EdgeProps } from '@xyflow/react';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
 
6
6
  interface StageNodeData {
@@ -40,6 +40,22 @@ interface StageNodeData {
40
40
  * ExplainableShell.
41
41
  */
42
42
  showStageId?: boolean;
43
+ /**
44
+ * Visual emphasis hint — generic, so the renderer stays domain-agnostic.
45
+ * `hero` = a stage the viewer cares about (accent border + tint + bold);
46
+ * `muted` = mechanism/plumbing (recedes — faded + thin border). The
47
+ * consumer's graph builder sets this from its own semantics (e.g. the
48
+ * agentfootprint lens maps `stageRole` → emphasis). Layers UNDER run status:
49
+ * active/done/error colours still override during a run.
50
+ */
51
+ emphasis?: "hero" | "muted";
52
+ /**
53
+ * Size tier — scales the card's text + padding to match the footprint the
54
+ * layout allocated (the layout's node-size resolver must scale in lockstep,
55
+ * else the card and its laid-out box disagree). `lg` = a focal stage,
56
+ * `sm` = a minor/plumbing stage, default `md`. Generic — no domain meaning.
57
+ */
58
+ size?: "sm" | "md" | "lg";
43
59
  [key: string]: unknown;
44
60
  }
45
61
  /**
@@ -319,6 +335,12 @@ interface TraceNodeData extends Record<string, unknown> {
319
335
  subflowId?: string;
320
336
  isLazy?: boolean;
321
337
  isPausable?: boolean;
338
+ /** Visual emphasis hint — `hero` (prominent) / `muted` (recedes). Set by
339
+ * the consumer's graph builder from its own semantics; the renderer styles
340
+ * off it without any domain knowledge. */
341
+ emphasis?: "hero" | "muted";
342
+ /** Size tier — scales the card; must match the layout's node-size resolver. */
343
+ size?: "sm" | "md" | "lg";
322
344
  /** Set later by `onDeciderComplete` when the decider's branch list is
323
345
  * sealed. Useful for renderers that want to render decider with a
324
346
  * branch-count badge. */
@@ -625,7 +647,7 @@ declare function TimeTravelDebugger({ snapshots, graph, runtimeOverlay, showGant
625
647
  * `<TraceFlow graph={currentGraph} />` per level.
626
648
  */
627
649
 
628
- interface BreadcrumbEntry {
650
+ interface BreadcrumbEntry$1 {
629
651
  /** Display name for this level */
630
652
  label: string;
631
653
  /** The subflow id that was drilled into to reach this level
@@ -636,7 +658,7 @@ interface BreadcrumbEntry {
636
658
  }
637
659
  interface SubflowNavigation {
638
660
  /** Current breadcrumb path (root → ... → current) */
639
- breadcrumbs: BreadcrumbEntry[];
661
+ breadcrumbs: BreadcrumbEntry$1[];
640
662
  /** Current graph — today identical to the root graph (see file-level
641
663
  * TODO). Consumers should still treat this as the source of truth so
642
664
  * they remain forward-compatible once per-subflow graphs are wired in. */
@@ -663,7 +685,7 @@ interface SubflowNavigation {
663
685
  declare function useSubflowNavigation(rootGraph: TraceGraph | null): SubflowNavigation;
664
686
 
665
687
  interface SubflowBreadcrumbProps {
666
- breadcrumbs: BreadcrumbEntry[];
688
+ breadcrumbs: BreadcrumbEntry$1[];
667
689
  onNavigate: (level: number) => void;
668
690
  }
669
691
  /**
@@ -672,6 +694,48 @@ interface SubflowBreadcrumbProps {
672
694
  */
673
695
  declare const SubflowBreadcrumb: react.NamedExoticComponent<SubflowBreadcrumbProps>;
674
696
 
697
+ /**
698
+ * Pure helpers for subflow drill-down on a `TraceGraph`.
699
+ *
700
+ * Filtering and breadcrumb computation are derived from the
701
+ * `TraceNodeData.subflowOf` field that the structure recorder sets
702
+ * at `onSubflowMounted` time. Both functions are pure (no I/O, no
703
+ * React) so they can be unit-tested in isolation and reused by any
704
+ * renderer.
705
+ */
706
+
707
+ /**
708
+ * Filter the trace graph by drill-down scope.
709
+ *
710
+ * - `currentSubflowId === null` → show top-level (nodes with no
711
+ * `subflowOf`). Subflow internals are hidden; their mount node
712
+ * stays visible as a single clickable card.
713
+ * - `currentSubflowId === 'X'` → show only nodes where
714
+ * `subflowOf === 'X'` (the drilled-in subflow's internals).
715
+ *
716
+ * Edges follow the same filter — only edges where both endpoints
717
+ * are in the visible set survive. When nothing would be filtered
718
+ * out, returns the original graph reference (preserves upstream
719
+ * memoization).
720
+ */
721
+ declare function filterGraphForDrill(graph: TraceGraph, currentSubflowId: string | null): TraceGraph;
722
+ /** Entry in the breadcrumb path. `subflowId === null` is the root. */
723
+ interface BreadcrumbEntry {
724
+ subflowId: string | null;
725
+ label: string;
726
+ }
727
+ /**
728
+ * Build the breadcrumb path for the current drill level.
729
+ *
730
+ * Always starts with the root `{ subflowId: null, label: 'Chart' }`.
731
+ * When drilled into a subflow, appends one entry with the mount
732
+ * node's display label (falling back to the subflow id). Multi-level
733
+ * drill chains are NOT supported by the current chart UX (drill is
734
+ * always from root or sibling — clicking a deeper subflow's mount
735
+ * replaces the current scope), so the path has at most 2 entries.
736
+ */
737
+ declare function buildSubflowBreadcrumb(graph: TraceGraph, currentSubflowId: string | null): BreadcrumbEntry[];
738
+
675
739
  interface SubflowTreeEntry {
676
740
  /** Node name / identifier */
677
741
  name: string;
@@ -826,6 +890,13 @@ interface TracedFlowProps extends BaseComponentProps {
826
890
  * the default for that node type. Pass `{ stageNode: MyNode }` to
827
891
  * replace the default stage renderer entirely, or add new keys
828
892
  * for custom node components you push into the graph.
893
+ *
894
+ * v0.20+ — overlay state is injected into custom nodes' `data`
895
+ * fields too (`active`, `done`, `error`, `errorMessage`, `dimmed`,
896
+ * `stepNumbers`), so consumer renderers can style themselves with
897
+ * the same scrub-driven done/active/error semantics the bundled
898
+ * `<StageNode>` uses — without re-implementing the overlay slice
899
+ * derivation. Consumer `data` fields pass through untouched alongside.
829
900
  */
830
901
  nodeTypes?: NodeTypes;
831
902
  /**
@@ -834,6 +905,33 @@ interface TracedFlowProps extends BaseComponentProps {
834
905
  * components for edges you push into the graph with `type: 'myEdge'`.
835
906
  */
836
907
  edgeTypes?: EdgeTypes;
908
+ /**
909
+ * Extra chart node ids to mark `active` SIMULTANEOUSLY at the current scrub
910
+ * position, on top of the overlay's single active node. Lets a consumer light
911
+ * a whole parallel cohort at one cursor (e.g. the lens lighting every branch
912
+ * of a fork together). Works for BOTH stage and custom nodes. Defaults to
913
+ * none — single-active behaviour is unchanged.
914
+ */
915
+ coActiveStageIds?: ReadonlySet<string>;
916
+ /**
917
+ * Subflow ids to render as GROUP CONTAINER boxes — the subflow's member
918
+ * stages render NESTED inside the box (xyflow `parentId` + `extent`),
919
+ * instead of behind a click-to-zoom DRILL card. Per-subflow choice: any
920
+ * subflow id NOT listed keeps drilling. Default (unset): all drill —
921
+ * existing behavior, nothing changes.
922
+ */
923
+ groupedSubflows?: readonly string[];
924
+ /**
925
+ * Wrap the ENTIRE chart in ONE main-chart container box (the Lens model:
926
+ * the primitive you're viewing is always one box; subflows inside stay
927
+ * drill cards). Pass a config object to enable + label it; omit for no
928
+ * outer box. Composes AFTER drill-filtering, so when you drill into a
929
+ * subflow the box reframes to that subflow's contents.
930
+ */
931
+ mainChartBox?: {
932
+ label?: string;
933
+ kind?: string;
934
+ };
837
935
  /**
838
936
  * Children rendered INSIDE the `<ReactFlow>` element, after the
839
937
  * built-in `<Background>`. Use this slot to mount xyflow
@@ -842,7 +940,416 @@ interface TracedFlowProps extends BaseComponentProps {
842
940
  */
843
941
  children?: react.ReactNode;
844
942
  }
845
- declare function TracedFlow({ graph, overlay, scrubIndex, layout: layoutProp, colors: colorOverrides, onNodeClick, onSubflowChange, nodeTypes: userNodeTypes, edgeTypes: userEdgeTypes, children, className, style, }: TracedFlowProps): react_jsx_runtime.JSX.Element;
943
+ declare function TracedFlow({ graph, overlay, scrubIndex, layout: layoutProp, colors: colorOverrides, onNodeClick, onSubflowChange, groupedSubflows, mainChartBox, nodeTypes: userNodeTypes, edgeTypes: userEdgeTypes, coActiveStageIds, children, className, style, }: TracedFlowProps): react_jsx_runtime.JSX.Element;
944
+
945
+ interface GroupContainerNodeData {
946
+ label: string;
947
+ isGroupContainer?: boolean;
948
+ active?: boolean;
949
+ done?: boolean;
950
+ error?: boolean;
951
+ dimmed?: boolean;
952
+ description?: string;
953
+ icon?: string;
954
+ [key: string]: unknown;
955
+ }
956
+ declare function GroupContainerNode({ data }: NodeProps): react_jsx_runtime.JSX.Element;
957
+
958
+ interface SlotPillNodeData {
959
+ label: string;
960
+ /** Lit when the selector PICKED this slot this turn (overlay or consumer). */
961
+ active?: boolean;
962
+ selected?: boolean;
963
+ done?: boolean;
964
+ /** Faded when other slots ran but this one didn't (the "unlit" signal). */
965
+ dimmed?: boolean;
966
+ /** Semantic kind hint for the dot color (e.g. 'system-prompt'|'messages'|'tools'). */
967
+ slotKind?: string;
968
+ icon?: string;
969
+ [key: string]: unknown;
970
+ }
971
+ declare function SlotPillNode({ data }: NodeProps): react_jsx_runtime.JSX.Element;
972
+
973
+ declare function LoopBackEdge({ id, source, target, markerEnd, style }: EdgeProps): react_jsx_runtime.JSX.Element | null;
974
+
975
+ declare function SmartStepEdge({ id, source, target, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, markerEnd, style, }: EdgeProps): react_jsx_runtime.JSX.Element;
976
+
977
+ /**
978
+ * groupLayout — xyflow NATIVE container boxes for the trace chart.
979
+ *
980
+ * Two box mechanisms live here, plus the existing drill (elsewhere):
981
+ *
982
+ * - **Drill** (`subflowDrill.ts` + `useSubflowDrill`): a subflow shows as
983
+ * ONE mount card; clicking it zooms in. The DEFAULT for every subflow.
984
+ * - **Main-chart box** (`wrapInMainChartBox`): wrap the WHOLE chart in ONE
985
+ * container box. This is the Lens model — the primitive you're viewing
986
+ * (LLMCall / Agent) is always one box; every subflow inside it stays a
987
+ * drill card. A `nodeTypes` registry then styles each inner card
988
+ * (system-prompt / messages / tools / LLM). USE THIS for Lens.
989
+ * - **Per-subflow group** (`applyGroupLayout`): box individual subflows
990
+ * (mount → container, members nested inside). A more granular tool kept
991
+ * for consumers that want specific subflows inlined as boxes rather than
992
+ * drilled. NOT what the Lens main-chart model uses.
993
+ *
994
+ * All are pure `(graph, opts) => graph` (no React, no I/O) and compose with
995
+ * `<TracedFlow>` before nodes reach `<ReactFlow>`. explainable-ui stays
996
+ * policy-free: it offers the mechanisms; the consumer (Lens) picks.
997
+ *
998
+ * Pure: `(graph, opts) => graph`. No React, no I/O. Composed by `<TracedFlow>`
999
+ * before the nodes reach `<ReactFlow>`.
1000
+ *
1001
+ * What it does, given `groupedSubflowIds`:
1002
+ * 1. For each grouped subflow that is actually present (a mount node whose
1003
+ * `subflowId` is listed AND has ≥1 member where `subflowOf === id`):
1004
+ * - lay the OUTER graph out with `baseLayout` (members excluded; the
1005
+ * mount stays as the box anchor);
1006
+ * - lay the subflow's MEMBERS out with `baseLayout` in isolation, then
1007
+ * normalise them to the box's local coordinate space;
1008
+ * - size the container box to fit the members (+ header + padding);
1009
+ * - convert the mount node to `type: 'groupContainer'` with a `style`
1010
+ * width/height, and nest each member via `parentId` + `extent`.
1011
+ * 2. Subflows NOT listed are left untouched (they continue to drill).
1012
+ *
1013
+ * Node ORDER invariant (xyflow requirement): a parent node MUST appear
1014
+ * before its children in the array. We emit all outer nodes (containers
1015
+ * included) first, then all nested members — so every container precedes
1016
+ * its members.
1017
+ */
1018
+
1019
+ /** xyflow node type used for the container box. Consumers register a
1020
+ * renderer for this key (explainable-ui ships a default `GroupContainerNode`). */
1021
+ declare const GROUP_CONTAINER_NODE_TYPE = "groupContainer";
1022
+ interface GroupLayoutOptions {
1023
+ /** Subflow ids (the mount's `subflowId`) to render as group boxes. */
1024
+ readonly groupedSubflowIds: readonly string[];
1025
+ /** Layout for both the outer graph and each subflow's interior. */
1026
+ readonly baseLayout: TraceFlowLayout;
1027
+ /** Inner padding inside the container box, in px. Default 16. */
1028
+ readonly padding?: number;
1029
+ /** Header strip height (room for the box title), in px. Default 44. */
1030
+ readonly headerHeight?: number;
1031
+ /** Assumed node footprint for box sizing (the layout sets positions, not
1032
+ * sizes). Defaults match the bundled `StageNode` footprint. */
1033
+ readonly nodeWidth?: number;
1034
+ readonly nodeHeight?: number;
1035
+ }
1036
+ /**
1037
+ * Apply group-container nesting to a positioned-or-unpositioned graph.
1038
+ * Returns a NEW graph (input is not mutated). Edges pass through unchanged
1039
+ * — xyflow resolves them by node id regardless of nesting, so an edge that
1040
+ * pointed at a now-container mount still connects to the box, and
1041
+ * member↔member edges render inside it.
1042
+ */
1043
+ declare function applyGroupLayout(graph: TraceGraph, opts: GroupLayoutOptions): TraceGraph;
1044
+ /**
1045
+ * Convenience: wrap a base layout into a `TraceFlowLayout` that applies
1046
+ * group containers. Pass to `<TraceFlow layout={...}>` / `<TracedFlow>`.
1047
+ */
1048
+ declare function createGroupedLayout(opts: GroupLayoutOptions): TraceFlowLayout;
1049
+ /** Default id for the synthesised main-chart container node. */
1050
+ declare const MAIN_CHART_BOX_ID = "__main_chart__";
1051
+ interface MainChartBoxOptions {
1052
+ /** Layout applied to the chart's contents before wrapping. */
1053
+ readonly baseLayout: TraceFlowLayout;
1054
+ /** Container node id. Default `__main_chart__`. */
1055
+ readonly id?: string;
1056
+ /** Box title (rendered in the container header). */
1057
+ readonly label?: string;
1058
+ /** Optional taxonomy hint surfaced on `data` (e.g. 'LLMCall' | 'Agent'). */
1059
+ readonly kind?: string;
1060
+ readonly padding?: number;
1061
+ readonly headerHeight?: number;
1062
+ readonly nodeWidth?: number;
1063
+ readonly nodeHeight?: number;
1064
+ }
1065
+ /**
1066
+ * Wrap an entire graph in a single main-chart container box. Pure
1067
+ * `(graph, opts) => graph`; input not mutated. Empty graph → returned
1068
+ * unchanged (nothing to wrap).
1069
+ */
1070
+ declare function wrapInMainChartBox(graph: TraceGraph, opts: MainChartBoxOptions): TraceGraph;
1071
+ /**
1072
+ * Convenience: a `TraceFlowLayout` that wraps the whole chart in one
1073
+ * main-chart box. Pass to `<TraceFlow layout={...}>` / `<TracedFlow>`.
1074
+ */
1075
+ declare function createMainChartBoxLayout(opts: MainChartBoxOptions): TraceFlowLayout;
1076
+
1077
+ /**
1078
+ * dagreTraceLayout — professor-grade `TraceFlowLayout` backed by dagre.
1079
+ *
1080
+ * Replaces the hand-rolled BFS `defaultTraceFlowLayout` (which used FIXED
1081
+ * spacing constants — Y_STEP / X_SPREAD — and documented "first-wins"
1082
+ * convergence + no overlap detection). Dagre instead derives every
1083
+ * position from the STRUCTURE RELATIONS:
1084
+ *
1085
+ * - **next** (sequential): y-delta = rank depth (longest path), so a
1086
+ * convergence node lands at `max(incoming ranks) + 1` — not
1087
+ * "deepest-branch-so-far".
1088
+ * - **fork / selector** (N branches): x-delta = the measured SUBTREE
1089
+ * WIDTH of each branch (a wide branch pushes its siblings further; a
1090
+ * thin one barely shifts them) — scales cleanly for any N, no collisions.
1091
+ * - **merge** (join): centered under the average of its real parents.
1092
+ *
1093
+ * Compound nesting: dagre is given `parentId` as a compound-parent link,
1094
+ * so group-container children (from `applyGroupLayout` / `wrapInMainChartBox`)
1095
+ * stay inside their box. Coordinates are returned parent-RELATIVE (xyflow
1096
+ * convention), matching what the box transforms expect.
1097
+ *
1098
+ * Ported from agentfootprint-lens's proven `dagreLayout` (same dagre core),
1099
+ * re-shaped to the `TraceFlowLayout` contract: `(TraceGraph) => TraceGraph`.
1100
+ * Pure — same graph in, same positions out; no React, no I/O.
1101
+ */
1102
+
1103
+ /** Explicit node footprint (px). */
1104
+ interface NodeFootprint {
1105
+ readonly width: number;
1106
+ readonly height: number;
1107
+ }
1108
+ /**
1109
+ * Consumer-supplied per-node size resolver. Receives the WHOLE node (all
1110
+ * recorder semantics: `data.isSubflow`, `data.icon`, `data.subflowId`,
1111
+ * `id`, …) and returns a footprint, or `undefined` to leave the node alone
1112
+ * (→ falls back to `style.width/height`, then the default footprint).
1113
+ *
1114
+ * The library imposes NO sizing rules — the consumer decides per node by
1115
+ * whatever criteria THEY choose. E.g. make one specific slot a slim bar
1116
+ * while another stays a full card; make the LLM-call node large; etc.
1117
+ */
1118
+ type NodeSizeResolver = (node: TraceNode) => NodeFootprint | undefined;
1119
+ /** Consumer-supplied per-edge layout-weight resolver. Higher weight pulls
1120
+ * the two endpoints into a tighter, straighter column (dagre `weight`).
1121
+ * Return `undefined` for the default (1). */
1122
+ type EdgeWeightResolver = (edge: Edge<TraceEdgeData>) => number | undefined;
1123
+ /** Consumer-supplied per-edge minimum rank-span resolver. `>1` STRETCHES an
1124
+ * edge (pushes its target that many ranks down). Note dagre cannot make an
1125
+ * edge SHORTER than one rank — `minlen` only increases. Return `undefined`
1126
+ * for the default (1). */
1127
+ type EdgeMinLenResolver = (edge: Edge<TraceEdgeData>) => number | undefined;
1128
+ /**
1129
+ * Consumer-supplied left-to-right ORDER for a node's fork/decider children.
1130
+ * Receives the source node id + its child target ids (in spec/edge-insertion
1131
+ * order); returns the SAME ids reordered left-to-right (index 0 = leftmost).
1132
+ * Ids omitted from the result keep their original relative order after the
1133
+ * listed ones. Return the input unchanged (or `undefined` from the resolver)
1134
+ * to leave a node alone.
1135
+ *
1136
+ * Use to place a specific branch on a chosen side — e.g. the looping branch on
1137
+ * the right margin where the loop-back curve lives, so the "iterate" path reads
1138
+ * as one side of the fork. This is a pure VISUAL/LAYOUT decision (it changes
1139
+ * which side a branch draws on, never the chart's behavior), so it belongs in
1140
+ * the renderer, not the chart spec.
1141
+ *
1142
+ * Mechanism: dagre seeds its sibling order from edge-insertion order and keeps
1143
+ * it as the tie-break for equal-barycenter siblings. We insert each source's
1144
+ * edges in the resolved order, so for the common symmetric N-branch decider the
1145
+ * result is deterministic. (For graphs where one ordering strictly reduces edge
1146
+ * crossings, dagre's crossing-minimizer may still override — best-effort, as
1147
+ * documented for any dagre ordering hint.)
1148
+ */
1149
+ type SiblingOrderResolver = (sourceId: string, childIds: readonly string[]) => readonly string[];
1150
+ interface DagreTraceLayoutOptions {
1151
+ /** Layout direction. `'TB'` (top-to-bottom) is the default — matches the
1152
+ * "Seed → … → answer" reading order. */
1153
+ readonly direction?: "TB" | "BT" | "LR" | "RL";
1154
+ /** Vertical spacing between rank layers (px). Surfaced as a knob — the
1155
+ * rank-gap delta. Default 80. */
1156
+ readonly rankSep?: number;
1157
+ /** Horizontal spacing between siblings within a rank (px). The
1158
+ * sibling-gap delta dagre adds ON TOP of measured subtree widths.
1159
+ * Default 60. */
1160
+ readonly nodeSep?: number;
1161
+ /** Spacing between edges (px). Default 20. */
1162
+ readonly edgeSep?: number;
1163
+ /** Fallback node footprint when a node carries no explicit size. dagre
1164
+ * needs real dimensions or arrows collapse to a point. */
1165
+ readonly nodeWidth?: number;
1166
+ readonly nodeHeight?: number;
1167
+ /** Per-node size resolver — consumer decides each node's footprint. See
1168
+ * `NodeSizeResolver`. Resolution order: resolver → `node.style` → default. */
1169
+ readonly nodeSize?: NodeSizeResolver;
1170
+ /** Per-edge pull (dagre `weight`). See `EdgeWeightResolver`. */
1171
+ readonly edgeWeight?: EdgeWeightResolver;
1172
+ /** Per-edge stretch (dagre `minlen`). See `EdgeMinLenResolver`. */
1173
+ readonly edgeMinLen?: EdgeMinLenResolver;
1174
+ /** Per-node fork/decider child ordering. See `SiblingOrderResolver`. */
1175
+ readonly siblingOrder?: SiblingOrderResolver;
1176
+ }
1177
+ /**
1178
+ * Lay out a `TraceGraph` with dagre. Returns a NEW graph with each node's
1179
+ * `position` set (top-left, parent-relative for nested nodes). Edges pass
1180
+ * through unchanged — xyflow routes them once nodes are placed.
1181
+ *
1182
+ * Loop back-edges (`kind: 'loop'`) are EXCLUDED from the dagre graph: they
1183
+ * are visual annotations only (invariant I1) and would otherwise create
1184
+ * cycles that distort ranking.
1185
+ */
1186
+ declare function dagreTraceLayout(graph: TraceGraph, options?: DagreTraceLayoutOptions): TraceGraph;
1187
+ /**
1188
+ * Build a `TraceFlowLayout` from dagre options. Pass to
1189
+ * `<TraceFlow layout={...}>` / `<TracedFlow layout={...}>`, or use it as a
1190
+ * `baseLayout` for the group/main-box transforms.
1191
+ */
1192
+ declare function createDagreTraceLayout(options?: DagreTraceLayoutOptions): TraceFlowLayout;
1193
+
1194
+ /**
1195
+ * snapLinearSuccessors — pure post-dagre alignment pass for the chart SPINE.
1196
+ *
1197
+ * THE PROBLEM IT FIXES
1198
+ * --------------------
1199
+ * On a chart like `Context(selector) → [slot, slot] → messageAPI(merge) →
1200
+ * callLLM(linear)`, dagre's default balanced x-assignment (Brandes–Köpf
1201
+ * `balance()` = median of 4 extreme alignments) drifts a pure linear
1202
+ * successor a few px off the spine on an ASYMMETRIC graph (a wide callLLM
1203
+ * node + the fork above unbalance the alignment passes). Measured centers:
1204
+ * context 915, messageAPI 917, callLLM 921 — callLLM is ~6px off even though
1205
+ * it is a single-in / single-out continuation of messageAPI.
1206
+ *
1207
+ * THE FIX
1208
+ * -------
1209
+ * A pure `(graph) => graph` pass applied AFTER `dagreTraceLayout`. A node with
1210
+ * EXACTLY ONE forward (non-loop) predecessor, whose predecessor has EXACTLY
1211
+ * ONE forward (non-loop) successor, and which shares the same `parentId`
1212
+ * coordinate space, snaps its CENTER-x onto that predecessor's center-x. The
1213
+ * top-left `position.x` is recomputed from the new center using the node's OWN
1214
+ * width. `y` is never touched.
1215
+ *
1216
+ * WHAT IT NEVER MOVES (by construction of the predicate)
1217
+ * ------------------------------------------------------
1218
+ * - the ROOT — 0 predecessors → predicate (1) fails
1219
+ * - a MERGE (messageAPI) — >1 predecessor → predicate (1) fails
1220
+ * - FORK / DECISION children — predecessor out-deg>1 → predicate (2) fails
1221
+ * - cross-compound hops — differing parentId → predicate (3) fails
1222
+ * A fork/merge NODE itself is still snapped onto ITS upstream predecessor when
1223
+ * that predecessor is a pure linear hop — correct, it is a continuation of
1224
+ * whatever feeds it. Only its CHILDREN are protected.
1225
+ *
1226
+ * PROPERTIES
1227
+ * ----------
1228
+ * - PURE: never mutates the input graph; returns a new nodes array (edges by
1229
+ * reference, mirroring dagre's own pass-through).
1230
+ * - IDEMPOTENT: re-running finds centers already equal → zero-delta writes.
1231
+ * - CHAIN-PROPAGATING: nodes are processed in rank (y-asc) order, so a
1232
+ * snapped predecessor's corrected x flows down a `a→b→c` chain in one pass.
1233
+ * - GEOMETRY-EXACT: widths come from the SAME resolver→style→default order
1234
+ * dagre used (`sizeOf`), so reconstructed centers match dagre's placement.
1235
+ *
1236
+ * Compose it with dagre via `createSnappedDagreLayout`, or call it directly on
1237
+ * a `dagreTraceLayout(...)` result. Kept SEPARATE from `dagreTraceLayout` so
1238
+ * the base layout's output stays byte-identical for consumers that don't opt
1239
+ * in.
1240
+ */
1241
+
1242
+ /**
1243
+ * Options for the snap pass. These MUST mirror the size-relevant options
1244
+ * passed to the `dagreTraceLayout` run that produced the graph, so the pass
1245
+ * reconstructs each node's center from the identical width.
1246
+ */
1247
+ interface SnapLinearSuccessorsOptions {
1248
+ /** Per-node size resolver — same one passed to dagre. Resolution order:
1249
+ * resolver → `node.style` → default. */
1250
+ readonly nodeSize?: NodeSizeResolver;
1251
+ /** Fallback width when a node carries no resolver/style size. Must match
1252
+ * the dagre run's `nodeWidth`. Default 200. */
1253
+ readonly nodeWidth?: number;
1254
+ /** Fallback height. Must match the dagre run's `nodeHeight`. Default 80.
1255
+ * (Height is unused for x-snapping but kept so `sizeOf` resolves the same
1256
+ * footprint the resolver may key on.) */
1257
+ readonly nodeHeight?: number;
1258
+ }
1259
+ /**
1260
+ * Snap pure single-in/single-out linear successors onto their predecessor's
1261
+ * center-x. See the file header for the full contract. Pure + idempotent.
1262
+ */
1263
+ declare function snapLinearSuccessors(graph: TraceGraph, options?: SnapLinearSuccessorsOptions): TraceGraph;
1264
+ /**
1265
+ * Convenience: run a base `TraceFlowLayout` (typically `createDagreTraceLayout`)
1266
+ * then the snap pass, as one composed layout.
1267
+ *
1268
+ * @example
1269
+ * const layout = createSnappedDagreLayout(
1270
+ * createDagreTraceLayout({ nodeSize }),
1271
+ * { nodeSize }, // SAME size opts so widths match
1272
+ * );
1273
+ */
1274
+ declare function createSnappedDagreLayout(base: TraceFlowLayout, options?: SnapLinearSuccessorsOptions): TraceFlowLayout;
1275
+
1276
+ /**
1277
+ * traceGroupLayout — a group-based layout for footprint trace charts, designed
1278
+ * the way a layout engineer reasons about structured flowcharts: NOT by tuning
1279
+ * a generic Sugiyama/dagre pass, but by ranking nodes into bands and centering
1280
+ * each MERGE under the SPAN of its inputs, so the layout's correctness falls out
1281
+ * BY CONSTRUCTION.
1282
+ *
1283
+ * The mental model (groups):
1284
+ * - A SEQUENCE is a single-in/single-out chain → stacked vertically, each node
1285
+ * inheriting its predecessor's x (a straight spine; the downstream
1286
+ * `snapLinearSuccessors` pass keeps it pixel-exact).
1287
+ * - A FORK (a node with ≥2 branch children) → its children spread across the
1288
+ * next band; the children ARE the parallel group.
1289
+ * - A MERGE (a node with ≥2 incoming edges) → centered under the combined
1290
+ * visual SPAN of its inputs. This handles STAGGERED merges with zero
1291
+ * special-casing: longest-path ranking puts a merge one band below its
1292
+ * deepest input, and span-centering places it symmetrically under inputs
1293
+ * that may sit at different bands and have very different widths.
1294
+ *
1295
+ * For the agent merge-tree this yields: messageAPI centered under
1296
+ * {system-prompt, messages}; call-llm centered under the span of
1297
+ * {messageAPI, tools} (tools bypasses messageAPI's band — a staggered merge);
1298
+ * route + its branches symmetric below; the loop excluded from layout (drawn as
1299
+ * a right-margin back-edge by `LoopBackEdge`).
1300
+ *
1301
+ * Contract: pure `(TraceGraph) => TraceGraph`, sets `position` (top-left) on
1302
+ * every node, parent-relative for `parentId` nodes — same as `dagreTraceLayout`.
1303
+ * Reuses `sizeOf` / `NodeSizeResolver` / size defaults from `dagreTraceLayout`
1304
+ * (so the group-container "style-wins" exception + any consumer sizing behave
1305
+ * identically), and composes with the existing `createSnappedDagreLayout` +
1306
+ * `wrapInMainChartBox` passes — no duplication.
1307
+ */
1308
+
1309
+ interface TraceGroupLayoutOptions {
1310
+ /** Vertical gap between rank bands (px). Default 80. */
1311
+ readonly rankSep?: number;
1312
+ /** Horizontal gap between siblings within a band (px). Default 60. */
1313
+ readonly nodeSep?: number;
1314
+ /** Fallback node footprint when a node carries no explicit size. */
1315
+ readonly nodeWidth?: number;
1316
+ readonly nodeHeight?: number;
1317
+ /** Per-node size resolver (see `NodeSizeResolver`). Resolution order matches
1318
+ * `dagreTraceLayout.sizeOf`. */
1319
+ readonly nodeSize?: NodeSizeResolver;
1320
+ /** Left-to-right order for a fork's children within their band (see
1321
+ * `SiblingOrderResolver`). Default = edge-insertion order. */
1322
+ readonly siblingOrder?: SiblingOrderResolver;
1323
+ /** Bottom-up merge re-centering pass. Default true; off = pass-1 only (debug). */
1324
+ readonly enableMergeCentering?: boolean;
1325
+ /**
1326
+ * How a MERGE (join) node is horizontally placed relative to its inputs:
1327
+ * - `"span"` (default) — centered under the combined visual SPAN of its
1328
+ * inputs. Faithful "this node's data comes from those boxes", but when a
1329
+ * join's inputs are the splayed children of a fork, the join lands under
1330
+ * the splay (off the trunk) and the main path ZIG-ZAGS.
1331
+ * - `"fork-origin"` — aligned with the FORK the inputs re-converge from
1332
+ * (their lowest common ancestor). A join returns to its fork's axis, so
1333
+ * the trunk (root → joins → tail) renders as ONE STRAIGHT centered column
1334
+ * with the branches splaying symmetrically around it. Nested forks return
1335
+ * to their INNER fork. Use for "read it as a sequence with side-inputs"
1336
+ * charts.
1337
+ * Default `"span"` (unchanged behavior for existing consumers).
1338
+ */
1339
+ readonly mergeAlign?: "span" | "fork-origin";
1340
+ }
1341
+ /**
1342
+ * Lay out a `TraceGraph` by rank bands + span-centered merges. Returns a NEW
1343
+ * graph with each node's `position` set. Edges pass through by reference.
1344
+ */
1345
+ declare function traceGroupLayout(graph: TraceGraph, options?: TraceGroupLayoutOptions): TraceGraph;
1346
+ /**
1347
+ * Build a `TraceFlowLayout` from group-layout options. Pass to
1348
+ * `<TraceFlow layout={...}>` / `<TracedFlow layout={...}>`, or wrap with the
1349
+ * existing `createSnappedDagreLayout(base, opts)` (it is layout-engine-agnostic)
1350
+ * and/or `wrapInMainChartBox`.
1351
+ */
1352
+ declare function createTraceGroupLayout(options?: TraceGroupLayoutOptions): TraceFlowLayout;
846
1353
 
847
1354
  /**
848
1355
  * createNodeViewRecorder — per-stage summary translator.
@@ -1800,4 +2307,4 @@ interface RunSliderProps extends BaseComponentProps {
1800
2307
  }
1801
2308
  declare function RunSlider({ index, cursorRuntimeStageId, onCursorChange, renderLabel, className, style, }: RunSliderProps): react_jsx_runtime.JSX.Element;
1802
2309
 
1803
- export { type BreadcrumbEntry, type ChainSlotProps, type ChainTreeOptions, type CommitChain, type CommitChainLeaf, CommitChainView, type CommitChainViewProps, type CommitFlowIndex, type CommitFlowRecorderHandle, CommitInspector, type CommitInspectorProps, type CommitInspectorSlotProps, type CommitView, type CreateCommitFlowRecorderOptions, type CreateNodeViewRecorderOptions, type CreateTraceBundleOptions, type CreateTraceRuntimeOverlayOptions, type CreateTraceStructureRecorderOptions, type DataDependency, type ExecutionRecord, type MinimalCommitFlowRecorder, type MinimalFlowRecorder, type MinimalNodeViewRecorder, type MinimalStructureRecorder, NodeInspector, type NodeInspectorProps, type NodeInspectorSlotProps, type NodeView, type NodeViewIndex, type NodeViewRecorderHandle, RunSlider, type RunSliderProps, type RuntimeExecutionStep, type RuntimeOverlay, type RuntimeOverlaySlice, type RuntimeStageId, type SliderSlotProps, type StageId, StageNode, type StageNodeData, type StructureChain, type StructureChainLeaf, SubflowBreadcrumb, type SubflowBreadcrumbProps, type SubflowNavigation, SubflowTree, type SubflowTreeEntry, type SubflowTreeProps, TimeTravelDebugger, type TimeTravelDebuggerProps, type TraceBundle, type TraceEdge, type TraceEdgeData, TraceExplorerShell, type TraceExplorerShellProps, type TraceExplorerSlots, TraceFlow, type TraceFlowEdgeColors, type TraceFlowLayout, type TraceFlowProps, type TraceGraph, type TraceNode, type TraceNodeData, type TraceRuntimeOverlayHandle, type TraceStructureRecorderHandle, TracedFlow, type TracedFlowColors, type TracedFlowProps, type TranslatorHandleLike, type WalkOptions, asRuntimeStageId, asStageId, backtraceDataFlow, backtraceStructural, buildCommitChainTree, createCommitFlowRecorder, createNodeViewRecorder, createTraceBundle, createTraceRuntimeOverlay, createTraceStructureRecorder, defaultTraceFlowLayout, forwardtraceStructural, sliceOverlay, structureAsChainTree, useSubflowNavigation, useTranslator, walkBackward, walkForward };
2310
+ export { type BreadcrumbEntry$1 as BreadcrumbEntry, type ChainSlotProps, type ChainTreeOptions, type CommitChain, type CommitChainLeaf, CommitChainView, type CommitChainViewProps, type CommitFlowIndex, type CommitFlowRecorderHandle, CommitInspector, type CommitInspectorProps, type CommitInspectorSlotProps, type CommitView, type CreateCommitFlowRecorderOptions, type CreateNodeViewRecorderOptions, type CreateTraceBundleOptions, type CreateTraceRuntimeOverlayOptions, type CreateTraceStructureRecorderOptions, type DagreTraceLayoutOptions, type DataDependency, type EdgeMinLenResolver, type EdgeWeightResolver, type ExecutionRecord, GROUP_CONTAINER_NODE_TYPE, GroupContainerNode, type GroupContainerNodeData, type GroupLayoutOptions, LoopBackEdge, MAIN_CHART_BOX_ID, type MainChartBoxOptions, type MinimalCommitFlowRecorder, type MinimalFlowRecorder, type MinimalNodeViewRecorder, type MinimalStructureRecorder, type NodeFootprint, NodeInspector, type NodeInspectorProps, type NodeInspectorSlotProps, type NodeSizeResolver, type NodeView, type NodeViewIndex, type NodeViewRecorderHandle, RunSlider, type RunSliderProps, type RuntimeExecutionStep, type RuntimeOverlay, type RuntimeOverlaySlice, type RuntimeStageId, type SiblingOrderResolver, type SliderSlotProps, SlotPillNode, type SlotPillNodeData, SmartStepEdge, type SnapLinearSuccessorsOptions, type StageId, StageNode, type StageNodeData, type StructureChain, type StructureChainLeaf, SubflowBreadcrumb, type SubflowBreadcrumbProps, type SubflowNavigation, SubflowTree, type SubflowTreeEntry, type SubflowTreeProps, TimeTravelDebugger, type TimeTravelDebuggerProps, type TraceBundle, type TraceEdge, type TraceEdgeData, TraceExplorerShell, type TraceExplorerShellProps, type TraceExplorerSlots, TraceFlow, type TraceFlowEdgeColors, type TraceFlowLayout, type TraceFlowProps, type TraceGraph, type TraceGroupLayoutOptions, type TraceNode, type TraceNodeData, type TraceRuntimeOverlayHandle, type TraceStructureRecorderHandle, TracedFlow, type TracedFlowColors, type TracedFlowProps, type TranslatorHandleLike, type WalkOptions, applyGroupLayout, asRuntimeStageId, asStageId, backtraceDataFlow, backtraceStructural, buildCommitChainTree, buildSubflowBreadcrumb, createCommitFlowRecorder, createDagreTraceLayout, createGroupedLayout, createMainChartBoxLayout, createNodeViewRecorder, createSnappedDagreLayout, createTraceBundle, createTraceGroupLayout, createTraceRuntimeOverlay, createTraceStructureRecorder, dagreTraceLayout, defaultTraceFlowLayout, filterGraphForDrill, forwardtraceStructural, sliceOverlay, snapLinearSuccessors, structureAsChainTree, traceGroupLayout, useSubflowNavigation, useTranslator, walkBackward, walkForward, wrapInMainChartBox };