Releases: footprintjs/explainable-ui
Releases · footprintjs/explainable-ui
v0.18.1
Fixed
FootprintThemewrapper div usesdisplay: contentsso its
box is invisible to the host's layout. Previously the wrapper
participated in flex/grid layout as a block-level div that auto-
sized to its content — which silently collapsed descendants that
relied onflex: 1/height: 100%to fill the theme root. The
bug manifested as "tabpanel / card / scroller height = 0" inside
themed trees; host apps had to add workaround CSS like
.tab-content > .fp-theme-root { flex: 1; display: flex; }to
cope. Withdisplay: contents, CSS custom property inheritance
still flows (vars cascade via the DOM, not the render tree) while
the layout box is removed. Consumers no longer need workaround
CSS. One caveat:display: contentselements are removed from
the accessibility tree in Safari <15.4 — the wrapper is purely
presentational so this is acceptable.
v0.18.0
Added
<NarrativePanel>"Copy for LLM" now exports the full debug
bundle when optionalruntimeSnapshot+specprops are provided.
The copied Markdown now includes: rendered narrative, Final Shared
State, Commit Log (per-stage writes keyed byruntimeStageId),
Recorder Snapshots (metrics, tokens, instructions, emit events),
Subflow Results, and the flowchart Spec (topology).
Previously only the rendered text was copied, which told the story
but not the payloads. Paste into Claude and ask "why did iter N
fail?" — the model now has everything it needs.ExplainableShellforwardsruntimeSnapshot+specthrough to
the Narrative tab's RightPanel → NarrativePanel so the enhanced
copy bundle works in the standard zero-boilerplate setup.- Safe JSON serialization helper (
safeJsonStringify) in NarrativePanel
handles circular references + caps output at 500KB so clipboard
pastes stay responsive on very long runs.
Fixed
- GanttTimeline showed 0ms durations for every stage.
extractStageTimingsinadapters/fromRuntimeSnapshot.tsstill
read the legacyMetricRecorder.data.stages[stageName].totalDuration
shape, but MetricRecorder now emits
data.steps[runtimeStageId] = {stageName, duration, ...}
per-execution. Adapter now iteratesdata.steps, extracts
{stageName, duration}per entry, and sums durations by
stageNameso looped stages (e.g. CallLLM × N iters) show
cumulative wall time. Legacydata.stagesshape still accepted
for back-compat with older snapshots.
v0.17.0
Added
<TraceViewer>— drop-in component that renders anagentfootprint.exportTrace()JSON as a fully interactive Behind-the-Scenes view. Accepts a parsedAgentfootprintTraceobject or a raw JSON string; validatesschemaVersion === 1; surfaces parse / validation errors via an optionalonErrorcallback. Internally a thin shell overtoVisualizationSnapshots+<ExplainableShell />— same composition consumers would write by hand. Drop into any React app to give users a "paste a trace, debug visually" workflow without re-executing the agent.import { TraceViewer } from 'footprint-explainable-ui'; <TraceViewer trace={pastedJsonString} fallback={<div>Paste a trace</div>} />
AgentfootprintTrace+TraceParseErrortypes exported from the main entry. Pin consumers toschemaVersion: 1; future shape changes ship as new schema versions with multi-version dispatch.- 11 new tests (5 patterns) covering parse + validation surface, JSDOM
ResizeObserverpolyfill added totest/setup.ts.
v0.16.0
Added
- RightPanel with two modes — Insights and What Happened. Memoized toggle between high-level analytics (recorder views, quality scores) and event-level detail (narrative entries, raw log). Replaces the single-view right column with a mode-switched layout in
ExplainableShell. - Data Trace discoverability — the panel now teaches its own capability. Empty state explains "Backward causal chain — trace any value back to the stage that created it." When frames exist, the header gains an italic subtitle "Every value here was derived from the stages below." — surfacing the differentiator at the moment of first encounter.
v0.15.0
Added
- Three-column layout: Flowchart | Inspector (State + Data Trace) | Insights (Story, Performance, Quality, Cost)
- DataTracePanel — backward causal chain visualization (like Chrome DevTools Call Stack)
- InspectorPanel — State + Data Trace tabs for selected node
- InsightPanel — tabs mode (one at a time) or 2x2 grid mode (all visible when flowchart collapsed)
- CompactTimeline — collapsed dot line, expands to Gantt chart
- Responsive: wide (3-col), medium (2-col, no flowchart), narrow (mobile stacked)
- Insight naming: Narrative→Story, Memory→State, Metrics→Performance
v0.12.1
Added
- 90 unit tests — Comprehensive test coverage for narrative sync (position-based), heading numbering (Stage/Selector/Subflow N.M), entry filtering, and loop edge creation in specToReactFlow.
Fixed
- Stage 4 after Subflow 3.x — Root counter increments for subflow step so subsequent stages number correctly.
v0.12.0
Added
- Narrative headings — Type-specific headings:
Stage N,Selector N,Decider N,Subflow N.M. Stage numbering accounts for selectors and subflows (Stage 1 → Selector 2 → Subflow 3.1/3.2 → Stage 4). - Position-based narrative sync — Replaces set-based stageId matching with sequential position mapping. Correctly handles loops (same stageId at different iterations) and parallel subflows.
- Subflow filtering — Main narrative hides subflow-internal entries (stages, steps inside subflows). Shows Entering markers, hides Exiting markers. Internal stages appear in drill-down view only.
Fixed
- Flowchart renders for all specs — No longer requires subflows. SubflowTree sidebar only shows when spec has subflow nodes.
- Loop back-edge rendering — Fixed edge target to use stageId instead of name. Dotted loop arrow now appears in the flowchart.
- Stage 4 numbering after subflows — Root counter increments for subflow step so subsequent stages number correctly.
v0.11.5
Changed
- Narrative hides subflow internals — StoryNarrative filters out subflow-internal entries (stages, steps, conditions inside subflows) and Entering/Exiting markers. The main narrative shows only root-level entries + [Selected]/[Parallel] markers. Internal stages appear in the drill-down view. Future count accurately reflects visible entries only.
v0.11.4
Added
- Subflow group headers in narrative — StoryNarrative shows subflow ID headers when
subflowIdchanges between entries. Subflow entries are grouped consecutively and indented for readability in parallel execution flows.
v0.11.3
Fixed
- Narrative sync with stageId + subflowId — StoryNarrative now matches entries using
stageId,subflowId, andstageNameagainst the revealed snapshot set. Entries without identifiers belong to the previous revealed section. Works correctly with selectors, forks, parallel branches, and subflows. - NarrativeEntry type includes
stageIdandsubflowId— Matches footprintjs v0.17.2CombinedNarrativeEntryshape.