context-compress 2026.3.3 → 2026.3.13

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 (41) hide show
  1. package/README.md +14 -4
  2. package/dist/cli/doctor.d.ts.map +1 -1
  3. package/dist/cli/doctor.js +22 -1
  4. package/dist/cli/doctor.js.map +1 -1
  5. package/dist/config.d.ts +3 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +97 -4
  8. package/dist/config.js.map +1 -1
  9. package/dist/executor.d.ts +11 -0
  10. package/dist/executor.d.ts.map +1 -1
  11. package/dist/executor.js +104 -3
  12. package/dist/executor.js.map +1 -1
  13. package/dist/hooks/pretooluse.js +12 -6
  14. package/dist/hooks/pretooluse.js.map +1 -1
  15. package/dist/network.d.ts +5 -0
  16. package/dist/network.d.ts.map +1 -0
  17. package/dist/network.js +42 -0
  18. package/dist/network.js.map +1 -0
  19. package/dist/runtime/languages/go.js +3 -3
  20. package/dist/runtime/languages/go.js.map +1 -1
  21. package/dist/runtime/languages/javascript.js +1 -1
  22. package/dist/runtime/languages/javascript.js.map +1 -1
  23. package/dist/runtime/languages/r.js +1 -1
  24. package/dist/runtime/languages/rust.js +2 -2
  25. package/dist/runtime/languages/rust.js.map +1 -1
  26. package/dist/runtime/languages/typescript.js +1 -1
  27. package/dist/runtime/languages/typescript.js.map +1 -1
  28. package/dist/server.bundle.mjs +460 -120
  29. package/dist/server.bundle.mjs.map +4 -4
  30. package/dist/server.d.ts.map +1 -1
  31. package/dist/server.js +112 -31
  32. package/dist/server.js.map +1 -1
  33. package/dist/stats.d.ts.map +1 -1
  34. package/dist/stats.js +27 -4
  35. package/dist/stats.js.map +1 -1
  36. package/dist/store.d.ts +14 -0
  37. package/dist/store.d.ts.map +1 -1
  38. package/dist/store.js +41 -10
  39. package/dist/store.js.map +1 -1
  40. package/hooks/pretooluse.mjs +10 -5
  41. package/package.json +6 -4
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAwC1C,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM;;GAgehD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAoB,MAAM,EAAE,MAAM,aAAa,CAAC;AA+C5D,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM;;GAkkBhD"}
package/dist/server.js CHANGED
@@ -1,4 +1,4 @@
1
- import { readFileSync } from "node:fs";
1
+ import { readFileSync, statSync } from "node:fs";
2
2
  import { dirname, join, resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
@@ -6,22 +6,12 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
6
6
  import { z } from "zod";
7
7
  import { SubprocessExecutor } from "./executor.js";
8
8
  import { debug } from "./logger.js";
9
+ import { isPrivateHost } from "./network.js";
9
10
  import { detectRuntimes, hasBun } from "./runtime/index.js";
10
11
  import { SessionTracker } from "./stats.js";
11
12
  import { ContentStore, cleanupStaleDbs } from "./store.js";
12
- const LANGUAGES = [
13
- "javascript",
14
- "typescript",
15
- "python",
16
- "shell",
17
- "ruby",
18
- "go",
19
- "rust",
20
- "php",
21
- "perl",
22
- "r",
23
- "elixir",
24
- ];
13
+ import { ALL_LANGUAGES } from "./types.js";
14
+ const LANGUAGE_ENUM = ALL_LANGUAGES;
25
15
  const projectDir = process.env.CLAUDE_PROJECT_DIR ?? process.cwd();
26
16
  function isWithinProject(absPath) {
27
17
  const normalized = resolve(absPath);
@@ -38,6 +28,20 @@ function getVersion() {
38
28
  return "1.0.0";
39
29
  }
40
30
  }
31
+ /** Shorten labels based on compression level */
32
+ function compactLabel(normal, level) {
33
+ if (level === "ultra") {
34
+ // Ultra: strip markdown, minimize verbiage
35
+ return normal
36
+ .replace(/\*\*/g, "")
37
+ .replace(/Use search\(queries: \[\.\.\.]\) to retrieve.*$/gm, "→ search() for more")
38
+ .replace(/Searchable terms: .+$/gm, "");
39
+ }
40
+ if (level === "compact") {
41
+ return normal.replace(/Use search\(queries: \[\.\.\.]\) to retrieve full content of any section\./, "→ search() for details");
42
+ }
43
+ return normal;
44
+ }
41
45
  export async function createServer(config) {
42
46
  const version = getVersion();
43
47
  debug("Version:", version);
@@ -50,6 +54,18 @@ export async function createServer(config) {
50
54
  const executor = new SubprocessExecutor(runtimes, config);
51
55
  const store = new ContentStore();
52
56
  const tracker = new SessionTracker();
57
+ // Graceful shutdown: close the database on exit
58
+ const shutdown = () => {
59
+ try {
60
+ store.close();
61
+ }
62
+ catch {
63
+ // Ignore errors during shutdown
64
+ }
65
+ };
66
+ process.on("SIGINT", shutdown);
67
+ process.on("SIGTERM", shutdown);
68
+ process.on("beforeExit", shutdown);
53
69
  // Search throttling state
54
70
  const searchCalls = [];
55
71
  const server = new McpServer({
@@ -57,10 +73,10 @@ export async function createServer(config) {
57
73
  version,
58
74
  });
59
75
  // ─── Tool: execute ──────────────────────────────────────
60
- server.tool("execute", `Execute code in a sandboxed subprocess. Only stdout enters context — raw data stays in the subprocess. Use instead of bash/cat when output would exceed 20 lines. ${bunDetected ? "(Bun detected — JS/TS runs 3-5x faster) " : ""}Available: ${LANGUAGES.join(", ")}.
76
+ server.tool("execute", `Execute code in a sandboxed subprocess. Only stdout enters context — raw data stays in the subprocess. Use instead of bash/cat when output would exceed 20 lines. ${bunDetected ? "(Bun detected — JS/TS runs 3-5x faster) " : ""}Available: ${ALL_LANGUAGES.join(", ")}.
61
77
 
62
78
  PREFER THIS OVER BASH for: API calls (gh, curl, aws), test runners (npm test, pytest), git queries (git log, git diff), data processing, and ANY CLI command that may produce large output. Bash should only be used for file mutations, git writes, and navigation.`, {
63
- language: z.enum(LANGUAGES).describe("Runtime language"),
79
+ language: z.enum(LANGUAGE_ENUM).describe("Runtime language"),
64
80
  code: z
65
81
  .string()
66
82
  .describe("Source code to execute. Use console.log (JS/TS), print (Python/Ruby/Perl/R), echo (Shell), echo (PHP), fmt.Println (Go), or IO.puts (Elixir) to output a summary to context."),
@@ -89,11 +105,11 @@ PREFER THIS OVER BASH for: API calls (gh, curl, aws), test runners (npm test, py
89
105
  for (const hit of searchResults.results) {
90
106
  filtered += ` - **${hit.title}**: ${hit.snippet.slice(0, 200)}\n`;
91
107
  }
92
- if (terms.length > 0) {
108
+ if (terms.length > 0 && config.compressionLevel !== "ultra") {
93
109
  filtered += `\nSearchable terms: ${terms.join(", ")}\n`;
94
110
  }
95
111
  filtered += "\nUse search(queries: [...]) to retrieve full content of any section.";
96
- output = filtered;
112
+ output = compactLabel(filtered, config.compressionLevel);
97
113
  }
98
114
  const responseBytes = Buffer.byteLength(output);
99
115
  tracker.trackCall("execute", responseBytes);
@@ -102,7 +118,7 @@ PREFER THIS OVER BASH for: API calls (gh, curl, aws), test runners (npm test, py
102
118
  // ─── Tool: execute_file ─────────────────────────────────
103
119
  server.tool("execute_file", "Read a file and process it without loading contents into context. The file is read into a FILE_CONTENT variable inside the sandbox. Only your printed summary enters context.\n\nPREFER THIS OVER Read/cat for: log files, data files (CSV, JSON, XML), large source files for analysis, and any file where you need to extract specific information rather than read the entire content.", {
104
120
  path: z.string().describe("Absolute file path or relative to project root"),
105
- language: z.enum(LANGUAGES).describe("Runtime language"),
121
+ language: z.enum(LANGUAGE_ENUM).describe("Runtime language"),
106
122
  code: z
107
123
  .string()
108
124
  .describe("Code to process FILE_CONTENT. Print summary via console.log/print/echo/IO.puts."),
@@ -141,11 +157,11 @@ PREFER THIS OVER BASH for: API calls (gh, curl, aws), test runners (npm test, py
141
157
  for (const hit of searchResults.results) {
142
158
  filtered += ` - **${hit.title}**: ${hit.snippet.slice(0, 200)}\n`;
143
159
  }
144
- if (terms.length > 0) {
160
+ if (terms.length > 0 && config.compressionLevel !== "ultra") {
145
161
  filtered += `\nSearchable terms: ${terms.join(", ")}\n`;
146
162
  }
147
163
  filtered += "\nUse search(queries: [...]) to retrieve full content of any section.";
148
- output = filtered;
164
+ output = compactLabel(filtered, config.compressionLevel);
149
165
  }
150
166
  const responseBytes = Buffer.byteLength(output);
151
167
  tracker.trackCall("execute_file", responseBytes);
@@ -177,6 +193,17 @@ PREFER THIS OVER BASH for: API calls (gh, curl, aws), test runners (npm test, py
177
193
  ],
178
194
  };
179
195
  }
196
+ const fileStat = statSync(absPath);
197
+ if (fileStat.size > 50 * 1024 * 1024) {
198
+ return {
199
+ content: [
200
+ {
201
+ type: "text",
202
+ text: `Error: file "${filePath}" is too large (${(fileStat.size / 1024 / 1024).toFixed(1)}MB). Max 50MB.`,
203
+ },
204
+ ],
205
+ };
206
+ }
180
207
  text = readFileSync(absPath, "utf-8");
181
208
  label = source ?? filePath;
182
209
  }
@@ -260,15 +287,7 @@ PREFER THIS OVER BASH for: API calls (gh, curl, aws), test runners (npm test, py
260
287
  content: [{ type: "text", text: "Error: only http/https URLs are allowed" }],
261
288
  };
262
289
  }
263
- const hostname = parsed.hostname;
264
- if (hostname === "localhost" ||
265
- hostname === "127.0.0.1" ||
266
- hostname === "::1" ||
267
- hostname === "0.0.0.0" ||
268
- hostname.startsWith("10.") ||
269
- hostname.startsWith("172.16.") ||
270
- hostname.startsWith("192.168.") ||
271
- hostname.startsWith("169.254.")) {
290
+ if (isPrivateHost(parsed.hostname)) {
272
291
  return {
273
292
  content: [
274
293
  { type: "text", text: "Error: internal/private URLs are not allowed" },
@@ -388,11 +407,73 @@ PREFER THIS OVER BASH for: API calls (gh, curl, aws), test runners (npm test, py
388
407
  return { content: [{ type: "text", text: output }] };
389
408
  });
390
409
  // ─── Tool: stats ────────────────────────────────────────
391
- server.tool("stats", "Returns context consumption statistics for the current session. Shows total bytes returned to context, breakdown by tool, call counts, estimated token usage, and context savings ratio.", {}, async () => {
410
+ server.tool("stats", "Returns context consumption statistics for the current session. Shows total bytes returned to context, breakdown by tool, call counts, estimated token usage, context savings ratio, and visual charts.", {}, async () => {
392
411
  const report = tracker.formatReport();
393
412
  tracker.trackCall("stats", Buffer.byteLength(report));
394
413
  return { content: [{ type: "text", text: report }] };
395
414
  });
415
+ // ─── Tool: discover ─────────────────────────────────────
416
+ server.tool("discover", "Shows what's in the knowledge base and suggests optimization opportunities. Lists all indexed sources, chunk counts, searchable terms, and recommends next actions. Use this to understand what data is available for search.", {}, async () => {
417
+ const storeStats = store.getStats();
418
+ const snap = tracker.getSnapshot();
419
+ const lines = [];
420
+ lines.push("## Knowledge Base Discovery\n");
421
+ if (storeStats.totalSources === 0) {
422
+ lines.push("No content indexed yet. Use these tools to build the knowledge base:\n");
423
+ lines.push("- `batch_execute` — run commands and auto-index output");
424
+ lines.push("- `execute` with `intent` — auto-indexes large output");
425
+ lines.push("- `index` — index documentation or files");
426
+ lines.push("- `fetch_and_index` — fetch and index web pages");
427
+ }
428
+ else {
429
+ lines.push("| Metric | Value |");
430
+ lines.push("|--------|-------|");
431
+ lines.push(`| Indexed sources | ${storeStats.totalSources} |`);
432
+ lines.push(`| Total chunks | ${storeStats.totalChunks} |`);
433
+ lines.push(`| Vocabulary size | ${storeStats.vocabularySize} |`);
434
+ lines.push(`| Trigram index | ${storeStats.hasTrigramTable ? "active" : "lazy (not yet needed)"} |`);
435
+ // List indexed sources
436
+ const sources = store.listSources();
437
+ if (sources.length > 0) {
438
+ lines.push("\n### Indexed Sources\n");
439
+ for (const src of sources) {
440
+ lines.push(`- **${src.label}** — ${src.chunkCount} chunks${src.codeChunks > 0 ? ` (${src.codeChunks} with code)` : ""}`);
441
+ }
442
+ }
443
+ // Show top searchable terms
444
+ const terms = store.getDistinctiveTerms();
445
+ if (terms.length > 0) {
446
+ lines.push("\n### Top Searchable Terms\n");
447
+ lines.push(terms.slice(0, 20).join(", "));
448
+ }
449
+ }
450
+ // Optimization suggestions
451
+ lines.push("\n### Optimization Suggestions\n");
452
+ const totalCalls = Object.values(snap.calls).reduce((a, b) => a + b, 0);
453
+ if (totalCalls === 0) {
454
+ lines.push("- Start by using `batch_execute` to run multiple commands at once");
455
+ }
456
+ else {
457
+ const searchCalls = snap.calls.search ?? 0;
458
+ const executeCalls = snap.calls.execute ?? 0;
459
+ const batchCalls = snap.calls.batch_execute ?? 0;
460
+ if (executeCalls > 3 && batchCalls === 0) {
461
+ lines.push("- **Use batch_execute** — you've made multiple execute calls that could be batched into one");
462
+ }
463
+ if (searchCalls > 5) {
464
+ lines.push("- **Batch your searches** — pass multiple queries in a single search() call");
465
+ }
466
+ if (storeStats.totalChunks > 50) {
467
+ lines.push("- **Use source filtering** — scope searches with `source` parameter for faster, targeted results");
468
+ }
469
+ if (storeStats.totalSources === 0 && totalCalls > 2) {
470
+ lines.push("- **Index more content** — use `intent` parameter in execute calls to auto-index large output");
471
+ }
472
+ }
473
+ const output = lines.join("\n");
474
+ tracker.trackCall("discover", Buffer.byteLength(output));
475
+ return { content: [{ type: "text", text: output }] };
476
+ });
396
477
  // ─── Transport ──────────────────────────────────────────
397
478
  return {
398
479
  async start() {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,qBAAa,cAAc;IAC1B,OAAO,CAAC,KAAK,CAMX;IAEF,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAKxD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,WAAW,IAAI,QAAQ,CAAC,YAAY,CAAC;IAIrC,YAAY,IAAI,MAAM;CAiDtB"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAiB/C,qBAAa,cAAc;IAC1B,OAAO,CAAC,KAAK,CAMX;IAEF,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAKxD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,WAAW,IAAI,QAAQ,CAAC,YAAY,CAAC;IAIrC,YAAY,IAAI,MAAM;CAkEtB"}
package/dist/stats.js CHANGED
@@ -1,4 +1,16 @@
1
1
  import { formatBytes } from "./executor.js";
2
+ const BAR_WIDTH = 20;
3
+ /** Render an ASCII bar: [████████░░░░] 80% */
4
+ function asciiBar(ratio, width = BAR_WIDTH) {
5
+ const filled = Math.round(ratio * width);
6
+ const empty = width - filled;
7
+ return `[${"█".repeat(filled)}${"░".repeat(empty)}] ${(ratio * 100).toFixed(0)}%`;
8
+ }
9
+ /** Format token count with cost estimate ($3/MTok input for Claude) */
10
+ function tokenCost(tokens) {
11
+ const cost = (tokens / 1_000_000) * 3;
12
+ return cost >= 0.01 ? `~$${cost.toFixed(2)}` : "<$0.01";
13
+ }
2
14
  export class SessionTracker {
3
15
  stats = {
4
16
  calls: {},
@@ -32,6 +44,7 @@ export class SessionTracker {
32
44
  const savingsRatio = totalReturned > 0 ? totalProcessed / totalReturned : 1;
33
45
  const reductionPct = totalProcessed > 0 ? ((1 - totalReturned / totalProcessed) * 100).toFixed(1) : "0.0";
34
46
  const estTokens = Math.round(totalReturned / 4);
47
+ const estTokensAvoided = Math.round(keptOut / 4);
35
48
  const lines = [];
36
49
  lines.push("## Session Statistics\n");
37
50
  lines.push("| Metric | Value |");
@@ -41,15 +54,25 @@ export class SessionTracker {
41
54
  lines.push(`| Total data processed | ${formatBytes(totalProcessed)} |`);
42
55
  lines.push(`| Kept in sandbox | ${formatBytes(keptOut)} |`);
43
56
  lines.push(`| Context consumed | ${formatBytes(totalReturned)} |`);
44
- lines.push(`| Est. tokens | ~${estTokens.toLocaleString()} |`);
57
+ lines.push(`| Est. tokens used | ~${estTokens.toLocaleString()} (${tokenCost(estTokens)}) |`);
58
+ lines.push(`| Est. tokens saved | ~${estTokensAvoided.toLocaleString()} (${tokenCost(estTokensAvoided)}) |`);
45
59
  lines.push(`| **Savings ratio** | **${savingsRatio.toFixed(1)}x** (${reductionPct}% reduction) |`);
60
+ // Visual savings bar
61
+ if (totalProcessed > 0) {
62
+ const savingsBar = asciiBar(keptOut / totalProcessed);
63
+ lines.push(`\n**Context savings:** ${savingsBar}`);
64
+ lines.push(` Sandbox: ${formatBytes(keptOut)} kept out | Context: ${formatBytes(totalReturned)} entered`);
65
+ }
46
66
  if (totalCalls > 0) {
47
67
  lines.push("\n## Per-Tool Breakdown\n");
48
- lines.push("| Tool | Calls | Context bytes | Est. tokens |");
49
- lines.push("|------|-------|--------------|-------------|");
68
+ // Find max bytes for bar scaling
69
+ const maxBytes = Math.max(...Object.values(snap.bytesReturned));
50
70
  for (const [name, calls] of Object.entries(snap.calls)) {
51
71
  const bytes = snap.bytesReturned[name] ?? 0;
52
- lines.push(`| ${name} | ${calls} | ${formatBytes(bytes)} | ~${Math.round(bytes / 4).toLocaleString()} |`);
72
+ const tokens = Math.round(bytes / 4);
73
+ const barRatio = maxBytes > 0 ? bytes / maxBytes : 0;
74
+ const bar = "█".repeat(Math.max(1, Math.round(barRatio * 15)));
75
+ lines.push(` ${name.padEnd(16)} ${String(calls).padStart(3)} calls ${bar} ${formatBytes(bytes)} (~${tokens.toLocaleString()} tok)`);
53
76
  }
54
77
  }
55
78
  lines.push(`\nContext-compress kept ${formatBytes(keptOut)} out of context (${reductionPct}% savings).`);
package/dist/stats.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,OAAO,cAAc;IAClB,KAAK,GAAiB;QAC7B,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;KACxB,CAAC;IAEF,SAAS,CAAC,QAAgB,EAAE,aAAqB;QAChD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC;IAChG,CAAC;IAED,YAAY,CAAC,KAAa;QACzB,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC;IAClC,CAAC;IAED,cAAc,CAAC,KAAa;QAC3B,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC;IACpC,CAAC;IAED,WAAW;QACV,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,YAAY;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAEnD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;QACxD,MAAM,cAAc,GAAG,OAAO,GAAG,aAAa,CAAC;QAC/C,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,YAAY,GACjB,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,IAAI,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,4BAA4B,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,uBAAuB,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,wBAAwB,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,oBAAoB,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CACT,2BAA2B,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,YAAY,gBAAgB,CACtF,CAAC;QAEF,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAE5D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,KAAK,CAAC,IAAI,CACT,KAAK,IAAI,MAAM,KAAK,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAC7F,CAAC;YACH,CAAC;QACF,CAAC;QAED,KAAK,CAAC,IAAI,CACT,2BAA2B,WAAW,CAAC,OAAO,CAAC,oBAAoB,YAAY,aAAa,CAC5F,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;CACD"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,8CAA8C;AAC9C,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAK,GAAG,SAAS;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7B,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACnF,CAAC;AAED,uEAAuE;AACvE,SAAS,SAAS,CAAC,MAAc;IAChC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AACzD,CAAC;AAED,MAAM,OAAO,cAAc;IAClB,KAAK,GAAiB;QAC7B,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;KACxB,CAAC;IAEF,SAAS,CAAC,QAAgB,EAAE,aAAqB;QAChD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC;IAChG,CAAC;IAED,YAAY,CAAC,KAAa;QACzB,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC;IAClC,CAAC;IAED,cAAc,CAAC,KAAa;QAC3B,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC;IACpC,CAAC;IAED,WAAW;QACV,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,YAAY;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAEnD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;QACxD,MAAM,cAAc,GAAG,OAAO,GAAG,aAAa,CAAC;QAC/C,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,YAAY,GACjB,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,kBAAkB,UAAU,IAAI,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,4BAA4B,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,uBAAuB,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,wBAAwB,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,yBAAyB,SAAS,CAAC,cAAc,EAAE,KAAK,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9F,KAAK,CAAC,IAAI,CACT,0BAA0B,gBAAgB,CAAC,cAAc,EAAE,KAAK,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAChG,CAAC;QACF,KAAK,CAAC,IAAI,CACT,2BAA2B,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,YAAY,gBAAgB,CACtF,CAAC;QAEF,qBAAqB;QACrB,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;YACnD,KAAK,CAAC,IAAI,CACT,cAAc,WAAW,CAAC,OAAO,CAAC,wBAAwB,WAAW,CAAC,aAAa,CAAC,UAAU,CAC9F,CAAC;QACH,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAExC,iCAAiC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAEhE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACrC,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/D,KAAK,CAAC,IAAI,CACT,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,OAAO,CACzH,CAAC;YACH,CAAC;QACF,CAAC;QAED,KAAK,CAAC,IAAI,CACT,2BAA2B,WAAW,CAAC,OAAO,CAAC,oBAAoB,YAAY,aAAa,CAC5F,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;CACD"}
package/dist/store.d.ts CHANGED
@@ -2,6 +2,10 @@ import type { IndexResult, SearchResult, StoreStats } from "./types.js";
2
2
  export declare class ContentStore {
3
3
  private db;
4
4
  private hasTrigramTable;
5
+ private insertSourceStmt;
6
+ private insertChunkStmt;
7
+ private vocabCountStmt;
8
+ private vocabInsertStmt;
5
9
  constructor(dbPath?: string);
6
10
  private initSchema;
7
11
  /** Lazily create trigram table only when porter search returns 0 results */
@@ -31,6 +35,16 @@ export declare class ContentStore {
31
35
  * Get distinctive terms for search hint.
32
36
  */
33
37
  getDistinctiveTerms(sourceId?: number): string[];
38
+ /**
39
+ * List all indexed sources with metadata.
40
+ */
41
+ listSources(): Array<{
42
+ id: number;
43
+ label: string;
44
+ chunkCount: number;
45
+ codeChunks: number;
46
+ indexedAt: string;
47
+ }>;
34
48
  /**
35
49
  * Get store statistics.
36
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAS,WAAW,EAAa,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqJ1F,qBAAa,YAAY;IACxB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,eAAe,CAAS;gBAEpB,MAAM,CAAC,EAAE,MAAM;IAQ3B,OAAO,CAAC,UAAU;IAwBlB,4EAA4E;IAC5E,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW;IAmDlD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY;IAgClF,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,aAAa;IA0CrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAkCpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAoDhD;;OAEG;IACH,QAAQ,IAAI,UAAU;IAkBtB,KAAK,IAAI,IAAI;CAGb;AAkHD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAsCxC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAS,WAAW,EAAa,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAqJ1F,qBAAa,YAAY;IACxB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,eAAe,CAAS;IAGhC,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,eAAe,CAAsB;gBAEjC,MAAM,CAAC,EAAE,MAAM;IAQ3B,OAAO,CAAC,UAAU;IAkClB,4EAA4E;IAC5E,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW;IA+ClD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY;IAuClF,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,aAAa;IA0CrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAkCpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAoDhD;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IAqBF;;OAEG;IACH,QAAQ,IAAI,UAAU;IAkBtB,KAAK,IAAI,IAAI;CAGb;AAkHD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAsCxC"}
package/dist/store.js CHANGED
@@ -125,7 +125,7 @@ function sanitizeQuery(raw) {
125
125
  .split(/\s+/)
126
126
  .filter((w) => w.length >= 2)
127
127
  .map((w) => `"${w}"`);
128
- return words.length > 0 ? words.join(" OR ") : '""';
128
+ return words.length > 0 ? words.join(" OR ") : "";
129
129
  }
130
130
  /** Classic Levenshtein distance with O(n) space */
131
131
  function levenshtein(a, b) {
@@ -148,6 +148,11 @@ function levenshtein(a, b) {
148
148
  export class ContentStore {
149
149
  db;
150
150
  hasTrigramTable = false;
151
+ // Cached prepared statements (initialized in initSchema, always available after constructor)
152
+ insertSourceStmt;
153
+ insertChunkStmt;
154
+ vocabCountStmt;
155
+ vocabInsertStmt;
151
156
  constructor(dbPath) {
152
157
  const path = dbPath ?? join(tmpdir(), `context-compress-${process.pid}.db`);
153
158
  this.db = new Database(path);
@@ -177,6 +182,11 @@ export class ContentStore {
177
182
  word TEXT PRIMARY KEY
178
183
  );
179
184
  `);
185
+ // Cache prepared statements
186
+ this.insertSourceStmt = this.db.prepare("INSERT INTO sources (label, chunk_count, code_chunk_count) VALUES (?, ?, ?)");
187
+ this.insertChunkStmt = this.db.prepare("INSERT INTO chunks (title, content, source_id, content_type) VALUES (?, ?, ?, ?)");
188
+ this.vocabCountStmt = this.db.prepare("SELECT COUNT(*) as cnt FROM vocabulary");
189
+ this.vocabInsertStmt = this.db.prepare("INSERT OR IGNORE INTO vocabulary (word) VALUES (?)");
180
190
  }
181
191
  /** Lazily create trigram table only when porter search returns 0 results */
182
192
  ensureTrigramTable() {
@@ -202,8 +212,8 @@ export class ContentStore {
202
212
  index(content, label) {
203
213
  const isMarkdown = HEADING_RE.test(content) || content.includes("```") || content.includes("---");
204
214
  const chunks = isMarkdown ? chunkMarkdown(content) : chunkPlainText(content);
205
- const insertSource = this.db.prepare("INSERT INTO sources (label, chunk_count, code_chunk_count) VALUES (?, ?, ?)");
206
- const insertChunk = this.db.prepare("INSERT INTO chunks (title, content, source_id, content_type) VALUES (?, ?, ?, ?)");
215
+ const insertSource = this.insertSourceStmt;
216
+ const insertChunk = this.insertChunkStmt;
207
217
  const insertTrigram = this.hasTrigramTable
208
218
  ? this.db.prepare("INSERT INTO chunks_trigram (title, content, source_id, content_type) VALUES (?, ?, ?, ?)")
209
219
  : null;
@@ -240,6 +250,10 @@ export class ContentStore {
240
250
  search(query, options) {
241
251
  const limit = options?.limit ?? 3;
242
252
  const sanitized = sanitizeQuery(query);
253
+ // Empty query after sanitization — return empty results
254
+ if (!sanitized) {
255
+ return { query, results: [] };
256
+ }
243
257
  // Layer 1: Porter stemming search
244
258
  let hits = this.porterSearch(sanitized, options?.source, limit);
245
259
  if (hits.length > 0) {
@@ -255,9 +269,11 @@ export class ContentStore {
255
269
  const corrected = this.fuzzyCorrect(query);
256
270
  if (corrected && corrected !== query) {
257
271
  const correctedSanitized = sanitizeQuery(corrected);
258
- hits = this.porterSearch(correctedSanitized, options?.source, limit);
259
- if (hits.length > 0) {
260
- return { query, results: hits, corrected };
272
+ if (correctedSanitized) {
273
+ hits = this.porterSearch(correctedSanitized, options?.source, limit);
274
+ if (hits.length > 0) {
275
+ return { query, results: hits, corrected };
276
+ }
261
277
  }
262
278
  }
263
279
  return { query, results: [] };
@@ -344,7 +360,7 @@ export class ContentStore {
344
360
  const minLen = word.length - maxDist;
345
361
  const maxLen = word.length + maxDist;
346
362
  const candidates = this.db
347
- .prepare("SELECT word FROM vocabulary WHERE length(word) BETWEEN ? AND ?")
363
+ .prepare("SELECT word FROM vocabulary WHERE length(word) BETWEEN ? AND ? LIMIT 500")
348
364
  .all(minLen, maxLen);
349
365
  let bestWord = word;
350
366
  let bestDist = maxDist + 1;
@@ -365,14 +381,14 @@ export class ContentStore {
365
381
  * Update vocabulary table from content (bounded to MAX_VOCABULARY).
366
382
  */
367
383
  updateVocabulary(content) {
368
- const currentCount = this.db.prepare("SELECT COUNT(*) as cnt FROM vocabulary").get().cnt;
384
+ const currentCount = this.vocabCountStmt.get().cnt;
369
385
  if (currentCount >= MAX_VOCABULARY)
370
386
  return;
371
387
  const words = content
372
388
  .split(WORD_SPLIT_RE)
373
389
  .filter((w) => w.length >= 3 && !STOPWORDS.has(w.toLowerCase()));
374
390
  const unique = new Set(words.map((w) => w.toLowerCase()));
375
- const insert = this.db.prepare("INSERT OR IGNORE INTO vocabulary (word) VALUES (?)");
391
+ const insert = this.vocabInsertStmt;
376
392
  let added = 0;
377
393
  for (const word of unique) {
378
394
  if (currentCount + added >= MAX_VOCABULARY)
@@ -393,7 +409,7 @@ export class ContentStore {
393
409
  if (totalChunks === 0)
394
410
  return [];
395
411
  const filter = sourceId ? " WHERE source_id = ?" : "";
396
- const stmt = this.db.prepare(`SELECT content FROM chunks${filter}`);
412
+ const stmt = this.db.prepare(`SELECT content FROM chunks${filter} LIMIT 500`);
397
413
  const rows = (sourceId ? stmt.all(sourceId) : stmt.all());
398
414
  // Count document frequency per word
399
415
  const docFreq = new Map();
@@ -421,6 +437,21 @@ export class ContentStore {
421
437
  scored.sort((a, b) => b.score - a.score);
422
438
  return scored.slice(0, 40).map((s) => s.word);
423
439
  }
440
+ /**
441
+ * List all indexed sources with metadata.
442
+ */
443
+ listSources() {
444
+ const rows = this.db
445
+ .prepare("SELECT id, label, chunk_count, code_chunk_count, indexed_at FROM sources ORDER BY indexed_at DESC")
446
+ .all();
447
+ return rows.map((row) => ({
448
+ id: row.id,
449
+ label: row.label,
450
+ chunkCount: row.chunk_count,
451
+ codeChunks: row.code_chunk_count,
452
+ indexedAt: row.indexed_at,
453
+ }));
454
+ }
424
455
  /**
425
456
  * Get store statistics.
426
457
  */