claude-local-docs 1.0.13 → 1.0.15
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/.mcp.json +2 -1
- package/README.md +124 -58
- package/commands/fetch-docs.md +54 -28
- package/commands/index-codebase.md +53 -0
- package/dist/code-indexer.d.ts +14 -0
- package/dist/code-indexer.js +519 -0
- package/dist/code-indexer.js.map +1 -0
- package/dist/code-search.d.ts +14 -0
- package/dist/code-search.js +155 -0
- package/dist/code-search.js.map +1 -0
- package/dist/code-store.d.ts +39 -0
- package/dist/code-store.js +206 -0
- package/dist/code-store.js.map +1 -0
- package/dist/code.test.d.ts +7 -0
- package/dist/code.test.js +197 -0
- package/dist/code.test.js.map +1 -0
- package/dist/discovery.js +56 -4
- package/dist/discovery.js.map +1 -1
- package/dist/docs.test.d.ts +7 -0
- package/dist/docs.test.js +105 -0
- package/dist/docs.test.js.map +1 -0
- package/dist/file-walker.d.ts +34 -0
- package/dist/file-walker.js +199 -0
- package/dist/file-walker.js.map +1 -0
- package/dist/index.js +321 -22
- package/dist/index.js.map +1 -1
- package/dist/indexer.js +4 -23
- package/dist/indexer.js.map +1 -1
- package/dist/integration.test.d.ts +3 -2
- package/dist/integration.test.js +461 -11
- package/dist/integration.test.js.map +1 -1
- package/dist/reranker.d.ts +2 -2
- package/dist/reranker.js +10 -12
- package/dist/reranker.js.map +1 -1
- package/dist/rrf.d.ts +17 -0
- package/dist/rrf.js +25 -0
- package/dist/rrf.js.map +1 -0
- package/dist/search.d.ts +2 -0
- package/dist/search.js +30 -52
- package/dist/search.js.map +1 -1
- package/dist/sfc-extractor.d.ts +14 -0
- package/dist/sfc-extractor.js +70 -0
- package/dist/sfc-extractor.js.map +1 -0
- package/dist/store.d.ts +2 -0
- package/dist/store.js +39 -24
- package/dist/store.js.map +1 -1
- package/dist/tei-client.d.ts +70 -0
- package/dist/tei-client.js +153 -0
- package/dist/tei-client.js.map +1 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.js +4 -1
- package/dist/types.js.map +1 -1
- package/dist/unit.test.d.ts +8 -0
- package/dist/unit.test.js +1241 -0
- package/dist/unit.test.js.map +1 -0
- package/docker-compose.nvidia.yml +7 -0
- package/docker-compose.yml +9 -0
- package/package.json +8 -2
- package/scripts/ensure-tei.sh +93 -19
- package/start-tei.sh +17 -3
package/dist/integration.test.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Test suite for claude-local-docs.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Unit tests: RRF fusion, file-walker, code-indexer chunking (no TEI needed)
|
|
5
|
+
* Integration tests: full doc pipeline, full code pipeline (TEI required)
|
|
5
6
|
*
|
|
6
7
|
* Run: npm test
|
|
7
8
|
*/
|
|
@@ -11,17 +12,359 @@ import { mkdtemp, rm, readFile, writeFile, mkdir } from "node:fs/promises";
|
|
|
11
12
|
import { tmpdir } from "node:os";
|
|
12
13
|
import { join } from "node:path";
|
|
13
14
|
import { existsSync } from "node:fs";
|
|
15
|
+
// ============================================================
|
|
16
|
+
// Unit Tests — no TEI needed
|
|
17
|
+
// ============================================================
|
|
18
|
+
// --- RRF Fusion ---
|
|
19
|
+
import { reciprocalRankFusion } from "./rrf.js";
|
|
20
|
+
describe("reciprocalRankFusion", () => {
|
|
21
|
+
it("merges two ranked lists with default k=60", () => {
|
|
22
|
+
const list1 = [
|
|
23
|
+
{ id: 1, text: "alpha" },
|
|
24
|
+
{ id: 2, text: "beta" },
|
|
25
|
+
{ id: 3, text: "gamma" },
|
|
26
|
+
];
|
|
27
|
+
const list2 = [
|
|
28
|
+
{ id: 2, text: "beta" },
|
|
29
|
+
{ id: 4, text: "delta" },
|
|
30
|
+
{ id: 1, text: "alpha" },
|
|
31
|
+
];
|
|
32
|
+
const fused = reciprocalRankFusion([
|
|
33
|
+
{ docs: list1, weight: 1.0 },
|
|
34
|
+
{ docs: list2, weight: 1.0 },
|
|
35
|
+
]);
|
|
36
|
+
// doc 2 appears in both lists (rank 1 in list1, rank 0 in list2) → highest
|
|
37
|
+
// doc 1 appears in both lists (rank 0 in list1, rank 2 in list2) → also high
|
|
38
|
+
assert.ok(fused.length >= 4);
|
|
39
|
+
assert.ok(fused[0].rrfScore > 0);
|
|
40
|
+
// IDs 1 and 2 should be top-2 (they appear in both lists)
|
|
41
|
+
const topIds = new Set(fused.slice(0, 2).map(f => f.id));
|
|
42
|
+
assert.ok(topIds.has(1) || topIds.has(2), "Expected overlapping docs to rank highly");
|
|
43
|
+
});
|
|
44
|
+
it("respects weights (higher weight = more influence)", () => {
|
|
45
|
+
const list1 = [{ id: 10, text: "only-in-list1" }];
|
|
46
|
+
const list2 = [{ id: 20, text: "only-in-list2" }];
|
|
47
|
+
const fused = reciprocalRankFusion([
|
|
48
|
+
{ docs: list1, weight: 10.0 },
|
|
49
|
+
{ docs: list2, weight: 1.0 },
|
|
50
|
+
]);
|
|
51
|
+
assert.equal(fused[0].id, 10, "Higher-weighted list should dominate");
|
|
52
|
+
});
|
|
53
|
+
it("handles empty lists", () => {
|
|
54
|
+
const fused = reciprocalRankFusion([
|
|
55
|
+
{ docs: [], weight: 1.0 },
|
|
56
|
+
{ docs: [], weight: 1.0 },
|
|
57
|
+
]);
|
|
58
|
+
assert.equal(fused.length, 0);
|
|
59
|
+
});
|
|
60
|
+
it("handles single list", () => {
|
|
61
|
+
const list = [
|
|
62
|
+
{ id: 1, text: "alpha" },
|
|
63
|
+
{ id: 2, text: "beta" },
|
|
64
|
+
];
|
|
65
|
+
const fused = reciprocalRankFusion([{ docs: list, weight: 1.0 }]);
|
|
66
|
+
assert.equal(fused.length, 2);
|
|
67
|
+
assert.ok(fused[0].rrfScore > fused[1].rrfScore);
|
|
68
|
+
});
|
|
69
|
+
it("passes through extra fields on RankedDoc", () => {
|
|
70
|
+
const list = [{ id: 1, text: "t", filePath: "src/a.ts", language: "typescript" }];
|
|
71
|
+
const fused = reciprocalRankFusion([{ docs: list, weight: 1.0 }]);
|
|
72
|
+
assert.equal(fused[0].filePath, "src/a.ts");
|
|
73
|
+
assert.equal(fused[0].language, "typescript");
|
|
74
|
+
});
|
|
75
|
+
it("produces results sorted by rrfScore descending", () => {
|
|
76
|
+
const docs = Array.from({ length: 20 }, (_, i) => ({ id: i, text: `doc-${i}` }));
|
|
77
|
+
const fused = reciprocalRankFusion([{ docs, weight: 1.0 }]);
|
|
78
|
+
for (let i = 1; i < fused.length; i++) {
|
|
79
|
+
assert.ok(fused[i - 1].rrfScore >= fused[i].rrfScore, `Not sorted at index ${i}`);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
// --- File Walker ---
|
|
84
|
+
import { walkProjectFiles, computeFileHash, detectLanguage } from "./file-walker.js";
|
|
85
|
+
describe("detectLanguage", () => {
|
|
86
|
+
it("detects TypeScript files", () => {
|
|
87
|
+
assert.equal(detectLanguage("foo.ts"), "typescript");
|
|
88
|
+
assert.equal(detectLanguage("bar.tsx"), "typescript");
|
|
89
|
+
assert.equal(detectLanguage("baz.mts"), "typescript");
|
|
90
|
+
assert.equal(detectLanguage("qux.cts"), "typescript");
|
|
91
|
+
});
|
|
92
|
+
it("detects JavaScript files", () => {
|
|
93
|
+
assert.equal(detectLanguage("foo.js"), "javascript");
|
|
94
|
+
assert.equal(detectLanguage("bar.jsx"), "javascript");
|
|
95
|
+
assert.equal(detectLanguage("baz.mjs"), "javascript");
|
|
96
|
+
assert.equal(detectLanguage("qux.cjs"), "javascript");
|
|
97
|
+
});
|
|
98
|
+
it("returns null for unsupported extensions", () => {
|
|
99
|
+
assert.equal(detectLanguage("foo.py"), null);
|
|
100
|
+
assert.equal(detectLanguage("bar.rs"), null);
|
|
101
|
+
assert.equal(detectLanguage("README.md"), null);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe("walkProjectFiles", () => {
|
|
105
|
+
let tempDir;
|
|
106
|
+
before(async () => {
|
|
107
|
+
tempDir = await mkdtemp(join(tmpdir(), "file-walker-test-"));
|
|
108
|
+
// Create test file structure
|
|
109
|
+
await mkdir(join(tempDir, "src"), { recursive: true });
|
|
110
|
+
await mkdir(join(tempDir, "node_modules", "pkg"), { recursive: true });
|
|
111
|
+
await mkdir(join(tempDir, "dist"), { recursive: true });
|
|
112
|
+
await mkdir(join(tempDir, "lib"), { recursive: true });
|
|
113
|
+
await writeFile(join(tempDir, "src", "index.ts"), "export const hello = 42;");
|
|
114
|
+
await writeFile(join(tempDir, "src", "utils.js"), "module.exports = {};");
|
|
115
|
+
await writeFile(join(tempDir, "src", "README.md"), "# Docs");
|
|
116
|
+
await writeFile(join(tempDir, "node_modules", "pkg", "index.js"), "module.exports = {};");
|
|
117
|
+
await writeFile(join(tempDir, "dist", "index.js"), "var hello = 42;");
|
|
118
|
+
await writeFile(join(tempDir, "lib", "helper.ts"), "export function help() {}");
|
|
119
|
+
await writeFile(join(tempDir, "package.json"), "{}");
|
|
120
|
+
});
|
|
121
|
+
after(async () => {
|
|
122
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
123
|
+
});
|
|
124
|
+
it("finds JS/TS files and skips node_modules and dist", async () => {
|
|
125
|
+
const files = await walkProjectFiles({ projectRoot: tempDir });
|
|
126
|
+
const paths = files.map(f => f.relativePath).sort();
|
|
127
|
+
assert.ok(paths.includes("src/index.ts"), "Should find src/index.ts");
|
|
128
|
+
assert.ok(paths.includes("src/utils.js"), "Should find src/utils.js");
|
|
129
|
+
assert.ok(paths.includes("lib/helper.ts"), "Should find lib/helper.ts");
|
|
130
|
+
assert.ok(!paths.some(p => p.includes("node_modules")), "Should skip node_modules");
|
|
131
|
+
assert.ok(!paths.some(p => p.startsWith("dist/")), "Should skip dist");
|
|
132
|
+
assert.ok(!paths.some(p => p.endsWith(".md")), "Should skip non-JS/TS files");
|
|
133
|
+
});
|
|
134
|
+
it("respects excludePaths", async () => {
|
|
135
|
+
const files = await walkProjectFiles({
|
|
136
|
+
projectRoot: tempDir,
|
|
137
|
+
excludePaths: ["lib/**"],
|
|
138
|
+
});
|
|
139
|
+
const paths = files.map(f => f.relativePath);
|
|
140
|
+
assert.ok(!paths.includes("lib/helper.ts"), "Should exclude lib/ via pattern");
|
|
141
|
+
assert.ok(paths.includes("src/index.ts"), "Should still include src/");
|
|
142
|
+
});
|
|
143
|
+
it("detects correct language per file", async () => {
|
|
144
|
+
const files = await walkProjectFiles({ projectRoot: tempDir });
|
|
145
|
+
const tsFile = files.find(f => f.relativePath === "src/index.ts");
|
|
146
|
+
const jsFile = files.find(f => f.relativePath === "src/utils.js");
|
|
147
|
+
assert.equal(tsFile?.language, "typescript");
|
|
148
|
+
assert.equal(jsFile?.language, "javascript");
|
|
149
|
+
});
|
|
150
|
+
it("skips empty files", async () => {
|
|
151
|
+
await writeFile(join(tempDir, "src", "empty.ts"), "");
|
|
152
|
+
const files = await walkProjectFiles({ projectRoot: tempDir });
|
|
153
|
+
assert.ok(!files.some(f => f.relativePath === "src/empty.ts"), "Should skip empty files");
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
describe("computeFileHash", () => {
|
|
157
|
+
let tempDir;
|
|
158
|
+
before(async () => {
|
|
159
|
+
tempDir = await mkdtemp(join(tmpdir(), "hash-test-"));
|
|
160
|
+
});
|
|
161
|
+
after(async () => {
|
|
162
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
163
|
+
});
|
|
164
|
+
it("returns consistent SHA-256 hash", async () => {
|
|
165
|
+
const filePath = join(tempDir, "test.ts");
|
|
166
|
+
await writeFile(filePath, "const x = 42;");
|
|
167
|
+
const hash1 = await computeFileHash(filePath);
|
|
168
|
+
const hash2 = await computeFileHash(filePath);
|
|
169
|
+
assert.equal(hash1, hash2);
|
|
170
|
+
assert.equal(hash1.length, 64, "SHA-256 hex is 64 chars");
|
|
171
|
+
assert.match(hash1, /^[a-f0-9]+$/);
|
|
172
|
+
});
|
|
173
|
+
it("returns different hash for different content", async () => {
|
|
174
|
+
const file1 = join(tempDir, "a.ts");
|
|
175
|
+
const file2 = join(tempDir, "b.ts");
|
|
176
|
+
await writeFile(file1, "const a = 1;");
|
|
177
|
+
await writeFile(file2, "const b = 2;");
|
|
178
|
+
const hash1 = await computeFileHash(file1);
|
|
179
|
+
const hash2 = await computeFileHash(file2);
|
|
180
|
+
assert.notEqual(hash1, hash2);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
// --- Code Indexer (AST chunking, no embedding) ---
|
|
184
|
+
import { chunkCodeFile } from "./code-indexer.js";
|
|
185
|
+
describe("chunkCodeFile", { timeout: 30_000 }, () => {
|
|
186
|
+
it("extracts functions from TypeScript", async () => {
|
|
187
|
+
const source = `
|
|
188
|
+
export function greet(name: string): string {
|
|
189
|
+
return "Hello, " + name;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export function farewell(name: string): string {
|
|
193
|
+
return "Goodbye, " + name;
|
|
194
|
+
}
|
|
195
|
+
`.trim();
|
|
196
|
+
const chunks = await chunkCodeFile(source, "src/greet.ts", "typescript");
|
|
197
|
+
assert.ok(chunks.length >= 2, `Expected >=2 chunks, got ${chunks.length}`);
|
|
198
|
+
const greetChunk = chunks.find(c => c.entityName === "greet");
|
|
199
|
+
assert.ok(greetChunk, "Should find 'greet' entity");
|
|
200
|
+
assert.equal(greetChunk.entityType, "function");
|
|
201
|
+
assert.equal(greetChunk.filePath, "src/greet.ts");
|
|
202
|
+
assert.equal(greetChunk.language, "typescript");
|
|
203
|
+
assert.ok(greetChunk.text.includes("// File: src/greet.ts"), "Should have contextual header");
|
|
204
|
+
assert.ok(greetChunk.text.includes("Hello"), "Should contain function body");
|
|
205
|
+
});
|
|
206
|
+
it("extracts classes and methods", async () => {
|
|
207
|
+
// Make the class large enough (>1500 non-ws chars) to trigger method extraction
|
|
208
|
+
const longBody = ` return "${Array(200).fill("x").join("")}";`;
|
|
209
|
+
const source = `
|
|
210
|
+
export class UserService {
|
|
211
|
+
private db: any;
|
|
212
|
+
|
|
213
|
+
constructor(db: any) {
|
|
214
|
+
this.db = db;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
async findUser(id: string): Promise<any> {
|
|
218
|
+
${longBody}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
async createUser(data: any): Promise<any> {
|
|
222
|
+
${longBody}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
async deleteUser(id: string): Promise<void> {
|
|
226
|
+
${longBody}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
`.trim();
|
|
230
|
+
const chunks = await chunkCodeFile(source, "src/user.ts", "typescript");
|
|
231
|
+
// Should have the class itself plus individual methods
|
|
232
|
+
const classChunk = chunks.find(c => c.entityType === "class");
|
|
233
|
+
assert.ok(classChunk, "Should extract class");
|
|
234
|
+
assert.equal(classChunk.entityName, "UserService");
|
|
235
|
+
const methodChunks = chunks.filter(c => c.entityType === "method");
|
|
236
|
+
assert.ok(methodChunks.length >= 2, `Expected >=2 methods, got ${methodChunks.length}`);
|
|
237
|
+
// Methods should have scope chain
|
|
238
|
+
for (const mc of methodChunks) {
|
|
239
|
+
const scope = JSON.parse(mc.scopeChain);
|
|
240
|
+
assert.ok(scope.includes("UserService"), `Method scope should include class name, got ${mc.scopeChain}`);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
it("extracts arrow functions in const declarations", async () => {
|
|
244
|
+
const source = `
|
|
245
|
+
export const add = (a: number, b: number): number => {
|
|
246
|
+
return a + b;
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
export const subtract = (a: number, b: number): number => a - b;
|
|
250
|
+
`.trim();
|
|
251
|
+
const chunks = await chunkCodeFile(source, "src/math.ts", "typescript");
|
|
252
|
+
const addChunk = chunks.find(c => c.entityName === "add");
|
|
253
|
+
assert.ok(addChunk, "Should find 'add' arrow function");
|
|
254
|
+
assert.equal(addChunk.entityType, "function");
|
|
255
|
+
});
|
|
256
|
+
it("extracts interfaces and type aliases", async () => {
|
|
257
|
+
const source = `
|
|
258
|
+
export interface User {
|
|
259
|
+
id: string;
|
|
260
|
+
name: string;
|
|
261
|
+
email: string;
|
|
262
|
+
createdAt: Date;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export type UserRole = "admin" | "user" | "guest";
|
|
266
|
+
`.trim();
|
|
267
|
+
const chunks = await chunkCodeFile(source, "src/types.ts", "typescript");
|
|
268
|
+
const iface = chunks.find(c => c.entityType === "interface");
|
|
269
|
+
assert.ok(iface, "Should find interface");
|
|
270
|
+
assert.equal(iface.entityName, "User");
|
|
271
|
+
const typeAlias = chunks.find(c => c.entityType === "type_alias");
|
|
272
|
+
assert.ok(typeAlias, "Should find type alias");
|
|
273
|
+
assert.equal(typeAlias.entityName, "UserRole");
|
|
274
|
+
});
|
|
275
|
+
it("extracts enums", async () => {
|
|
276
|
+
const source = `
|
|
277
|
+
export enum Direction {
|
|
278
|
+
Up = "UP",
|
|
279
|
+
Down = "DOWN",
|
|
280
|
+
Left = "LEFT",
|
|
281
|
+
Right = "RIGHT",
|
|
282
|
+
}
|
|
283
|
+
`.trim();
|
|
284
|
+
const chunks = await chunkCodeFile(source, "src/enums.ts", "typescript");
|
|
285
|
+
const enumChunk = chunks.find(c => c.entityType === "enum");
|
|
286
|
+
assert.ok(enumChunk, "Should find enum");
|
|
287
|
+
assert.equal(enumChunk.entityName, "Direction");
|
|
288
|
+
});
|
|
289
|
+
it("produces contextual headers with file path, scope, and split name", async () => {
|
|
290
|
+
const source = `
|
|
291
|
+
export function validateEmailAddress(email: string): boolean {
|
|
292
|
+
return email.includes("@") && email.includes(".");
|
|
293
|
+
}
|
|
294
|
+
`.trim();
|
|
295
|
+
const chunks = await chunkCodeFile(source, "src/validators.ts", "typescript");
|
|
296
|
+
const chunk = chunks[0];
|
|
297
|
+
assert.ok(chunk.text.includes("// File: src/validators.ts"), "Header should include file path");
|
|
298
|
+
assert.ok(chunk.text.includes("validate email address") || chunk.text.includes("validate Email Address"), "Header should include camelCase-split name for BM25");
|
|
299
|
+
});
|
|
300
|
+
it("merges small entities (<100 non-ws chars)", async () => {
|
|
301
|
+
const source = `
|
|
302
|
+
import { foo } from "foo";
|
|
303
|
+
import { bar } from "bar";
|
|
304
|
+
import { baz } from "baz";
|
|
305
|
+
|
|
306
|
+
export const VERSION = "1.0.0";
|
|
307
|
+
`.trim();
|
|
308
|
+
const chunks = await chunkCodeFile(source, "src/index.ts", "typescript");
|
|
309
|
+
// Imports and the small const should be merged
|
|
310
|
+
assert.ok(chunks.length <= 3, `Expected small entities to be merged, got ${chunks.length} chunks`);
|
|
311
|
+
});
|
|
312
|
+
it("handles JavaScript files", async () => {
|
|
313
|
+
const source = `
|
|
314
|
+
function hello() {
|
|
315
|
+
console.log("hello world");
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
module.exports = { hello };
|
|
319
|
+
`.trim();
|
|
320
|
+
const chunks = await chunkCodeFile(source, "lib/hello.js", "javascript");
|
|
321
|
+
assert.ok(chunks.length >= 1);
|
|
322
|
+
const fnChunk = chunks.find(c => c.entityName === "hello");
|
|
323
|
+
assert.ok(fnChunk, "Should extract JS function");
|
|
324
|
+
assert.equal(fnChunk.language, "javascript");
|
|
325
|
+
});
|
|
326
|
+
it("creates module-level chunk for files with no extractable entities", async () => {
|
|
327
|
+
// A file that's just comments / bare expressions
|
|
328
|
+
const source = `
|
|
329
|
+
// This is a configuration file
|
|
330
|
+
console.log("bootstrap");
|
|
331
|
+
`.trim();
|
|
332
|
+
const chunks = await chunkCodeFile(source, "src/bootstrap.ts", "typescript");
|
|
333
|
+
assert.equal(chunks.length, 1);
|
|
334
|
+
assert.equal(chunks[0].entityType, "module");
|
|
335
|
+
assert.equal(chunks[0].entityName, "");
|
|
336
|
+
});
|
|
337
|
+
it("has 1-based line numbers", async () => {
|
|
338
|
+
const source = `
|
|
339
|
+
export function first() {
|
|
340
|
+
return 1;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
export function second() {
|
|
344
|
+
return 2;
|
|
345
|
+
}
|
|
346
|
+
`.trim();
|
|
347
|
+
const chunks = await chunkCodeFile(source, "src/lines.ts", "typescript");
|
|
348
|
+
for (const c of chunks) {
|
|
349
|
+
assert.ok(c.lineStart >= 1, `lineStart should be >= 1, got ${c.lineStart}`);
|
|
350
|
+
assert.ok(c.lineEnd >= c.lineStart, `lineEnd should be >= lineStart`);
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
});
|
|
354
|
+
// ============================================================
|
|
355
|
+
// Integration Tests — require TEI containers running
|
|
356
|
+
// ============================================================
|
|
14
357
|
import { fetchDocContent } from "./fetcher.js";
|
|
15
358
|
import { chunkMarkdown, indexDocument } from "./indexer.js";
|
|
16
359
|
import { DocStore } from "./store.js";
|
|
17
360
|
import { searchDocs } from "./search.js";
|
|
361
|
+
import { CodeStore } from "./code-store.js";
|
|
362
|
+
import { indexCodeFile } from "./code-indexer.js";
|
|
363
|
+
import { searchCode } from "./code-search.js";
|
|
18
364
|
const PRISMA_URL = "https://www.prisma.io/docs/llms-full.txt";
|
|
19
365
|
const CACHE_DIR = join(tmpdir(), "claude-local-docs-fixture");
|
|
20
366
|
const CACHE_FILE = join(CACHE_DIR, "prisma-llms-full.txt");
|
|
21
|
-
|
|
22
|
-
let store;
|
|
23
|
-
let fetchedContent;
|
|
24
|
-
/** Load from cache or fetch from network. */
|
|
367
|
+
/** Load Prisma docs from cache or fetch from network. */
|
|
25
368
|
async function loadPrismaDoc() {
|
|
26
369
|
if (existsSync(CACHE_FILE)) {
|
|
27
370
|
console.log(" Using cached Prisma docs");
|
|
@@ -36,7 +379,11 @@ async function loadPrismaDoc() {
|
|
|
36
379
|
console.log(` Fetched and cached ${result.byteLength} bytes (${(result.byteLength / 1024 / 1024).toFixed(1)} MB)`);
|
|
37
380
|
return result.content;
|
|
38
381
|
}
|
|
39
|
-
|
|
382
|
+
// --- Doc search integration ---
|
|
383
|
+
describe("Doc search pipeline (Prisma)", { timeout: 600_000 }, () => {
|
|
384
|
+
let tempDir;
|
|
385
|
+
let store;
|
|
386
|
+
let fetchedContent;
|
|
40
387
|
before(async () => {
|
|
41
388
|
tempDir = await mkdtemp(join(tmpdir(), "claude-local-docs-test-"));
|
|
42
389
|
fetchedContent = await loadPrismaDoc();
|
|
@@ -46,11 +393,9 @@ describe("Prisma llms-full.txt integration", { timeout: 600_000 }, () => {
|
|
|
46
393
|
await rm(tempDir, { recursive: true, force: true });
|
|
47
394
|
}
|
|
48
395
|
});
|
|
49
|
-
// -- Fetch --
|
|
50
396
|
it("fetched content is substantial", () => {
|
|
51
397
|
assert.ok(fetchedContent.length > 1_000_000, `Expected > 1M chars, got ${fetchedContent.length}`);
|
|
52
398
|
});
|
|
53
|
-
// -- Chunking --
|
|
54
399
|
it("chunks the markdown into reasonable pieces", () => {
|
|
55
400
|
const chunks = chunkMarkdown(fetchedContent, "prisma");
|
|
56
401
|
console.log(` Produced ${chunks.length} chunks`);
|
|
@@ -62,7 +407,6 @@ describe("Prisma llms-full.txt integration", { timeout: 600_000 }, () => {
|
|
|
62
407
|
assert.ok(Array.isArray(parsed), `headingPath not an array: ${c.headingPath}`);
|
|
63
408
|
}
|
|
64
409
|
});
|
|
65
|
-
// -- Index + Store --
|
|
66
410
|
it("indexes and stores all chunks in LanceDB", async () => {
|
|
67
411
|
store = new DocStore(tempDir);
|
|
68
412
|
const chunks = await indexDocument(fetchedContent, "prisma");
|
|
@@ -76,7 +420,6 @@ describe("Prisma llms-full.txt integration", { timeout: 600_000 }, () => {
|
|
|
76
420
|
assert.equal(result.chunkCount, chunks.length);
|
|
77
421
|
assert.equal(result.indexSize, chunks.length);
|
|
78
422
|
});
|
|
79
|
-
// -- Search --
|
|
80
423
|
const searchCases = [
|
|
81
424
|
{ query: "prisma client query", expectTerms: ["prisma", "client", "query"] },
|
|
82
425
|
{ query: "database migration", expectTerms: ["migrat", "schema", "database"] },
|
|
@@ -111,4 +454,111 @@ describe("Prisma llms-full.txt integration", { timeout: 600_000 }, () => {
|
|
|
111
454
|
}
|
|
112
455
|
});
|
|
113
456
|
});
|
|
457
|
+
// --- Code search integration (indexes this project's own source) ---
|
|
458
|
+
describe("Code search pipeline (self-codebase)", { timeout: 300_000 }, () => {
|
|
459
|
+
let tempDir;
|
|
460
|
+
let codeStore;
|
|
461
|
+
// Resolve project root (parent of src/)
|
|
462
|
+
const projectSrcDir = join(import.meta.dirname, "..", "src");
|
|
463
|
+
before(async () => {
|
|
464
|
+
tempDir = await mkdtemp(join(tmpdir(), "code-search-test-"));
|
|
465
|
+
codeStore = new CodeStore(tempDir);
|
|
466
|
+
// Walk this project's own src/ files and index them
|
|
467
|
+
const files = await walkProjectFiles({
|
|
468
|
+
projectRoot: join(import.meta.dirname, ".."),
|
|
469
|
+
includePaths: ["src/**"],
|
|
470
|
+
excludePaths: ["src/integration.test.ts"], // skip the test file itself
|
|
471
|
+
});
|
|
472
|
+
console.log(` Found ${files.length} source files to index`);
|
|
473
|
+
assert.ok(files.length >= 8, `Expected >=8 src files, got ${files.length}`);
|
|
474
|
+
let totalChunks = 0;
|
|
475
|
+
for (const f of files) {
|
|
476
|
+
const source = await readFile(f.absolutePath, "utf-8");
|
|
477
|
+
const sha256 = await computeFileHash(f.absolutePath);
|
|
478
|
+
const chunks = await indexCodeFile(source, f.relativePath, f.language);
|
|
479
|
+
await codeStore.addFile(f.relativePath, f.language, sha256, chunks);
|
|
480
|
+
totalChunks += chunks.length;
|
|
481
|
+
console.log(` ${f.relativePath}: ${chunks.length} chunks`);
|
|
482
|
+
}
|
|
483
|
+
// Build FTS index
|
|
484
|
+
await codeStore.createFtsIndex();
|
|
485
|
+
console.log(` FTS index built — ${totalChunks} total chunks`);
|
|
486
|
+
});
|
|
487
|
+
after(async () => {
|
|
488
|
+
if (tempDir && existsSync(tempDir)) {
|
|
489
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
it("finds RRF fusion logic by concept", async () => {
|
|
493
|
+
const results = await searchCode("reciprocal rank fusion", codeStore, { topK: 5 });
|
|
494
|
+
assert.ok(results.length > 0, "Expected at least 1 result");
|
|
495
|
+
const hasRrf = results.some(r => r.filePath.includes("rrf") || r.content.includes("reciprocalRankFusion") || r.content.includes("rrfScore"));
|
|
496
|
+
assert.ok(hasRrf, "Should find RRF-related code");
|
|
497
|
+
});
|
|
498
|
+
it("finds LanceDB table management by concept", async () => {
|
|
499
|
+
const results = await searchCode("LanceDB table management", codeStore, { topK: 5 });
|
|
500
|
+
assert.ok(results.length > 0, "Expected at least 1 result");
|
|
501
|
+
const hasStore = results.some(r => r.filePath.includes("store") || r.content.includes("LanceDB") || r.content.includes("openTable") || r.content.includes("createTable"));
|
|
502
|
+
assert.ok(hasStore, "Should find LanceDB store code");
|
|
503
|
+
});
|
|
504
|
+
it("finds heading-based markdown chunking", async () => {
|
|
505
|
+
const results = await searchCode("heading based markdown chunking", codeStore, { topK: 5 });
|
|
506
|
+
assert.ok(results.length > 0, "Expected at least 1 result");
|
|
507
|
+
const hasChunker = results.some(r => r.content.includes("chunkMarkdown") || r.content.includes("headingStack") || r.content.includes("splitWithOverlap"));
|
|
508
|
+
assert.ok(hasChunker, "Should find markdown chunking code");
|
|
509
|
+
});
|
|
510
|
+
it("finds cross-encoder reranking", async () => {
|
|
511
|
+
const results = await searchCode("cross encoder reranking", codeStore, { topK: 5 });
|
|
512
|
+
assert.ok(results.length > 0, "Expected at least 1 result");
|
|
513
|
+
const hasReranker = results.some(r => r.filePath.includes("reranker") || r.content.includes("rerank") || r.content.includes("rerankerScore"));
|
|
514
|
+
assert.ok(hasReranker, "Should find reranker code");
|
|
515
|
+
});
|
|
516
|
+
it("finds file walker / gitignore logic", async () => {
|
|
517
|
+
const results = await searchCode("walk project files gitignore", codeStore, { topK: 5 });
|
|
518
|
+
assert.ok(results.length > 0, "Expected at least 1 result");
|
|
519
|
+
const hasWalker = results.some(r => r.filePath.includes("file-walker") || r.content.includes("walkProjectFiles") || r.content.includes("gitignore"));
|
|
520
|
+
assert.ok(hasWalker, "Should find file walker code");
|
|
521
|
+
});
|
|
522
|
+
it("finds DocStore class", async () => {
|
|
523
|
+
const results = await searchCode("DocStore class", codeStore, { topK: 5 });
|
|
524
|
+
assert.ok(results.length > 0, "Expected at least 1 result");
|
|
525
|
+
const hasDocStore = results.some(r => r.entityName === "DocStore" || r.content.includes("class DocStore"));
|
|
526
|
+
assert.ok(hasDocStore, "Should find DocStore class");
|
|
527
|
+
});
|
|
528
|
+
it("returns results with valid CodeSearchResult structure", async () => {
|
|
529
|
+
const results = await searchCode("embed texts", codeStore, { topK: 3 });
|
|
530
|
+
for (const r of results) {
|
|
531
|
+
assert.equal(typeof r.score, "number");
|
|
532
|
+
assert.equal(typeof r.filePath, "string");
|
|
533
|
+
assert.equal(typeof r.language, "string");
|
|
534
|
+
assert.equal(typeof r.entityType, "string");
|
|
535
|
+
assert.equal(typeof r.entityName, "string");
|
|
536
|
+
assert.ok(Array.isArray(r.scopeChain));
|
|
537
|
+
assert.equal(typeof r.lineStart, "number");
|
|
538
|
+
assert.equal(typeof r.lineEnd, "number");
|
|
539
|
+
assert.equal(typeof r.content, "string");
|
|
540
|
+
assert.equal(typeof r.chunkId, "number");
|
|
541
|
+
assert.ok(r.content.length > 0);
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
it("returns scores in descending order", async () => {
|
|
545
|
+
const results = await searchCode("search pipeline", codeStore, { topK: 10 });
|
|
546
|
+
assert.ok(results.length > 1, "Expected multiple results");
|
|
547
|
+
for (let i = 1; i < results.length; i++) {
|
|
548
|
+
assert.ok(results[i - 1].score >= results[i].score, `Not sorted at [${i}]`);
|
|
549
|
+
}
|
|
550
|
+
});
|
|
551
|
+
it("filters by language", async () => {
|
|
552
|
+
const results = await searchCode("function", codeStore, { language: "typescript", topK: 10 });
|
|
553
|
+
for (const r of results) {
|
|
554
|
+
assert.equal(r.language, "typescript");
|
|
555
|
+
}
|
|
556
|
+
});
|
|
557
|
+
it("filters by filePath", async () => {
|
|
558
|
+
const results = await searchCode("search", codeStore, { filePath: "src/search.ts", topK: 10 });
|
|
559
|
+
for (const r of results) {
|
|
560
|
+
assert.equal(r.filePath, "src/search.ts");
|
|
561
|
+
}
|
|
562
|
+
});
|
|
563
|
+
});
|
|
114
564
|
//# sourceMappingURL=integration.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../src/integration.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../src/integration.test.ts"],"names":[],"mappings":"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"}
|
package/dist/reranker.d.ts
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
export interface RerankCandidate {
|
|
6
6
|
id: number;
|
|
7
7
|
text: string;
|
|
8
|
-
library: string;
|
|
9
|
-
headingPath: string;
|
|
10
8
|
rrfScore: number;
|
|
9
|
+
[key: string]: any;
|
|
11
10
|
}
|
|
12
11
|
export interface RerankResult extends RerankCandidate {
|
|
13
12
|
rerankerScore: number;
|
|
14
13
|
}
|
|
15
14
|
/**
|
|
16
15
|
* Rerank candidates using TEI cross-encoder endpoint.
|
|
16
|
+
* Batching is handled by the TeiClient.
|
|
17
17
|
*/
|
|
18
18
|
export declare function rerank(query: string, candidates: RerankCandidate[]): Promise<RerankResult[]>;
|
package/dist/reranker.js
CHANGED
|
@@ -2,24 +2,22 @@
|
|
|
2
2
|
* Cross-encoder reranker via TEI (Text Embeddings Inference).
|
|
3
3
|
* Takes query + candidate passages, returns relevance scores.
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
import { rerankClient } from "./tei-client.js";
|
|
6
6
|
/**
|
|
7
7
|
* Rerank candidates using TEI cross-encoder endpoint.
|
|
8
|
+
* Batching is handled by the TeiClient.
|
|
8
9
|
*/
|
|
9
10
|
export async function rerank(query, candidates) {
|
|
10
11
|
if (candidates.length === 0)
|
|
11
12
|
return [];
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
const texts = candidates.map((c) => c.text);
|
|
14
|
+
const scored = await rerankClient.rerank(query, texts);
|
|
15
|
+
const results = [];
|
|
16
|
+
for (const r of scored) {
|
|
17
|
+
if (r.index >= 0 && r.index < candidates.length) {
|
|
18
|
+
results.push({ ...candidates[r.index], rerankerScore: r.score });
|
|
19
|
+
}
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
return results
|
|
22
|
-
.map((r) => ({ ...candidates[r.index], rerankerScore: r.score }))
|
|
23
|
-
.sort((a, b) => b.rerankerScore - a.rerankerScore);
|
|
21
|
+
return results.sort((a, b) => b.rerankerScore - a.rerankerScore);
|
|
24
22
|
}
|
|
25
23
|
//# sourceMappingURL=reranker.js.map
|