agentfootprint 9.88.0 → 9.89.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/CHANGELOG.md CHANGED
@@ -7,6 +7,81 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [9.89.0] - 2026-09-09
11
+
12
+ **The third digest half, and one owner of the axis.** Two follow-ups to 9.88.0,
13
+ both additive: a 9.88.0 consumer compiles and behaves identically.
14
+
15
+ ### Added
16
+
17
+ - **`toolDigestInput(tool)` — a consumer can verify the schema rows of a
18
+ receipt.** 9.88.0 exported `receiptHash` and `messageDigestInput`, so a reader
19
+ holding `servedAt(k)` and `receiptAt(k)` could prove the system text, every
20
+ piece and every message against the receipt from outside this package — and
21
+ could prove everything the model was served EXCEPT the tools' schemas. The
22
+ receipt hashed each schema through a serializer the root barrel did not
23
+ export, so a consumer's schema rows could never read Verified; its only
24
+ options were to copy the serializer (a second owner of the rule, which drifts
25
+ the day the digest gains a field — the message digest gained two in 9.88.0)
26
+ or to leave the rows unchecked. The law now holds for the third row on the
27
+ object a consumer already holds:
28
+
29
+ ```ts
30
+ receiptHash(runId, toolDigestInput(servedAt(k).tools.schemas[i])) === receiptAt(k).tools.schemaHashes[name]
31
+ ```
32
+
33
+ It takes an `LLMToolSchema` — the tool as handed to the provider port, which
34
+ is what `servedAt(k).tools.schemas` reads back — never a `Tool` definition,
35
+ which carries `execute` and other fields the model never saw. It is the ONLY
36
+ spelling of the schema rule: `buildReceipt` calls it too. A schema JSON cannot
37
+ express (a `BigInt`; a cycle) digests to the `UNSERIALIZABLE` mark on both
38
+ sides and never throws — the `BigInt` is the worked example, because a
39
+ cyclic schema is refused by footprintjs's `deepEqual` in the subflow
40
+ outputMapper before any receipt is minted under `dynamic-grouped` (a
41
+ substrate limit, not a hole in the rule). `stableJson` stays off the root
42
+ barrel on purpose —
43
+ `hash(stableJson(tool))` would be the rule written a second time. Pinned on
44
+ real runs in both chart shapes, every tool of every epoch
45
+ (`test/lib/time-travel/receipt-conformance.test.ts`), on the unserializable
46
+ cases and on the barrel by identity
47
+ (`test/lib/time-travel/tool-digest-input.test.ts`).
48
+
49
+ ### Changed
50
+
51
+ - **`milestoneStops` is a filter over footprintjs's own stop grammar.**
52
+ footprintjs 9.18.0 shipped `filterStops(stops, keep)` — the bookend guard, the
53
+ re-partition, `Stop.meta` for a strategy's own vocabulary and `Stop.prologue`
54
+ on a start that absorbed stages — because two consumers had each re-derived
55
+ all of it by hand against 9.17. This was one of them. The hand-rolled guard,
56
+ the re-partition loop and `milestoneOf`'s re-derivation are gone;
57
+ `milestoneStops` is now one expression, `filterStops(commitStops(log, tree),
58
+ keep)`, and the one owner of the `[start, …stages, end]` contract is the
59
+ library that returns it. Public names and signatures are unchanged
60
+ (`milestoneOf`, `milestoneStops`, `milestoneStopsStrategy`); the stops are
61
+ now typed `Stop<Milestone>`, so `cursor.at()?.meta?.kind` is typed, and
62
+ `milestoneOf(stop)` reads that `meta` when a stop carries one and falls back
63
+ to classifying the `runtimeStageId` for a stop from another strategy (a meta
64
+ of some other vocabulary is not mistaken for a milestone). **Behaviour is
65
+ identical and proven, not asserted:**
66
+ `test/lib/time-travel/milestone-stops-equivalence.test.ts` carries the 9.88.0
67
+ implementation verbatim and drives it beside the new one over every recorded
68
+ fixture the milestone tests use — both chart shapes, a skill graph, a
69
+ dynamic-grouped run with its drilled inner histories, a plumbing-only log, an
70
+ empty log, and a paused-then-resumed run including the 9.18 chained axis —
71
+ requiring agreement on every stop's step, id, kind, label and commit range and
72
+ on the `stateAt` fold at every stop. The only differences are the two things
73
+ 9.18 added, and both are asserted present and right: `meta` is the milestone
74
+ on every milestone stop and absent on the bookends; `prologue: true` is on
75
+ the start exactly when it absorbed a stage. A renderer that means "before
76
+ anything ran" can now check `kind === 'start' && !prologue` instead of
77
+ assuming it from the kind. `footprintjs` peer and dev ranges move to
78
+ `^9.18.0`. `milestone-stops-contract.test.ts` still mocks a broken
79
+ `commitStops` and requires the refusal to reach the consumer — it is now the
80
+ port's refusal (`filterStops: expected a bookended axis …`), not ours.
81
+ `test/type-regressions/MilestoneStops.assignability.test.ts` pins that the
82
+ bare 9.88.0 shapes (`TimeTravelStrategy`, `Stop[]`, `milestoneOf(Stop)`)
83
+ still compile.
84
+
10
85
  ## [9.88.0] - 2026-09-07
11
86
 
12
87
  **The receipt at the stop.** Stand on an `llm-turn` stop, ask what the model
@@ -12,7 +12,7 @@ export type { CombinedRecorder, ScopeRecorder, FlowRecorder, EmitRecorder, Write
12
12
  export * from './adapters/types.js';
13
13
  export { INJECTION_KEYS, injectionKeyForSlot, isInjectionKey, type InjectionKey, stageRole, type StageRole, milestoneFor, type Milestone, type MilestoneKind, RESERVED_SUBFLOW_PREFIX, isReservedSubflowSegment, } from './conventions.js';
14
14
  export { milestoneOf, milestoneStops, milestoneStopsStrategy } from './lib/time-travel/index.js';
15
- export { epochAt, epochLocations, keyedFold, messageDigestInput, receiptAt, receiptHash, servedAt, servedViews, RECEIPT_BOUNDARY, SERVED_GAPS, UNGAPPED_FIELDS, type EpochLocation, type FoldBasis, type KeyedFold, type Receipt, type ReceiptCacheMarker, type ReceiptMessage, type ReceiptParams, type ReceiptPiece, type ReceiptRequestOnlyMessage, type ServedGap, type ServedGapCause, type ServedGapKind, type ServedPiece, type ServedRequestOnly, type ServedView, } from './lib/time-travel/index.js';
15
+ export { epochAt, epochLocations, keyedFold, messageDigestInput, toolDigestInput, receiptAt, receiptHash, servedAt, servedViews, RECEIPT_BOUNDARY, SERVED_GAPS, UNGAPPED_FIELDS, type EpochLocation, type FoldBasis, type KeyedFold, type Receipt, type ReceiptCacheMarker, type ReceiptMessage, type ReceiptParams, type ReceiptPiece, type ReceiptRequestOnlyMessage, type ServedGap, type ServedGapCause, type ServedGapKind, type ServedPiece, type ServedRequestOnly, type ServedView, } from './lib/time-travel/index.js';
16
16
  export { COMPOSITION_KEYS, type BudgetPressureRecord, type CompositionKey, type EvictionRecord, type InjectionRecord, type SlotComposition, } from './recorders/core/types.js';
17
17
  export { type RunContext } from './bridge/eventMeta.js';
18
18
  export { contextEngineering, isEngineeredSource, isBaselineSource, ENGINEERED_SOURCES, BASELINE_SOURCES, type ContextEngineeringHandle, type ContextEngineeringUnsubscribe, type ContextInjectedEvent, type ContextInjectedListener, } from './recorders/core/contextEngineering.js';
package/dist/esm/index.js CHANGED
@@ -53,7 +53,7 @@ export { milestoneOf, milestoneStops, milestoneStopsStrategy } from './lib/time-
53
53
  // receiptAt(k).system.hash`; whatever the log cannot rebuild is named in
54
54
  // `servedAt(k).gaps` rather than quietly missing. `epochAt` / `epochLocations`
55
55
  // are the one owner of where an iteration's pieces live in either chart shape.
56
- export { epochAt, epochLocations, keyedFold, messageDigestInput, receiptAt, receiptHash, servedAt, servedViews, RECEIPT_BOUNDARY, SERVED_GAPS, UNGAPPED_FIELDS, } from './lib/time-travel/index.js';
56
+ export { epochAt, epochLocations, keyedFold, messageDigestInput, toolDigestInput, receiptAt, receiptHash, servedAt, servedViews, RECEIPT_BOUNDARY, SERVED_GAPS, UNGAPPED_FIELDS, } from './lib/time-travel/index.js';
57
57
  // `STAGE_IDS`, `SUBFLOW_IDS`, `isSlotSubflow`, `slotFromSubflowId`,
58
58
  // `isKnownStage`, `isKnownSubflow` are intentionally NOT exported — they
59
59
  // are the internal builder↔recorder coordination protocol, not consumer
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,6 @@
9
9
  export { milestoneOf, milestoneStops, milestoneStopsStrategy } from './milestoneStops.js';
10
10
  export { epochAt, epochLocations, llmCallMountKeys, readAfterCall, readAtCall, readRunConstant, recordingOf, type EpochLocation, type RecordingLike, } from './epochs.js';
11
11
  export { keyedFold, type FoldBasis, type FoldSourceLike, type KeyedFold } from './keyedFold.js';
12
- export { buildReceipt, messageDigestInput, receiptHash, stableJson, FORCED_OUTPUT_TOOL_KEY, RECEIPT_BOUNDARY, RECEIPT_HASH_CHARS, RECEIPT_KEY, UNSERIALIZABLE, type Receipt, type ReceiptAttentionOmission, type ReceiptCacheMarker, type ReceiptMessage, type ReceiptParams, type ReceiptPiece, type ReceiptRequestOnlyMessage, } from './receipt.js';
12
+ export { buildReceipt, messageDigestInput, toolDigestInput, receiptHash, stableJson, FORCED_OUTPUT_TOOL_KEY, RECEIPT_BOUNDARY, RECEIPT_HASH_CHARS, RECEIPT_KEY, UNSERIALIZABLE, type Receipt, type ReceiptAttentionOmission, type ReceiptCacheMarker, type ReceiptMessage, type ReceiptParams, type ReceiptPiece, type ReceiptRequestOnlyMessage, } from './receipt.js';
13
13
  export { sha256Hex } from './sha256.js';
14
14
  export { receiptAt, servedAt, servedViews, SERVED_GAPS, UNGAPPED_FIELDS, type ServedGap, type ServedGapCause, type ServedGapKind, type ServedPiece, type ServedRequestOnly, type ServedView, } from './servedView.js';
@@ -9,7 +9,7 @@
9
9
  export { milestoneOf, milestoneStops, milestoneStopsStrategy } from './milestoneStops.js';
10
10
  export { epochAt, epochLocations, llmCallMountKeys, readAfterCall, readAtCall, readRunConstant, recordingOf, } from './epochs.js';
11
11
  export { keyedFold } from './keyedFold.js';
12
- export { buildReceipt, messageDigestInput, receiptHash, stableJson, FORCED_OUTPUT_TOOL_KEY, RECEIPT_BOUNDARY, RECEIPT_HASH_CHARS, RECEIPT_KEY, UNSERIALIZABLE, } from './receipt.js';
12
+ export { buildReceipt, messageDigestInput, toolDigestInput, receiptHash, stableJson, FORCED_OUTPUT_TOOL_KEY, RECEIPT_BOUNDARY, RECEIPT_HASH_CHARS, RECEIPT_KEY, UNSERIALIZABLE, } from './receipt.js';
13
13
  export { sha256Hex } from './sha256.js';
14
14
  export { receiptAt, servedAt, servedViews, SERVED_GAPS, UNGAPPED_FIELDS, } from './servedView.js';
15
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/time-travel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EACL,OAAO,EACP,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,eAAe,EACf,WAAW,GAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAuD,MAAM,gBAAgB,CAAC;AAChG,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,cAAc,GAQf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,SAAS,EACT,QAAQ,EACR,WAAW,EACX,WAAW,EACX,eAAe,GAOhB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/time-travel/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EACL,OAAO,EACP,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,eAAe,EACf,WAAW,GAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAuD,MAAM,gBAAgB,CAAC;AAChG,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,cAAc,GAQf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,SAAS,EACT,QAAQ,EACR,WAAW,EACX,WAAW,EACX,eAAe,GAOhB,MAAM,iBAAiB,CAAC"}
@@ -8,16 +8,26 @@
8
8
  * it), and `conventions.ts` · `milestoneFor` for the domain vocabulary.
9
9
  * Emits: N/A.
10
10
  *
11
- * WHY THIS FILE EXISTS. footprintjs 9.17 ships the reader's cursor
12
- * (`timeTravel`) and one stop grammar — `commitStops`, one stop per executed
13
- * stage — because that is the only grammar the substrate itself knows. It does
14
- * NOT know what an LLM turn is. agentfootprint does: `milestoneFor` has
15
- * classified a local stage id into an iteration / slot / llm-turn / tool-call /
16
- * decision since 9.x, and until now every consumer that wanted a milestone
17
- * slider mapped that classifier onto commits by hand. The Why Lens did it one
18
- * way; anyone else with a recording had to write it again. This is that
19
- * mapping, once, on the strategy seam the port opened — so the agent SUPPLIES
20
- * the stops for its own runs and every reader gets the same axis.
11
+ * WHY THIS FILE EXISTS. footprintjs ships the reader's cursor (`timeTravel`)
12
+ * and one stop grammar — `commitStops`, one stop per executed stage — because
13
+ * that is the only grammar the substrate itself knows. It does NOT know what an
14
+ * LLM turn is. agentfootprint does: `milestoneFor` has classified a local stage
15
+ * id into an iteration / slot / llm-turn / tool-call / decision since 9.x, and
16
+ * until 9.87 every consumer that wanted a milestone slider mapped that
17
+ * classifier onto commits by hand. This is that mapping, once, on the strategy
18
+ * seam the port opened — so the agent SUPPLIES the stops for its own runs and
19
+ * every reader gets the same axis.
20
+ *
21
+ * WHAT IT IS (9.89.0). A FILTER over the port's own axis. footprintjs 9.18
22
+ * shipped `filterStops(stops, keep)` — the bookend guard, the re-partition and
23
+ * a `meta` slot on the stop — because two consumers had each re-derived all
24
+ * three by hand against 9.17, this file among them. The hand-rolled copies are
25
+ * gone: the one owner of the `[start, …stages, end]` contract is the library
26
+ * that returns it, and this strategy is one expression over it. The axis is
27
+ * byte-for-byte the 9.88.0 axis (`test/lib/time-travel/milestone-stops-equivalence.test.ts` pins
28
+ * that against a verbatim copy of the 9.88.0 implementation); what is new is that the milestone now RIDES on the
29
+ * stop as `meta`, and that a start which absorbed pre-milestone stages says so
30
+ * with `prologue: true`.
21
31
  *
22
32
  * WHAT IT IS NOT. Not a second cursor. A strategy only says where the one
23
33
  * cursor may rest; `timeTravel` still owns the position, the folds and the
@@ -32,15 +42,14 @@ import { type Milestone } from '../../conventions.js';
32
42
  * The milestone a stop stands for, or `null` when it stands for none (the
33
43
  * `'start'` / `'end'` bookends).
34
44
  *
35
- * WHY A FUNCTION AND NOT A FIELD. footprintjs's `Stop` is a closed shape —
36
- * `step`, `runtimeStageId`, `commitIdx`, `lastCommitIdx`, `stageId`,
37
- * `subflowPath`, `label`, `kind` — with no extension slot a strategy may write
38
- * its own vocabulary into, and `kind` is the port's own `StopKind`
39
- * (`'commit' | 'mount' | 'start' | 'end'`), not ours to overload. So the
40
- * milestone kind travels the only way it honestly can: re-derived from the
41
- * stop's `runtimeStageId`, by the same classifier that put the stop on the
42
- * axis. Same input, same function, same answer — there is no second source of
43
- * truth here, only a second reading of the one there is.
45
+ * A stop that {@link milestoneStops} made carries its milestone as
46
+ * `stop.meta`, and that is what is read — the classification the strategy
47
+ * made when it put the stop on the axis, not a second run of the classifier.
48
+ * A stop from ANOTHER strategy — the port's own `commitStops`, or a consumer's
49
+ * filter that kept the stop without a milestone meta — has none, so the answer
50
+ * falls back to where it always came from: `milestoneFor` over the stop's
51
+ * `runtimeStageId`. Same classifier, same answer; a `meta` of some other
52
+ * vocabulary is not mistaken for ours.
44
53
  *
45
54
  * @example
46
55
  * ```ts
@@ -48,7 +57,7 @@ import { type Milestone } from '../../conventions.js';
48
57
  * milestoneOf(stop)?.kind; // 'llm-turn'
49
58
  * ```
50
59
  */
51
- export declare function milestoneOf(stop: Stop): Milestone | null;
60
+ export declare function milestoneOf(stop: Stop<unknown>): Milestone | null;
52
61
  /**
53
62
  * Derive one stop per committed MILESTONE from a recorded commit log.
54
63
  *
@@ -61,9 +70,11 @@ export declare function milestoneOf(stop: Stop): Milestone | null;
61
70
  * parallel fork child commits twice and siblings interleave — every repeat is
62
71
  * an empty bundle), the authoritative mount set read off the execution tree,
63
72
  * the `'start'` / `'end'` bookends, and the id-less leading commit that carries
64
- * a subflow's `inputMapper` seed. This function calls `commitStops` and filters
65
- * its result. A second implementation of that collapsing would be a second
66
- * chance to disagree with the library about what a stage is.
73
+ * a subflow's `inputMapper` seed. And since 9.89.0 the COMPOSITION itself is
74
+ * the port's too: `filterStops` checks the `[start, …stages, end]` shape,
75
+ * keeps what `keep` keeps, and re-partitions the log. A second implementation
76
+ * of any of that would be a second chance to disagree with the library about
77
+ * what a stage is.
67
78
  *
68
79
  * **The survivors re-partition the log.** A stage that classifies `null` is not
69
80
  * a stop, but its commits still happened, so they are folded into the stop that
@@ -74,14 +85,21 @@ export declare function milestoneOf(stop: Stop): Milestone | null;
74
85
  * so on a drilled cursor `'start'` reads as "what this subflow began with,
75
86
  * after its plumbing ran".
76
87
  *
77
- * **What that costs `'start'`.** On footprintjs's own axis `'start'` is the fold
78
- * base: the state before ANY stage ran. Here it absorbs every stage that ran
79
- * before the first milestone, so `stateAt(start)` is the state the first
80
- * milestone READ, not the run's raw base — a real agent seeds a couple of dozen
81
- * keys in `seed` before anything a reader would scrub to. That is the right
82
- * answer for this axis (the stops must still partition the log) and the wrong
83
- * one to assume from `kind: 'start'` alone, so it is said out loud here, in the
84
- * folder README, on the docs page and in a test.
88
+ * **What that costs `'start'`, and the flag that says so.** On footprintjs's
89
+ * own axis `'start'` is the fold base: the state before ANY stage ran. Here it
90
+ * absorbs every stage that ran before the first milestone, so `stateAt(start)`
91
+ * is the state the first milestone READ, not the run's raw base — a real agent
92
+ * seeds a couple of dozen keys in `seed` before anything a reader would scrub
93
+ * to. That is the right answer for this axis (the stops must still partition
94
+ * the log), and since 9.18 the port marks it: the returned start carries
95
+ * `prologue: true` whenever it absorbed a stage, so a renderer that means
96
+ * "before anything ran" checks `kind === 'start' && !prologue` instead of
97
+ * assuming it from the kind.
98
+ *
99
+ * **The milestone rides on the stop.** Every kept stop carries its
100
+ * classification as `meta` — `Stop<Milestone>` — so a reader asks
101
+ * `stop.meta?.kind` (or {@link milestoneOf}, which reads the same slot) rather
102
+ * than re-running the classifier over the id. The bookends carry none.
85
103
  *
86
104
  * **A log with no milestones in it at all.** A non-empty log the classifier
87
105
  * recognises nothing in — a non-agent chart handed this strategy — yields the
@@ -109,20 +127,23 @@ export declare function milestoneOf(stop: Stop): Milestone | null;
109
127
  * @example
110
128
  * ```ts
111
129
  * import { timeTravel } from 'footprintjs/trace';
112
- * import { milestoneStopsStrategy, milestoneOf } from 'agentfootprint';
130
+ * import { milestoneStopsStrategy } from 'agentfootprint';
113
131
  *
114
132
  * const cursor = timeTravel(agent.getSnapshot()!, { strategy: milestoneStopsStrategy });
115
- * cursor.stops.map((s) => [s.label, milestoneOf(s)?.kind]);
133
+ * cursor.stops.map((s) => [s.label, s.meta?.kind]);
116
134
  * // measured on a two-turn `dynamic` run — 42 commits, 15 stops:
117
135
  * // [['Run start', undefined], ['Iteration', 'iteration'],
118
136
  * // ['System prompt', 'slot'], ['Messages', 'slot'], ['Tools', 'slot'],
119
137
  * // ['LLM turn', 'llm-turn'], ['Route', 'decision'], ['Tool call', 'tool-call'],
120
138
  * // … the second turn …, ['Run end', undefined]]
139
+ * cursor.stops[0].prologue; // true — `seed` and the plumbing ran before the first Iteration
121
140
  * ```
122
141
  */
123
- export declare function milestoneStops(commitLog: readonly CommitBundle[], executionTree?: StageSnapshot): Stop[];
142
+ export declare function milestoneStops(commitLog: readonly CommitBundle[], executionTree?: StageSnapshot): Stop<Milestone>[];
124
143
  /**
125
144
  * `milestoneStops` as a footprintjs `TimeTravelStrategy` — what you hand
126
- * `timeTravel(snapshot, { strategy })`.
145
+ * `timeTravel(snapshot, { strategy })`. Typed over {@link Milestone}, so the
146
+ * cursor's stops are `Stop<Milestone>` and `cursor.at()?.meta?.kind` is typed;
147
+ * it is still assignable wherever a bare `TimeTravelStrategy` is expected.
127
148
  */
128
- export declare const milestoneStopsStrategy: TimeTravelStrategy;
149
+ export declare const milestoneStopsStrategy: TimeTravelStrategy<Milestone>;
@@ -8,16 +8,26 @@
8
8
  * it), and `conventions.ts` · `milestoneFor` for the domain vocabulary.
9
9
  * Emits: N/A.
10
10
  *
11
- * WHY THIS FILE EXISTS. footprintjs 9.17 ships the reader's cursor
12
- * (`timeTravel`) and one stop grammar — `commitStops`, one stop per executed
13
- * stage — because that is the only grammar the substrate itself knows. It does
14
- * NOT know what an LLM turn is. agentfootprint does: `milestoneFor` has
15
- * classified a local stage id into an iteration / slot / llm-turn / tool-call /
16
- * decision since 9.x, and until now every consumer that wanted a milestone
17
- * slider mapped that classifier onto commits by hand. The Why Lens did it one
18
- * way; anyone else with a recording had to write it again. This is that
19
- * mapping, once, on the strategy seam the port opened — so the agent SUPPLIES
20
- * the stops for its own runs and every reader gets the same axis.
11
+ * WHY THIS FILE EXISTS. footprintjs ships the reader's cursor (`timeTravel`)
12
+ * and one stop grammar — `commitStops`, one stop per executed stage — because
13
+ * that is the only grammar the substrate itself knows. It does NOT know what an
14
+ * LLM turn is. agentfootprint does: `milestoneFor` has classified a local stage
15
+ * id into an iteration / slot / llm-turn / tool-call / decision since 9.x, and
16
+ * until 9.87 every consumer that wanted a milestone slider mapped that
17
+ * classifier onto commits by hand. This is that mapping, once, on the strategy
18
+ * seam the port opened — so the agent SUPPLIES the stops for its own runs and
19
+ * every reader gets the same axis.
20
+ *
21
+ * WHAT IT IS (9.89.0). A FILTER over the port's own axis. footprintjs 9.18
22
+ * shipped `filterStops(stops, keep)` — the bookend guard, the re-partition and
23
+ * a `meta` slot on the stop — because two consumers had each re-derived all
24
+ * three by hand against 9.17, this file among them. The hand-rolled copies are
25
+ * gone: the one owner of the `[start, …stages, end]` contract is the library
26
+ * that returns it, and this strategy is one expression over it. The axis is
27
+ * byte-for-byte the 9.88.0 axis (`test/lib/time-travel/milestone-stops-equivalence.test.ts` pins
28
+ * that against a verbatim copy of the 9.88.0 implementation); what is new is that the milestone now RIDES on the
29
+ * stop as `meta`, and that a start which absorbed pre-milestone stages says so
30
+ * with `prologue: true`.
21
31
  *
22
32
  * WHAT IT IS NOT. Not a second cursor. A strategy only says where the one
23
33
  * cursor may rest; `timeTravel` still owns the position, the folds and the
@@ -25,21 +35,34 @@
25
35
  * because a cursor that stops where no evidence exists is telling a story
26
36
  * rather than reading one.
27
37
  */
28
- import { commitStops } from 'footprintjs/trace';
38
+ import { commitStops, filterStops } from 'footprintjs/trace';
29
39
  import { milestoneFor } from '../../conventions.js';
40
+ const MILESTONE_KINDS = [
41
+ 'iteration',
42
+ 'slot',
43
+ 'llm-turn',
44
+ 'tool-call',
45
+ 'decision',
46
+ ];
47
+ /** Is this `meta` a {@link Milestone} — ours, not another strategy's? */
48
+ function isMilestone(meta) {
49
+ if (meta === null || typeof meta !== 'object')
50
+ return false;
51
+ const { kind, label } = meta;
52
+ return typeof label === 'string' && MILESTONE_KINDS.includes(kind);
53
+ }
30
54
  /**
31
55
  * The milestone a stop stands for, or `null` when it stands for none (the
32
56
  * `'start'` / `'end'` bookends).
33
57
  *
34
- * WHY A FUNCTION AND NOT A FIELD. footprintjs's `Stop` is a closed shape —
35
- * `step`, `runtimeStageId`, `commitIdx`, `lastCommitIdx`, `stageId`,
36
- * `subflowPath`, `label`, `kind` — with no extension slot a strategy may write
37
- * its own vocabulary into, and `kind` is the port's own `StopKind`
38
- * (`'commit' | 'mount' | 'start' | 'end'`), not ours to overload. So the
39
- * milestone kind travels the only way it honestly can: re-derived from the
40
- * stop's `runtimeStageId`, by the same classifier that put the stop on the
41
- * axis. Same input, same function, same answer — there is no second source of
42
- * truth here, only a second reading of the one there is.
58
+ * A stop that {@link milestoneStops} made carries its milestone as
59
+ * `stop.meta`, and that is what is read — the classification the strategy
60
+ * made when it put the stop on the axis, not a second run of the classifier.
61
+ * A stop from ANOTHER strategy — the port's own `commitStops`, or a consumer's
62
+ * filter that kept the stop without a milestone meta — has none, so the answer
63
+ * falls back to where it always came from: `milestoneFor` over the stop's
64
+ * `runtimeStageId`. Same classifier, same answer; a `meta` of some other
65
+ * vocabulary is not mistaken for ours.
43
66
  *
44
67
  * @example
45
68
  * ```ts
@@ -48,6 +71,8 @@ import { milestoneFor } from '../../conventions.js';
48
71
  * ```
49
72
  */
50
73
  export function milestoneOf(stop) {
74
+ if (isMilestone(stop.meta))
75
+ return stop.meta;
51
76
  return stop.runtimeStageId ? milestoneFor(stop.runtimeStageId) : null;
52
77
  }
53
78
  /**
@@ -62,9 +87,11 @@ export function milestoneOf(stop) {
62
87
  * parallel fork child commits twice and siblings interleave — every repeat is
63
88
  * an empty bundle), the authoritative mount set read off the execution tree,
64
89
  * the `'start'` / `'end'` bookends, and the id-less leading commit that carries
65
- * a subflow's `inputMapper` seed. This function calls `commitStops` and filters
66
- * its result. A second implementation of that collapsing would be a second
67
- * chance to disagree with the library about what a stage is.
90
+ * a subflow's `inputMapper` seed. And since 9.89.0 the COMPOSITION itself is
91
+ * the port's too: `filterStops` checks the `[start, …stages, end]` shape,
92
+ * keeps what `keep` keeps, and re-partitions the log. A second implementation
93
+ * of any of that would be a second chance to disagree with the library about
94
+ * what a stage is.
68
95
  *
69
96
  * **The survivors re-partition the log.** A stage that classifies `null` is not
70
97
  * a stop, but its commits still happened, so they are folded into the stop that
@@ -75,14 +102,21 @@ export function milestoneOf(stop) {
75
102
  * so on a drilled cursor `'start'` reads as "what this subflow began with,
76
103
  * after its plumbing ran".
77
104
  *
78
- * **What that costs `'start'`.** On footprintjs's own axis `'start'` is the fold
79
- * base: the state before ANY stage ran. Here it absorbs every stage that ran
80
- * before the first milestone, so `stateAt(start)` is the state the first
81
- * milestone READ, not the run's raw base — a real agent seeds a couple of dozen
82
- * keys in `seed` before anything a reader would scrub to. That is the right
83
- * answer for this axis (the stops must still partition the log) and the wrong
84
- * one to assume from `kind: 'start'` alone, so it is said out loud here, in the
85
- * folder README, on the docs page and in a test.
105
+ * **What that costs `'start'`, and the flag that says so.** On footprintjs's
106
+ * own axis `'start'` is the fold base: the state before ANY stage ran. Here it
107
+ * absorbs every stage that ran before the first milestone, so `stateAt(start)`
108
+ * is the state the first milestone READ, not the run's raw base — a real agent
109
+ * seeds a couple of dozen keys in `seed` before anything a reader would scrub
110
+ * to. That is the right answer for this axis (the stops must still partition
111
+ * the log), and since 9.18 the port marks it: the returned start carries
112
+ * `prologue: true` whenever it absorbed a stage, so a renderer that means
113
+ * "before anything ran" checks `kind === 'start' && !prologue` instead of
114
+ * assuming it from the kind.
115
+ *
116
+ * **The milestone rides on the stop.** Every kept stop carries its
117
+ * classification as `meta` — `Stop<Milestone>` — so a reader asks
118
+ * `stop.meta?.kind` (or {@link milestoneOf}, which reads the same slot) rather
119
+ * than re-running the classifier over the id. The bookends carry none.
86
120
  *
87
121
  * **A log with no milestones in it at all.** A non-empty log the classifier
88
122
  * recognises nothing in — a non-agent chart handed this strategy — yields the
@@ -110,70 +144,29 @@ export function milestoneOf(stop) {
110
144
  * @example
111
145
  * ```ts
112
146
  * import { timeTravel } from 'footprintjs/trace';
113
- * import { milestoneStopsStrategy, milestoneOf } from 'agentfootprint';
147
+ * import { milestoneStopsStrategy } from 'agentfootprint';
114
148
  *
115
149
  * const cursor = timeTravel(agent.getSnapshot()!, { strategy: milestoneStopsStrategy });
116
- * cursor.stops.map((s) => [s.label, milestoneOf(s)?.kind]);
150
+ * cursor.stops.map((s) => [s.label, s.meta?.kind]);
117
151
  * // measured on a two-turn `dynamic` run — 42 commits, 15 stops:
118
152
  * // [['Run start', undefined], ['Iteration', 'iteration'],
119
153
  * // ['System prompt', 'slot'], ['Messages', 'slot'], ['Tools', 'slot'],
120
154
  * // ['LLM turn', 'llm-turn'], ['Route', 'decision'], ['Tool call', 'tool-call'],
121
155
  * // … the second turn …, ['Run end', undefined]]
156
+ * cursor.stops[0].prologue; // true — `seed` and the plumbing ran before the first Iteration
122
157
  * ```
123
158
  */
124
159
  export function milestoneStops(commitLog, executionTree) {
125
- const perStage = commitStops(commitLog, executionTree);
126
- if (perStage.length === 0)
127
- return [];
128
- // `commitStops` guarantees the shape [start, …stages, end] for a non-empty
129
- // log. The bookends are kept verbatim in KIND and re-partitioned below; only
130
- // the stages in between are filtered.
131
- //
132
- // CHECK THE PROPERTY, NOT MERE PRESENCE. `Stop[]` does not pin that shape in
133
- // the type, and everything below rests on it: `'start'` is the only stop that
134
- // may open at `-1` (the fold base no commit index reaches) and `'end'` is the
135
- // only one that folds the whole log. If a future `commitStops` returned some
136
- // other shape, a presence check would take the first and last STAGE stops for
137
- // bookends — the first would silently inherit start's `-1` arithmetic and keep
138
- // its raw stage label, and the last milestone would lose its milestone label.
139
- // Refusing loudly is the honest answer: an empty axis would be
140
- // indistinguishable from "this run committed nothing", which is a different
141
- // fact about a different run.
142
- const [start, ...rest] = perStage;
143
- const end = rest.pop();
144
- if (!start || start.kind !== 'start' || !end || end.kind !== 'end') {
145
- throw new Error('milestoneStops: commitStops returned an unexpected shape — expected ' +
146
- `[start, …stages, end], got kinds [${perStage.map((s) => s.kind).join(', ')}]. ` +
147
- 'This is a footprintjs contract change, not something a run can cause.');
148
- }
149
- const kept = rest
150
- .map((stop) => ({ stop, milestone: milestoneFor(stop.runtimeStageId) }))
151
- .filter((row) => row.milestone !== null);
152
- const first = kept[0];
153
- const stops = [
154
- {
155
- ...start,
156
- step: 0,
157
- // Everything before the first milestone folds into `'start'`.
158
- lastCommitIdx: (first ? first.stop.commitIdx : commitLog.length) - 1,
159
- },
160
- ];
161
- for (const [i, { stop, milestone }] of kept.entries()) {
162
- const next = kept[i + 1];
163
- stops.push({
164
- ...stop,
165
- step: stops.length,
166
- // Absorb the non-milestone stages that ran after this one.
167
- lastCommitIdx: next ? next.stop.commitIdx - 1 : commitLog.length - 1,
168
- label: milestone.label,
169
- });
170
- }
171
- stops.push({ ...end, step: stops.length });
172
- return stops;
160
+ return filterStops(commitStops(commitLog, executionTree), (stop) => {
161
+ const milestone = milestoneFor(stop.runtimeStageId);
162
+ return milestone ? { label: milestone.label, meta: milestone } : null;
163
+ });
173
164
  }
174
165
  /**
175
166
  * `milestoneStops` as a footprintjs `TimeTravelStrategy` — what you hand
176
- * `timeTravel(snapshot, { strategy })`.
167
+ * `timeTravel(snapshot, { strategy })`. Typed over {@link Milestone}, so the
168
+ * cursor's stops are `Stop<Milestone>` and `cursor.at()?.meta?.kind` is typed;
169
+ * it is still assignable wherever a bare `TimeTravelStrategy` is expected.
177
170
  */
178
171
  export const milestoneStopsStrategy = { stopsFor: milestoneStops };
179
172
  //# sourceMappingURL=milestoneStops.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"milestoneStops.js","sourceRoot":"","sources":["../../../../src/lib/time-travel/milestoneStops.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"milestoneStops.js","sourceRoot":"","sources":["../../../../src/lib/time-travel/milestoneStops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAsC,MAAM,sBAAsB,CAAC;AAExF,MAAM,eAAe,GAA6B;IAChD,WAAW;IACX,MAAM;IACN,UAAU;IACV,WAAW;IACX,UAAU;CACX,CAAC;AAEF,yEAAyE;AACzE,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAA2C,CAAC;IACpE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,eAAsC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7F,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC7C,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAC7C,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAkC,EAClC,aAA6B;IAE7B,OAAO,WAAW,CAAY,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;QAC5E,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
@@ -346,6 +346,50 @@ export declare function receiptHash(runId: string, content: string): string;
346
346
  * comparison needs truth.
347
347
  */
348
348
  export declare function stableJson(value: unknown): string | undefined;
349
+ /**
350
+ * The bytes a tool schema's hash covers: the whole `LLMToolSchema` — `name`,
351
+ * `description`, `inputSchema` — as sorted-key JSON, so two schemas that are
352
+ * structurally the same hash the same however they were built, and with a
353
+ * schema JSON cannot express (a cycle, a `BigInt`) marked {@link UNSERIALIZABLE}
354
+ * rather than dropped or thrown on.
355
+ *
356
+ * WHAT TO PASS (9.89.0). The receipt hashes each tool AS HANDED TO THE PORT:
357
+ * `buildReceipt` is given the request's tool list, and that list is the
358
+ * `dynamicToolSchemas` the run committed, plus a forced answer tool when an
359
+ * output strategy adds one. `servedAt(k).tools.schemas[i]` is that committed
360
+ * list read back — the same shape, the same bytes — so a consumer holding a
361
+ * served view already holds the object this function takes. It does not take
362
+ * the served view, a `Tool`, or a `defineTool` definition: those carry an
363
+ * `execute`, `wants` and other fields the model never saw.
364
+ *
365
+ * WHY IT IS EXPORTED. A reader that rebuilds a served view proves the rebuild
366
+ * by hashing it the way the receipt did. `receiptHash` and `messageDigestInput`
367
+ * were exported in 9.88.0 for the system text, the pieces and the messages,
368
+ * and a consumer could verify all of them — and NOT the tools, because the
369
+ * serializer behind `schemaHashes` was internal. Its only options were to copy
370
+ * `stableJson` (a second owner of the rule, which drifts the day the digest
371
+ * gains a field, as the message digest did in 9.88.0) or to leave the schema
372
+ * rows unverified. This is the third digest half of the law, beside its two
373
+ * siblings, and the ONLY spelling of the schema rule: `buildReceipt` calls it
374
+ * too. `stableJson` stays off the root barrel for the same reason — a consumer
375
+ * composing `hash(stableJson(tool))` would be writing the rule a second time.
376
+ *
377
+ * @example verify every schema row of a receipt from outside
378
+ * ```ts
379
+ * import { receiptAt, receiptHash, servedAt, toolDigestInput } from 'agentfootprint';
380
+ *
381
+ * const snapshot = agent.getSnapshot()!;
382
+ * const view = servedAt(snapshot, 1)!;
383
+ * const receipt = receiptAt(snapshot, 1)!;
384
+ * for (const tool of view.tools.schemas) {
385
+ * receiptHash(receipt.basis.runId, toolDigestInput(tool)) ===
386
+ * receipt.tools.schemaHashes[tool.name]; // true, for every tool of every epoch
387
+ * }
388
+ * // A forced answer tool is in `schemaHashes` and NOT in `schemas` — its body
389
+ * // is a declared gap (`forced-tool-schema`), so there is no row to check.
390
+ * ```
391
+ */
392
+ export declare function toolDigestInput(tool: LLMToolSchema): string;
349
393
  /**
350
394
  * The bytes a message's hash covers, each field behind a separator: its role,
351
395
  * its text, its `toolCallId`, its `toolName`, the calls it asked for (id, name,