agentfootprint 6.30.0 → 6.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/esm/lib/context-bisect/ablation.js +40 -2
  2. package/dist/esm/lib/context-bisect/ablation.js.map +1 -1
  3. package/dist/esm/lib/context-bisect/cost.js +61 -0
  4. package/dist/esm/lib/context-bisect/cost.js.map +1 -0
  5. package/dist/esm/lib/context-bisect/index.js +10 -1
  6. package/dist/esm/lib/context-bisect/index.js.map +1 -1
  7. package/dist/esm/lib/context-bisect/localize.js +43 -4
  8. package/dist/esm/lib/context-bisect/localize.js.map +1 -1
  9. package/dist/esm/lib/context-bisect/loop-recall.js +108 -0
  10. package/dist/esm/lib/context-bisect/loop-recall.js.map +1 -0
  11. package/dist/esm/lib/context-bisect/trajectory.js +221 -0
  12. package/dist/esm/lib/context-bisect/trajectory.js.map +1 -0
  13. package/dist/esm/lib/context-bisect/types.js.map +1 -1
  14. package/dist/esm/lib/context-bisect/walk-to-root.js +170 -0
  15. package/dist/esm/lib/context-bisect/walk-to-root.js.map +1 -0
  16. package/dist/esm/lib/influence-core/contrastive.js +89 -0
  17. package/dist/esm/lib/influence-core/contrastive.js.map +1 -0
  18. package/dist/esm/lib/influence-core/index.js +1 -0
  19. package/dist/esm/lib/influence-core/index.js.map +1 -1
  20. package/dist/esm/lib/influence-core/signals.js +9 -4
  21. package/dist/esm/lib/influence-core/signals.js.map +1 -1
  22. package/dist/esm/observe.js +2 -2
  23. package/dist/esm/observe.js.map +1 -1
  24. package/dist/lib/context-bisect/ablation.js +43 -3
  25. package/dist/lib/context-bisect/ablation.js.map +1 -1
  26. package/dist/lib/context-bisect/cost.js +66 -0
  27. package/dist/lib/context-bisect/cost.js.map +1 -0
  28. package/dist/lib/context-bisect/index.js +23 -1
  29. package/dist/lib/context-bisect/index.js.map +1 -1
  30. package/dist/lib/context-bisect/localize.js +43 -4
  31. package/dist/lib/context-bisect/localize.js.map +1 -1
  32. package/dist/lib/context-bisect/loop-recall.js +112 -0
  33. package/dist/lib/context-bisect/loop-recall.js.map +1 -0
  34. package/dist/lib/context-bisect/trajectory.js +227 -0
  35. package/dist/lib/context-bisect/trajectory.js.map +1 -0
  36. package/dist/lib/context-bisect/types.js.map +1 -1
  37. package/dist/lib/context-bisect/walk-to-root.js +176 -0
  38. package/dist/lib/context-bisect/walk-to-root.js.map +1 -0
  39. package/dist/lib/influence-core/contrastive.js +93 -0
  40. package/dist/lib/influence-core/contrastive.js.map +1 -0
  41. package/dist/lib/influence-core/index.js +3 -1
  42. package/dist/lib/influence-core/index.js.map +1 -1
  43. package/dist/lib/influence-core/signals.js +11 -4
  44. package/dist/lib/influence-core/signals.js.map +1 -1
  45. package/dist/observe.js +14 -2
  46. package/dist/observe.js.map +1 -1
  47. package/dist/types/lib/context-bisect/ablation.d.ts +6 -1
  48. package/dist/types/lib/context-bisect/ablation.d.ts.map +1 -1
  49. package/dist/types/lib/context-bisect/cost.d.ts +38 -0
  50. package/dist/types/lib/context-bisect/cost.d.ts.map +1 -0
  51. package/dist/types/lib/context-bisect/index.d.ts +6 -2
  52. package/dist/types/lib/context-bisect/index.d.ts.map +1 -1
  53. package/dist/types/lib/context-bisect/localize.d.ts +8 -0
  54. package/dist/types/lib/context-bisect/localize.d.ts.map +1 -1
  55. package/dist/types/lib/context-bisect/loop-recall.d.ts +98 -0
  56. package/dist/types/lib/context-bisect/loop-recall.d.ts.map +1 -0
  57. package/dist/types/lib/context-bisect/trajectory.d.ts +153 -0
  58. package/dist/types/lib/context-bisect/trajectory.d.ts.map +1 -0
  59. package/dist/types/lib/context-bisect/types.d.ts +68 -1
  60. package/dist/types/lib/context-bisect/types.d.ts.map +1 -1
  61. package/dist/types/lib/context-bisect/walk-to-root.d.ts +103 -0
  62. package/dist/types/lib/context-bisect/walk-to-root.d.ts.map +1 -0
  63. package/dist/types/lib/influence-core/contrastive.d.ts +27 -0
  64. package/dist/types/lib/influence-core/contrastive.d.ts.map +1 -0
  65. package/dist/types/lib/influence-core/index.d.ts +1 -0
  66. package/dist/types/lib/influence-core/index.d.ts.map +1 -1
  67. package/dist/types/lib/influence-core/signals.d.ts +8 -0
  68. package/dist/types/lib/influence-core/signals.d.ts.map +1 -1
  69. package/dist/types/observe.d.ts +2 -2
  70. package/dist/types/observe.d.ts.map +1 -1
  71. package/package.json +3 -3
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assembleTrajectory = exports.findLoopHeads = exports.bucketByAnchors = void 0;
4
+ const trace_1 = require("footprintjs/trace");
5
+ const conventions_js_1 = require("../../conventions.js");
6
+ const llmEdgeWeigher_js_1 = require("./llmEdgeWeigher.js");
7
+ const types_js_1 = require("./types.js");
8
+ /**
9
+ * Partition a commit log by a list of HEAD runtimeStageIds (taken as data — no agent
10
+ * knowledge). Each frame is the half-open range `[head[k], head[k+1])`; commits before
11
+ * the first head are the `prelude`. TOTAL: every commit lands in exactly one frame OR
12
+ * the prelude. Heads not found in the log are ignored; ordering follows the log, not the
13
+ * input list (an out-of-order or duplicate head list cannot reorder/duplicate commits).
14
+ *
15
+ * A head is anchored at the FIRST commit bearing its runtimeStageId — a single stage
16
+ * execution can flush MORE THAN ONE commit bundle under one runtimeStageId (parallel
17
+ * fork merges, multi-flush stages), and those repeats stay INSIDE the frame they open
18
+ * rather than each spawning a spurious one-commit frame.
19
+ */
20
+ function bucketByAnchors(commitLog, headRuntimeStageIds) {
21
+ const headSet = new Set(headRuntimeStageIds);
22
+ const headIdx = [];
23
+ const anchored = new Set();
24
+ for (let i = 0; i < commitLog.length; i++) {
25
+ const id = commitLog[i].runtimeStageId;
26
+ if (headSet.has(id) && !anchored.has(id)) {
27
+ headIdx.push(i);
28
+ anchored.add(id); // later commits sharing this id belong to the frame it opened
29
+ }
30
+ }
31
+ if (headIdx.length === 0) {
32
+ return { frames: [], prelude: commitLog.map((b) => b.runtimeStageId) };
33
+ }
34
+ const prelude = commitLog.slice(0, headIdx[0]).map((b) => b.runtimeStageId);
35
+ const frames = headIdx.map((head, k) => {
36
+ const end = k + 1 < headIdx.length ? headIdx[k + 1] : commitLog.length;
37
+ return { headArrayIdx: head, bodyIds: commitLog.slice(head, end).map((b) => b.runtimeStageId) };
38
+ });
39
+ return { frames, prelude };
40
+ }
41
+ exports.bucketByAnchors = bucketByAnchors;
42
+ // ─── findLoopHeads — flat-chart loop-head detection ──────────────────
43
+ /** True when a commit lives inside the injection-engine subflow (the loop head region). */
44
+ function inInjectionEngine(bundle) {
45
+ const { localStageId, subflowPath } = (0, trace_1.splitStageId)(bundle.stageId);
46
+ if (localStageId === conventions_js_1.SUBFLOW_IDS.INJECTION_ENGINE)
47
+ return true; // the mount commit, if any
48
+ if (subflowPath === undefined)
49
+ return false;
50
+ // a commit nested anywhere under sf-injection-engine (handles nested subflow prefixes)
51
+ return subflowPath === conventions_js_1.SUBFLOW_IDS.INJECTION_ENGINE || subflowPath.startsWith(conventions_js_1.SUBFLOW_IDS.INJECTION_ENGINE + '/');
52
+ }
53
+ /**
54
+ * The flat-chart loop heads: the FIRST commit of each injection-engine ENTRY (one per
55
+ * ReAct iteration, since the loop is branch-sourced back to the injection engine). A head
56
+ * is a commit that is in the injection engine while the previous commit was not — so a
57
+ * multi-commit injection-engine body yields exactly one head per loop.
58
+ *
59
+ * Returns the runtimeStageIds to feed `bucketByAnchors`. Empty when the run never enters
60
+ * the injection engine (e.g. the grouped chart, where the loop lives in sf-llm-call —
61
+ * the caller degrades with an honesty flag).
62
+ */
63
+ function findLoopHeads(commitLog) {
64
+ const heads = [];
65
+ let wasIn = false;
66
+ for (const bundle of commitLog) {
67
+ const isIn = inInjectionEngine(bundle);
68
+ if (isIn && !wasIn)
69
+ heads.push(bundle.runtimeStageId);
70
+ wasIn = isIn;
71
+ }
72
+ return heads;
73
+ }
74
+ exports.findLoopHeads = findLoopHeads;
75
+ /** Build the per-runtimeStageId read-key map from the snapshot execution tree
76
+ * (same walk as the localizer's `buildArtifactIndex`). */
77
+ function buildReadsOf(executionTree) {
78
+ const readsOf = new Map();
79
+ const visit = (node) => {
80
+ if (!node)
81
+ return;
82
+ const id = node.runtimeStageId;
83
+ if (id && !readsOf.has(id))
84
+ readsOf.set(id, node.stageReads ? Object.keys(node.stageReads) : []);
85
+ for (const child of node.children ?? [])
86
+ visit(child);
87
+ visit(node.next);
88
+ };
89
+ visit(executionTree);
90
+ return readsOf;
91
+ }
92
+ function safeStringify(value) {
93
+ if (typeof value === 'string')
94
+ return value;
95
+ try {
96
+ return JSON.stringify(value) ?? String(value);
97
+ }
98
+ catch {
99
+ return String(value);
100
+ }
101
+ }
102
+ /**
103
+ * Project ONE loop frame from a given commit log + readsOf — the shared core used by BOTH
104
+ * the flat path (over the run commit log) and the grouped path (over a subflow's OWN inner
105
+ * commit log). `headArrayIdx`/`bodyIds` bound the frame WITHIN `log`; `subflowScope`, when
106
+ * set, records that all indices are relative to that subflow's inner log.
107
+ */
108
+ function projectFrame(loopIndex, log, lastIdxOf, readsOf, headArrayIdx, bodyIds, maxTextChars, subflowScope) {
109
+ // Locate the call-llm commit WITHIN this frame's body (the LLM-step pointer).
110
+ let llmCallId;
111
+ let llmCallArrayIdx;
112
+ let llmBundle;
113
+ for (let i = headArrayIdx; i < headArrayIdx + bodyIds.length; i++) {
114
+ if ((0, trace_1.splitStageId)(log[i].stageId).localStageId === conventions_js_1.STAGE_IDS.CALL_LLM) {
115
+ llmCallId = log[i].runtimeStageId;
116
+ llmCallArrayIdx = i;
117
+ llmBundle = log[i];
118
+ break;
119
+ }
120
+ }
121
+ const intermediateText = llmCallId !== undefined ? (0, llmEdgeWeigher_js_1.stepOutputText)(log, lastIdxOf, llmCallId, maxTextChars) : undefined;
122
+ const keys = llmCallId !== undefined ? (readsOf.get(llmCallId) ?? []) : [];
123
+ const contextSources = keys.map((key) => {
124
+ // EXCLUSIVE beforeIdx — finds the PRIOR writer, never call-llm's own write-back.
125
+ const writer = llmCallArrayIdx !== undefined ? (0, trace_1.findLastWriter)(log, key, llmCallArrayIdx) : undefined;
126
+ const writerId = writer?.runtimeStageId;
127
+ const writerArrayIdx = writerId !== undefined ? lastIdxOf.get(writerId) : undefined;
128
+ const value = writerArrayIdx !== undefined ? (0, trace_1.commitValueAt)(log, writerArrayIdx, key) : undefined;
129
+ const text = value === undefined ? '' : safeStringify(value).slice(0, maxTextChars);
130
+ return {
131
+ key,
132
+ writerId,
133
+ writerArrayIdx,
134
+ value,
135
+ evidence: { id: `${llmCallId}::${key}`, text, ancestorTexts: [] },
136
+ };
137
+ });
138
+ const incompleteSources = llmBundle?.untrackedSources;
139
+ const untrackedReadsPresent = incompleteSources !== undefined && incompleteSources.length > 0;
140
+ return {
141
+ loopIndex,
142
+ llmCallId,
143
+ llmCallArrayIdx,
144
+ headArrayIdx,
145
+ bodyIds,
146
+ intermediateText,
147
+ contextSources,
148
+ ...(subflowScope !== undefined ? { subflowScope } : {}),
149
+ ...(untrackedReadsPresent ? { incompleteSources } : {}),
150
+ untrackedReadsPresent,
151
+ };
152
+ }
153
+ /** The sf-llm-call mount keys in `subflowResults`, in loop order (by execution index). */
154
+ function llmCallMountKeys(subflowResults) {
155
+ return Object.keys(subflowResults)
156
+ .filter((k) => k.includes('#') && (0, trace_1.splitStageId)(k.split('#')[0]).localStageId === conventions_js_1.SUBFLOW_IDS.LLM_CALL)
157
+ .sort((a, b) => (0, trace_1.parseRuntimeStageId)(a).executionIndex - (0, trace_1.parseRuntimeStageId)(b).executionIndex);
158
+ }
159
+ /**
160
+ * GROUPED chart projection (`reactMode: 'dynamic-grouped'`). The LLM turn runs inside an
161
+ * `sf-llm-call` subflow, so its `call-llm` + slot writes live in the subflow's OWN commit log
162
+ * — retained per-iteration under `subflowResults['sf-llm-call#k']` (footprintjs
163
+ * subflow-commit-visibility). Each loop is a frame projected PER-SCOPE over its inner log; no
164
+ * cross-scope merge, so `findLastWriter`/`commitValueAt` run correctly over the isolated log.
165
+ */
166
+ function assembleGroupedTrajectory(artifacts, mountKeys, maxTextChars, maxFrames) {
167
+ const sr = (artifacts.snapshot.subflowResults ?? {});
168
+ const runLog = (artifacts.snapshot.commitLog ?? []);
169
+ // Run-level prelude: commits before the first sf-llm-call mount (seed / memory-read setup).
170
+ const firstMountRunIdx = runLog.findIndex((b) => b.runtimeStageId === mountKeys[0]);
171
+ const prelude = firstMountRunIdx > 0 ? runLog.slice(0, firstMountRunIdx).map((b) => b.runtimeStageId) : [];
172
+ const kept = maxFrames !== undefined ? mountKeys.slice(0, maxFrames) : mountKeys;
173
+ const truncated = maxFrames !== undefined && mountKeys.length > maxFrames;
174
+ const frames = kept.map((key, loopIndex) => {
175
+ const innerLog = (sr[key]?.treeContext?.history ?? []);
176
+ const innerReadsOf = buildReadsOf(sr[key]?.treeContext?.stageContexts);
177
+ const innerLastIdxOf = new Map();
178
+ for (let i = 0; i < innerLog.length; i++)
179
+ innerLastIdxOf.set(innerLog[i].runtimeStageId, i);
180
+ const bodyIds = innerLog.map((b) => b.runtimeStageId);
181
+ return projectFrame(loopIndex, innerLog, innerLastIdxOf, innerReadsOf, 0, bodyIds, maxTextChars, key);
182
+ });
183
+ return { frames, prelude, honestyFlags: [], ...(truncated ? { truncated: { byFrames: true } } : {}) };
184
+ }
185
+ /**
186
+ * Slice a recorded agent run into a {@link Trajectory} — one {@link LoopFrame} per ReAct
187
+ * iteration, each carrying its `call-llm` pointer, the call's output text, and the live
188
+ * {@link ContextSource}s that fed it (traced via `findLastWriter` + `commitValueAt` from the
189
+ * SAME commit log — zero new capture).
190
+ *
191
+ * Takes the SAME `ContextBugArtifacts` bag the localizer takes — adopter call is just
192
+ * `assembleTrajectory(artifacts)`.
193
+ *
194
+ * Handles BOTH chart shapes:
195
+ * - FLAT (`reactMode: 'dynamic'`, default): `call-llm` is a parent-level stage; frames are
196
+ * bucketed over the run commit log by the `sf-injection-engine` loop heads.
197
+ * - GROUPED (`reactMode: 'dynamic-grouped'`): the LLM turn runs in an `sf-llm-call` subflow;
198
+ * each loop is projected PER-SCOPE over its own inner commit log (retained per-iteration by
199
+ * footprintjs subflow-commit-visibility). Such frames carry `subflowScope` and their array
200
+ * indices are inner-log-relative.
201
+ *
202
+ * Standing caveat on every result: contextSources show only sources re-committed to tracked
203
+ * state; context the model retained internally (carried in its own reasoning, never
204
+ * re-committed) leaves no read→write edge and is NOT represented.
205
+ */
206
+ function assembleTrajectory(artifacts, opts = {}) {
207
+ const maxTextChars = opts.maxTextChars ?? types_js_1.CONTEXT_BISECT_DEFAULTS.maxTextChars;
208
+ // Grouped agent ⟺ the LLM turn is wrapped in sf-llm-call (its mounts appear in subflowResults).
209
+ const mountKeys = llmCallMountKeys((artifacts.snapshot.subflowResults ?? {}));
210
+ if (mountKeys.length > 0) {
211
+ return assembleGroupedTrajectory(artifacts, mountKeys, maxTextChars, opts.maxFrames);
212
+ }
213
+ // FLAT path: project over the run commit log, bucketed by injection-engine loop heads.
214
+ const commitLog = (artifacts.snapshot.commitLog ?? []);
215
+ const lastIdxOf = new Map();
216
+ for (let i = 0; i < commitLog.length; i++)
217
+ lastIdxOf.set(commitLog[i].runtimeStageId, i);
218
+ const readsOf = buildReadsOf(artifacts.snapshot.executionTree);
219
+ const heads = findLoopHeads(commitLog);
220
+ const { frames: buckets, prelude } = bucketByAnchors(commitLog, heads);
221
+ const kept = opts.maxFrames !== undefined ? buckets.slice(0, opts.maxFrames) : buckets;
222
+ const truncated = opts.maxFrames !== undefined && buckets.length > opts.maxFrames;
223
+ const frames = kept.map((bucket, loopIndex) => projectFrame(loopIndex, commitLog, lastIdxOf, readsOf, bucket.headArrayIdx, bucket.bodyIds, maxTextChars));
224
+ return { frames, prelude, honestyFlags: [], ...(truncated ? { truncated: { byFrames: true } } : {}) };
225
+ }
226
+ exports.assembleTrajectory = assembleTrajectory;
227
+ //# sourceMappingURL=trajectory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../../../src/lib/context-bisect/trajectory.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/context-bisect/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;;;AAoVH,wEAAwE;AAE3D,QAAA,uBAAuB,GAAG;IACrC,uDAAuD;IACvD,QAAQ,EAAE,EAAE;IACZ,sDAAsD;IACtD,QAAQ,EAAE,EAAE;IACZ,0CAA0C;IAC1C,WAAW,EAAE,EAAE;IACf,4DAA4D;IAC5D,YAAY,EAAE,IAAI;IAClB,yEAAyE;IACzE,OAAO,EAAE,CAAC;IACV,mEAAmE;IACnE,aAAa,EAAE,GAAG;IAClB,mDAAmD;IACnD,SAAS,EAAE,EAAE;IACb,8DAA8D;IAC9D,WAAW,EAAE,CAAC;CACN,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/context-bisect/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;;;AAyZH,wEAAwE;AAE3D,QAAA,uBAAuB,GAAG;IACrC,uDAAuD;IACvD,QAAQ,EAAE,EAAE;IACZ,sDAAsD;IACtD,QAAQ,EAAE,EAAE;IACZ,0CAA0C;IAC1C,WAAW,EAAE,EAAE;IACf,4DAA4D;IAC5D,YAAY,EAAE,IAAI;IAClB,yEAAyE;IACzE,OAAO,EAAE,CAAC;IACV,mEAAmE;IACnE,aAAa,EAAE,GAAG;IAClB,mDAAmD;IACnD,SAAS,EAAE,EAAE;IACb,8DAA8D;IAC9D,WAAW,EAAE,CAAC;CACN,CAAC"}
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.walkTrajectory = exports.walkToRoot = exports.buildWriterFrameIndex = void 0;
4
+ const ablation_js_1 = require("./ablation.js");
5
+ const localize_js_1 = require("./localize.js");
6
+ const loop_recall_js_1 = require("./loop-recall.js");
7
+ const trajectory_js_1 = require("./trajectory.js");
8
+ /** Margin under which the top-2 narrowed candidates are "unseparated" (mirrors the toBacktrackTrace pattern). */
9
+ const UNSEPARATED_MARGIN = 0.05;
10
+ /**
11
+ * Resolve every `writerId` to the index of the frame whose `bodyIds` contains it (NOT via
12
+ * `parseRuntimeStageId` — that yields executionIndex, not loopIndex). A writer not in any frame
13
+ * (run prelude / root-seeded) maps to `undefined`. Invariant: each id lands in exactly one frame.
14
+ */
15
+ function buildWriterFrameIndex(trajectory) {
16
+ const map = new Map();
17
+ trajectory.frames.forEach((frame, idx) => {
18
+ for (const id of frame.bodyIds)
19
+ if (!map.has(id))
20
+ map.set(id, idx);
21
+ });
22
+ return map;
23
+ }
24
+ exports.buildWriterFrameIndex = buildWriterFrameIndex;
25
+ /** Map each suspectId present in a frame to the runtimeStageId that WROTE its slot (cross-loop provenance). */
26
+ function writtenByOf(frame) {
27
+ const map = new Map();
28
+ for (const src of frame.contextSources) {
29
+ const v = src.value;
30
+ if (Array.isArray(v)) {
31
+ // injection slots: an array of records keyed by sourceId
32
+ for (const rec of v) {
33
+ const id = typeof rec.sourceId === 'string' ? rec.sourceId : undefined;
34
+ if (id !== undefined && !map.has(id))
35
+ map.set(id, src.writerId);
36
+ }
37
+ }
38
+ else if (v !== null && typeof v === 'object' && typeof v.toolName === 'string') {
39
+ // lastToolResult: a { toolName, result } object → the tool suspect
40
+ const tool = v.toolName;
41
+ if (!map.has(tool))
42
+ map.set(tool, src.writerId);
43
+ }
44
+ }
45
+ return map;
46
+ }
47
+ /** A minimal Suspect for ablationForSuspect (only kind + detail identity are read). */
48
+ function suspectFor(suspectId, kind) {
49
+ const detail = kind === 'tool' ? { toolName: suspectId } : { injectionId: suspectId };
50
+ return {
51
+ source: suspectId, stageName: suspectId, kind, detail,
52
+ score: 0, structuralScore: 0, hasContentEvidence: false, edgePath: [],
53
+ };
54
+ }
55
+ /**
56
+ * Walk backward from the symptom to the root context source — from a recorded run.
57
+ * Thin wrapper: `assembleTrajectory` then {@link walkTrajectory}. See module docs for the honesty model.
58
+ */
59
+ async function walkToRoot(artifacts, opts) {
60
+ return walkTrajectory((0, trajectory_js_1.assembleTrajectory)(artifacts), opts);
61
+ }
62
+ exports.walkToRoot = walkToRoot;
63
+ /**
64
+ * The walk itself, over an already-assembled {@link Trajectory} (composable + directly testable).
65
+ * FLAT charts only for the cross-loop hop; grouped charts degrade (within-loop) with a flag.
66
+ */
67
+ async function walkTrajectory(trajectory, opts) {
68
+ const beamK = opts.beamK ?? 2;
69
+ const maxHops = opts.maxHops ?? 8;
70
+ const maxAblations = opts.maxAblations ?? 24;
71
+ const classify = opts.classifier ?? localize_js_1.defaultSuspectClassifier;
72
+ const honestyFlags = [...trajectory.honestyFlags];
73
+ const grouped = trajectory.frames.some((f) => f.subflowScope !== undefined);
74
+ if (grouped) {
75
+ honestyFlags.push({
76
+ flag: 'untracked-sources',
77
+ note: 'cross-loop hop unavailable for the grouped chart — loop frames are scope-isolated; the walk degrades to within one loop.',
78
+ });
79
+ }
80
+ const writerFrame = buildWriterFrameIndex(trajectory);
81
+ // Baseline stability (the un-ablated scenario must reproduce for any ablation verdict to be trusted).
82
+ let baselineStable = true;
83
+ let ablationsUsed = 0;
84
+ if (opts.rerun) {
85
+ const baseline = await (0, ablation_js_1.runAblationProbe)({ embedder: opts.embedder, rerun: opts.rerun }, []);
86
+ ablationsUsed++;
87
+ baselineStable = !(0, ablation_js_1.probeFlipped)(baseline);
88
+ }
89
+ const hops = [];
90
+ const visited = new Set();
91
+ let frameIdx = trajectory.frames.length - 1; // start at the symptom (final loop)
92
+ let byHops = false;
93
+ let byAblations = false;
94
+ while (frameIdx >= 0) {
95
+ if (hops.length >= maxHops) {
96
+ byHops = true;
97
+ break;
98
+ }
99
+ const frame = trajectory.frames[frameIdx];
100
+ // NARROW: rank THIS loop's suspects by per-loop influence (single-frame sub-trajectory).
101
+ const sub = { frames: [frame], prelude: [], honestyFlags: [] };
102
+ const shortlist = await (0, loop_recall_js_1.shortlistEarlyCulprits)(sub, {
103
+ embedder: opts.embedder,
104
+ ...(opts.recencyDecay !== undefined ? { recencyDecay: opts.recencyDecay } : {}),
105
+ ...(opts.k !== undefined ? { k: opts.k } : {}),
106
+ ...(opts.signal ? { signal: opts.signal } : {}),
107
+ classifier: classify,
108
+ });
109
+ const beam = shortlist.candidates.slice(0, beamK);
110
+ if (beam.length === 0)
111
+ break;
112
+ const writtenBy = writtenByOf(frame);
113
+ const unseparated = beam.length >= 2 && Math.abs(beam[0].recallScore - beam[1].recallScore) < UNSEPARATED_MARGIN;
114
+ // ISOLATE: run-wide ablation of each beam candidate; ablation is the only discriminator.
115
+ let chosen = beam[0];
116
+ let chosenVerdict;
117
+ let convicted = false;
118
+ if (opts.rerun) {
119
+ for (const cand of beam) {
120
+ if (ablationsUsed >= maxAblations) {
121
+ byAblations = true;
122
+ break;
123
+ }
124
+ const spec = (0, ablation_js_1.ablationForSuspect)(suspectFor(cand.suspectId, cand.kind));
125
+ if (spec === undefined)
126
+ continue;
127
+ const stats = await (0, ablation_js_1.runAblationProbe)({ embedder: opts.embedder, rerun: opts.rerun }, [spec]);
128
+ ablationsUsed++;
129
+ const flipped = baselineStable && (0, ablation_js_1.probeFlipped)(stats);
130
+ if (flipped) {
131
+ chosen = cand;
132
+ chosenVerdict = (0, ablation_js_1.verdictFor)(`ablate ${cand.suspectId}`, stats, baselineStable);
133
+ convicted = true;
134
+ break; // ablation picked this hop's culprit
135
+ }
136
+ }
137
+ }
138
+ const writer = writtenBy.get(chosen.suspectId);
139
+ const nextFrameIdx = writer !== undefined ? writerFrame.get(writer) : undefined;
140
+ // Cross-loop only: descend strictly backward to an unvisited earlier frame.
141
+ const descendIdx = nextFrameIdx !== undefined && nextFrameIdx < frameIdx ? nextFrameIdx : undefined;
142
+ const note = writer === undefined ? 'untracked-origin'
143
+ : opts.rerun && !convicted ? 'overdetermined-or-incomplete'
144
+ : unseparated ? 'unseparated-siblings'
145
+ : undefined;
146
+ hops.push({
147
+ loopIndex: frame.loopIndex,
148
+ suspectId: chosen.suspectId,
149
+ kind: chosen.kind,
150
+ narrowedBy: 'text-similarity',
151
+ ...(chosenVerdict ? { verdict: chosenVerdict } : {}),
152
+ ...(writer !== undefined ? { writtenBy: writer } : {}),
153
+ ...(descendIdx !== undefined ? { cameFrom: trajectory.frames[descendIdx].loopIndex } : {}),
154
+ ...(note ? { note } : {}),
155
+ });
156
+ // Stop conditions: root-seeded origin, no earlier frame, or a visited cycle.
157
+ const visitKey = `${chosen.suspectId}@${frame.loopIndex}`;
158
+ if (descendIdx === undefined || visited.has(visitKey))
159
+ break;
160
+ visited.add(visitKey);
161
+ frameIdx = descendIdx;
162
+ }
163
+ // root = the DEEPEST (last-walked) hop convicted by ablation.
164
+ let root;
165
+ for (const hop of hops)
166
+ if (hop.verdict?.verdict === 'confirmed')
167
+ root = hop;
168
+ return {
169
+ hops,
170
+ ...(root ? { root } : {}),
171
+ honestyFlags,
172
+ ...(byHops || byAblations ? { truncated: { byHops, byAblations } } : {}),
173
+ };
174
+ }
175
+ exports.walkTrajectory = walkTrajectory;
176
+ //# sourceMappingURL=walk-to-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-to-root.js","sourceRoot":"","sources":["../../../src/lib/context-bisect/walk-to-root.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scoreContrastiveInfluence = void 0;
4
+ /**
5
+ * contrastive — influence scoring against a REFERENCE output (RFC-003).
6
+ *
7
+ * Pattern: a SEPARATE, opt-in second stage over the four-signal scorer — not a
8
+ * modification of `scoreInfluence`. Same `InfluenceScore[]` return, so
9
+ * `rankingConfidence` and the rest compose on it unchanged.
10
+ * Role: `src/lib/influence-core/` leaf, sibling to `scoreInfluence`.
11
+ *
12
+ * ## Why this exists (the topical-innocent confound)
13
+ *
14
+ * Plain output-similarity (`scoreInfluence`'s FA) ranks a source by how much it
15
+ * resembles the actual answer. That is confounded by **topically-central
16
+ * innocents**: the policy a refund decision is *about* resembles ANY refund
17
+ * output — right or wrong — so it can out-rank the source that actually caused
18
+ * the wrong one. The fix: score by CONTRAST against a reference output (a
19
+ * known-good / expected / prior-good run). A topical innocent is similar to
20
+ * BOTH outputs, so it cancels (~0 contrast); the real culprit is similar to the
21
+ * WRONG output specifically, so it stands out.
22
+ *
23
+ * contrastive FA(e) = sim(e, answer) − sim(e, reference)
24
+ *
25
+ * Everything else (the AVG / PERSIST / DEPTH reasoning-trace signals, the
26
+ * composite, adaptive weights) is shared with `scoreInfluence` verbatim — only
27
+ * the FA term is contrastive.
28
+ *
29
+ * Honest claim (RFC-002 §2): still an embedding-geometry PROXY, never causal —
30
+ * the contrast removes a confound, it does not prove causation. Ablation is the
31
+ * causal tier. And it is OPT-IN: it needs a reference output, so it is for
32
+ * regression / eval debugging (you have a prior-good or expected output), not
33
+ * cold localization — without a reference, use `scoreInfluence`.
34
+ */
35
+ const cosine_js_1 = require("../../memory/embedding/cosine.js");
36
+ const signals_js_1 = require("./signals.js");
37
+ const types_js_1 = require("./types.js");
38
+ /**
39
+ * Score evidence by CONTRASTIVE influence: `sim(e, answer) − sim(e, reference)`
40
+ * for the FA term, the four-signal composite otherwise. Returns `InfluenceScore[]`
41
+ * sorted descending — drop-in compatible with `scoreInfluence` consumers
42
+ * (`rankingConfidence`, etc.).
43
+ *
44
+ * @throws when an evidence id is duplicated (same contract as `scoreInfluence`).
45
+ */
46
+ async function scoreContrastiveInfluence(args) {
47
+ const weights = args.weights ?? types_js_1.DEFAULT_INFLUENCE_WEIGHTS;
48
+ const threshold = args.persistenceThreshold ?? types_js_1.DEFAULT_PERSISTENCE_THRESHOLD;
49
+ assertUniqueIds(args.evidence);
50
+ (0, signals_js_1.assertValidWeights)(weights, 'scoreContrastiveInfluence');
51
+ // ONE deduplicated embedding pass over every distinct text (answer + reference
52
+ // + evidence + ancestors).
53
+ const texts = new Set([args.answerText, args.referenceText]);
54
+ for (const item of args.evidence) {
55
+ texts.add(item.text);
56
+ for (const ancestor of item.ancestorTexts)
57
+ texts.add(ancestor);
58
+ }
59
+ const vectorByText = await (0, signals_js_1.embedAll)(args.embedder, [...texts], args.signal);
60
+ const answerVec = vectorByText.get(args.answerText);
61
+ const referenceVec = vectorByText.get(args.referenceText);
62
+ const scored = args.evidence.map((item) => {
63
+ const evidenceVec = vectorByText.get(item.text);
64
+ const ancestorVecs = item.ancestorTexts.map((t) => vectorByText.get(t));
65
+ // The only contrastive term: answer-similarity MINUS reference-similarity.
66
+ const faContrast = (0, cosine_js_1.cosineSimilarity)(evidenceVec, answerVec) - (0, cosine_js_1.cosineSimilarity)(evidenceVec, referenceVec);
67
+ const signals = {
68
+ fa: faContrast,
69
+ avg: (0, signals_js_1.averageRelevancy)(evidenceVec, ancestorVecs),
70
+ persist: (0, signals_js_1.persistence)(evidenceVec, ancestorVecs, threshold),
71
+ depth: (0, signals_js_1.structuralProximity)(ancestorVecs.length),
72
+ };
73
+ const effective = (0, signals_js_1.adaptWeights)(weights, ancestorVecs.length);
74
+ return {
75
+ id: item.id,
76
+ signals,
77
+ weights: effective.weights,
78
+ adapted: effective.adapted,
79
+ score: (0, signals_js_1.compositeScore)(signals, effective.weights),
80
+ };
81
+ });
82
+ return scored.sort((a, b) => b.score - a.score);
83
+ }
84
+ exports.scoreContrastiveInfluence = scoreContrastiveInfluence;
85
+ function assertUniqueIds(evidence) {
86
+ const seen = new Set();
87
+ for (const e of evidence) {
88
+ if (seen.has(e.id))
89
+ throw new Error(`scoreContrastiveInfluence: duplicate evidence id "${e.id}"`);
90
+ seen.add(e.id);
91
+ }
92
+ }
93
+ //# sourceMappingURL=contrastive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contrastive.js","sourceRoot":"","sources":["../../../src/lib/influence-core/contrastive.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@
26
26
  * and never causal attribution.
27
27
  */
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.scoreMargin = exports.pairwiseSimilarity = exports.structuralProximity = exports.scoreInfluence = exports.persistence = exports.finalAnswerSimilarity = exports.compositeScore = exports.averageRelevancy = exports.adaptWeights = exports.embeddingCache = exports.EmbeddingCache = exports.contentHash = exports.ratioStrategy = exports.rankingConfidence = exports.marginStrategy = exports.DEFAULT_SHORTLIST_BAND = exports.DEFAULT_PERSISTENCE_THRESHOLD = exports.DEFAULT_MARGIN_THRESHOLD = exports.DEFAULT_INFLUENCE_WEIGHTS = exports.DEFAULT_CLEAR_WINNER_RATIO = exports.DEFAULT_CLEAR_WINNER_MARGIN = void 0;
29
+ exports.scoreMargin = exports.pairwiseSimilarity = exports.structuralProximity = exports.scoreInfluence = exports.persistence = exports.finalAnswerSimilarity = exports.compositeScore = exports.averageRelevancy = exports.adaptWeights = exports.embeddingCache = exports.EmbeddingCache = exports.contentHash = exports.scoreContrastiveInfluence = exports.ratioStrategy = exports.rankingConfidence = exports.marginStrategy = exports.DEFAULT_SHORTLIST_BAND = exports.DEFAULT_PERSISTENCE_THRESHOLD = exports.DEFAULT_MARGIN_THRESHOLD = exports.DEFAULT_INFLUENCE_WEIGHTS = exports.DEFAULT_CLEAR_WINNER_RATIO = exports.DEFAULT_CLEAR_WINNER_MARGIN = void 0;
30
30
  var types_js_1 = require("./types.js");
31
31
  Object.defineProperty(exports, "DEFAULT_CLEAR_WINNER_MARGIN", { enumerable: true, get: function () { return types_js_1.DEFAULT_CLEAR_WINNER_MARGIN; } });
32
32
  Object.defineProperty(exports, "DEFAULT_CLEAR_WINNER_RATIO", { enumerable: true, get: function () { return types_js_1.DEFAULT_CLEAR_WINNER_RATIO; } });
@@ -38,6 +38,8 @@ var attributability_js_1 = require("./attributability.js");
38
38
  Object.defineProperty(exports, "marginStrategy", { enumerable: true, get: function () { return attributability_js_1.marginStrategy; } });
39
39
  Object.defineProperty(exports, "rankingConfidence", { enumerable: true, get: function () { return attributability_js_1.rankingConfidence; } });
40
40
  Object.defineProperty(exports, "ratioStrategy", { enumerable: true, get: function () { return attributability_js_1.ratioStrategy; } });
41
+ var contrastive_js_1 = require("./contrastive.js");
42
+ Object.defineProperty(exports, "scoreContrastiveInfluence", { enumerable: true, get: function () { return contrastive_js_1.scoreContrastiveInfluence; } });
41
43
  var cache_js_1 = require("./cache.js");
42
44
  Object.defineProperty(exports, "contentHash", { enumerable: true, get: function () { return cache_js_1.contentHash; } });
43
45
  Object.defineProperty(exports, "EmbeddingCache", { enumerable: true, get: function () { return cache_js_1.EmbeddingCache; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/influence-core/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAmBH,uCAOoB;AANlB,uHAAA,2BAA2B,OAAA;AAC3B,sHAAA,0BAA0B,OAAA;AAC1B,qHAAA,yBAAyB,OAAA;AACzB,oHAAA,wBAAwB,OAAA;AACxB,yHAAA,6BAA6B,OAAA;AAC7B,kHAAA,sBAAsB,OAAA;AAGxB,2DAK8B;AAJ5B,oHAAA,cAAc,OAAA;AACd,uHAAA,iBAAiB,OAAA;AACjB,mHAAA,aAAa,OAAA;AAIf,uCAMoB;AALlB,uGAAA,WAAW,OAAA;AACX,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AAKhB,2CASsB;AARpB,0GAAA,YAAY,OAAA;AACZ,8GAAA,gBAAgB,OAAA;AAChB,4GAAA,cAAc,OAAA;AACd,mHAAA,qBAAqB,OAAA;AACrB,yGAAA,WAAW,OAAA;AACX,4GAAA,cAAc,OAAA;AACd,iHAAA,mBAAmB,OAAA;AAIrB,iDAAkF;AAAzE,mHAAA,kBAAkB,OAAA;AAE3B,yCAAgE;AAAvD,wGAAA,WAAW,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/influence-core/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAmBH,uCAOoB;AANlB,uHAAA,2BAA2B,OAAA;AAC3B,sHAAA,0BAA0B,OAAA;AAC1B,qHAAA,yBAAyB,OAAA;AACzB,oHAAA,wBAAwB,OAAA;AACxB,yHAAA,6BAA6B,OAAA;AAC7B,kHAAA,sBAAsB,OAAA;AAGxB,2DAK8B;AAJ5B,oHAAA,cAAc,OAAA;AACd,uHAAA,iBAAiB,OAAA;AACjB,mHAAA,aAAa,OAAA;AAIf,mDAAiG;AAAxF,2HAAA,yBAAyB,OAAA;AAElC,uCAMoB;AALlB,uGAAA,WAAW,OAAA;AACX,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AAKhB,2CASsB;AARpB,0GAAA,YAAY,OAAA;AACZ,8GAAA,gBAAgB,OAAA;AAChB,4GAAA,cAAc,OAAA;AACd,mHAAA,qBAAqB,OAAA;AACrB,yGAAA,WAAW,OAAA;AACX,4GAAA,cAAc,OAAA;AACd,iHAAA,mBAAmB,OAAA;AAIrB,iDAAkF;AAAzE,mHAAA,kBAAkB,OAAA;AAE3B,yCAAgE;AAAvD,wGAAA,WAAW,OAAA"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.scoreInfluence = exports.compositeScore = exports.adaptWeights = exports.structuralProximity = exports.persistence = exports.averageRelevancy = exports.finalAnswerSimilarity = void 0;
3
+ exports.assertValidWeights = exports.embedAll = exports.scoreInfluence = exports.compositeScore = exports.adaptWeights = exports.structuralProximity = exports.persistence = exports.averageRelevancy = exports.finalAnswerSimilarity = void 0;
4
4
  /**
5
5
  * FDL influence signals — the four-signal composite from the Visible
6
6
  * Reasoning paper (Eq. 1–6), extracted verbatim as RFC-003 block D6.
@@ -213,6 +213,7 @@ async function embedAll(embedder, texts, signal) {
213
213
  byText.set(texts[i], vectors[i]);
214
214
  return byText;
215
215
  }
216
+ exports.embedAll = embedAll;
216
217
  async function sequentialEmbed(embedder, texts, signal) {
217
218
  const out = [];
218
219
  for (const text of texts) {
@@ -220,16 +221,22 @@ async function sequentialEmbed(embedder, texts, signal) {
220
221
  }
221
222
  return out;
222
223
  }
223
- function assertValidWeights(weights) {
224
+ /**
225
+ * Validate composite weights: every weight finite & non-negative, and not all
226
+ * zero. Shared by `scoreInfluence` and `scoreContrastiveInfluence` — `fnName`
227
+ * attributes the error to the actual caller.
228
+ */
229
+ function assertValidWeights(weights, fnName = 'scoreInfluence') {
224
230
  for (const [name, value] of Object.entries(weights)) {
225
231
  if (!Number.isFinite(value) || value < 0) {
226
- throw new Error(`scoreInfluence: weight '${name}' must be a finite non-negative number (got ${value})`);
232
+ throw new Error(`${fnName}: weight '${name}' must be a finite non-negative number (got ${value})`);
227
233
  }
228
234
  }
229
235
  if (weights.fa + weights.avg + weights.persist + weights.depth === 0) {
230
- throw new Error('scoreInfluence: all weights are zero — the composite would always be 0');
236
+ throw new Error(`${fnName}: all weights are zero — the composite would always be 0`);
231
237
  }
232
238
  }
239
+ exports.assertValidWeights = assertValidWeights;
233
240
  function assertUniqueIds(evidence) {
234
241
  const seen = new Set();
235
242
  for (const item of evidence) {
@@ -1 +1 @@
1
- {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/lib/influence-core/signals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/lib/influence-core/signals.ts"],"names":[],"mappings":"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"}