@kenkaiiii/ggcoder 5.38.0 → 5.39.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/dist/core/agent-session-tool-tiers.test.d.ts +2 -0
- package/dist/core/agent-session-tool-tiers.test.d.ts.map +1 -0
- package/dist/core/agent-session-tool-tiers.test.js +138 -0
- package/dist/core/agent-session-tool-tiers.test.js.map +1 -0
- package/dist/core/agent-session.d.ts +19 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +47 -6
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/code-retrieval-chunkers.d.ts +27 -0
- package/dist/core/code-retrieval-chunkers.d.ts.map +1 -0
- package/dist/core/code-retrieval-chunkers.js +264 -0
- package/dist/core/code-retrieval-chunkers.js.map +1 -0
- package/dist/core/code-retrieval-chunkers.test.d.ts +2 -0
- package/dist/core/code-retrieval-chunkers.test.d.ts.map +1 -0
- package/dist/core/code-retrieval-chunkers.test.js +203 -0
- package/dist/core/code-retrieval-chunkers.test.js.map +1 -0
- package/dist/core/code-retrieval.d.ts +6 -0
- package/dist/core/code-retrieval.d.ts.map +1 -1
- package/dist/core/code-retrieval.js +38 -1
- package/dist/core/code-retrieval.js.map +1 -1
- package/dist/core/lsp/client-navigation.test.d.ts +2 -0
- package/dist/core/lsp/client-navigation.test.d.ts.map +1 -0
- package/dist/core/lsp/client-navigation.test.js +119 -0
- package/dist/core/lsp/client-navigation.test.js.map +1 -0
- package/dist/core/lsp/client.d.ts +62 -0
- package/dist/core/lsp/client.d.ts.map +1 -1
- package/dist/core/lsp/client.js +147 -0
- package/dist/core/lsp/client.js.map +1 -1
- package/dist/core/lsp/manager-navigation.test.d.ts +2 -0
- package/dist/core/lsp/manager-navigation.test.d.ts.map +1 -0
- package/dist/core/lsp/manager-navigation.test.js +119 -0
- package/dist/core/lsp/manager-navigation.test.js.map +1 -0
- package/dist/core/lsp/manager.d.ts +35 -1
- package/dist/core/lsp/manager.d.ts.map +1 -1
- package/dist/core/lsp/manager.js +92 -0
- package/dist/core/lsp/manager.js.map +1 -1
- package/dist/core/mcp/deferred-catalog.d.ts +1 -1
- package/dist/core/mcp/deferred-catalog.js +1 -1
- package/dist/core/settings-manager.d.ts +2 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +10 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/system-prompt.d.ts +6 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +28 -5
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.tiering.test.d.ts +2 -0
- package/dist/system-prompt.tiering.test.d.ts.map +1 -0
- package/dist/system-prompt.tiering.test.js +103 -0
- package/dist/system-prompt.tiering.test.js.map +1 -0
- package/dist/tools/code-nav.d.ts +30 -0
- package/dist/tools/code-nav.d.ts.map +1 -0
- package/dist/tools/code-nav.js +247 -0
- package/dist/tools/code-nav.js.map +1 -0
- package/dist/tools/code-nav.test.d.ts +2 -0
- package/dist/tools/code-nav.test.d.ts.map +1 -0
- package/dist/tools/code-nav.test.js +109 -0
- package/dist/tools/code-nav.test.js.map +1 -0
- package/dist/tools/grep-parity.test.d.ts +2 -0
- package/dist/tools/grep-parity.test.d.ts.map +1 -0
- package/dist/tools/grep-parity.test.js +92 -0
- package/dist/tools/grep-parity.test.js.map +1 -0
- package/dist/tools/grep-recall.test.d.ts +2 -0
- package/dist/tools/grep-recall.test.d.ts.map +1 -0
- package/dist/tools/grep-recall.test.js +114 -0
- package/dist/tools/grep-recall.test.js.map +1 -0
- package/dist/tools/grep-spawn.test.d.ts +2 -0
- package/dist/tools/grep-spawn.test.d.ts.map +1 -0
- package/dist/tools/grep-spawn.test.js +66 -0
- package/dist/tools/grep-spawn.test.js.map +1 -0
- package/dist/tools/grep.d.ts +13 -3
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +340 -40
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/grep.test.js +11 -8
- package/dist/tools/grep.test.js.map +1 -1
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/prompt-hints.d.ts.map +1 -1
- package/dist/tools/prompt-hints.js +23 -8
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/search-code.d.ts.map +1 -1
- package/dist/tools/search-code.js +7 -6
- package/dist/tools/search-code.js.map +1 -1
- package/dist/tools/search-code.test.js +8 -2
- package/dist/tools/search-code.test.js.map +1 -1
- package/dist/tools/tool-search.d.ts.map +1 -1
- package/dist/tools/tool-search.js +2 -1
- package/dist/tools/tool-search.js.map +1 -1
- package/dist/tools/tool-tiers.d.ts +42 -0
- package/dist/tools/tool-tiers.d.ts.map +1 -0
- package/dist/tools/tool-tiers.js +77 -0
- package/dist/tools/tool-tiers.js.map +1 -0
- package/dist/tools/tool-tiers.test.d.ts +2 -0
- package/dist/tools/tool-tiers.test.d.ts.map +1 -0
- package/dist/tools/tool-tiers.test.js +48 -0
- package/dist/tools/tool-tiers.test.js.map +1 -0
- package/dist/ui/hooks/useAgentLoop.js +1 -1
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
const BRACE_RULES = {
|
|
2
|
+
go: {
|
|
3
|
+
declarations: [
|
|
4
|
+
// Methods carry a receiver: `func (w *Widget) Render() {`.
|
|
5
|
+
/^func\s+(?:\([^)]*\)\s*)?([A-Za-z_]\w*)/,
|
|
6
|
+
/^type\s+([A-Za-z_]\w*)/,
|
|
7
|
+
/^(?:var|const)\s+([A-Za-z_]\w*)/,
|
|
8
|
+
],
|
|
9
|
+
containers: [],
|
|
10
|
+
lineComment: "//",
|
|
11
|
+
},
|
|
12
|
+
rust: {
|
|
13
|
+
declarations: [
|
|
14
|
+
/^(?:pub(?:\([^)]*\))?\s+)?(?:default\s+)?(?:const\s+)?(?:async\s+)?(?:unsafe\s+)?(?:extern\s+"[^"]*"\s+)?fn\s+([A-Za-z_]\w*)/,
|
|
15
|
+
/^(?:pub(?:\([^)]*\))?\s+)?(?:unsafe\s+)?(?:struct|enum|trait|union|type|const|static)\s+([A-Za-z_]\w*)/,
|
|
16
|
+
/^macro_rules!\s+([A-Za-z_]\w*)/,
|
|
17
|
+
// `impl<T> Display for Widget<T> {` — named for the type it implements.
|
|
18
|
+
/^(?:unsafe\s+)?impl\b[^{]*/,
|
|
19
|
+
],
|
|
20
|
+
containers: [/^(?:pub(?:\([^)]*\))?\s+)?mod\s+[A-Za-z_]\w*/],
|
|
21
|
+
lineComment: "//",
|
|
22
|
+
},
|
|
23
|
+
java: {
|
|
24
|
+
declarations: [
|
|
25
|
+
/^(?:(?:public|private|protected|static|final|abstract|sealed|non-sealed|strictfp)\s+)*(?:class|interface|enum|record|@interface)\s+([A-Za-z_]\w*)/,
|
|
26
|
+
],
|
|
27
|
+
containers: [],
|
|
28
|
+
lineComment: "//",
|
|
29
|
+
},
|
|
30
|
+
csharp: {
|
|
31
|
+
declarations: [
|
|
32
|
+
/^(?:(?:public|private|protected|internal|static|sealed|abstract|partial|readonly|unsafe|file)\s+)*(?:class|interface|struct|enum|record)\s+([A-Za-z_]\w*)/,
|
|
33
|
+
],
|
|
34
|
+
containers: [/^namespace\s+[A-Za-z_][\w.]*/],
|
|
35
|
+
lineComment: "//",
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
/** Hard span cap, so an unbalanced file cannot produce one whole-file chunk. */
|
|
39
|
+
const MAX_CHUNK_LINES = 2000;
|
|
40
|
+
/**
|
|
41
|
+
* Chunk a brace-delimited language.
|
|
42
|
+
*
|
|
43
|
+
* Declarations are recognised only at the current top level, where "top level"
|
|
44
|
+
* follows container blocks inward: a type inside a C# namespace is top level, a
|
|
45
|
+
* method inside that type is not — it belongs to its type's chunk, exactly as
|
|
46
|
+
* the TS chunker treats class members.
|
|
47
|
+
*/
|
|
48
|
+
export function chunkByBraces(rel, source, language) {
|
|
49
|
+
const rules = BRACE_RULES[language];
|
|
50
|
+
const lines = source.split("\n");
|
|
51
|
+
const chunks = [];
|
|
52
|
+
const containerDepths = [];
|
|
53
|
+
const state = { inBlockComment: false };
|
|
54
|
+
let depth = 0;
|
|
55
|
+
for (let i = 0; i < lines.length; i++) {
|
|
56
|
+
const code = stripNoise(lines[i], rules.lineComment, state);
|
|
57
|
+
const trimmed = code.trim();
|
|
58
|
+
if (depth === containerDepths.length && trimmed) {
|
|
59
|
+
if (rules.containers.some((re) => re.test(trimmed))) {
|
|
60
|
+
containerDepths.push(depth);
|
|
61
|
+
depth += netBraces(code);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const symbol = matchDeclaration(trimmed, rules.declarations, language);
|
|
65
|
+
if (symbol) {
|
|
66
|
+
const end = findBlockEnd(lines, i, rules.lineComment, { ...state });
|
|
67
|
+
chunks.push({
|
|
68
|
+
file: rel,
|
|
69
|
+
symbol,
|
|
70
|
+
text: lines.slice(i, end + 1).join("\n"),
|
|
71
|
+
startLine: i + 1,
|
|
72
|
+
});
|
|
73
|
+
// Replay the block to keep block-comment state honest. Its braces are
|
|
74
|
+
// balanced by construction, so `depth` is unchanged.
|
|
75
|
+
for (let j = i + 1; j <= end; j++)
|
|
76
|
+
stripNoise(lines[j], rules.lineComment, state);
|
|
77
|
+
i = end;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
depth += netBraces(code);
|
|
82
|
+
while (containerDepths.length > 0 && depth <= containerDepths[containerDepths.length - 1]) {
|
|
83
|
+
containerDepths.pop();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return chunks;
|
|
87
|
+
}
|
|
88
|
+
function matchDeclaration(trimmed, declarations, language) {
|
|
89
|
+
for (const pattern of declarations) {
|
|
90
|
+
const match = pattern.exec(trimmed);
|
|
91
|
+
if (!match)
|
|
92
|
+
continue;
|
|
93
|
+
if (match[1])
|
|
94
|
+
return match[1];
|
|
95
|
+
// Unnamed pattern — currently only Rust `impl`, named for its target type.
|
|
96
|
+
if (language === "rust")
|
|
97
|
+
return implTargetName(match[0]);
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
/** `impl<T> Display for Widget<T>` → `Widget`: the type being implemented. */
|
|
102
|
+
function implTargetName(header) {
|
|
103
|
+
const withoutGenerics = header.replace(/<[^<>]*>/g, " ");
|
|
104
|
+
const afterFor = /\bfor\b(.*)$/.exec(withoutGenerics);
|
|
105
|
+
const target = (afterFor ? afterFor[1] : withoutGenerics.replace(/^\s*(?:unsafe\s+)?impl/, ""))
|
|
106
|
+
.replace(/\bwhere\b.*$/, "")
|
|
107
|
+
.trim();
|
|
108
|
+
const identifiers = target.match(/[A-Za-z_]\w*/g);
|
|
109
|
+
return identifiers?.[identifiers.length - 1] ?? "impl";
|
|
110
|
+
}
|
|
111
|
+
/** Trailing characters that mean the declaration continues on the next line. */
|
|
112
|
+
const CONTINUATION = /[,([{=+\-&|:<>?\\]$/;
|
|
113
|
+
/**
|
|
114
|
+
* Last line of the declaration starting at `start`.
|
|
115
|
+
*
|
|
116
|
+
* Two phases. The header phase reads until the body's opening brace, tolerating
|
|
117
|
+
* a signature split across lines (unbalanced parens, a trailing comma, a brace
|
|
118
|
+
* parked on its own line). If the header completes with no brace at all, the
|
|
119
|
+
* declaration is a bodiless statement — `const Port = 8080`, `type Alias = ...;`
|
|
120
|
+
* — and ends right there. Getting that wrong is expensive: the chunk would run
|
|
121
|
+
* on and swallow the declarations after it, which then vanish from the index.
|
|
122
|
+
*
|
|
123
|
+
* The body phase then counts braces to the matching close.
|
|
124
|
+
*/
|
|
125
|
+
function findBlockEnd(lines, start, lineComment, state) {
|
|
126
|
+
let depth = 0;
|
|
127
|
+
let parens = 0;
|
|
128
|
+
let opened = false;
|
|
129
|
+
const limit = Math.min(lines.length, start + MAX_CHUNK_LINES);
|
|
130
|
+
for (let i = start; i < limit; i++) {
|
|
131
|
+
const code = stripNoise(lines[i], lineComment, state);
|
|
132
|
+
const trimmed = code.trim();
|
|
133
|
+
if (!opened) {
|
|
134
|
+
if (code.includes("{")) {
|
|
135
|
+
opened = true;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
parens += netOf(code, "(", ")") + netOf(code, "[", "]");
|
|
139
|
+
if (trimmed.endsWith(";"))
|
|
140
|
+
return i;
|
|
141
|
+
const nextStartsBlock = (lines[i + 1] ?? "").trim().startsWith("{");
|
|
142
|
+
if (parens <= 0 && trimmed && !CONTINUATION.test(trimmed) && !nextStartsBlock)
|
|
143
|
+
return i;
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
depth += netBraces(code);
|
|
148
|
+
if (depth <= 0)
|
|
149
|
+
return i;
|
|
150
|
+
}
|
|
151
|
+
return opened ? limit - 1 : start;
|
|
152
|
+
}
|
|
153
|
+
function netOf(code, open, close) {
|
|
154
|
+
let net = 0;
|
|
155
|
+
for (const ch of code) {
|
|
156
|
+
if (ch === open)
|
|
157
|
+
net++;
|
|
158
|
+
else if (ch === close)
|
|
159
|
+
net--;
|
|
160
|
+
}
|
|
161
|
+
return net;
|
|
162
|
+
}
|
|
163
|
+
function netBraces(code) {
|
|
164
|
+
let net = 0;
|
|
165
|
+
for (const ch of code) {
|
|
166
|
+
if (ch === "{")
|
|
167
|
+
net++;
|
|
168
|
+
else if (ch === "}")
|
|
169
|
+
net--;
|
|
170
|
+
}
|
|
171
|
+
return net;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Blank out string literals and comments so their braces are never counted.
|
|
175
|
+
* `state.inBlockComment` carries across lines, and escapes are honoured so a
|
|
176
|
+
* trailing escaped quote does not leave a string open forever.
|
|
177
|
+
*/
|
|
178
|
+
function stripNoise(line, lineComment, state) {
|
|
179
|
+
let out = "";
|
|
180
|
+
let quote;
|
|
181
|
+
for (let i = 0; i < line.length; i++) {
|
|
182
|
+
const ch = line[i];
|
|
183
|
+
if (state.inBlockComment) {
|
|
184
|
+
if (ch === "*" && line[i + 1] === "/") {
|
|
185
|
+
state.inBlockComment = false;
|
|
186
|
+
i++;
|
|
187
|
+
}
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
if (quote) {
|
|
191
|
+
if (ch === "\\")
|
|
192
|
+
i++;
|
|
193
|
+
else if (ch === quote)
|
|
194
|
+
quote = undefined;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
if (ch === '"' || ch === "'" || ch === "`") {
|
|
198
|
+
quote = ch;
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (ch === "/" && line[i + 1] === "*") {
|
|
202
|
+
state.inBlockComment = true;
|
|
203
|
+
i++;
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if (lineComment && line.startsWith(lineComment, i))
|
|
207
|
+
break;
|
|
208
|
+
out += ch;
|
|
209
|
+
}
|
|
210
|
+
return out;
|
|
211
|
+
}
|
|
212
|
+
const PYTHON_DECLARATIONS = [
|
|
213
|
+
/^(?:async\s+)?def\s+([A-Za-z_]\w*)/,
|
|
214
|
+
/^class\s+([A-Za-z_]\w*)/,
|
|
215
|
+
// Module-level constants — the Python analogue of an exported const.
|
|
216
|
+
/^([A-Z_][A-Z0-9_]*)\s*(?::[^=]+)?=/,
|
|
217
|
+
];
|
|
218
|
+
/**
|
|
219
|
+
* Chunk Python by indentation: a top-level declaration owns every following
|
|
220
|
+
* line indented past column 0, plus any decorators stacked directly above it
|
|
221
|
+
* (a decorator belongs to its declaration, not to a chunk of its own).
|
|
222
|
+
*/
|
|
223
|
+
export function chunkByIndentation(rel, source) {
|
|
224
|
+
const lines = source.split("\n");
|
|
225
|
+
const chunks = [];
|
|
226
|
+
for (let i = 0; i < lines.length; i++) {
|
|
227
|
+
const line = lines[i];
|
|
228
|
+
if (!line || /^\s/.test(line))
|
|
229
|
+
continue;
|
|
230
|
+
let symbol;
|
|
231
|
+
for (const pattern of PYTHON_DECLARATIONS) {
|
|
232
|
+
const match = pattern.exec(line);
|
|
233
|
+
if (match) {
|
|
234
|
+
symbol = match[1];
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (!symbol)
|
|
239
|
+
continue;
|
|
240
|
+
let start = i;
|
|
241
|
+
while (start > 0 && /^@\w/.test(lines[start - 1]))
|
|
242
|
+
start--;
|
|
243
|
+
let end = i;
|
|
244
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
245
|
+
const next = lines[j];
|
|
246
|
+
if (next.trim() === "")
|
|
247
|
+
continue;
|
|
248
|
+
if (!/^\s/.test(next))
|
|
249
|
+
break;
|
|
250
|
+
end = j;
|
|
251
|
+
if (end - start >= MAX_CHUNK_LINES)
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
chunks.push({
|
|
255
|
+
file: rel,
|
|
256
|
+
symbol,
|
|
257
|
+
text: lines.slice(start, end + 1).join("\n"),
|
|
258
|
+
startLine: start + 1,
|
|
259
|
+
});
|
|
260
|
+
i = end;
|
|
261
|
+
}
|
|
262
|
+
return chunks;
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=code-retrieval-chunkers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-retrieval-chunkers.js","sourceRoot":"","sources":["../../src/core/code-retrieval-chunkers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-retrieval-chunkers.test.d.ts","sourceRoot":"","sources":["../../src/core/code-retrieval-chunkers.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { chunkFile, bm25Rank, languageForFile, CHUNKABLE_EXTENSIONS } from "./code-retrieval.js";
|
|
3
|
+
/** `symbol@startLine` for every chunk — boundaries and names in one assertion. */
|
|
4
|
+
function outline(rel, source) {
|
|
5
|
+
return chunkFile(rel, source).map((c) => `${c.symbol}@${c.startLine}`);
|
|
6
|
+
}
|
|
7
|
+
describe("language detection", () => {
|
|
8
|
+
it("maps every chunkable extension to a language", () => {
|
|
9
|
+
for (const ext of CHUNKABLE_EXTENSIONS) {
|
|
10
|
+
expect(languageForFile(`a.${ext}`), ext).toBeDefined();
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
it("returns nothing for a file it cannot chunk", () => {
|
|
14
|
+
expect(languageForFile("notes.md")).toBeUndefined();
|
|
15
|
+
expect(chunkFile("notes.md", "# heading\n")).toEqual([]);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
describe("python chunking", () => {
|
|
19
|
+
const source = [
|
|
20
|
+
"import os",
|
|
21
|
+
"",
|
|
22
|
+
"MAX_RETRIES = 3",
|
|
23
|
+
"",
|
|
24
|
+
"",
|
|
25
|
+
"def connect(host):",
|
|
26
|
+
' """Open a socket."""',
|
|
27
|
+
" return os.open(host)",
|
|
28
|
+
"",
|
|
29
|
+
"",
|
|
30
|
+
"@dataclass",
|
|
31
|
+
"class Client:",
|
|
32
|
+
" host: str",
|
|
33
|
+
"",
|
|
34
|
+
" def send(self, payload):",
|
|
35
|
+
" return connect(self.host)",
|
|
36
|
+
"",
|
|
37
|
+
"",
|
|
38
|
+
"async def shutdown():",
|
|
39
|
+
" pass",
|
|
40
|
+
"",
|
|
41
|
+
].join("\n");
|
|
42
|
+
it("chunks module-level defs, classes and constants", () => {
|
|
43
|
+
expect(outline("client.py", source)).toEqual([
|
|
44
|
+
"MAX_RETRIES@3",
|
|
45
|
+
"connect@6",
|
|
46
|
+
"Client@11",
|
|
47
|
+
"shutdown@19",
|
|
48
|
+
]);
|
|
49
|
+
});
|
|
50
|
+
it("keeps a decorator with its class and methods inside it", () => {
|
|
51
|
+
const client = chunkFile("client.py", source).find((c) => c.symbol === "Client");
|
|
52
|
+
expect(client.text.startsWith("@dataclass")).toBe(true);
|
|
53
|
+
expect(client.text).toContain("def send(self, payload):");
|
|
54
|
+
expect(client.text).not.toContain("async def shutdown");
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe("go chunking", () => {
|
|
58
|
+
const source = [
|
|
59
|
+
"package server",
|
|
60
|
+
"",
|
|
61
|
+
"import (",
|
|
62
|
+
'\t"fmt"',
|
|
63
|
+
")",
|
|
64
|
+
"",
|
|
65
|
+
"const DefaultPort = 8080",
|
|
66
|
+
"",
|
|
67
|
+
"type Widget struct {",
|
|
68
|
+
"\tName string",
|
|
69
|
+
"}",
|
|
70
|
+
"",
|
|
71
|
+
"func (w *Widget) Render() string {",
|
|
72
|
+
'\tif w.Name == "}" {',
|
|
73
|
+
'\t\treturn "brace in a string"',
|
|
74
|
+
"\t}",
|
|
75
|
+
'\treturn fmt.Sprintf("%s", w.Name)',
|
|
76
|
+
"}",
|
|
77
|
+
"",
|
|
78
|
+
"func New() *Widget {",
|
|
79
|
+
"\treturn &Widget{}",
|
|
80
|
+
"}",
|
|
81
|
+
"",
|
|
82
|
+
].join("\n");
|
|
83
|
+
it("chunks consts, types and funcs including receivers", () => {
|
|
84
|
+
expect(outline("server.go", source)).toEqual([
|
|
85
|
+
"DefaultPort@7",
|
|
86
|
+
"Widget@9",
|
|
87
|
+
"Render@13",
|
|
88
|
+
"New@20",
|
|
89
|
+
]);
|
|
90
|
+
});
|
|
91
|
+
it("does not let a brace inside a string end the block early", () => {
|
|
92
|
+
const render = chunkFile("server.go", source).find((c) => c.symbol === "Render");
|
|
93
|
+
expect(render.text).toContain("fmt.Sprintf");
|
|
94
|
+
expect(render.text.trimEnd().endsWith("}")).toBe(true);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe("rust chunking", () => {
|
|
98
|
+
const source = [
|
|
99
|
+
"use std::fmt;",
|
|
100
|
+
"",
|
|
101
|
+
"pub const LIMIT: usize = 10;",
|
|
102
|
+
"",
|
|
103
|
+
"pub struct Widget {",
|
|
104
|
+
" name: String,",
|
|
105
|
+
"}",
|
|
106
|
+
"",
|
|
107
|
+
"impl fmt::Display for Widget {",
|
|
108
|
+
" fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {",
|
|
109
|
+
' write!(f, "{}", self.name)',
|
|
110
|
+
" }",
|
|
111
|
+
"}",
|
|
112
|
+
"",
|
|
113
|
+
"pub async fn render(widget: &Widget) -> String {",
|
|
114
|
+
" // a } in a comment must not close the block",
|
|
115
|
+
" widget.name.clone()",
|
|
116
|
+
"}",
|
|
117
|
+
"",
|
|
118
|
+
"mod tests {",
|
|
119
|
+
" pub fn helper() -> bool {",
|
|
120
|
+
" true",
|
|
121
|
+
" }",
|
|
122
|
+
"}",
|
|
123
|
+
"",
|
|
124
|
+
].join("\n");
|
|
125
|
+
it("chunks consts, structs, impls and fns, and descends into modules", () => {
|
|
126
|
+
expect(outline("widget.rs", source)).toEqual([
|
|
127
|
+
"LIMIT@3",
|
|
128
|
+
"Widget@5",
|
|
129
|
+
"Widget@9",
|
|
130
|
+
"render@15",
|
|
131
|
+
"helper@21",
|
|
132
|
+
]);
|
|
133
|
+
});
|
|
134
|
+
it("ignores braces inside comments", () => {
|
|
135
|
+
const render = chunkFile("widget.rs", source).find((c) => c.symbol === "render");
|
|
136
|
+
expect(render.text).toContain("widget.name.clone()");
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
describe("java chunking", () => {
|
|
140
|
+
const source = [
|
|
141
|
+
"package com.example;",
|
|
142
|
+
"",
|
|
143
|
+
"import java.util.List;",
|
|
144
|
+
"",
|
|
145
|
+
"public interface Renderer {",
|
|
146
|
+
" String render();",
|
|
147
|
+
"}",
|
|
148
|
+
"",
|
|
149
|
+
"public final class Widget implements Renderer {",
|
|
150
|
+
" private final String name;",
|
|
151
|
+
"",
|
|
152
|
+
" /* a } inside a block comment */",
|
|
153
|
+
" public String render() {",
|
|
154
|
+
" return name;",
|
|
155
|
+
" }",
|
|
156
|
+
"}",
|
|
157
|
+
"",
|
|
158
|
+
"enum Mode { FAST, SLOW }",
|
|
159
|
+
"",
|
|
160
|
+
].join("\n");
|
|
161
|
+
it("chunks top-level types and keeps members inside them", () => {
|
|
162
|
+
expect(outline("Widget.java", source)).toEqual(["Renderer@5", "Widget@9", "Mode@18"]);
|
|
163
|
+
const widget = chunkFile("Widget.java", source).find((c) => c.symbol === "Widget");
|
|
164
|
+
expect(widget.text).toContain("public String render()");
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe("c# chunking", () => {
|
|
168
|
+
const source = [
|
|
169
|
+
"using System;",
|
|
170
|
+
"",
|
|
171
|
+
"namespace Example.Widgets",
|
|
172
|
+
"{",
|
|
173
|
+
" public interface IRenderer",
|
|
174
|
+
" {",
|
|
175
|
+
" string Render();",
|
|
176
|
+
" }",
|
|
177
|
+
"",
|
|
178
|
+
" public sealed class Widget : IRenderer",
|
|
179
|
+
" {",
|
|
180
|
+
' public string Render() => "{}";',
|
|
181
|
+
" }",
|
|
182
|
+
"}",
|
|
183
|
+
"",
|
|
184
|
+
].join("\n");
|
|
185
|
+
it("descends into a namespace and chunks the types inside it", () => {
|
|
186
|
+
expect(outline("Widget.cs", source)).toEqual(["IRenderer@5", "Widget@10"]);
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe("ranking over mixed languages", () => {
|
|
190
|
+
it("returns whole symbols, not fragments", () => {
|
|
191
|
+
const chunks = [
|
|
192
|
+
...chunkFile("client.py", "def connect_to_database(dsn):\n return open(dsn)\n"),
|
|
193
|
+
...chunkFile("server.go", 'func RenderWidget() string {\n\treturn "x"\n}\n'),
|
|
194
|
+
...chunkFile("lib.rs", "pub fn parse_config(raw: &str) -> Config {\n todo!()\n}\n"),
|
|
195
|
+
];
|
|
196
|
+
const ranked = bm25Rank("connect to the database", chunks, 1);
|
|
197
|
+
expect(ranked).toHaveLength(1);
|
|
198
|
+
expect(ranked[0].symbol).toBe("connect_to_database");
|
|
199
|
+
// Whole symbol: the body came along with the signature.
|
|
200
|
+
expect(ranked[0].text).toContain("return open(dsn)");
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
//# sourceMappingURL=code-retrieval-chunkers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-retrieval-chunkers.test.js","sourceRoot":"","sources":["../../src/core/code-retrieval-chunkers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,12 @@ export interface Chunk {
|
|
|
5
5
|
/** 1-based line number where the declaration starts (for `file:line` headers). */
|
|
6
6
|
startLine: number;
|
|
7
7
|
}
|
|
8
|
+
/** Languages with a symbol chunker. Everything else is skipped by the caller. */
|
|
9
|
+
export type ChunkLanguage = "tsjs" | "python" | "go" | "rust" | "java" | "csharp";
|
|
10
|
+
/** Which chunker handles a path, or undefined when none does. */
|
|
11
|
+
export declare function languageForFile(rel: string): ChunkLanguage | undefined;
|
|
12
|
+
/** Every extension `code_search` can index, without leading dots. */
|
|
13
|
+
export declare const CHUNKABLE_EXTENSIONS: readonly string[];
|
|
8
14
|
export declare function chunkFile(rel: string, source: string): Chunk[];
|
|
9
15
|
export declare function tokenize(s: string): string[];
|
|
10
16
|
export declare function bm25Rank(query: string, chunks: Chunk[], k: number): Chunk[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-retrieval.d.ts","sourceRoot":"","sources":["../../src/core/code-retrieval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"code-retrieval.d.ts","sourceRoot":"","sources":["../../src/core/code-retrieval.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAmBlF,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEtE;AAED,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAEjD,CAAC;AAEF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,CAwB9D;AAID,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ5C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,CAyB3E;AAED,gFAAgF;AAChF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAQxF"}
|
|
@@ -2,14 +2,51 @@
|
|
|
2
2
|
* AST-aware code retrieval — the pure, UI-free core shared by the semantic-search
|
|
3
3
|
* benchmark and the `code_search` tool.
|
|
4
4
|
*
|
|
5
|
-
* `chunkFile`
|
|
5
|
+
* `chunkFile` splits a source file into top-level declaration chunks (functions,
|
|
6
6
|
* classes, interfaces, types, enums, consts) with their full bodies; `bm25Rank`
|
|
7
7
|
* ranks chunks against a natural-language query with a real BM25 retriever (no
|
|
8
8
|
* embedding dependency). Delivering only the top-ranked symbol chunks is what
|
|
9
9
|
* cuts the input tokens an agent spends locating code versus reading whole files.
|
|
10
|
+
*
|
|
11
|
+
* TS/JS is chunked from a real AST. Every other supported language is chunked by
|
|
12
|
+
* a line scanner: declaration patterns plus brace or indentation tracking. That
|
|
13
|
+
* is deliberately dependency-free — a parser per language would cost five more
|
|
14
|
+
* dependencies and a startup penalty on every search, to sharpen boundaries that
|
|
15
|
+
* BM25 ranking is already tolerant of.
|
|
10
16
|
*/
|
|
17
|
+
import path from "node:path";
|
|
11
18
|
import ts from "typescript";
|
|
19
|
+
import { chunkByBraces, chunkByIndentation, } from "./code-retrieval-chunkers.js";
|
|
20
|
+
const EXTENSION_LANGUAGES = {
|
|
21
|
+
".ts": "tsjs",
|
|
22
|
+
".tsx": "tsjs",
|
|
23
|
+
".mts": "tsjs",
|
|
24
|
+
".cts": "tsjs",
|
|
25
|
+
".js": "tsjs",
|
|
26
|
+
".jsx": "tsjs",
|
|
27
|
+
".mjs": "tsjs",
|
|
28
|
+
".cjs": "tsjs",
|
|
29
|
+
".py": "python",
|
|
30
|
+
".pyi": "python",
|
|
31
|
+
".go": "go",
|
|
32
|
+
".rs": "rust",
|
|
33
|
+
".java": "java",
|
|
34
|
+
".cs": "csharp",
|
|
35
|
+
};
|
|
36
|
+
/** Which chunker handles a path, or undefined when none does. */
|
|
37
|
+
export function languageForFile(rel) {
|
|
38
|
+
return EXTENSION_LANGUAGES[path.extname(rel).toLowerCase()];
|
|
39
|
+
}
|
|
40
|
+
/** Every extension `code_search` can index, without leading dots. */
|
|
41
|
+
export const CHUNKABLE_EXTENSIONS = Object.keys(EXTENSION_LANGUAGES).map((e) => e.slice(1));
|
|
12
42
|
export function chunkFile(rel, source) {
|
|
43
|
+
const language = languageForFile(rel);
|
|
44
|
+
if (language === undefined)
|
|
45
|
+
return [];
|
|
46
|
+
if (language === "python")
|
|
47
|
+
return chunkByIndentation(rel, source);
|
|
48
|
+
if (language !== "tsjs")
|
|
49
|
+
return chunkByBraces(rel, source, language);
|
|
13
50
|
const sf = ts.createSourceFile(rel, source, ts.ScriptTarget.Latest, true);
|
|
14
51
|
const chunks = [];
|
|
15
52
|
sf.forEachChild((node) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-retrieval.js","sourceRoot":"","sources":["../../src/core/code-retrieval.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"code-retrieval.js","sourceRoot":"","sources":["../../src/core/code-retrieval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-navigation.test.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/client-navigation.test.ts"],"names":[],"mappings":""}
|