knitbrain 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -23
- package/dist/engine/agents.d.ts +4 -0
- package/dist/engine/agents.js +3 -2
- package/dist/engine/agents.js.map +1 -1
- package/dist/engine/feedback.js +1 -1
- package/dist/engine/feedback.js.map +1 -1
- package/dist/engine/meter.d.ts +2 -0
- package/dist/engine/meter.js +5 -0
- package/dist/engine/meter.js.map +1 -1
- package/dist/evals.d.ts +53 -0
- package/dist/evals.js +189 -0
- package/dist/evals.js.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/learn.d.ts +39 -0
- package/dist/learn.js +289 -0
- package/dist/learn.js.map +1 -0
- package/dist/lib.d.ts +37 -0
- package/dist/lib.js +17 -0
- package/dist/lib.js.map +1 -0
- package/dist/mcp/instructions.d.ts +7 -0
- package/dist/mcp/instructions.js +29 -0
- package/dist/mcp/instructions.js.map +1 -0
- package/dist/mcp/tools.js +50 -12
- package/dist/mcp/tools.js.map +1 -1
- package/dist/optimizer/ast.d.ts +11 -0
- package/dist/optimizer/ast.js +99 -29
- package/dist/optimizer/ast.js.map +1 -1
- package/dist/optimizer/code.js +1 -1
- package/dist/optimizer/code.js.map +1 -1
- package/dist/optimizer/router.d.ts +3 -1
- package/dist/optimizer/router.js +32 -7
- package/dist/optimizer/router.js.map +1 -1
- package/dist/optimizer/structured.d.ts +43 -0
- package/dist/optimizer/structured.js +196 -0
- package/dist/optimizer/structured.js.map +1 -0
- package/dist/optimizer/text.js +38 -7
- package/dist/optimizer/text.js.map +1 -1
- package/dist/optimizer/types.d.ts +4 -2
- package/dist/platforms.d.ts +11 -1
- package/dist/platforms.js +34 -1
- package/dist/platforms.js.map +1 -1
- package/dist/proxy/cache-aligner.d.ts +25 -4
- package/dist/proxy/cache-aligner.js +45 -4
- package/dist/proxy/cache-aligner.js.map +1 -1
- package/dist/proxy/optimize-request.d.ts +10 -0
- package/dist/proxy/optimize-request.js +96 -6
- package/dist/proxy/optimize-request.js.map +1 -1
- package/dist/proxy/server.js +2 -2
- package/dist/proxy/server.js.map +1 -1
- package/dist/server.js +5 -1
- package/dist/server.js.map +1 -1
- package/dist/setup.d.ts +1 -1
- package/dist/setup.js +30 -1
- package/dist/setup.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +11 -2
package/dist/optimizer/ast.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { CCRStore } from "../ccr/store.js";
|
|
2
2
|
import type { CompressResult } from "./types.js";
|
|
3
|
+
/** Grammars shipped in @vscode/tree-sitter-wasm that we load. */
|
|
4
|
+
declare const GRAMMARS: readonly ["typescript", "tsx", "python", "go", "rust", "java", "cpp", "c-sharp", "ruby", "php", "bash"];
|
|
5
|
+
type Grammar = (typeof GRAMMARS)[number];
|
|
3
6
|
/** Whether the WASM parsers are loaded and usable right now (sync check). */
|
|
4
7
|
export declare function astReady(): boolean;
|
|
5
8
|
/** Test seam: reset to cold state (parsers are kept — re-init is cheap). */
|
|
@@ -10,6 +13,13 @@ export declare function resetAstForTest(): void;
|
|
|
10
13
|
* the scanner fallback serves all code forever — never throws.
|
|
11
14
|
*/
|
|
12
15
|
export declare function ensureAst(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Cheap language hint → ordered grammar candidates. Parsing is the expensive
|
|
18
|
+
* step (the profiler routes thousands of blocks), so we try at most 3-4
|
|
19
|
+
* grammars per block instead of all eleven. TS/TSX stay in every list as the
|
|
20
|
+
* generalist fallback — their error recovery elides most brace-language code.
|
|
21
|
+
*/
|
|
22
|
+
export declare function grammarCandidates(text: string): Grammar[];
|
|
13
23
|
/**
|
|
14
24
|
* Compress source code via tree-sitter: keep imports, signatures, types,
|
|
15
25
|
* decorators, class headers; elide function/method bodies. Returns null when
|
|
@@ -17,3 +27,4 @@ export declare function ensureAst(): Promise<void>;
|
|
|
17
27
|
* scanner. Lossless: pristine original in CCR.
|
|
18
28
|
*/
|
|
19
29
|
export declare function compressCodeAst(original: string, ccr: CCRStore): CompressResult | null;
|
|
30
|
+
export {};
|
package/dist/optimizer/ast.js
CHANGED
|
@@ -2,6 +2,20 @@ import { createRequire } from "node:module";
|
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
/** Don't elide bodies smaller than this many source characters (matches scanner). */
|
|
4
4
|
const MIN_BODY_CHARS = 40;
|
|
5
|
+
/** Grammars shipped in @vscode/tree-sitter-wasm that we load. */
|
|
6
|
+
const GRAMMARS = [
|
|
7
|
+
"typescript",
|
|
8
|
+
"tsx",
|
|
9
|
+
"python",
|
|
10
|
+
"go",
|
|
11
|
+
"rust",
|
|
12
|
+
"java",
|
|
13
|
+
"cpp",
|
|
14
|
+
"c-sharp",
|
|
15
|
+
"ruby",
|
|
16
|
+
"php",
|
|
17
|
+
"bash",
|
|
18
|
+
];
|
|
5
19
|
let state = "idle";
|
|
6
20
|
const parsers = new Map();
|
|
7
21
|
/** Whether the WASM parsers are loaded and usable right now (sync check). */
|
|
@@ -32,7 +46,7 @@ export function ensureAst() {
|
|
|
32
46
|
const wasmDir = dirname(pkgMain);
|
|
33
47
|
const ts = require("@vscode/tree-sitter-wasm");
|
|
34
48
|
await ts.Parser.init();
|
|
35
|
-
for (const lang of
|
|
49
|
+
for (const lang of GRAMMARS) {
|
|
36
50
|
const language = await ts.Language.load(join(wasmDir, `tree-sitter-${lang}.wasm`));
|
|
37
51
|
const parser = new ts.Parser();
|
|
38
52
|
parser.setLanguage(language);
|
|
@@ -50,7 +64,39 @@ export function ensureAst() {
|
|
|
50
64
|
function looksPython(text) {
|
|
51
65
|
return /^\s*(def \w+.*:|async def \w+.*:|class \w+(\(.*\))?:|from \S+ import )/m.test(text);
|
|
52
66
|
}
|
|
53
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* Cheap language hint → ordered grammar candidates. Parsing is the expensive
|
|
69
|
+
* step (the profiler routes thousands of blocks), so we try at most 3-4
|
|
70
|
+
* grammars per block instead of all eleven. TS/TSX stay in every list as the
|
|
71
|
+
* generalist fallback — their error recovery elides most brace-language code.
|
|
72
|
+
*/
|
|
73
|
+
export function grammarCandidates(text) {
|
|
74
|
+
const out = [];
|
|
75
|
+
if (looksPython(text))
|
|
76
|
+
out.push("python");
|
|
77
|
+
if (/^(package \w+$|func (\(\w+ \*?\w+\) )?\w+\()/m.test(text))
|
|
78
|
+
out.push("go");
|
|
79
|
+
if (/^\s*(pub\s+)?(fn \w+|impl[\s<]|trait \w+|mod \w+)/m.test(text) || /\blet mut \w+/.test(text))
|
|
80
|
+
out.push("rust");
|
|
81
|
+
if (/#include\s*[<"]|\bstd::|template\s*</.test(text))
|
|
82
|
+
out.push("cpp");
|
|
83
|
+
if (/^\s*(import java\.|package [a-z][\w.]*;|@Override\b)/m.test(text))
|
|
84
|
+
out.push("java");
|
|
85
|
+
if (/^\s*(using System|namespace [A-Z][\w.]*[\s;{]|public (async )?Task[\s<])/m.test(text))
|
|
86
|
+
out.push("c-sharp");
|
|
87
|
+
if (/<\?php|^\s*(public |private )?function \w+\(.*\)\s*\{?$/m.test(text) && /\$\w+/.test(text))
|
|
88
|
+
out.push("php");
|
|
89
|
+
if (/^#!\s*\/(usr\/)?bin\/(env )?(ba)?sh/m.test(text) || /^\s*(fi|done|esac)$/m.test(text))
|
|
90
|
+
out.push("bash");
|
|
91
|
+
if (/^\s*def \w+.*[^:]$/m.test(text) && /^\s*end$/m.test(text))
|
|
92
|
+
out.push("ruby");
|
|
93
|
+
out.push("typescript", "tsx");
|
|
94
|
+
if (!out.includes("python") && /^\s*def \w+/m.test(text))
|
|
95
|
+
out.push("python");
|
|
96
|
+
// dedup, cap the parse budget
|
|
97
|
+
return [...new Set(out)].slice(0, 4);
|
|
98
|
+
}
|
|
99
|
+
/** Function-like node types whose `body` field is elidable, across grammars. */
|
|
54
100
|
const BODY_OWNERS = new Set([
|
|
55
101
|
// TS / TSX / JS
|
|
56
102
|
"function_declaration",
|
|
@@ -59,43 +105,67 @@ const BODY_OWNERS = new Set([
|
|
|
59
105
|
"generator_function_declaration",
|
|
60
106
|
"method_definition",
|
|
61
107
|
"arrow_function",
|
|
62
|
-
// Python
|
|
108
|
+
// Python (also: cpp/php/bash reuse "function_definition")
|
|
63
109
|
"function_definition",
|
|
110
|
+
// Go
|
|
111
|
+
"method_declaration", // also Java / C#
|
|
112
|
+
"func_literal",
|
|
113
|
+
// Rust
|
|
114
|
+
"function_item",
|
|
115
|
+
"closure_expression",
|
|
116
|
+
// Java / C#
|
|
117
|
+
"constructor_declaration",
|
|
118
|
+
"lambda_expression",
|
|
119
|
+
"local_function_statement",
|
|
120
|
+
// Ruby
|
|
121
|
+
"method",
|
|
122
|
+
"singleton_method",
|
|
123
|
+
]);
|
|
124
|
+
/** Body node types that are elidable blocks (braces OR indentation/end-delimited). */
|
|
125
|
+
const BLOCK_TYPES = new Set([
|
|
126
|
+
"statement_block", // TS/JS
|
|
127
|
+
"block", // Python (indent), Go/Rust/Java/C# (braces)
|
|
128
|
+
"compound_statement", // C++ / PHP / Bash
|
|
129
|
+
"constructor_body", // Java
|
|
130
|
+
"body_statement", // Ruby (def…end)
|
|
64
131
|
]);
|
|
132
|
+
/** Comment node types across grammars. */
|
|
133
|
+
const COMMENT_TYPES = new Set(["comment", "line_comment", "block_comment"]);
|
|
65
134
|
/** Comments / docstrings shorter than this stay inline. */
|
|
66
135
|
const MIN_COMMENT_CHARS = 120;
|
|
67
136
|
/**
|
|
68
137
|
* Walk the tree collecting elidable ranges — function/method bodies, long
|
|
69
138
|
* comment blocks, and module docstrings — skipping subtrees already elided.
|
|
70
139
|
*/
|
|
71
|
-
function collectElisions(root, src,
|
|
140
|
+
function collectElisions(root, src, hashComments) {
|
|
72
141
|
const out = [];
|
|
73
142
|
const lineCount = (start, end) => src.slice(start, end).split("\n").length;
|
|
74
143
|
const commentMarker = (start, end) => {
|
|
75
144
|
const n = lineCount(start, end);
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
145
|
+
if (hashComments || src.slice(start, start + 1) === "#")
|
|
146
|
+
return `# …${n}-line comment`;
|
|
147
|
+
if (src.slice(start, start + 2) === "//")
|
|
148
|
+
return `// …${n}-line comment`;
|
|
149
|
+
return `/* …${n}-line comment */`;
|
|
79
150
|
};
|
|
80
151
|
const visit = (node) => {
|
|
81
152
|
if (BODY_OWNERS.has(node.type)) {
|
|
82
153
|
const body = node.childForFieldName("body");
|
|
83
|
-
if (body !== null) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
154
|
+
if (body !== null && BLOCK_TYPES.has(body.type)) {
|
|
155
|
+
// Brace blocks (first char `{`) keep their braces in the skeleton;
|
|
156
|
+
// indentation (Python) / end-delimited (Ruby) bodies elide whole.
|
|
157
|
+
const brace = src.slice(body.startIndex, body.startIndex + 1) === "{";
|
|
158
|
+
const start = brace ? body.startIndex + 1 : body.startIndex;
|
|
159
|
+
const end = brace ? body.endIndex - 1 : body.endIndex;
|
|
160
|
+
if (end - start >= MIN_BODY_CHARS) {
|
|
161
|
+
const n = lineCount(start, end);
|
|
162
|
+
out.push({ start, end, replacement: brace ? ` …${n} lines ` : `…${n} lines` });
|
|
163
|
+
return; // don't descend into an elided body
|
|
94
164
|
}
|
|
95
165
|
}
|
|
96
166
|
}
|
|
97
167
|
// Module docstrings: low-signal in a skeleton, recoverable from CCR.
|
|
98
|
-
const isDocstring =
|
|
168
|
+
const isDocstring = hashComments && node.type === "expression_statement" && node.namedChild(0)?.type === "string";
|
|
99
169
|
if (isDocstring && node.endIndex - node.startIndex >= MIN_COMMENT_CHARS) {
|
|
100
170
|
out.push({
|
|
101
171
|
start: node.startIndex,
|
|
@@ -110,12 +180,12 @@ function collectElisions(root, src, isPython) {
|
|
|
110
180
|
let i = 0;
|
|
111
181
|
while (i < node.namedChildCount) {
|
|
112
182
|
const child = node.namedChild(i);
|
|
113
|
-
if (child.type
|
|
183
|
+
if (COMMENT_TYPES.has(child.type)) {
|
|
114
184
|
let j = i;
|
|
115
185
|
let end = child.endIndex;
|
|
116
186
|
while (j + 1 < node.namedChildCount) {
|
|
117
187
|
const next = node.namedChild(j + 1);
|
|
118
|
-
if (next.type
|
|
188
|
+
if (!COMMENT_TYPES.has(next.type))
|
|
119
189
|
break;
|
|
120
190
|
if (/\S/.test(src.slice(end, next.startIndex)))
|
|
121
191
|
break; // gap has code
|
|
@@ -135,6 +205,8 @@ function collectElisions(root, src, isPython) {
|
|
|
135
205
|
visit(root);
|
|
136
206
|
return out;
|
|
137
207
|
}
|
|
208
|
+
/** Grammars whose line comments are `#`-style (marker + docstring handling). */
|
|
209
|
+
const HASH_COMMENT_GRAMMARS = new Set(["python", "ruby", "bash"]);
|
|
138
210
|
/**
|
|
139
211
|
* Compress source code via tree-sitter: keep imports, signatures, types,
|
|
140
212
|
* decorators, class headers; elide function/method bodies. Returns null when
|
|
@@ -149,13 +221,11 @@ export function compressCodeAst(original, ccr) {
|
|
|
149
221
|
// Real transcript blocks are messy (snippets, prose-wrapped pastes), so a
|
|
150
222
|
// parse-error gate rejects nearly everything. Elision only ever touches
|
|
151
223
|
// well-formed function nodes — error recovery just yields fewer matches —
|
|
152
|
-
// so instead: parse
|
|
153
|
-
const candidates =
|
|
154
|
-
? ["python", "typescript", "tsx"]
|
|
155
|
-
: ["typescript", "tsx", "python"];
|
|
224
|
+
// so instead: parse the hinted grammars and keep whichever elides the most.
|
|
225
|
+
const candidates = grammarCandidates(original);
|
|
156
226
|
let elisions = [];
|
|
157
227
|
let elidedChars = 0;
|
|
158
|
-
let
|
|
228
|
+
let hashStyle = false;
|
|
159
229
|
for (const langName of candidates) {
|
|
160
230
|
const parser = parsers.get(langName);
|
|
161
231
|
if (!parser)
|
|
@@ -163,12 +233,12 @@ export function compressCodeAst(original, ccr) {
|
|
|
163
233
|
const tree = parser.parse(original);
|
|
164
234
|
if (tree === null)
|
|
165
235
|
continue;
|
|
166
|
-
const found = collectElisions(tree.rootNode, original, langName
|
|
236
|
+
const found = collectElisions(tree.rootNode, original, HASH_COMMENT_GRAMMARS.has(langName));
|
|
167
237
|
const chars = found.reduce((s, e) => s + (e.end - e.start), 0);
|
|
168
238
|
if (chars > elidedChars) {
|
|
169
239
|
elisions = found;
|
|
170
240
|
elidedChars = chars;
|
|
171
|
-
|
|
241
|
+
hashStyle = HASH_COMMENT_GRAMMARS.has(langName);
|
|
172
242
|
}
|
|
173
243
|
}
|
|
174
244
|
if (elisions.length === 0)
|
|
@@ -182,7 +252,7 @@ export function compressCodeAst(original, ccr) {
|
|
|
182
252
|
}
|
|
183
253
|
parts.push(original.slice(cursor));
|
|
184
254
|
const handle = ccr.put(original);
|
|
185
|
-
const marker =
|
|
255
|
+
const marker = hashStyle ? `# ⟨ccr:${handle}⟩` : `// ⟨ccr:${handle}⟩`;
|
|
186
256
|
const skeleton = `${parts.join("")}\n${marker}`;
|
|
187
257
|
return { skeleton, handle, contentType: "code" };
|
|
188
258
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/optimizer/ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/optimizer/ast.ts"],"names":[],"mappings":"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"}
|
package/dist/optimizer/code.js
CHANGED
|
@@ -12,7 +12,7 @@ const MIN_BODY_CHARS = 40;
|
|
|
12
12
|
/** Cheap structural test: looks like source code (braces + a code keyword), or an indentation language (Python). */
|
|
13
13
|
export function isCode(text) {
|
|
14
14
|
if (/[{};]/.test(text) &&
|
|
15
|
-
/\b(function|const|let|var|class|import|export|def|fn|public|private|interface|type)\b/.test(text)) {
|
|
15
|
+
/\b(function|const|let|var|class|import|export|def|fn|func|impl|package|namespace|public|private|interface|type)\b/.test(text)) {
|
|
16
16
|
return true;
|
|
17
17
|
}
|
|
18
18
|
return /^(def \w+.*:|class \w+(\(.*\))?:|from \S+ import |import \S+$|async def \w+)/m.test(text);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/optimizer/code.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,IAAI;IACJ,KAAK;IACL,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;CACP,CAAC,CAAC;AAEH,mEAAmE;AACnE,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,oHAAoH;AACpH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,IACE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAClB,
|
|
1
|
+
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/optimizer/code.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,9 @@ export interface RouteResult {
|
|
|
14
14
|
readonly skeletonTokens: number;
|
|
15
15
|
readonly savedPct: number;
|
|
16
16
|
}
|
|
17
|
-
/** Deterministic content-type detection (no ML). JSON is strict;
|
|
17
|
+
/** Deterministic content-type detection (no ML). JSON is strict; the
|
|
18
|
+
* structured shapes (diff/search/log) outrank the looser code heuristic —
|
|
19
|
+
* grep dumps and test logs used to trip isCode and compress poorly. */
|
|
18
20
|
export declare function detect(text: string): ContentType;
|
|
19
21
|
/**
|
|
20
22
|
* Detect host-Read line numbering (the dominant in-session tool-result shape;
|
package/dist/optimizer/router.js
CHANGED
|
@@ -2,6 +2,7 @@ import { isJson, compressJson } from "./json.js";
|
|
|
2
2
|
import { isCode, compressCode } from "./code.js";
|
|
3
3
|
import { compressCodeAst } from "./ast.js";
|
|
4
4
|
import { compressText, compressShortProse } from "./text.js";
|
|
5
|
+
import { isDiff, isSearchResults, isLogOutput, compressDiff, compressSearchResults, compressLog, IMPORTANT_LINE, RESULT_LINE, } from "./structured.js";
|
|
5
6
|
import { countTokens } from "../tokenizer.js";
|
|
6
7
|
/**
|
|
7
8
|
* Minimum token saving (%) for compression to be kept. Below this we pass the
|
|
@@ -13,9 +14,13 @@ const ANCHOR_MIN_LINES = 40;
|
|
|
13
14
|
/** If structural compression saves less than this %, try the anchor. */
|
|
14
15
|
const ANCHOR_TRIGGER_PCT = 35;
|
|
15
16
|
const clamp = (v, lo, hi) => Math.max(lo, Math.min(hi, v));
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
/** Max failure lines rescued from an elided middle (shared IMPORTANT_LINE).
|
|
18
|
+
* Error lines are the highest-value content in any output — the cap exists
|
|
19
|
+
* only to bound pathological blocks, not to trim ordinary failures. */
|
|
20
|
+
const MAX_RESCUED = 32;
|
|
21
|
+
/** Top-level declaration lines — rescued when the anchor swallows CODE
|
|
22
|
+
* (an agent navigating a file needs the names even if bodies are gone). */
|
|
23
|
+
const DECLARATION_LINE = /^(?:export\s+|pub(?:\(crate\))?\s+|public\s+|private\s+|protected\s+|static\s+|abstract\s+|final\s+|async\s+|default\s+)*(?:function|class|def|fn|func|interface|trait|impl|type|struct|enum)\s+[A-Za-z_$]/;
|
|
19
24
|
/**
|
|
20
25
|
* Anchor elision — the universal fallback for long low-structure output
|
|
21
26
|
* (build logs, test runs, prose, mixed snippets): keep the head (intro/
|
|
@@ -24,21 +29,30 @@ const MAX_RESCUED = 12;
|
|
|
24
29
|
* length. Profiled on 69 real transcripts: these shapes are ~70% of burn.
|
|
25
30
|
* Lossless via CCR; TOIN backs off any shape that gets over-retrieved.
|
|
26
31
|
*/
|
|
27
|
-
function anchorSkeleton(text, handle) {
|
|
32
|
+
function anchorSkeleton(text, handle, isCodeShape) {
|
|
28
33
|
const lines = text.split("\n");
|
|
29
34
|
const headN = clamp(Math.round(lines.length * 0.15), 8, 25);
|
|
30
35
|
const tailN = clamp(Math.round(lines.length * 0.12), 6, 18);
|
|
31
36
|
const middle = lines.slice(headN, lines.length - tailN);
|
|
32
|
-
const
|
|
37
|
+
const worthKeeping = (l) => IMPORTANT_LINE.test(l) || RESULT_LINE.test(l) || (isCodeShape && DECLARATION_LINE.test(l));
|
|
38
|
+
const rescued = middle.filter(worthKeeping).slice(0, MAX_RESCUED);
|
|
33
39
|
const head = lines.slice(0, headN).join("\n");
|
|
34
40
|
const tail = lines.slice(-tailN).join("\n");
|
|
35
41
|
const rescueBlock = rescued.length > 0 ? `\n${rescued.join("\n")}` : "";
|
|
36
42
|
return `${head}\n⟪… ${middle.length - rescued.length} lines elided · exact original: ⟨ccr:${handle}⟩ …⟫${rescueBlock}\n${tail}`;
|
|
37
43
|
}
|
|
38
|
-
/** Deterministic content-type detection (no ML). JSON is strict;
|
|
44
|
+
/** Deterministic content-type detection (no ML). JSON is strict; the
|
|
45
|
+
* structured shapes (diff/search/log) outrank the looser code heuristic —
|
|
46
|
+
* grep dumps and test logs used to trip isCode and compress poorly. */
|
|
39
47
|
export function detect(text) {
|
|
40
48
|
if (isJson(text))
|
|
41
49
|
return "json";
|
|
50
|
+
if (isDiff(text))
|
|
51
|
+
return "diff";
|
|
52
|
+
if (isSearchResults(text))
|
|
53
|
+
return "search";
|
|
54
|
+
if (isLogOutput(text))
|
|
55
|
+
return "log";
|
|
42
56
|
if (isCode(text))
|
|
43
57
|
return "code";
|
|
44
58
|
return "text";
|
|
@@ -73,6 +87,17 @@ export function compress(text, ccr, options = {}) {
|
|
|
73
87
|
const byType = (t, type) => {
|
|
74
88
|
if (type === "json")
|
|
75
89
|
return compressJson(t, ccr);
|
|
90
|
+
if (type === "diff")
|
|
91
|
+
return compressDiff(t, ccr);
|
|
92
|
+
if (type === "search")
|
|
93
|
+
return compressSearchResults(t, ccr);
|
|
94
|
+
if (type === "log") {
|
|
95
|
+
// Race the log skeleton against generic text (line-dedup wins on highly
|
|
96
|
+
// repetitive logs); keep whichever is smaller. Both are CCR-lossless.
|
|
97
|
+
const log = compressLog(t, ccr);
|
|
98
|
+
const text = compressText(t, ccr);
|
|
99
|
+
return text.skeleton.length < log.skeleton.length ? text : log;
|
|
100
|
+
}
|
|
76
101
|
if (type === "code")
|
|
77
102
|
return compressCodeAst(t, ccr) ?? compressCode(t, ccr);
|
|
78
103
|
// Short prose (too few lines for the anchor fallback): try the TOIN-gated
|
|
@@ -108,7 +133,7 @@ export function compress(text, ccr, options = {}) {
|
|
|
108
133
|
const lineCount = text.split("\n").length;
|
|
109
134
|
if (savedPct < ANCHOR_TRIGGER_PCT && lineCount >= ANCHOR_MIN_LINES) {
|
|
110
135
|
const anchorHandle = handle || ccr.put(text);
|
|
111
|
-
const anchored = anchorSkeleton(text, anchorHandle);
|
|
136
|
+
const anchored = anchorSkeleton(text, anchorHandle, contentType === "code");
|
|
112
137
|
const anchoredTokens = countTokens(anchored);
|
|
113
138
|
if (anchoredTokens < skeletonTokens) {
|
|
114
139
|
skeleton = anchored;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/optimizer/router.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/optimizer/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { CCRStore } from "../ccr/store.js";
|
|
2
|
+
import type { CompressResult } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Structured-output handlers — search results, build/test logs, unified
|
|
5
|
+
* diffs. These shapes dominated the misrouted residue of the code bucket
|
|
6
|
+
* (markdown reports, grep dumps, test runs tripping the loose isCode
|
|
7
|
+
* heuristic), so their detectors run BEFORE isCode in the router.
|
|
8
|
+
*
|
|
9
|
+
* Shared invariant: failure/error lines are NEVER elided — a compressed log
|
|
10
|
+
* that loses the FATAL line is worse than no compression at all.
|
|
11
|
+
*/
|
|
12
|
+
/** Lines that must survive any elision (failures live mid-output). */
|
|
13
|
+
export declare const IMPORTANT_LINE: RegExp;
|
|
14
|
+
/** Result-summary lines (test/build totals) — the other thing an agent always
|
|
15
|
+
* needs from a run. Rescued alongside errors by every elision path. */
|
|
16
|
+
export declare const RESULT_LINE: RegExp;
|
|
17
|
+
/** ≥50% of non-empty lines look like `path:line:` matches (and enough of them). */
|
|
18
|
+
export declare function isSearchResults(text: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Collapse search output by file: keep the first matches per file (the
|
|
21
|
+
* locations), count the rest. Agents almost always act on file+line, not on
|
|
22
|
+
* the repeated match text — and the full set is one retrieve away.
|
|
23
|
+
*/
|
|
24
|
+
export declare function compressSearchResults(original: string, ccr: CCRStore): CompressResult;
|
|
25
|
+
/** ≥30% of lines carry a log/test signature (timestamps, levels, test
|
|
26
|
+
* markers, vitest/jest code frames `123|`, stack frames, run summaries). */
|
|
27
|
+
export declare function isLogOutput(text: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Log skeleton: keep the head (what ran), the tail (summaries land at the
|
|
30
|
+
* end), and EVERY error/failure line; collapse runs of routine lines to
|
|
31
|
+
* counted markers. The router still race-checks this against the generic
|
|
32
|
+
* text handler and keeps whichever is smaller.
|
|
33
|
+
*/
|
|
34
|
+
export declare function compressLog(original: string, ccr: CCRStore): CompressResult;
|
|
35
|
+
/** Unified diff: a `diff --git` header, or ---/+++ pair plus a hunk header. */
|
|
36
|
+
export declare function isDiff(text: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Diff skeleton: keep file headers and hunk headers (the WHERE), keep error
|
|
39
|
+
* lines, elide long hunk bodies to `⟪… +a/-b/~c lines⟫` (the churn size).
|
|
40
|
+
* Reviewers and agents mostly need which files/regions changed and how much;
|
|
41
|
+
* the full patch is one retrieve away.
|
|
42
|
+
*/
|
|
43
|
+
export declare function compressDiff(original: string, ccr: CCRStore): CompressResult;
|