agentfootprint 6.25.0 → 6.26.1

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 (49) hide show
  1. package/README.md +194 -48
  2. package/dist/esm/lib/context-bisect/ablation.js +183 -0
  3. package/dist/esm/lib/context-bisect/ablation.js.map +1 -0
  4. package/dist/esm/lib/context-bisect/bisect.js +129 -0
  5. package/dist/esm/lib/context-bisect/bisect.js.map +1 -0
  6. package/dist/esm/lib/context-bisect/index.js +22 -0
  7. package/dist/esm/lib/context-bisect/index.js.map +1 -0
  8. package/dist/esm/lib/context-bisect/llmEdgeWeigher.js +0 -0
  9. package/dist/esm/lib/context-bisect/llmEdgeWeigher.js.map +1 -0
  10. package/dist/esm/lib/context-bisect/localize.js +555 -0
  11. package/dist/esm/lib/context-bisect/localize.js.map +1 -0
  12. package/dist/esm/lib/context-bisect/types.js +56 -0
  13. package/dist/esm/lib/context-bisect/types.js.map +1 -0
  14. package/dist/esm/lib/tool-lint/cli.js +6 -1
  15. package/dist/esm/lib/tool-lint/cli.js.map +1 -1
  16. package/dist/esm/observe.js +7 -0
  17. package/dist/esm/observe.js.map +1 -1
  18. package/dist/lib/context-bisect/ablation.js +192 -0
  19. package/dist/lib/context-bisect/ablation.js.map +1 -0
  20. package/dist/lib/context-bisect/bisect.js +133 -0
  21. package/dist/lib/context-bisect/bisect.js.map +1 -0
  22. package/dist/lib/context-bisect/index.js +40 -0
  23. package/dist/lib/context-bisect/index.js.map +1 -0
  24. package/dist/lib/context-bisect/llmEdgeWeigher.js +0 -0
  25. package/dist/lib/context-bisect/llmEdgeWeigher.js.map +1 -0
  26. package/dist/lib/context-bisect/localize.js +563 -0
  27. package/dist/lib/context-bisect/localize.js.map +1 -0
  28. package/dist/lib/context-bisect/types.js +59 -0
  29. package/dist/lib/context-bisect/types.js.map +1 -0
  30. package/dist/lib/tool-lint/cli.js +30 -2
  31. package/dist/lib/tool-lint/cli.js.map +1 -1
  32. package/dist/observe.js +42 -20
  33. package/dist/observe.js.map +1 -1
  34. package/dist/types/lib/context-bisect/ablation.d.ts +97 -0
  35. package/dist/types/lib/context-bisect/ablation.d.ts.map +1 -0
  36. package/dist/types/lib/context-bisect/bisect.d.ts +76 -0
  37. package/dist/types/lib/context-bisect/bisect.d.ts.map +1 -0
  38. package/dist/types/lib/context-bisect/index.d.ts +22 -0
  39. package/dist/types/lib/context-bisect/index.d.ts.map +1 -0
  40. package/dist/types/lib/context-bisect/llmEdgeWeigher.d.ts +125 -0
  41. package/dist/types/lib/context-bisect/llmEdgeWeigher.d.ts.map +1 -0
  42. package/dist/types/lib/context-bisect/localize.d.ts +119 -0
  43. package/dist/types/lib/context-bisect/localize.d.ts.map +1 -0
  44. package/dist/types/lib/context-bisect/types.d.ts +356 -0
  45. package/dist/types/lib/context-bisect/types.d.ts.map +1 -0
  46. package/dist/types/lib/tool-lint/cli.d.ts.map +1 -1
  47. package/dist/types/observe.d.ts +1 -0
  48. package/dist/types/observe.d.ts.map +1 -1
  49. package/package.json +1 -1
@@ -25,7 +25,6 @@
25
25
  * embedder gating, use `analyzeToolCatalog` from
26
26
  * `agentfootprint/observe` in a small script instead.
27
27
  */
28
- import { readFile } from 'node:fs/promises';
29
28
  import { mockEmbedder } from '../../memory/embedding/mockEmbedder.js';
30
29
  import { analyzeToolCatalog, MOCK_EMBEDDER_CALIBRATION } from './analyze.js';
31
30
  import { formatToolCatalogReport } from './format.js';
@@ -159,6 +158,12 @@ export async function runToolLintCli(argv, io = {
159
158
  }
160
159
  let catalog;
161
160
  try {
161
+ // Lazy node:fs import (browser-compat): `agentfootprint/observe`
162
+ // re-exports this module, and a TOP-LEVEL node:fs/promises import
163
+ // detonates any browser bundle at module-eval (found by the
164
+ // agent-playground; same lazy-gating pattern as audit's node:crypto).
165
+ // The CLI path is the only consumer that touches the filesystem.
166
+ const { readFile } = await import('node:fs/promises');
162
167
  catalog = coerceCatalog(JSON.parse(await readFile(args.file, 'utf8')));
163
168
  }
164
169
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../src/lib/tool-lint/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../src/lib/tool-lint/cli.ts"],"names":[],"mappings":"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"}
@@ -70,6 +70,13 @@ export { adaptWeights, averageRelevancy, compositeScore, contentHash, DEFAULT_IN
70
70
  // exposed as TOOLS a debugging LLM calls over a COMPLETED run's artifacts.
71
71
  // Bounded, honest (⚠ markers), redaction-respecting, id-navigable.
72
72
  export { callTraceTool, TOOLPACK_HARD_CAPS, traceToolpack, } from './lib/trace-toolpack/index.js';
73
+ // Contextual-bug localizer (RFC-003 Part B, D7–D9) — "git bisect for
74
+ // context". Assembly: footprintjs causal DAG (control edges + honesty
75
+ // markers + EdgeWeigher) × influence-core scoring (D6) × consumer-run
76
+ // counterfactual ablation. §B2 claim tiers: scores/weights are
77
+ // embedding-geometry PROXIES; ablation verdicts are the ONLY causal
78
+ // claims; slice completeness is bounded by tracking — and says so.
79
+ export { ablationForSuspect, applyAblations, bisectCulprits, CONTEXT_BISECT_DEFAULTS, defaultOutcomeComparator, defaultSuspectClassifier, formatContextBugReport, llmCallIdsFromEvents, llmEdgeWeigher, localizeContextBug, probeFlipped, runAblationProbe, stepOutputText, suspectLabel, verdictFor, } from './lib/context-bisect/index.js';
73
80
  // Tool-catalog confusability lint (RFC-002 tier 1, C1–C3) — build-time,
74
81
  // CI-gateable, framework-agnostic: plain { name, description?, inputSchema? }
75
82
  // tools in (OpenAI/Anthropic/MCP lists coerce via coerceCatalog; the
@@ -1 +1 @@
1
- {"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/observe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,4BAA4B;AAC5B,OAAO,EAAE,eAAe,EAA+B,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,cAAc,EAA8B,MAAM,oCAAoC,CAAC;AAEhG,+BAA+B;AAC/B,OAAO,EACL,mBAAmB,GAEpB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,aAAa,EAA6B,MAAM,mCAAmC,CAAC;AAC7F,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GAgBjB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,GAQhB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,eAAe,EACf,cAAc,GAQf,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,oBAAoB,GAKrB,MAAM,gDAAgD,CAAC;AAExD,6BAA6B;AAC7B,OAAO,EAAE,YAAY,EAA4B,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAE,aAAa,EAA6B,MAAM,mCAAmC,CAAC;AAC7F,OAAO,EACL,wBAAwB,GAEzB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,YAAY,EAA4B,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAE,cAAc,EAA8B,MAAM,oCAAoC,CAAC;AAChG,OAAO,EACL,kBAAkB,GAEnB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,aAAa,EAA6B,MAAM,mCAAmC,CAAC;AAC7F,OAAO,EACL,aAAa,EACb,cAAc,GAIf,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,YAAY,GAGb,MAAM,6CAA6C,CAAC;AACrD,4EAA4E;AAC5E,gFAAgF;AAChF,OAAO,EACL,mBAAmB,GAMpB,MAAM,kDAAkD,CAAC;AAC1D,gFAAgF;AAChF,gFAAgF;AAChF,OAAO,EACL,kBAAkB,GAQnB,MAAM,yDAAyD,CAAC;AAEjE,uDAAuD;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,uEAAuE;AACvE,uEAAuE;AACvE,uEAAuE;AACvE,oEAAoE;AACpE,oEAAoE;AACpE,kEAAkE;AAClE,eAAe;AACf,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,WAAW,EACX,mBAAmB,GAiBpB,MAAM,+BAA+B,CAAC;AACvC,uEAAuE;AACvE,2EAA2E;AAC3E,mEAAmE;AACnE,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,aAAa,GAGd,MAAM,+BAA+B,CAAC;AACvC,wEAAwE;AACxE,8EAA8E;AAC9E,qEAAqE;AACrE,wEAAwE;AACxE,uEAAuE;AACvE,gEAAgE;AAChE,gDAAgD;AAChD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,+BAA+B,EAC/B,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,GAepB,MAAM,0BAA0B,CAAC;AAClC,sEAAsE;AACtE,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAOnB,MAAM,iDAAiD,CAAC"}
1
+ {"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/observe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ /**
3
+ * Ablation — the counterfactual seam (RFC-003 Part B, D8 stage 4 + the
4
+ * D9 stats engine).
5
+ *
6
+ * Three pieces:
7
+ *
8
+ * 1. **Adapters** — `ablationForSuspect` maps a classified suspect to
9
+ * the spec that removes it (tool → drop from catalog; injection /
10
+ * fact / skill → exclude the `Injection.id`; memory → filter the
11
+ * `MemoryEntry.id`; arg → consumer-override note).
12
+ *
13
+ * 2. **The seam** — `applyAblations` filters the inputs an agent is
14
+ * BUILT from. Documented here because the seam did not previously
15
+ * exist: `AgentOptions` has no `ignoredTools` runtime kill-switch, so
16
+ * tool ablation happens at construction (the consumer's
17
+ * `AblationRunner` rebuilds the agent from filtered inputs). Same for
18
+ * injections and memory entries.
19
+ *
20
+ * 3. **The probe engine** — `runAblationProbe` calls the consumer's
21
+ * runner N seeded times, measures embedding similarity to the
22
+ * original output, counts outcome flips, and returns variance —
23
+ * never a single-run verdict (D9 discipline).
24
+ *
25
+ * §B2: only `runAblationProbe`-derived verdicts are causal claims; every
26
+ * score elsewhere is a correlational proxy.
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.verdictFor = exports.probeFlipped = exports.runAblationProbe = exports.defaultOutcomeComparator = exports.applyAblations = exports.ablationForSuspect = void 0;
30
+ const cosine_js_1 = require("../../memory/embedding/cosine.js");
31
+ const types_js_1 = require("./types.js");
32
+ // ─── Adapters: suspect → spec ────────────────────────────────────────
33
+ /**
34
+ * The spec that removes one suspect — or `undefined` for kind `'stage'`
35
+ * (plain pipeline stages have no removable input; re-rank or refactor).
36
+ */
37
+ function ablationForSuspect(suspect) {
38
+ switch (suspect.kind) {
39
+ case 'tool':
40
+ return suspect.detail?.toolName !== undefined
41
+ ? { kind: 'tool', ignoredTools: [suspect.detail.toolName] }
42
+ : undefined;
43
+ case 'injection':
44
+ return suspect.detail?.injectionId !== undefined
45
+ ? { kind: 'injection', excludeInjectionIds: [suspect.detail.injectionId] }
46
+ : undefined;
47
+ case 'memory':
48
+ return suspect.detail?.injectionId !== undefined
49
+ ? { kind: 'memory', excludeMemoryIds: [suspect.detail.injectionId] }
50
+ : undefined;
51
+ case 'arg':
52
+ return {
53
+ kind: 'arg',
54
+ source: suspect.source,
55
+ note: `step ${suspect.source} consumed untracked run input ($getArgs()/env) — ` +
56
+ `the runner must override the input itself; the library cannot filter it.`,
57
+ };
58
+ case 'stage':
59
+ return undefined;
60
+ }
61
+ }
62
+ exports.ablationForSuspect = ablationForSuspect;
63
+ /**
64
+ * Apply ablation specs to the inputs an agent is constructed from —
65
+ * THE documented seam (see module docs). Generic over the concrete tool /
66
+ * injection / memory-entry types so it filters without importing them.
67
+ *
68
+ * `'arg'` specs are deliberately NOT handled here: run input belongs to
69
+ * the consumer's runner (`spec.note` says so).
70
+ *
71
+ * @example inside an AblationRunner
72
+ * ```ts
73
+ * const { tools, injections } = applyAblations(specs, {
74
+ * tools: ALL_TOOLS, injections: ALL_FACTS,
75
+ * });
76
+ * const agent = Agent.create({ provider: freshProvider(), model })
77
+ * .tools([...tools]);
78
+ * for (const inj of injections) agent.fact(inj);
79
+ * ```
80
+ */
81
+ function applyAblations(specs, targets) {
82
+ const ignoredTools = new Set();
83
+ const excludedInjections = new Set();
84
+ const excludedMemory = new Set();
85
+ for (const spec of specs) {
86
+ if (spec.kind === 'tool')
87
+ for (const name of spec.ignoredTools)
88
+ ignoredTools.add(name);
89
+ if (spec.kind === 'injection')
90
+ for (const id of spec.excludeInjectionIds)
91
+ excludedInjections.add(id);
92
+ if (spec.kind === 'memory')
93
+ for (const id of spec.excludeMemoryIds)
94
+ excludedMemory.add(id);
95
+ }
96
+ return {
97
+ tools: (targets.tools ?? []).filter((tool) => !ignoredTools.has(tool.schema.name)),
98
+ injections: (targets.injections ?? []).filter((injection) => !excludedInjections.has(injection.id)),
99
+ memoryEntries: (targets.memoryEntries ?? []).filter((entry) => !excludedMemory.has(entry.id)),
100
+ };
101
+ }
102
+ exports.applyAblations = applyAblations;
103
+ // ─── The probe engine (D9 stats) ─────────────────────────────────────
104
+ function similarityStats(values) {
105
+ if (values.length === 0)
106
+ return { mean: 0, min: 0, max: 0, stdev: 0 };
107
+ const mean = values.reduce((sum, v) => sum + v, 0) / values.length;
108
+ const variance = values.reduce((sum, v) => sum + (v - mean) ** 2, 0) / values.length;
109
+ return {
110
+ mean,
111
+ min: Math.min(...values),
112
+ max: Math.max(...values),
113
+ stdev: Math.sqrt(variance),
114
+ };
115
+ }
116
+ /** The default comparator: embedding similarity below the threshold. */
117
+ function defaultOutcomeComparator(embedder, flipThreshold) {
118
+ return async (original, ablated) => {
119
+ const [a, b] = await Promise.all([
120
+ embedder.embed({ text: original }),
121
+ embedder.embed({ text: ablated }),
122
+ ]);
123
+ return (0, cosine_js_1.cosineSimilarity)(a, b) < flipThreshold;
124
+ };
125
+ }
126
+ exports.defaultOutcomeComparator = defaultOutcomeComparator;
127
+ /**
128
+ * Run ONE probe: call the consumer's runner with `specs` once per seed
129
+ * (0..samples-1), measure each output's embedding similarity to the
130
+ * original, and count outcome flips. Variance is always reported.
131
+ *
132
+ * `samples` is clamped to ≥ 2 — D9: never single-run verdicts.
133
+ */
134
+ async function runAblationProbe(config, specs) {
135
+ const samples = Math.max(2, config.rerun.samples ?? types_js_1.CONTEXT_BISECT_DEFAULTS.samples);
136
+ const flipThreshold = config.rerun.flipThreshold ?? types_js_1.CONTEXT_BISECT_DEFAULTS.flipThreshold;
137
+ const outcomeChanged = config.rerun.outcomeChanged ?? defaultOutcomeComparator(config.embedder, flipThreshold);
138
+ const similarities = [];
139
+ let flips = 0;
140
+ const originalVec = await config.embedder.embed({ text: config.rerun.originalOutput });
141
+ for (let seed = 0; seed < samples; seed++) {
142
+ const output = await config.rerun.runner(specs, { seed });
143
+ const outputVec = await config.embedder.embed({ text: output });
144
+ similarities.push((0, cosine_js_1.cosineSimilarity)(originalVec, outputVec));
145
+ if (await outcomeChanged(config.rerun.originalOutput, output))
146
+ flips++;
147
+ }
148
+ return { samples, flips, similarity: similarityStats(similarities) };
149
+ }
150
+ exports.runAblationProbe = runAblationProbe;
151
+ /** Majority-flip rule shared by D8 verdicts and D9 probes. */
152
+ function probeFlipped(stats) {
153
+ return stats.flips * 2 > stats.samples;
154
+ }
155
+ exports.probeFlipped = probeFlipped;
156
+ /**
157
+ * Translate probe evidence into the verdict — the ONLY causal claim tier
158
+ * (§B2). `baselineStable=false` (the un-ablated scenario itself flipped)
159
+ * forces `'inconclusive'`: no ablation verdict is trustworthy on an
160
+ * unstable baseline.
161
+ */
162
+ function verdictFor(label, stats, baselineStable) {
163
+ if (!baselineStable) {
164
+ return {
165
+ verdict: 'inconclusive',
166
+ claim: `INCONCLUSIVE: the un-ablated baseline itself changed outcome across seeded reruns — ` +
167
+ `no ablation verdict for ${label} is trustworthy on an unstable scenario.`,
168
+ };
169
+ }
170
+ if (probeFlipped(stats)) {
171
+ return {
172
+ verdict: 'confirmed',
173
+ claim: `CAUSAL: ablating ${label} flipped the outcome in ${stats.flips}/${stats.samples} ` +
174
+ `seeded reruns (mean similarity to original ${stats.similarity.mean.toFixed(3)} ` +
175
+ `± ${stats.similarity.stdev.toFixed(3)}).`,
176
+ };
177
+ }
178
+ if (stats.flips > 0) {
179
+ return {
180
+ verdict: 'inconclusive',
181
+ claim: `INCONCLUSIVE: ablating ${label} flipped only ${stats.flips}/${stats.samples} seeded ` +
182
+ `reruns — below majority; raise samples or check scenario stability.`,
183
+ };
184
+ }
185
+ return {
186
+ verdict: 'not-confirmed',
187
+ claim: `NOT CONFIRMED: ablating ${label} did not change the outcome in ${stats.samples} seeded ` +
188
+ `reruns — its ranking remains a correlational proxy only.`,
189
+ };
190
+ }
191
+ exports.verdictFor = verdictFor;
192
+ //# sourceMappingURL=ablation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ablation.js","sourceRoot":"","sources":["../../../src/lib/context-bisect/ablation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ /**
3
+ * bisectCulprits — multi-culprit bisection over the ranked suspect set
4
+ * (RFC-003 Part B, block D9). The "git bisect" of the localizer.
5
+ *
6
+ * When single-suspect ablations don't flip the outcome — redundant causes
7
+ * (two facts that EACH justify the wrong answer), or interacting ones —
8
+ * the culprit is a SET. This harness finds a minimal culprit set by
9
+ * recursive halving over the ranked suspects (delta-debugging style,
10
+ * Zeller's ddmin specialized to two-way splits), then keeps searching the
11
+ * remainder for INDEPENDENT culprits until the remainder stops flipping.
12
+ *
13
+ * Probe semantics (the D9 discipline):
14
+ * - every probe = N seeded reruns of the consumer's `AblationRunner`
15
+ * with the probe's combined specs; "flipped" = MAJORITY of runs
16
+ * changed outcome; similarity mean ± spread is always reported —
17
+ * never single-run verdicts;
18
+ * - probe 0 is the BASELINE (no ablation): if it flips, the scenario
19
+ * itself is unstable and the result is honestly `'inconclusive'`;
20
+ * - probes are cached by spec-set, and budgeted (`maxProbes`) — running
21
+ * out of budget yields `'inconclusive'`, never a partial claim
22
+ * dressed up as a finding.
23
+ *
24
+ * §B2: the returned `verdict`/`culprits` are CAUSAL claims — they rest
25
+ * exclusively on counterfactual reruns. The input ranking only chooses
26
+ * the SEARCH ORDER (better ranking = fewer probes), it never decides the
27
+ * outcome.
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.bisectCulprits = void 0;
31
+ const ablation_js_1 = require("./ablation.js");
32
+ const types_js_1 = require("./types.js");
33
+ const localize_js_1 = require("./localize.js");
34
+ // ─── The harness ─────────────────────────────────────────────────────
35
+ class ProbeBudgetExceeded extends Error {
36
+ constructor() {
37
+ super('probe budget exceeded');
38
+ }
39
+ }
40
+ /**
41
+ * Find minimal culprit set(s) by seeded counterfactual bisection. See
42
+ * module docs for semantics and the §B2 claim tier.
43
+ */
44
+ async function bisectCulprits(options) {
45
+ const candidates = options.suspects.filter((suspect) => suspect.ablation !== undefined && suspect.ablation.kind !== 'arg');
46
+ const maxProbes = options.maxProbes ?? types_js_1.CONTEXT_BISECT_DEFAULTS.maxProbes;
47
+ const maxCulprits = options.maxCulprits ?? types_js_1.CONTEXT_BISECT_DEFAULTS.maxCulprits;
48
+ const config = { rerun: options.rerun, embedder: options.embedder };
49
+ const probes = [];
50
+ const cache = new Map();
51
+ let runsUsed = 0;
52
+ const keyOf = (set) => set
53
+ .map((suspect) => (0, localize_js_1.suspectLabel)(suspect))
54
+ .sort()
55
+ .join('|');
56
+ async function probe(set) {
57
+ const key = keyOf(set);
58
+ const cached = cache.get(key);
59
+ if (cached !== undefined)
60
+ return cached;
61
+ if (probes.length >= maxProbes)
62
+ throw new ProbeBudgetExceeded();
63
+ const stats = await (0, ablation_js_1.runAblationProbe)(config, set.flatMap((suspect) => (suspect.ablation !== undefined ? [suspect.ablation] : [])));
64
+ runsUsed += stats.samples;
65
+ const flipped = (0, ablation_js_1.probeFlipped)(stats);
66
+ probes.push({ ablated: set.map((suspect) => (0, localize_js_1.suspectLabel)(suspect)), stats, flipped });
67
+ cache.set(key, flipped);
68
+ return flipped;
69
+ }
70
+ /**
71
+ * Minimal subset of `candidates` that — together with `context` — flips
72
+ * the outcome. Precondition: probe(candidates ∪ context) flipped.
73
+ * Two-way ddmin: try each half; on interference (neither half alone
74
+ * suffices) minimize each half with the other as context.
75
+ */
76
+ async function minimize(set, context) {
77
+ if (set.length <= 1)
78
+ return [...set];
79
+ const mid = Math.ceil(set.length / 2);
80
+ const top = set.slice(0, mid); // ranked order: the likelier half first
81
+ const rest = set.slice(mid);
82
+ if (await probe([...top, ...context]))
83
+ return minimize(top, context);
84
+ if (await probe([...rest, ...context]))
85
+ return minimize(rest, context);
86
+ // Interference: parts of BOTH halves are needed jointly.
87
+ const fromTop = await minimize(top, [...rest, ...context]);
88
+ const fromRest = await minimize(rest, [...fromTop, ...context]);
89
+ return [...fromTop, ...fromRest];
90
+ }
91
+ try {
92
+ // Baseline: an unstable scenario invalidates everything downstream.
93
+ // ZERO-TOLERANCE (review Finding 1): a single un-ablated flip marks the
94
+ // scenario unstable — the majority-rule probeFlipped() gate would let a
95
+ // 1-in-3-flaky scenario through to a 'confirmed' CAUSAL verdict, which
96
+ // violates the §B2 honest-claims discipline. Same gate localize.ts uses.
97
+ {
98
+ const baselineStats = await (0, ablation_js_1.runAblationProbe)(config, []);
99
+ runsUsed += baselineStats.samples;
100
+ const unstable = baselineStats.flips > 0;
101
+ probes.push({ ablated: [], stats: baselineStats, flipped: unstable });
102
+ cache.set(keyOf([]), (0, ablation_js_1.probeFlipped)(baselineStats));
103
+ if (unstable) {
104
+ return { verdict: 'inconclusive', culprits: [], probes, runsUsed };
105
+ }
106
+ }
107
+ // Reproduction gate: the full ranked set must flip at all.
108
+ if (candidates.length === 0 || !(await probe(candidates))) {
109
+ return { verdict: 'not-reproducible', culprits: [], probes, runsUsed };
110
+ }
111
+ // Find minimal sets; then keep searching the remainder for
112
+ // INDEPENDENT culprits until it stops flipping.
113
+ const culprits = [];
114
+ let remaining = candidates;
115
+ for (let round = 0; round < maxCulprits; round++) {
116
+ const found = await minimize(remaining, []);
117
+ culprits.push(found);
118
+ const foundKeys = new Set(found.map((suspect) => (0, localize_js_1.suspectLabel)(suspect)));
119
+ remaining = remaining.filter((suspect) => !foundKeys.has((0, localize_js_1.suspectLabel)(suspect)));
120
+ if (remaining.length === 0 || !(await probe(remaining)))
121
+ break;
122
+ }
123
+ return { verdict: 'confirmed', culprits, probes, runsUsed };
124
+ }
125
+ catch (error) {
126
+ if (error instanceof ProbeBudgetExceeded) {
127
+ return { verdict: 'inconclusive', culprits: [], probes, runsUsed };
128
+ }
129
+ throw error;
130
+ }
131
+ }
132
+ exports.bisectCulprits = bisectCulprits;
133
+ //# sourceMappingURL=bisect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bisect.js","sourceRoot":"","sources":["../../../src/lib/context-bisect/bisect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * context-bisect — RFC-003 Part B: the contextual-bug LOCALIZER,
4
+ * "git bisect for context".
5
+ *
6
+ * Assembly over shipped pieces: footprintjs 9.8.0's complete causal DAG
7
+ * (control edges, honesty markers, `EdgeWeigher` hook) × influence-core
8
+ * scoring (D6) × consumer-run counterfactual ablation.
9
+ *
10
+ * D7 — `llmEdgeWeigher` influence-weighted LLM-call slice edges
11
+ * D8 — `localizeContextBug` trigger → slice → ranked suspects → ablation
12
+ * D9 — `bisectCulprits` seeded multi-culprit bisection + variance
13
+ *
14
+ * §B2 claim tiers (spelled out on every type): weights/scores are
15
+ * embedding-geometry PROXIES; ablation verdicts are the ONLY causal
16
+ * claims; slice completeness is bounded by tracking — and says so.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.CONTEXT_BISECT_DEFAULTS = exports.bisectCulprits = exports.verdictFor = exports.runAblationProbe = exports.probeFlipped = exports.defaultOutcomeComparator = exports.applyAblations = exports.ablationForSuspect = exports.suspectLabel = exports.localizeContextBug = exports.llmCallIdsFromEvents = exports.formatContextBugReport = exports.defaultSuspectClassifier = exports.stepOutputText = exports.llmEdgeWeigher = void 0;
20
+ var llmEdgeWeigher_js_1 = require("./llmEdgeWeigher.js");
21
+ Object.defineProperty(exports, "llmEdgeWeigher", { enumerable: true, get: function () { return llmEdgeWeigher_js_1.llmEdgeWeigher; } });
22
+ Object.defineProperty(exports, "stepOutputText", { enumerable: true, get: function () { return llmEdgeWeigher_js_1.stepOutputText; } });
23
+ var localize_js_1 = require("./localize.js");
24
+ Object.defineProperty(exports, "defaultSuspectClassifier", { enumerable: true, get: function () { return localize_js_1.defaultSuspectClassifier; } });
25
+ Object.defineProperty(exports, "formatContextBugReport", { enumerable: true, get: function () { return localize_js_1.formatContextBugReport; } });
26
+ Object.defineProperty(exports, "llmCallIdsFromEvents", { enumerable: true, get: function () { return localize_js_1.llmCallIdsFromEvents; } });
27
+ Object.defineProperty(exports, "localizeContextBug", { enumerable: true, get: function () { return localize_js_1.localizeContextBug; } });
28
+ Object.defineProperty(exports, "suspectLabel", { enumerable: true, get: function () { return localize_js_1.suspectLabel; } });
29
+ var ablation_js_1 = require("./ablation.js");
30
+ Object.defineProperty(exports, "ablationForSuspect", { enumerable: true, get: function () { return ablation_js_1.ablationForSuspect; } });
31
+ Object.defineProperty(exports, "applyAblations", { enumerable: true, get: function () { return ablation_js_1.applyAblations; } });
32
+ Object.defineProperty(exports, "defaultOutcomeComparator", { enumerable: true, get: function () { return ablation_js_1.defaultOutcomeComparator; } });
33
+ Object.defineProperty(exports, "probeFlipped", { enumerable: true, get: function () { return ablation_js_1.probeFlipped; } });
34
+ Object.defineProperty(exports, "runAblationProbe", { enumerable: true, get: function () { return ablation_js_1.runAblationProbe; } });
35
+ Object.defineProperty(exports, "verdictFor", { enumerable: true, get: function () { return ablation_js_1.verdictFor; } });
36
+ var bisect_js_1 = require("./bisect.js");
37
+ Object.defineProperty(exports, "bisectCulprits", { enumerable: true, get: function () { return bisect_js_1.bisectCulprits; } });
38
+ var types_js_1 = require("./types.js");
39
+ Object.defineProperty(exports, "CONTEXT_BISECT_DEFAULTS", { enumerable: true, get: function () { return types_js_1.CONTEXT_BISECT_DEFAULTS; } });
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/context-bisect/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,yDAM6B;AAL3B,mHAAA,cAAc,OAAA;AACd,mHAAA,cAAc,OAAA;AAMhB,6CAUuB;AATrB,uHAAA,wBAAwB,OAAA;AACxB,qHAAA,sBAAsB,OAAA;AACtB,mHAAA,oBAAoB,OAAA;AACpB,iHAAA,kBAAkB,OAAA;AAClB,2GAAA,YAAY,OAAA;AAOd,6CASuB;AARrB,iHAAA,kBAAkB,OAAA;AAClB,6GAAA,cAAc,OAAA;AACd,uHAAA,wBAAwB,OAAA;AACxB,2GAAA,YAAY,OAAA;AACZ,+GAAA,gBAAgB,OAAA;AAChB,yGAAA,UAAU,OAAA;AAKZ,yCAKqB;AAJnB,2GAAA,cAAc,OAAA;AAMhB,uCAqBoB;AApBlB,mHAAA,uBAAuB,OAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llmEdgeWeigher.js","sourceRoot":"","sources":["../../../src/lib/context-bisect/llmEdgeWeigher.ts"],"names":[],"mappings":"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"}