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 +75 -0
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/time-travel/index.d.ts +1 -1
- package/dist/esm/lib/time-travel/index.js +1 -1
- package/dist/esm/lib/time-travel/index.js.map +1 -1
- package/dist/esm/lib/time-travel/milestoneStops.d.ts +57 -36
- package/dist/esm/lib/time-travel/milestoneStops.js +75 -82
- package/dist/esm/lib/time-travel/milestoneStops.js.map +1 -1
- package/dist/esm/lib/time-travel/receipt.d.ts +44 -0
- package/dist/esm/lib/time-travel/receipt.js +47 -1
- package/dist/esm/lib/time-travel/receipt.js.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/time-travel/index.js +2 -1
- package/dist/lib/time-travel/index.js.map +1 -1
- package/dist/lib/time-travel/milestoneStops.js +74 -81
- package/dist/lib/time-travel/milestoneStops.js.map +1 -1
- package/dist/lib/time-travel/receipt.js +49 -2
- package/dist/lib/time-travel/receipt.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/time-travel/index.d.ts +1 -1
- package/dist/types/lib/time-travel/index.d.ts.map +1 -1
- package/dist/types/lib/time-travel/milestoneStops.d.ts +57 -36
- package/dist/types/lib/time-travel/milestoneStops.d.ts.map +1 -1
- package/dist/types/lib/time-travel/receipt.d.ts +44 -0
- package/dist/types/lib/time-travel/receipt.d.ts.map +1 -1
- package/package.json +3 -3
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
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -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
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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
|
-
*
|
|
36
|
-
* `
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
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.
|
|
65
|
-
*
|
|
66
|
-
*
|
|
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'
|
|
78
|
-
* base: the state before ANY stage ran. Here it
|
|
79
|
-
* before the first milestone, so `stateAt(start)`
|
|
80
|
-
* milestone READ, not the run's raw base — a real agent
|
|
81
|
-
* keys in `seed` before anything a reader would scrub
|
|
82
|
-
* answer for this axis (the stops must still partition
|
|
83
|
-
*
|
|
84
|
-
*
|
|
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
|
|
130
|
+
* import { milestoneStopsStrategy } from 'agentfootprint';
|
|
113
131
|
*
|
|
114
132
|
* const cursor = timeTravel(agent.getSnapshot()!, { strategy: milestoneStopsStrategy });
|
|
115
|
-
* cursor.stops.map((s) => [s.label,
|
|
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
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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
|
-
*
|
|
35
|
-
* `
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
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.
|
|
66
|
-
*
|
|
67
|
-
*
|
|
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'
|
|
79
|
-
* base: the state before ANY stage ran. Here it
|
|
80
|
-
* before the first milestone, so `stateAt(start)`
|
|
81
|
-
* milestone READ, not the run's raw base — a real agent
|
|
82
|
-
* keys in `seed` before anything a reader would scrub
|
|
83
|
-
* answer for this axis (the stops must still partition
|
|
84
|
-
*
|
|
85
|
-
*
|
|
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
|
|
147
|
+
* import { milestoneStopsStrategy } from 'agentfootprint';
|
|
114
148
|
*
|
|
115
149
|
* const cursor = timeTravel(agent.getSnapshot()!, { strategy: milestoneStopsStrategy });
|
|
116
|
-
* cursor.stops.map((s) => [s.label,
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
return
|
|
128
|
-
|
|
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":"AAAA
|
|
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,
|