agentfootprint-lens 0.72.1 → 0.74.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.
- package/README.md +39 -8
- package/dist/{Lens-DaElQv4z.d.cts → Lens-dAaGjB6z.d.ts} +13 -6
- package/dist/{Lens-lTf_UA0N.d.ts → Lens-v6JPZWcg.d.cts} +13 -6
- package/dist/{chunk-EMAZMZKI.js → chunk-6GTISZYA.js} +4 -4
- package/dist/{chunk-PFGNLVLG.js → chunk-6II3EUOJ.js} +351 -60
- package/dist/chunk-6II3EUOJ.js.map +1 -0
- package/dist/{chunk-6YXIST3E.js → chunk-D22Q5SDX.js} +4 -11
- package/dist/chunk-D22Q5SDX.js.map +1 -0
- package/dist/{chunk-CXTWT2L6.js → chunk-DZ6B7LD6.js} +5 -5
- package/dist/{chunk-R6FVUU2I.js → chunk-ECAQG3TG.js} +2 -2
- package/dist/{chunk-DBEVLCHX.js → chunk-FTQQVU7X.js} +696 -365
- package/dist/chunk-FTQQVU7X.js.map +1 -0
- package/dist/{chunk-ZYVDW34A.js → chunk-GCGVODXR.js} +11 -11
- package/dist/chunk-GCGVODXR.js.map +1 -0
- package/dist/{chunk-WIQVUP5C.js → chunk-KCAQVLTA.js} +132 -132
- package/dist/chunk-KCAQVLTA.js.map +1 -0
- package/dist/{chunk-XEAZRBOH.js → chunk-NSTKBU5V.js} +6 -20
- package/dist/{chunk-XEAZRBOH.js.map → chunk-NSTKBU5V.js.map} +1 -1
- package/dist/{chunk-IBSMUKPU.js → chunk-PCOHPEVI.js} +10 -10
- package/dist/chunk-PCOHPEVI.js.map +1 -0
- package/dist/{chunk-JSGDVUYF.js → chunk-RJAQOXMH.js} +55 -39
- package/dist/chunk-RJAQOXMH.js.map +1 -0
- package/dist/{chunk-SGRWGP6H.js → chunk-WMELY5CJ.js} +4 -3
- package/dist/chunk-WMELY5CJ.js.map +1 -0
- package/dist/context.cjs +21 -40
- package/dist/context.cjs.map +1 -1
- package/dist/context.d.cts +4 -4
- package/dist/context.d.ts +4 -4
- package/dist/context.js +6 -6
- package/dist/{contextAt-Ng-DLxF3.d.cts → contextAt-BcT4UYlI.d.cts} +1 -1
- package/dist/{contextAt-Dj4FsdFX.d.ts → contextAt-DxDAvgZ5.d.ts} +1 -1
- package/dist/core.cjs +679 -389
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +93 -11
- package/dist/core.d.ts +93 -11
- package/dist/core.js +14 -6
- package/dist/{index-BT5Tsjz1.d.cts → index-9TfT51FK.d.cts} +3 -3
- package/dist/{index-C8c9mOYy.d.ts → index-TilViQvd.d.ts} +3 -3
- package/dist/index.cjs +3034 -2382
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -18
- package/dist/index.d.ts +30 -18
- package/dist/index.js +64 -25
- package/dist/index.js.map +1 -1
- package/dist/{lensCursorPort-Djm3W7K1.d.ts → lensCursorPort-nD3C6iQs.d.cts} +55 -2
- package/dist/{lensCursorPort-Djm3W7K1.d.cts → lensCursorPort-nD3C6iQs.d.ts} +55 -2
- package/dist/{selectSkillFrameContext-xPr-gzFp.d.cts → selectSkillFrameContext-BZd5omLC.d.cts} +1 -1
- package/dist/{selectSkillFrameContext-Bs8JINIi.d.ts → selectSkillFrameContext-BbMpx_lQ.d.ts} +1 -1
- package/dist/skillgraph.cjs +2 -1
- package/dist/skillgraph.cjs.map +1 -1
- package/dist/skillgraph.d.cts +6 -6
- package/dist/skillgraph.d.ts +6 -6
- package/dist/skillgraph.js +5 -5
- package/dist/{stepForRuntimeStageId-CPb4EI74.d.cts → stepForRuntimeStageId-BLB9h1lR.d.cts} +1 -1
- package/dist/{stepForRuntimeStageId-zJ6H0gU1.d.ts → stepForRuntimeStageId-CKQuUOyK.d.ts} +1 -1
- package/dist/{tagAxis-ClhV50a2.d.ts → tagAxis-COX6o7DJ.d.cts} +9 -16
- package/dist/{tagAxis-CijjA_6P.d.cts → tagAxis-Cgk6vlcY.d.ts} +9 -16
- package/dist/{useSharedCursor-lgpWw94t.d.cts → useSharedCursor-BdzFNO_C.d.ts} +28 -7
- package/dist/{useSharedCursor-CdXdsXvD.d.ts → useSharedCursor-DJTQSH0y.d.cts} +28 -7
- package/dist/why.cjs +1237 -694
- package/dist/why.cjs.map +1 -1
- package/dist/why.d.cts +7 -7
- package/dist/why.d.ts +7 -7
- package/dist/why.js +8 -8
- package/package.json +5 -5
- package/dist/chunk-6YXIST3E.js.map +0 -1
- package/dist/chunk-DBEVLCHX.js.map +0 -1
- package/dist/chunk-IBSMUKPU.js.map +0 -1
- package/dist/chunk-JSGDVUYF.js.map +0 -1
- package/dist/chunk-PFGNLVLG.js.map +0 -1
- package/dist/chunk-SGRWGP6H.js.map +0 -1
- package/dist/chunk-WIQVUP5C.js.map +0 -1
- package/dist/chunk-ZYVDW34A.js.map +0 -1
- /package/dist/{chunk-EMAZMZKI.js.map → chunk-6GTISZYA.js.map} +0 -0
- /package/dist/{chunk-CXTWT2L6.js.map → chunk-DZ6B7LD6.js.map} +0 -0
- /package/dist/{chunk-R6FVUU2I.js.map → chunk-ECAQG3TG.js.map} +0 -0
package/README.md
CHANGED
|
@@ -30,6 +30,11 @@ agentfootprint = **2 primitives (LLM, Agent) + 3 compositions (Sequence, Paralle
|
|
|
30
30
|
npm install agentfootprint agentfootprint-lens
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
Lens requires `footprint-explainable-ui >=0.34.0 <1.0.0`. Earlier versions
|
|
34
|
+
lack renderer APIs used by Lens even if an older peer range accepted them.
|
|
35
|
+
The minimum and current tested renderer versions are checked with packed
|
|
36
|
+
installs on both React 18 and React 19; an import failure fails the check.
|
|
37
|
+
|
|
33
38
|
```tsx
|
|
34
39
|
import { useMemo } from 'react';
|
|
35
40
|
import { Agent } from 'agentfootprint';
|
|
@@ -174,6 +179,26 @@ One mental model. The runner does the work; Lens watches.
|
|
|
174
179
|
|
|
175
180
|
---
|
|
176
181
|
|
|
182
|
+
## Trust boundaries and source prefixes
|
|
183
|
+
|
|
184
|
+
`TrustBoundaryView` reads the optional version-1 `TrustBoundaries` recorder bundle. It shows observed permission, policy, middleware, and credential facts with retained/dropped counts. It does not infer missing decisions from a finished execution tree or certify security or regulatory compliance.
|
|
185
|
+
|
|
186
|
+
Share the same cursor with execution replay to inspect a fact's actual source location:
|
|
187
|
+
|
|
188
|
+
```tsx
|
|
189
|
+
const shared = useSharedCursor(recorder, recording.snapshot);
|
|
190
|
+
return <>
|
|
191
|
+
<TrustBoundaryView snapshot={recording.snapshot} shared={shared} />
|
|
192
|
+
<Lens recorder={recorder} shared={shared} />
|
|
193
|
+
</>;
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Import these components and the hook from `agentfootprint-lens`. A fact's `sourcePosition` identifies its exact log, complete runtime subflow path, and inclusive committed prefix (`-1` means the base before any commit). Source navigation does not substitute an enclosing stage or the final state. Missing positions remain **Unplaced**; absent, incompatible, or damaged logs remain unavailable.
|
|
197
|
+
|
|
198
|
+
Metadata-only exporters should mark their snapshot or selected child context with `stateValuesWithheld: true`. Lens then distinguishes a known source location from unavailable state values. For full-content snapshots, prefix folding requires the recorded base and intact prefix; a missing base never falls back to `globalContext`. **Show final execution step** explicitly leaves source-prefix mode. Older recorder bundles and manually supplied legacy cursors remain readable without source navigation.
|
|
199
|
+
|
|
200
|
+
Headless consumers can import `readTrustBoundaries`, `readSourcePosition`, and `resolveSourcePrefix` from `agentfootprint-lens/core`. See [the reader contract](src/core/trustBoundaries/README.md) and [cursor ownership](src/core/cursor/README.md) for limits and failure codes.
|
|
201
|
+
|
|
177
202
|
## Watching a run that already finished
|
|
178
203
|
|
|
179
204
|
A recording is a run you kept. It is exactly THREE things — miss one and one
|
|
@@ -852,6 +877,15 @@ its own last stop; a new recorder drops the held address. Headless pieces on
|
|
|
852
877
|
`/core`: `stepForAddress`, `cursorForAddress`, `addressOf`. Design and the
|
|
853
878
|
facts the fixtures taught: docs/design/2026-09-shared-cursor.md.
|
|
854
879
|
|
|
880
|
+
If the held address has no position on a child or filtered axis, Lens says so
|
|
881
|
+
instead of displaying that axis's first stage. It does not fold stage state or
|
|
882
|
+
render a final answer for that missing position. Return to the parent view to
|
|
883
|
+
recover the same address, or explicitly choose a recorded stop to move it.
|
|
884
|
+
With a shared cursor, **Latest** is a jump to the current last stop, not a
|
|
885
|
+
subscription to future stops. Before any explicit selection, the shared cursor
|
|
886
|
+
continues to derive the growing end. The older numeric `step` contract keeps
|
|
887
|
+
its existing clamp and live-follow behavior.
|
|
888
|
+
|
|
855
889
|
## Time travel through one port
|
|
856
890
|
|
|
857
891
|
**Nothing to do — this is how the cursor already moves.** Read it if you are
|
|
@@ -1512,14 +1546,9 @@ legend.source; // 'structure' | 'log'
|
|
|
1512
1546
|
legend.entries.map((e) => [e.label, e.hits]); // [['Iteration', 2], ['LLM turn', 2], ['audit', 0], …]
|
|
1513
1547
|
|
|
1514
1548
|
const axis = tagAxisPositions(snapshot, ['milestone:llm-turn'], scrubAxisFor(recorder, 'group'));
|
|
1515
|
-
axis
|
|
1549
|
+
axis.map((p) => p.label); // ['Run · start', 'LLM turn 1', 'LLM turn 2', 'Run · end']
|
|
1516
1550
|
```
|
|
1517
1551
|
|
|
1518
|
-
**Older peers.** `tagStops` (footprintjs 9.21) and `milestoneFromTags`
|
|
1519
|
-
(agentfootprint 9.90) are read off their module namespaces at call time: on a
|
|
1520
|
-
peer without them the legend prints raw names, the strip says *tag axis
|
|
1521
|
-
unavailable*, and nothing else changes. The peer ranges are untouched.
|
|
1522
|
-
|
|
1523
1552
|
---
|
|
1524
1553
|
|
|
1525
1554
|
## Rendering your own detail pane
|
|
@@ -1895,12 +1924,14 @@ store's availability is a label. Headless: `bookmarkKey` · `toSidecar` ·
|
|
|
1895
1924
|
|
|
1896
1925
|
### `<TagPicker>` — the declared-tag legend and picker
|
|
1897
1926
|
|
|
1898
|
-
`<TagPicker legend picked onPick available
|
|
1927
|
+
`<TagPicker legend picked onPick available?>`. The engineer view mounts it above
|
|
1899
1928
|
the chart on `granularity="group"` at the root level; `legend` is
|
|
1900
1929
|
`tagLegend(structure, snapshot)` (`source: 'structure' | 'log'`), a pick is a
|
|
1901
1930
|
list of tag names the lens hands to `tagAxisPositions(snapshot, picked, base)`
|
|
1902
1931
|
(footprintjs 9.21's `tagStops`). Picking never moves the cursor; it changes the
|
|
1903
|
-
list the one cursor is a step into.
|
|
1932
|
+
list the one cursor is a step into. `available` defaults to `true`; `false` holds
|
|
1933
|
+
the strip read-only — the legend still shows, every chip is disabled, and the
|
|
1934
|
+
strip says so (`TAG_PICKER_LABELS.tagAxisUnavailable`).
|
|
1904
1935
|
|
|
1905
1936
|
### `<BugReportButton>` — report a bug with the run attached, consent first
|
|
1906
1937
|
|
|
@@ -3,11 +3,11 @@ import { ToolChoiceCall, ToolChoiceSummary, AnswerAccount, AnswerAccountShownLea
|
|
|
3
3
|
import * as agentfootprint from 'agentfootprint';
|
|
4
4
|
import { CommentaryTemplates } from 'agentfootprint';
|
|
5
5
|
import React__default, { Ref } from 'react';
|
|
6
|
-
import { h as NavigationResult, C as CursorPosition,
|
|
7
|
-
import { C as ChartGroupHighlight, H as Humanizer, b as BookmarkStore } from './tagAxis-
|
|
6
|
+
import { h as NavigationResult, C as CursorPosition, n as LensRecorder, a as LensCursor } from './lensCursorPort-nD3C6iQs.js';
|
|
7
|
+
import { C as ChartGroupHighlight, H as Humanizer, b as BookmarkStore } from './tagAxis-Cgk6vlcY.js';
|
|
8
8
|
import { NodeTypes } from '@xyflow/react';
|
|
9
9
|
import { TraceGraph, TraceFlowLayout, RuntimeOverlay } from 'footprint-explainable-ui/flowchart';
|
|
10
|
-
import { L as LensCursorAt, S as SharedCursor } from './useSharedCursor-
|
|
10
|
+
import { L as LensCursorAt, S as SharedCursor } from './useSharedCursor-BdzFNO_C.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* LensFlow — the canonical Lens chart renderer.
|
|
@@ -504,9 +504,10 @@ interface LensProps {
|
|
|
504
504
|
* axis, a tag-filtered one, a drilled one) from the shared ADDRESS, and
|
|
505
505
|
* every mover here — the strip, ◀ ▶, a chart click, `navigatorRef` — moves
|
|
506
506
|
* that address. `step` is ignored while `shared` is given; `onStepChange`
|
|
507
|
-
* still fires
|
|
508
|
-
*
|
|
509
|
-
*
|
|
507
|
+
* still fires for explicit moves. An address this axis cannot hold shows
|
|
508
|
+
* no position; it is never corrected to a neighbouring stop. Axis changes
|
|
509
|
+
* and drills preserve the address. The transport's Latest button jumps to
|
|
510
|
+
* the current end; that held address stays fixed if the recording grows.
|
|
510
511
|
*
|
|
511
512
|
* ```tsx
|
|
512
513
|
* const shared = useSharedCursor(recorder);
|
|
@@ -680,6 +681,12 @@ interface LensDetailSlotProps {
|
|
|
680
681
|
*/
|
|
681
682
|
readonly cursor?: LensCursor;
|
|
682
683
|
}
|
|
684
|
+
/**
|
|
685
|
+
* Source prefixes are not stage stops. Keep them outside the legacy stage
|
|
686
|
+
* shell so its clamp, final-answer slots and state folds cannot show a future
|
|
687
|
+
* state while an exact source prefix (including -1) is held by the host.
|
|
688
|
+
* Entering this mode resets local visual drill state, not the shared target.
|
|
689
|
+
*/
|
|
683
690
|
declare const Lens: React__default.FC<LensProps>;
|
|
684
691
|
|
|
685
692
|
export { type LensProps as L, type ToolChoiceSource as T, type UseLensNavigatorArgs as U, Lens as a, type LensDetailSlotProps as b, type LensSlots as c, type LensTheme as d, type LensView as e, LensFlow as f, type LensFlowProps as g, type LensNavigator as h, type UseToolChoiceResult as i, useToolChoice as j, useLensNavigator as u };
|
|
@@ -3,11 +3,11 @@ import { ToolChoiceCall, ToolChoiceSummary, AnswerAccount, AnswerAccountShownLea
|
|
|
3
3
|
import * as agentfootprint from 'agentfootprint';
|
|
4
4
|
import { CommentaryTemplates } from 'agentfootprint';
|
|
5
5
|
import React__default, { Ref } from 'react';
|
|
6
|
-
import { h as NavigationResult, C as CursorPosition,
|
|
7
|
-
import { C as ChartGroupHighlight, H as Humanizer, b as BookmarkStore } from './tagAxis-
|
|
6
|
+
import { h as NavigationResult, C as CursorPosition, n as LensRecorder, a as LensCursor } from './lensCursorPort-nD3C6iQs.cjs';
|
|
7
|
+
import { C as ChartGroupHighlight, H as Humanizer, b as BookmarkStore } from './tagAxis-COX6o7DJ.cjs';
|
|
8
8
|
import { NodeTypes } from '@xyflow/react';
|
|
9
9
|
import { TraceGraph, TraceFlowLayout, RuntimeOverlay } from 'footprint-explainable-ui/flowchart';
|
|
10
|
-
import { L as LensCursorAt, S as SharedCursor } from './useSharedCursor-
|
|
10
|
+
import { L as LensCursorAt, S as SharedCursor } from './useSharedCursor-DJTQSH0y.cjs';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* LensFlow — the canonical Lens chart renderer.
|
|
@@ -504,9 +504,10 @@ interface LensProps {
|
|
|
504
504
|
* axis, a tag-filtered one, a drilled one) from the shared ADDRESS, and
|
|
505
505
|
* every mover here — the strip, ◀ ▶, a chart click, `navigatorRef` — moves
|
|
506
506
|
* that address. `step` is ignored while `shared` is given; `onStepChange`
|
|
507
|
-
* still fires
|
|
508
|
-
*
|
|
509
|
-
*
|
|
507
|
+
* still fires for explicit moves. An address this axis cannot hold shows
|
|
508
|
+
* no position; it is never corrected to a neighbouring stop. Axis changes
|
|
509
|
+
* and drills preserve the address. The transport's Latest button jumps to
|
|
510
|
+
* the current end; that held address stays fixed if the recording grows.
|
|
510
511
|
*
|
|
511
512
|
* ```tsx
|
|
512
513
|
* const shared = useSharedCursor(recorder);
|
|
@@ -680,6 +681,12 @@ interface LensDetailSlotProps {
|
|
|
680
681
|
*/
|
|
681
682
|
readonly cursor?: LensCursor;
|
|
682
683
|
}
|
|
684
|
+
/**
|
|
685
|
+
* Source prefixes are not stage stops. Keep them outside the legacy stage
|
|
686
|
+
* shell so its clamp, final-answer slots and state folds cannot show a future
|
|
687
|
+
* state while an exact source prefix (including -1) is held by the host.
|
|
688
|
+
* Entering this mode resets local visual drill state, not the shared target.
|
|
689
|
+
*/
|
|
683
690
|
declare const Lens: React__default.FC<LensProps>;
|
|
684
691
|
|
|
685
692
|
export { type LensProps as L, type ToolChoiceSource as T, type UseLensNavigatorArgs as U, Lens as a, type LensDetailSlotProps as b, type LensSlots as c, type LensTheme as d, type LensView as e, LensFlow as f, type LensFlowProps as g, type LensNavigator as h, type UseToolChoiceResult as i, useToolChoice as j, useLensNavigator as u };
|
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
snapshotLogKey,
|
|
9
9
|
snapshotOfRunner,
|
|
10
10
|
verify
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-NSTKBU5V.js";
|
|
12
12
|
import {
|
|
13
13
|
T
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-WMELY5CJ.js";
|
|
15
15
|
import {
|
|
16
16
|
foldCursorOf
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-KCAQVLTA.js";
|
|
18
18
|
|
|
19
19
|
// src/react/components/ServedBadge.tsx
|
|
20
20
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1584,4 +1584,4 @@ export {
|
|
|
1584
1584
|
collapsedTicketOf,
|
|
1585
1585
|
ServedTab
|
|
1586
1586
|
};
|
|
1587
|
-
//# sourceMappingURL=chunk-
|
|
1587
|
+
//# sourceMappingURL=chunk-6GTISZYA.js.map
|