@nxuss/lemma 1.9.0 → 1.10.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 (74) hide show
  1. package/README.md +24 -4
  2. package/dist/cjs/mcp/index.js +14 -0
  3. package/dist/cjs/mcp/index.js.map +1 -1
  4. package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
  5. package/dist/cjs/mcp/tool-profiles.js +3 -0
  6. package/dist/cjs/mcp/tool-profiles.js.map +1 -1
  7. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  8. package/dist/cjs/mcp/tools.js +290 -138
  9. package/dist/cjs/mcp/tools.js.map +1 -1
  10. package/dist/cjs/subconscious/TheBrainV2.d.ts +27 -1
  11. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  12. package/dist/cjs/subconscious/TheBrainV2.js +53 -1
  13. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  14. package/dist/cjs/utils/AffectedTests.d.ts +54 -0
  15. package/dist/cjs/utils/AffectedTests.d.ts.map +1 -0
  16. package/dist/cjs/utils/AffectedTests.js +195 -0
  17. package/dist/cjs/utils/AffectedTests.js.map +1 -0
  18. package/dist/cjs/utils/DepGraph.d.ts +28 -0
  19. package/dist/cjs/utils/DepGraph.d.ts.map +1 -0
  20. package/dist/cjs/utils/DepGraph.js +210 -0
  21. package/dist/cjs/utils/DepGraph.js.map +1 -0
  22. package/dist/cjs/utils/LocalPrefilter.d.ts +61 -0
  23. package/dist/cjs/utils/LocalPrefilter.d.ts.map +1 -0
  24. package/dist/cjs/utils/LocalPrefilter.js +169 -0
  25. package/dist/cjs/utils/LocalPrefilter.js.map +1 -0
  26. package/dist/cjs/utils/OutputDelta.d.ts +60 -0
  27. package/dist/cjs/utils/OutputDelta.d.ts.map +1 -0
  28. package/dist/cjs/utils/OutputDelta.js +226 -0
  29. package/dist/cjs/utils/OutputDelta.js.map +1 -0
  30. package/dist/cjs/utils/OutputLedger.d.ts +60 -0
  31. package/dist/cjs/utils/OutputLedger.d.ts.map +1 -0
  32. package/dist/cjs/utils/OutputLedger.js +116 -0
  33. package/dist/cjs/utils/OutputLedger.js.map +1 -0
  34. package/dist/cjs/utils/ReadWorkspaceCache.d.ts +8 -2
  35. package/dist/cjs/utils/ReadWorkspaceCache.d.ts.map +1 -1
  36. package/dist/cjs/utils/ReadWorkspaceCache.js +58 -3
  37. package/dist/cjs/utils/ReadWorkspaceCache.js.map +1 -1
  38. package/dist/esm/mcp/index.js +14 -0
  39. package/dist/esm/mcp/index.js.map +1 -1
  40. package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
  41. package/dist/esm/mcp/tool-profiles.js +3 -0
  42. package/dist/esm/mcp/tool-profiles.js.map +1 -1
  43. package/dist/esm/mcp/tools.d.ts.map +1 -1
  44. package/dist/esm/mcp/tools.js +288 -136
  45. package/dist/esm/mcp/tools.js.map +1 -1
  46. package/dist/esm/subconscious/TheBrainV2.d.ts +27 -1
  47. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  48. package/dist/esm/subconscious/TheBrainV2.js +53 -1
  49. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  50. package/dist/esm/utils/AffectedTests.d.ts +54 -0
  51. package/dist/esm/utils/AffectedTests.d.ts.map +1 -0
  52. package/dist/esm/utils/AffectedTests.js +186 -0
  53. package/dist/esm/utils/AffectedTests.js.map +1 -0
  54. package/dist/esm/utils/DepGraph.d.ts +28 -0
  55. package/dist/esm/utils/DepGraph.d.ts.map +1 -0
  56. package/dist/esm/utils/DepGraph.js +169 -0
  57. package/dist/esm/utils/DepGraph.js.map +1 -0
  58. package/dist/esm/utils/LocalPrefilter.d.ts +61 -0
  59. package/dist/esm/utils/LocalPrefilter.d.ts.map +1 -0
  60. package/dist/esm/utils/LocalPrefilter.js +159 -0
  61. package/dist/esm/utils/LocalPrefilter.js.map +1 -0
  62. package/dist/esm/utils/OutputDelta.d.ts +60 -0
  63. package/dist/esm/utils/OutputDelta.d.ts.map +1 -0
  64. package/dist/esm/utils/OutputDelta.js +221 -0
  65. package/dist/esm/utils/OutputDelta.js.map +1 -0
  66. package/dist/esm/utils/OutputLedger.d.ts +60 -0
  67. package/dist/esm/utils/OutputLedger.d.ts.map +1 -0
  68. package/dist/esm/utils/OutputLedger.js +107 -0
  69. package/dist/esm/utils/OutputLedger.js.map +1 -0
  70. package/dist/esm/utils/ReadWorkspaceCache.d.ts +8 -2
  71. package/dist/esm/utils/ReadWorkspaceCache.d.ts.map +1 -1
  72. package/dist/esm/utils/ReadWorkspaceCache.js +57 -3
  73. package/dist/esm/utils/ReadWorkspaceCache.js.map +1 -1
  74. package/package.json +4 -2
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ /**
3
+ * OutputDelta — re-send only what changed, never the whole thing again.
4
+ *
5
+ * The problem: a debug loop reads the same file (or runs the same command) six times.
6
+ * Between two of those calls maybe three lines moved, but the model pays for the entire
7
+ * file or the entire 400-line `tsc` dump each time — and because tool results stay in the
8
+ * transcript, it keeps paying for every copy on every subsequent turn.
9
+ *
10
+ * `ReadWorkspaceCache` already suppresses the *identical* case. This module covers the far
11
+ * more common one: it changed, but barely.
12
+ *
13
+ * Two rules this module is built around:
14
+ *
15
+ * 1. The diff is computed against the exact text the model received. Not the file on
16
+ * disk, not the pre-squeeze source — the final emitted string. A diff against
17
+ * anything else describes a document the model never had, which is worse than
18
+ * re-sending the whole file.
19
+ * 2. A delta is only emitted when it is decisively smaller than the full text. Below
20
+ * that margin, reconstructing from a diff is cognitive work with no token payoff, so
21
+ * the full text wins. See `shouldEmitDelta`.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.computeDiff = computeDiff;
25
+ exports.renderDiff = renderDiff;
26
+ exports.shouldEmitDelta = shouldEmitDelta;
27
+ /**
28
+ * Lines of unchanged context kept around each changed hunk. Three is the unified-diff
29
+ * convention and is enough to locate a hunk unambiguously in almost all real files.
30
+ */
31
+ const CONTEXT_LINES = 3;
32
+ /**
33
+ * A delta must be at most this fraction of the full text to be worth emitting. At 0.5 a
34
+ * diff that saves only a third of the tokens is rejected: the model still has to
35
+ * mentally apply it, and a near-full-size diff is strictly worse than the real text.
36
+ */
37
+ const DELTA_MAX_RATIO = 0.5;
38
+ /**
39
+ * Below this size the full text is cheap enough that a diff never pays for its own
40
+ * explanation header, let alone the risk of misapplication.
41
+ */
42
+ const DELTA_MIN_CHARS = 1200;
43
+ /**
44
+ * Diffing is O(n*m) in the worst case. Past this line count the DP table costs more CPU
45
+ * (and latency the user waits on) than the tokens it could save, so we decline.
46
+ */
47
+ const MAX_DIFF_LINES = 4000;
48
+ /**
49
+ * Longest-common-subsequence over lines.
50
+ *
51
+ * Real edits touch a handful of lines in a file whose head and tail are untouched, so we
52
+ * strip the common prefix and suffix first. That turns the usual case into a DP over a
53
+ * few dozen lines instead of a few thousand, which is what keeps this affordable enough
54
+ * to run on every read.
55
+ */
56
+ function diffLines(oldLines, newLines) {
57
+ let start = 0;
58
+ while (start < oldLines.length && start < newLines.length && oldLines[start] === newLines[start]) {
59
+ start++;
60
+ }
61
+ let endOld = oldLines.length;
62
+ let endNew = newLines.length;
63
+ while (endOld > start && endNew > start && oldLines[endOld - 1] === newLines[endNew - 1]) {
64
+ endOld--;
65
+ endNew--;
66
+ }
67
+ const a = oldLines.slice(start, endOld);
68
+ const b = newLines.slice(start, endNew);
69
+ const ops = [];
70
+ for (let i = 0; i < start; i++)
71
+ ops.push({ type: "equal", line: oldLines[i] });
72
+ // DP table of LCS lengths. Sized on the trimmed middle, which is why the trimming above
73
+ // matters: without it this allocates (n+1)*(m+1) numbers for the whole file.
74
+ const n = a.length;
75
+ const m = b.length;
76
+ const table = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));
77
+ for (let i = n - 1; i >= 0; i--) {
78
+ for (let j = m - 1; j >= 0; j--) {
79
+ table[i][j] = a[i] === b[j] ? table[i + 1][j + 1] + 1 : Math.max(table[i + 1][j], table[i][j + 1]);
80
+ }
81
+ }
82
+ let i = 0;
83
+ let j = 0;
84
+ while (i < n && j < m) {
85
+ if (a[i] === b[j]) {
86
+ ops.push({ type: "equal", line: a[i] });
87
+ i++;
88
+ j++;
89
+ }
90
+ else if (table[i + 1][j] >= table[i][j + 1]) {
91
+ ops.push({ type: "del", line: a[i] });
92
+ i++;
93
+ }
94
+ else {
95
+ ops.push({ type: "ins", line: b[j] });
96
+ j++;
97
+ }
98
+ }
99
+ while (i < n)
100
+ ops.push({ type: "del", line: a[i++] });
101
+ while (j < m)
102
+ ops.push({ type: "ins", line: b[j++] });
103
+ for (let k = endOld; k < oldLines.length; k++)
104
+ ops.push({ type: "equal", line: oldLines[k] });
105
+ return ops;
106
+ }
107
+ /** Group an op stream into unified-diff hunks with `CONTEXT_LINES` of surrounding context. */
108
+ function buildHunks(ops) {
109
+ const changedAt = new Set();
110
+ ops.forEach((op, idx) => {
111
+ if (op.type !== "equal")
112
+ changedAt.add(idx);
113
+ });
114
+ if (changedAt.size === 0)
115
+ return [];
116
+ // Expand each change into a window, then merge windows that touch or overlap so two
117
+ // edits four lines apart render as one hunk rather than two with duplicated context.
118
+ const windows = [];
119
+ for (const idx of Array.from(changedAt).sort((x, y) => x - y)) {
120
+ const lo = Math.max(0, idx - CONTEXT_LINES);
121
+ const hi = Math.min(ops.length - 1, idx + CONTEXT_LINES);
122
+ const last = windows[windows.length - 1];
123
+ if (last && lo <= last[1] + 1)
124
+ last[1] = Math.max(last[1], hi);
125
+ else
126
+ windows.push([lo, hi]);
127
+ }
128
+ // Line counters advance as we scan, so each hunk header reports true positions in both
129
+ // documents rather than positions relative to the hunk before it.
130
+ const hunks = [];
131
+ let oldLine = 1;
132
+ let newLine = 1;
133
+ let cursor = 0;
134
+ for (const [lo, hi] of windows) {
135
+ while (cursor < lo) {
136
+ const op = ops[cursor];
137
+ if (op.type !== "ins")
138
+ oldLine++;
139
+ if (op.type !== "del")
140
+ newLine++;
141
+ cursor++;
142
+ }
143
+ const hunk = { oldStart: oldLine, oldLines: 0, newStart: newLine, newLines: 0, lines: [] };
144
+ for (let idx = lo; idx <= hi; idx++) {
145
+ const op = ops[idx];
146
+ if (op.type === "equal") {
147
+ hunk.lines.push(` ${op.line}`);
148
+ hunk.oldLines++;
149
+ hunk.newLines++;
150
+ oldLine++;
151
+ newLine++;
152
+ }
153
+ else if (op.type === "del") {
154
+ hunk.lines.push(`-${op.line}`);
155
+ hunk.oldLines++;
156
+ oldLine++;
157
+ }
158
+ else {
159
+ hunk.lines.push(`+${op.line}`);
160
+ hunk.newLines++;
161
+ newLine++;
162
+ }
163
+ }
164
+ hunks.push(hunk);
165
+ cursor = hi + 1;
166
+ }
167
+ return hunks;
168
+ }
169
+ /** Line-level diff between the text the model already has and the text we would send now. */
170
+ function computeDiff(previous, next) {
171
+ if (previous === next)
172
+ return { hunks: [], added: 0, removed: 0, identical: true };
173
+ const oldLines = previous.split("\n");
174
+ const newLines = next.split("\n");
175
+ if (oldLines.length > MAX_DIFF_LINES || newLines.length > MAX_DIFF_LINES)
176
+ return null;
177
+ const ops = diffLines(oldLines, newLines);
178
+ const hunks = buildHunks(ops);
179
+ const added = ops.filter((o) => o.type === "ins").length;
180
+ const removed = ops.filter((o) => o.type === "del").length;
181
+ return { hunks, added, removed, identical: false };
182
+ }
183
+ /** Render hunks as a unified diff body (no ---/+++ file headers; the caller supplies context). */
184
+ function renderDiff(diff) {
185
+ return diff.hunks
186
+ .map((h) => [`@@ -${h.oldStart},${h.oldLines} +${h.newStart},${h.newLines} @@`, ...h.lines].join("\n"))
187
+ .join("\n");
188
+ }
189
+ /**
190
+ * Decide whether to hand the model a delta instead of the full text.
191
+ *
192
+ * Declining is the safe direction: the caller falls back to sending everything, which is
193
+ * always correct. So every uncertain case here resolves to `emit: false`.
194
+ */
195
+ function shouldEmitDelta(previous, next) {
196
+ const empty = { emit: false, added: 0, removed: 0, hunkCount: 0 };
197
+ if (next.length < DELTA_MIN_CHARS) {
198
+ return { ...empty, reason: "full text is small enough that a diff saves nothing" };
199
+ }
200
+ const diff = computeDiff(previous, next);
201
+ if (!diff)
202
+ return { ...empty, reason: "too large to diff affordably" };
203
+ if (diff.identical)
204
+ return { ...empty, reason: "identical" };
205
+ if (diff.hunks.length === 0)
206
+ return { ...empty, reason: "no hunks" };
207
+ const body = renderDiff(diff);
208
+ const ratio = body.length / next.length;
209
+ if (ratio > DELTA_MAX_RATIO) {
210
+ return {
211
+ ...empty,
212
+ added: diff.added,
213
+ removed: diff.removed,
214
+ hunkCount: diff.hunks.length,
215
+ reason: `diff is ${Math.round(ratio * 100)}% of the full text — not worth reconstructing`,
216
+ };
217
+ }
218
+ return {
219
+ emit: true,
220
+ body,
221
+ added: diff.added,
222
+ removed: diff.removed,
223
+ hunkCount: diff.hunks.length,
224
+ };
225
+ }
226
+ //# sourceMappingURL=OutputDelta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputDelta.js","sourceRoot":"","sources":["../../../src/utils/OutputDelta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * OutputLedger — session memory of what each tool already returned.
3
+ *
4
+ * `ReadWorkspaceCache` solves this for file reads, but reads are not where the weight is.
5
+ * A debug loop runs `npm test` six times and `tsc --noEmit` four; each run dumps hundreds
6
+ * of near-identical lines into the transcript, and every one of those copies is re-sent on
7
+ * every later turn. By the end of a session the same failing stack trace can account for
8
+ * more context than the source files being debugged.
9
+ *
10
+ * So: key on (tool, call signature), remember the exact text emitted, and on a repeat
11
+ * answer with `IDENTICAL` or a diff instead of the payload.
12
+ *
13
+ * The correctness rule is the same one that governs the read cache, and it is absolute:
14
+ * a ledger hit may only suppress text the model demonstrably already received in this
15
+ * session. Anything else — a cold start, an evicted entry, a caller that didn't record —
16
+ * resolves to sending the full output. Under-suppressing costs tokens; over-suppressing
17
+ * costs the user a correct answer.
18
+ */
19
+ /**
20
+ * Build a stable key from the arguments that determine the output.
21
+ *
22
+ * Only pass arguments that actually change the result. Including an incidental field
23
+ * (a verbosity flag that doesn't alter the payload, a timestamp) makes every call a
24
+ * fresh key and silently disables the ledger; including too few makes two genuinely
25
+ * different calls collide, which would suppress output the model never saw. When unsure,
26
+ * include the field — a missed saving is recoverable, a wrong suppression is not.
27
+ */
28
+ export declare function ledgerKey(toolName: string, signature: Record<string, unknown>): string;
29
+ export type LedgerStatus = "new" | "identical" | "changed";
30
+ export interface LedgerResult {
31
+ status: LedgerStatus;
32
+ /** Replacement text to return instead of the payload; null means "send the full output". */
33
+ replacement: string | null;
34
+ /** Characters saved by the replacement, for the savings ledger. 0 when nothing was suppressed. */
35
+ savedChars: number;
36
+ }
37
+ export interface LedgerOptions {
38
+ /**
39
+ * Human-readable description of the call, used in the marker so the model can tell which
40
+ * earlier result it is being pointed at ("npm test", "search for 'foo' in src/").
41
+ */
42
+ label: string;
43
+ /**
44
+ * Set when re-deriving the suppressed output is not free for the caller — a command that
45
+ * must actually run again. Purely informational; it does not change the decision.
46
+ */
47
+ rerunHint?: string;
48
+ }
49
+ /**
50
+ * Check a freshly produced output against what this tool last returned for the same call.
51
+ *
52
+ * Always call `record` afterwards with the text you actually emitted, including when this
53
+ * returns `new` — otherwise the next repeat has no base to compare against.
54
+ */
55
+ export declare function checkOutput(key: string, text: string, options: LedgerOptions): LedgerResult;
56
+ /** Record the text a tool emitted (the full payload, not a marker) as the base for next time. */
57
+ export declare function recordOutput(key: string, text: string): void;
58
+ /** Test seam — the map is process-global and would otherwise leak between test cases. */
59
+ export declare function resetOutputLedger(): void;
60
+ //# sourceMappingURL=OutputLedger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputLedger.d.ts","sourceRoot":"","sources":["../../../src/utils/OutputLedger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA0BH;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAMtF;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,WAAW,GAAG,SAAS,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,4FAA4F;IAC5F,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kGAAkG;IAClG,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,CA2B3F;AAED,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAsB5D;AAED,yFAAyF;AACzF,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ /**
3
+ * OutputLedger — session memory of what each tool already returned.
4
+ *
5
+ * `ReadWorkspaceCache` solves this for file reads, but reads are not where the weight is.
6
+ * A debug loop runs `npm test` six times and `tsc --noEmit` four; each run dumps hundreds
7
+ * of near-identical lines into the transcript, and every one of those copies is re-sent on
8
+ * every later turn. By the end of a session the same failing stack trace can account for
9
+ * more context than the source files being debugged.
10
+ *
11
+ * So: key on (tool, call signature), remember the exact text emitted, and on a repeat
12
+ * answer with `IDENTICAL` or a diff instead of the payload.
13
+ *
14
+ * The correctness rule is the same one that governs the read cache, and it is absolute:
15
+ * a ledger hit may only suppress text the model demonstrably already received in this
16
+ * session. Anything else — a cold start, an evicted entry, a caller that didn't record —
17
+ * resolves to sending the full output. Under-suppressing costs tokens; over-suppressing
18
+ * costs the user a correct answer.
19
+ */
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.ledgerKey = ledgerKey;
25
+ exports.checkOutput = checkOutput;
26
+ exports.recordOutput = recordOutput;
27
+ exports.resetOutputLedger = resetOutputLedger;
28
+ const crypto_1 = __importDefault(require("crypto"));
29
+ const OutputDelta_1 = require("./OutputDelta");
30
+ const entries = new Map();
31
+ /** Mirrors the read cache's bound: this exists to save tokens, not to grow forever. */
32
+ const MAX_LEDGER_CHARS = 2000000;
33
+ const MAX_ENTRY_CHARS = 400000;
34
+ let ledgerChars = 0;
35
+ let callCounter = 0;
36
+ function sha256(text) {
37
+ return crypto_1.default.createHash("sha256").update(text).digest("hex");
38
+ }
39
+ /**
40
+ * Build a stable key from the arguments that determine the output.
41
+ *
42
+ * Only pass arguments that actually change the result. Including an incidental field
43
+ * (a verbosity flag that doesn't alter the payload, a timestamp) makes every call a
44
+ * fresh key and silently disables the ledger; including too few makes two genuinely
45
+ * different calls collide, which would suppress output the model never saw. When unsure,
46
+ * include the field — a missed saving is recoverable, a wrong suppression is not.
47
+ */
48
+ function ledgerKey(toolName, signature) {
49
+ const normalized = Object.keys(signature)
50
+ .sort()
51
+ .map((k) => `${k}=${JSON.stringify(signature[k]) ?? ""}`)
52
+ .join("&");
53
+ return `${toolName}::${normalized}`;
54
+ }
55
+ /**
56
+ * Check a freshly produced output against what this tool last returned for the same call.
57
+ *
58
+ * Always call `record` afterwards with the text you actually emitted, including when this
59
+ * returns `new` — otherwise the next repeat has no base to compare against.
60
+ */
61
+ function checkOutput(key, text, options) {
62
+ const previous = entries.get(key);
63
+ if (!previous)
64
+ return { status: "new", replacement: null, savedChars: 0 };
65
+ const hash = sha256(text);
66
+ if (hash === previous.hash) {
67
+ const marker = [
68
+ `IDENTICAL: ${options.label} produced byte-for-byte the same output as earlier this session (call #${previous.callIndex}).`,
69
+ `Nothing changed. Reuse that result rather than re-reading it here.`,
70
+ ...(options.rerunHint ? [options.rerunHint] : []),
71
+ ].join("\n");
72
+ return { status: "identical", replacement: marker, savedChars: Math.max(0, text.length - marker.length) };
73
+ }
74
+ const delta = (0, OutputDelta_1.shouldEmitDelta)(previous.text, text);
75
+ if (!delta.emit)
76
+ return { status: "changed", replacement: null, savedChars: 0 };
77
+ const marker = [
78
+ `CHANGED: ${options.label} — ${delta.hunkCount} hunk(s), +${delta.added}/-${delta.removed} vs. call #${previous.callIndex}.`,
79
+ `Everything else is unchanged from that result. Diff:`,
80
+ ``,
81
+ delta.body,
82
+ ].join("\n");
83
+ // A diff that ended up longer than the payload is a saving of zero, not a negative one;
84
+ // the caller decides what to emit, this only reports what was actually spared.
85
+ return { status: "changed", replacement: marker, savedChars: Math.max(0, text.length - marker.length) };
86
+ }
87
+ /** Record the text a tool emitted (the full payload, not a marker) as the base for next time. */
88
+ function recordOutput(key, text) {
89
+ const previous = entries.get(key);
90
+ if (previous) {
91
+ ledgerChars -= previous.text.length;
92
+ // `set` on an existing key keeps its original insertion position, so delete first to
93
+ // make a refreshed entry count as recently-written for eviction.
94
+ entries.delete(key);
95
+ }
96
+ if (text.length > MAX_ENTRY_CHARS)
97
+ return;
98
+ callCounter++;
99
+ entries.set(key, { text, hash: sha256(text), callIndex: callCounter, at: Date.now() });
100
+ ledgerChars += text.length;
101
+ while (ledgerChars > MAX_LEDGER_CHARS) {
102
+ const oldest = entries.keys().next();
103
+ if (oldest.done)
104
+ break;
105
+ const dropped = entries.get(oldest.value);
106
+ entries.delete(oldest.value);
107
+ ledgerChars -= dropped.text.length;
108
+ }
109
+ }
110
+ /** Test seam — the map is process-global and would otherwise leak between test cases. */
111
+ function resetOutputLedger() {
112
+ entries.clear();
113
+ ledgerChars = 0;
114
+ callCounter = 0;
115
+ }
116
+ //# sourceMappingURL=OutputLedger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputLedger.js","sourceRoot":"","sources":["../../../src/utils/OutputLedger.ts"],"names":[],"mappings":"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"}
@@ -15,8 +15,14 @@ export interface ReadDedupCheck {
15
15
  }
16
16
  /** Check whether this exact (path, view) content was already sent this session. */
17
17
  export declare function checkAlreadySent(resolvedPath: string, view: ReadView, rawContent: string): ReadDedupCheck;
18
+ /**
19
+ * The text last emitted for this (path, view), or null if we have none — because this is
20
+ * the first read, or because the entry was evicted under the size cap. A null here means
21
+ * "send the full file", never "assume it is unchanged".
22
+ */
23
+ export declare function getLastEmitted(resolvedPath: string, view: ReadView): string | null;
18
24
  /** Record that this content was just sent, so future identical reads short-circuit. */
19
- export declare function recordSent(resolvedPath: string, view: ReadView, hash: string): void;
20
- /** Test seam — the map is process-global and would otherwise leak between test cases. */
25
+ export declare function recordSent(resolvedPath: string, view: ReadView, hash: string, emitted?: string): void;
26
+ /** Test seam — the maps are process-global and would otherwise leak between test cases. */
21
27
  export declare function resetReadCache(): void;
22
28
  //# sourceMappingURL=ReadWorkspaceCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReadWorkspaceCache.d.ts","sourceRoot":"","sources":["../../../src/utils/ReadWorkspaceCache.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAKzG;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnF;AAED,yFAAyF;AACzF,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
1
+ {"version":3,"file":"ReadWorkspaceCache.d.ts","sourceRoot":"","sources":["../../../src/utils/ReadWorkspaceCache.ts"],"names":[],"mappings":"AAgCA;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAKzG;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAElF;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAiCrG;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.checkAlreadySent = checkAlreadySent;
7
+ exports.getLastEmitted = getLastEmitted;
7
8
  exports.recordSent = recordSent;
8
9
  exports.resetReadCache = resetReadCache;
9
10
  const crypto_1 = __importDefault(require("crypto"));
@@ -12,6 +13,22 @@ const crypto_1 = __importDefault(require("crypto"));
12
13
  // model for a given (filePath, view) pair, so a second identical read doesn't
13
14
  // resend content the model already has in its own context.
14
15
  const lastSent = new Map();
16
+ /**
17
+ * The exact text emitted for each key, kept so a later read of a *changed* file can be
18
+ * answered with a diff instead of the whole file again. Only what the model actually
19
+ * received is stored — diffing against anything else would describe a document it never
20
+ * had.
21
+ */
22
+ const lastEmitted = new Map();
23
+ /**
24
+ * Total characters held in `lastEmitted`. This cache exists to save tokens, so it must
25
+ * not grow without bound in a long session; past the cap the least-recently-written
26
+ * entries are dropped and those reads simply fall back to sending the full file.
27
+ */
28
+ const MAX_EMITTED_CHARS = 2000000;
29
+ /** A single entry larger than this is never stored — one huge file would evict everything else. */
30
+ const MAX_ENTRY_CHARS = 400000;
31
+ let emittedChars = 0;
15
32
  function sha256(content) {
16
33
  return crypto_1.default.createHash("sha256").update(content).digest("hex");
17
34
  }
@@ -32,12 +49,50 @@ function checkAlreadySent(resolvedPath, view, rawContent) {
32
49
  const unchanged = lastSent.get(key) === hash;
33
50
  return { unchanged, hash };
34
51
  }
52
+ /**
53
+ * The text last emitted for this (path, view), or null if we have none — because this is
54
+ * the first read, or because the entry was evicted under the size cap. A null here means
55
+ * "send the full file", never "assume it is unchanged".
56
+ */
57
+ function getLastEmitted(resolvedPath, view) {
58
+ return lastEmitted.get(cacheKey(resolvedPath, view)) ?? null;
59
+ }
35
60
  /** Record that this content was just sent, so future identical reads short-circuit. */
36
- function recordSent(resolvedPath, view, hash) {
37
- lastSent.set(cacheKey(resolvedPath, view), hash);
61
+ function recordSent(resolvedPath, view, hash, emitted) {
62
+ const key = cacheKey(resolvedPath, view);
63
+ lastSent.set(key, hash);
64
+ if (emitted === undefined)
65
+ return;
66
+ const previous = lastEmitted.get(key);
67
+ if (previous !== undefined) {
68
+ emittedChars -= previous.length;
69
+ // Map keeps insertion order, and `set` on an existing key does not move it. Deleting
70
+ // first is what makes a refreshed entry count as recently-written for eviction.
71
+ lastEmitted.delete(key);
72
+ }
73
+ if (emitted.length > MAX_ENTRY_CHARS) {
74
+ // Too big to keep. Drop any stale copy rather than leaving a diff base that no longer
75
+ // matches what the model holds.
76
+ lastEmitted.delete(key);
77
+ return;
78
+ }
79
+ lastEmitted.set(key, emitted);
80
+ emittedChars += emitted.length;
81
+ // Map iteration is insertion-ordered, and re-inserting on every write above moves a
82
+ // refreshed key to the back — so evicting from the front drops the least-recently-written.
83
+ while (emittedChars > MAX_EMITTED_CHARS) {
84
+ const oldest = lastEmitted.keys().next();
85
+ if (oldest.done)
86
+ break;
87
+ const dropped = lastEmitted.get(oldest.value);
88
+ lastEmitted.delete(oldest.value);
89
+ emittedChars -= dropped.length;
90
+ }
38
91
  }
39
- /** Test seam — the map is process-global and would otherwise leak between test cases. */
92
+ /** Test seam — the maps are process-global and would otherwise leak between test cases. */
40
93
  function resetReadCache() {
41
94
  lastSent.clear();
95
+ lastEmitted.clear();
96
+ emittedChars = 0;
42
97
  }
43
98
  //# sourceMappingURL=ReadWorkspaceCache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReadWorkspaceCache.js","sourceRoot":"","sources":["../../../src/utils/ReadWorkspaceCache.ts"],"names":[],"mappings":";;;;;AAyCA,4CAKC;AAGD,gCAEC;AAGD,wCAEC;AAxDD,oDAA4B;AAE5B,mFAAmF;AACnF,iFAAiF;AACjF,8EAA8E;AAC9E,2DAA2D;AAC3D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE3C,SAAS,MAAM,CAAC,OAAe;IAC7B,OAAO,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAcD,SAAS,QAAQ,CAAC,YAAoB,EAAE,IAAc;IACpD,MAAM,KAAK,GAAG;QACZ,YAAY;QACZ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC1B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC9B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG;QACrC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG;KACpC,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAOD,mFAAmF;AACnF,SAAgB,gBAAgB,CAAC,YAAoB,EAAE,IAAc,EAAE,UAAkB;IACvF,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAC7C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,uFAAuF;AACvF,SAAgB,UAAU,CAAC,YAAoB,EAAE,IAAc,EAAE,IAAY;IAC3E,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,yFAAyF;AACzF,SAAgB,cAAc;IAC5B,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"ReadWorkspaceCache.js","sourceRoot":"","sources":["../../../src/utils/ReadWorkspaceCache.ts"],"names":[],"mappings":";;;;;AA6DA,4CAKC;AAOD,wCAEC;AAGD,gCAiCC;AAGD,wCAIC;AAtHD,oDAA4B;AAE5B,mFAAmF;AACnF,iFAAiF;AACjF,8EAA8E;AAC9E,2DAA2D;AAC3D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,OAAS,CAAC;AAEpC,mGAAmG;AACnG,MAAM,eAAe,GAAG,MAAO,CAAC;AAEhC,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB,SAAS,MAAM,CAAC,OAAe;IAC7B,OAAO,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAcD,SAAS,QAAQ,CAAC,YAAoB,EAAE,IAAc;IACpD,MAAM,KAAK,GAAG;QACZ,YAAY;QACZ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC1B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC9B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG;QACrC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG;KACpC,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAOD,mFAAmF;AACnF,SAAgB,gBAAgB,CAAC,YAAoB,EAAE,IAAc,EAAE,UAAkB;IACvF,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAC7C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,YAAoB,EAAE,IAAc;IACjE,OAAO,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;AAC/D,CAAC;AAED,uFAAuF;AACvF,SAAgB,UAAU,CAAC,YAAoB,EAAE,IAAc,EAAE,IAAY,EAAE,OAAgB;IAC7F,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACzC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAExB,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO;IAElC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC;QAChC,qFAAqF;QACrF,gFAAgF;QAChF,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QACrC,sFAAsF;QACtF,gCAAgC;QAChC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAE/B,oFAAoF;IACpF,2FAA2F;IAC3F,OAAO,YAAY,GAAG,iBAAiB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,IAAI;YAAE,MAAM;QACvB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC;QAC/C,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IACjC,CAAC;AACH,CAAC;AAED,2FAA2F;AAC3F,SAAgB,cAAc;IAC5B,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,YAAY,GAAG,CAAC,CAAC;AACnB,CAAC"}
@@ -134,7 +134,17 @@ class LemmaMcpServer {
134
134
  }
135
135
  }
136
136
  // ── Proxy Auto-Start ──────────────────────────────────────────────
137
+ /**
138
+ * Set by the eval harness. The proxy is a detached background process and the handshake
139
+ * is a retry loop against localhost: one is a side effect that outlives the test run, the
140
+ * other adds seconds of latency to every session. Neither is part of any tool's contract.
141
+ */
142
+ get proxyDisabled() {
143
+ return process.env.LEMMA_MCP_NO_PROXY === "1";
144
+ }
137
145
  async ensureProxyRunning() {
146
+ if (this.proxyDisabled)
147
+ return;
138
148
  try {
139
149
  const cliCandidates = [
140
150
  path.join(__dirname, "..", "cli", "lemma-proxy.js"),
@@ -168,6 +178,8 @@ class LemmaMcpServer {
168
178
  }
169
179
  // ── MCP Event Reporting ───────────────────────────────────────────
170
180
  async reportMcpEvent(event) {
181
+ if (this.proxyDisabled)
182
+ return;
171
183
  try {
172
184
  const port = getProxyPort();
173
185
  const projectPath = process.cwd();
@@ -190,6 +202,8 @@ class LemmaMcpServer {
190
202
  }
191
203
  // ── Proxy Registration ────────────────────────────────────────────
192
204
  async registerWithProxy() {
205
+ if (this.proxyDisabled)
206
+ return;
193
207
  const maxRetries = 5;
194
208
  for (let i = 0; i < maxRetries; i++) {
195
209
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-profiles.d.ts","sourceRoot":"","sources":["../../../src/mcp/tool-profiles.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,EA0BnC,CAAC;AA4DF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,UAAoE,CAAC;AAkBnG,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;IAC7D,OAAO,EAAE,WAAW,CAAC;IACrB,wCAAwC;IACxC,UAAU,EAAE,CAAC,EAAE,CAAC;IAChB,uFAAuF;IACvF,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,oDAAoD;IACpD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACxC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACjF,cAAc,EAAE,CAAC,EAAE,EACnB,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,cAAmB,GAC3B,mBAAmB,CAAC,CAAC,CAAC,CA4CxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACrD,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAuDR"}
1
+ {"version":3,"file":"tool-profiles.d.ts","sourceRoot":"","sources":["../../../src/mcp/tool-profiles.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,EA6BnC,CAAC;AA4DF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,UAAoE,CAAC;AAkBnG,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;IAC7D,OAAO,EAAE,WAAW,CAAC;IACrB,wCAAwC;IACxC,UAAU,EAAE,CAAC,EAAE,CAAC;IAChB,uFAAuF;IACvF,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,oDAAoD;IACpD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACxC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACjF,cAAc,EAAE,CAAC,EAAE,EACnB,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,cAAmB,GAC3B,mBAAmB,CAAC,CAAC,CAAC,CA4CxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACrD,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAuDR"}
@@ -23,6 +23,9 @@ export const CORE_TOOL_NAMES = [
23
23
  "get_ast_hologram",
24
24
  "get_symbol_surgical_context",
25
25
  "get_project_onboarding",
26
+ // Earns its schema by replacing full-suite runs, whose output is the single largest
27
+ // context sink in an edit/verify loop.
28
+ "affected_tests",
26
29
  // Avoid re-deriving what was already derived
27
30
  "state_hash_cache",
28
31
  "smarter_cache",