context-compress 1.0.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/LICENSE +21 -0
- package/README.md +275 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +131 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +31 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +43 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/uninstall.d.ts +2 -0
- package/dist/cli/uninstall.d.ts.map +1 -0
- package/dist/cli/uninstall.js +102 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/config.d.ts +37 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +79 -0
- package/dist/config.js.map +1 -0
- package/dist/executor.d.ts +21 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +301 -0
- package/dist/executor.js.map +1 -0
- package/dist/hooks/pretooluse.d.ts +10 -0
- package/dist/hooks/pretooluse.d.ts.map +1 -0
- package/dist/hooks/pretooluse.js +117 -0
- package/dist/hooks/pretooluse.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +4 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +13 -0
- package/dist/logger.js.map +1 -0
- package/dist/runtime/index.d.ts +22 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +81 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/languages/elixir.d.ts +3 -0
- package/dist/runtime/languages/elixir.d.ts.map +1 -0
- package/dist/runtime/languages/elixir.js +15 -0
- package/dist/runtime/languages/elixir.js.map +1 -0
- package/dist/runtime/languages/go.d.ts +3 -0
- package/dist/runtime/languages/go.d.ts.map +1 -0
- package/dist/runtime/languages/go.js +29 -0
- package/dist/runtime/languages/go.js.map +1 -0
- package/dist/runtime/languages/javascript.d.ts +3 -0
- package/dist/runtime/languages/javascript.d.ts.map +1 -0
- package/dist/runtime/languages/javascript.js +13 -0
- package/dist/runtime/languages/javascript.js.map +1 -0
- package/dist/runtime/languages/perl.d.ts +3 -0
- package/dist/runtime/languages/perl.d.ts.map +1 -0
- package/dist/runtime/languages/perl.js +13 -0
- package/dist/runtime/languages/perl.js.map +1 -0
- package/dist/runtime/languages/php.d.ts +3 -0
- package/dist/runtime/languages/php.d.ts.map +1 -0
- package/dist/runtime/languages/php.js +24 -0
- package/dist/runtime/languages/php.js.map +1 -0
- package/dist/runtime/languages/python.d.ts +3 -0
- package/dist/runtime/languages/python.d.ts.map +1 -0
- package/dist/runtime/languages/python.js +13 -0
- package/dist/runtime/languages/python.js.map +1 -0
- package/dist/runtime/languages/r.d.ts +3 -0
- package/dist/runtime/languages/r.d.ts.map +1 -0
- package/dist/runtime/languages/r.js +13 -0
- package/dist/runtime/languages/r.js.map +1 -0
- package/dist/runtime/languages/ruby.d.ts +3 -0
- package/dist/runtime/languages/ruby.d.ts.map +1 -0
- package/dist/runtime/languages/ruby.js +13 -0
- package/dist/runtime/languages/ruby.js.map +1 -0
- package/dist/runtime/languages/rust.d.ts +3 -0
- package/dist/runtime/languages/rust.d.ts.map +1 -0
- package/dist/runtime/languages/rust.js +28 -0
- package/dist/runtime/languages/rust.js.map +1 -0
- package/dist/runtime/languages/shell.d.ts +3 -0
- package/dist/runtime/languages/shell.d.ts.map +1 -0
- package/dist/runtime/languages/shell.js +14 -0
- package/dist/runtime/languages/shell.js.map +1 -0
- package/dist/runtime/languages/typescript.d.ts +3 -0
- package/dist/runtime/languages/typescript.d.ts.map +1 -0
- package/dist/runtime/languages/typescript.js +15 -0
- package/dist/runtime/languages/typescript.js.map +1 -0
- package/dist/runtime/plugin.d.ts +38 -0
- package/dist/runtime/plugin.d.ts.map +1 -0
- package/dist/runtime/plugin.js +2 -0
- package/dist/runtime/plugin.js.map +1 -0
- package/dist/server.bundle.mjs +22769 -0
- package/dist/server.bundle.mjs.map +7 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +405 -0
- package/dist/server.js.map +1 -0
- package/dist/snippet.d.ts +15 -0
- package/dist/snippet.d.ts.map +1 -0
- package/dist/snippet.js +92 -0
- package/dist/snippet.js.map +1 -0
- package/dist/stats.d.ts +10 -0
- package/dist/stats.d.ts.map +1 -0
- package/dist/stats.js +65 -0
- package/dist/stats.js.map +1 -0
- package/dist/store.d.ts +44 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +590 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +75 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/hooks/hooks.json +52 -0
- package/hooks/pretooluse.mjs +94 -0
- package/package.json +55 -0
- package/skills/context-compress/SKILL.md +118 -0
- package/skills/doctor/SKILL.md +15 -0
- package/skills/stats/SKILL.md +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { IndexResult, SearchResult, StoreStats } from "./types.js";
|
|
2
|
+
export declare class ContentStore {
|
|
3
|
+
private db;
|
|
4
|
+
private hasTrigramTable;
|
|
5
|
+
constructor(dbPath?: string);
|
|
6
|
+
private initSchema;
|
|
7
|
+
/** Lazily create trigram table only when porter search returns 0 results */
|
|
8
|
+
private ensureTrigramTable;
|
|
9
|
+
/**
|
|
10
|
+
* Index content into the store.
|
|
11
|
+
*/
|
|
12
|
+
index(content: string, label: string): IndexResult;
|
|
13
|
+
/**
|
|
14
|
+
* Three-layer search: Porter → Trigram (lazy) → Fuzzy correction.
|
|
15
|
+
*/
|
|
16
|
+
search(query: string, options?: {
|
|
17
|
+
source?: string;
|
|
18
|
+
limit?: number;
|
|
19
|
+
}): SearchResult;
|
|
20
|
+
private porterSearch;
|
|
21
|
+
private trigramSearch;
|
|
22
|
+
/**
|
|
23
|
+
* Fuzzy correction using vocabulary + Levenshtein distance.
|
|
24
|
+
*/
|
|
25
|
+
private fuzzyCorrect;
|
|
26
|
+
/**
|
|
27
|
+
* Update vocabulary table from content (bounded to MAX_VOCABULARY).
|
|
28
|
+
*/
|
|
29
|
+
private updateVocabulary;
|
|
30
|
+
/**
|
|
31
|
+
* Get distinctive terms for search hint.
|
|
32
|
+
*/
|
|
33
|
+
getDistinctiveTerms(sourceId?: number): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Get store statistics.
|
|
36
|
+
*/
|
|
37
|
+
getStats(): StoreStats;
|
|
38
|
+
close(): void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Clean up stale database files from previous sessions.
|
|
42
|
+
*/
|
|
43
|
+
export declare function cleanupStaleDbs(): number;
|
|
44
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +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;IAgC1B;;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"}
|
package/dist/store.js
ADDED
|
@@ -0,0 +1,590 @@
|
|
|
1
|
+
import { readdirSync, unlinkSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import Database from "better-sqlite3";
|
|
5
|
+
import { debug, warn } from "./logger.js";
|
|
6
|
+
import { extractSnippet } from "./snippet.js";
|
|
7
|
+
const MAX_VOCABULARY = 10_000;
|
|
8
|
+
const STOPWORDS = new Set([
|
|
9
|
+
"the",
|
|
10
|
+
"and",
|
|
11
|
+
"for",
|
|
12
|
+
"are",
|
|
13
|
+
"but",
|
|
14
|
+
"not",
|
|
15
|
+
"you",
|
|
16
|
+
"all",
|
|
17
|
+
"can",
|
|
18
|
+
"had",
|
|
19
|
+
"her",
|
|
20
|
+
"was",
|
|
21
|
+
"one",
|
|
22
|
+
"our",
|
|
23
|
+
"out",
|
|
24
|
+
"has",
|
|
25
|
+
"his",
|
|
26
|
+
"how",
|
|
27
|
+
"its",
|
|
28
|
+
"may",
|
|
29
|
+
"new",
|
|
30
|
+
"now",
|
|
31
|
+
"old",
|
|
32
|
+
"see",
|
|
33
|
+
"way",
|
|
34
|
+
"who",
|
|
35
|
+
"did",
|
|
36
|
+
"get",
|
|
37
|
+
"got",
|
|
38
|
+
"let",
|
|
39
|
+
"say",
|
|
40
|
+
"she",
|
|
41
|
+
"too",
|
|
42
|
+
"use",
|
|
43
|
+
"will",
|
|
44
|
+
"with",
|
|
45
|
+
"this",
|
|
46
|
+
"that",
|
|
47
|
+
"from",
|
|
48
|
+
"they",
|
|
49
|
+
"been",
|
|
50
|
+
"have",
|
|
51
|
+
"many",
|
|
52
|
+
"some",
|
|
53
|
+
"them",
|
|
54
|
+
"than",
|
|
55
|
+
"each",
|
|
56
|
+
"make",
|
|
57
|
+
"like",
|
|
58
|
+
"just",
|
|
59
|
+
"over",
|
|
60
|
+
"such",
|
|
61
|
+
"take",
|
|
62
|
+
"into",
|
|
63
|
+
"year",
|
|
64
|
+
"your",
|
|
65
|
+
"good",
|
|
66
|
+
"could",
|
|
67
|
+
"would",
|
|
68
|
+
"about",
|
|
69
|
+
"which",
|
|
70
|
+
"their",
|
|
71
|
+
"there",
|
|
72
|
+
"other",
|
|
73
|
+
"after",
|
|
74
|
+
"should",
|
|
75
|
+
"through",
|
|
76
|
+
"also",
|
|
77
|
+
"more",
|
|
78
|
+
"most",
|
|
79
|
+
"only",
|
|
80
|
+
"very",
|
|
81
|
+
"when",
|
|
82
|
+
"what",
|
|
83
|
+
"then",
|
|
84
|
+
"these",
|
|
85
|
+
"those",
|
|
86
|
+
"being",
|
|
87
|
+
"does",
|
|
88
|
+
"done",
|
|
89
|
+
"both",
|
|
90
|
+
"same",
|
|
91
|
+
"still",
|
|
92
|
+
"while",
|
|
93
|
+
"where",
|
|
94
|
+
"here",
|
|
95
|
+
"were",
|
|
96
|
+
"much",
|
|
97
|
+
"update",
|
|
98
|
+
"updates",
|
|
99
|
+
"updated",
|
|
100
|
+
"deps",
|
|
101
|
+
"dev",
|
|
102
|
+
"tests",
|
|
103
|
+
"test",
|
|
104
|
+
"add",
|
|
105
|
+
"added",
|
|
106
|
+
"fix",
|
|
107
|
+
"fixed",
|
|
108
|
+
"run",
|
|
109
|
+
"running",
|
|
110
|
+
"using",
|
|
111
|
+
]);
|
|
112
|
+
const HEADING_RE = /^(#{1,4})\s+(.+)$/;
|
|
113
|
+
const SEPARATOR_RE = /^[-_*]{3,}\s*$/;
|
|
114
|
+
const FENCE_RE = /^`{3,}/;
|
|
115
|
+
const FTS_SPECIAL_RE = /['"(){}[\]*:^~]/g;
|
|
116
|
+
const FTS_OPERATORS_RE = /\b(AND|OR|NOT|NEAR)\b/gi;
|
|
117
|
+
const WORD_SPLIT_RE = /[^\p{L}\p{N}_-]+/u;
|
|
118
|
+
/**
|
|
119
|
+
* Sanitize user query for FTS5 MATCH.
|
|
120
|
+
* Removes special characters and wraps words in quotes with OR.
|
|
121
|
+
*/
|
|
122
|
+
function sanitizeQuery(raw) {
|
|
123
|
+
const q = raw.replace(FTS_SPECIAL_RE, " ").replace(FTS_OPERATORS_RE, " ").trim();
|
|
124
|
+
const words = q
|
|
125
|
+
.split(/\s+/)
|
|
126
|
+
.filter((w) => w.length >= 2)
|
|
127
|
+
.map((w) => `"${w}"`);
|
|
128
|
+
return words.length > 0 ? words.join(" OR ") : '""';
|
|
129
|
+
}
|
|
130
|
+
/** Classic Levenshtein distance with O(n) space */
|
|
131
|
+
function levenshtein(a, b) {
|
|
132
|
+
if (a.length === 0)
|
|
133
|
+
return b.length;
|
|
134
|
+
if (b.length === 0)
|
|
135
|
+
return a.length;
|
|
136
|
+
let prev = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
137
|
+
let curr = new Array(b.length + 1);
|
|
138
|
+
for (let i = 1; i <= a.length; i++) {
|
|
139
|
+
curr[0] = i;
|
|
140
|
+
for (let j = 1; j <= b.length; j++) {
|
|
141
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
142
|
+
curr[j] = Math.min(prev[j] + 1, curr[j - 1] + 1, prev[j - 1] + cost);
|
|
143
|
+
}
|
|
144
|
+
[prev, curr] = [curr, prev];
|
|
145
|
+
}
|
|
146
|
+
return prev[b.length];
|
|
147
|
+
}
|
|
148
|
+
export class ContentStore {
|
|
149
|
+
db;
|
|
150
|
+
hasTrigramTable = false;
|
|
151
|
+
constructor(dbPath) {
|
|
152
|
+
const path = dbPath ?? join(tmpdir(), `context-compress-${process.pid}.db`);
|
|
153
|
+
this.db = new Database(path);
|
|
154
|
+
this.db.pragma("journal_mode = WAL");
|
|
155
|
+
this.db.pragma("synchronous = NORMAL");
|
|
156
|
+
this.initSchema();
|
|
157
|
+
}
|
|
158
|
+
initSchema() {
|
|
159
|
+
this.db.exec(`
|
|
160
|
+
CREATE TABLE IF NOT EXISTS sources (
|
|
161
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
162
|
+
label TEXT NOT NULL,
|
|
163
|
+
chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
164
|
+
code_chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
165
|
+
indexed_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS chunks USING fts5(
|
|
169
|
+
title,
|
|
170
|
+
content,
|
|
171
|
+
source_id UNINDEXED,
|
|
172
|
+
content_type UNINDEXED,
|
|
173
|
+
tokenize='porter unicode61'
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
CREATE TABLE IF NOT EXISTS vocabulary (
|
|
177
|
+
word TEXT PRIMARY KEY
|
|
178
|
+
);
|
|
179
|
+
`);
|
|
180
|
+
}
|
|
181
|
+
/** Lazily create trigram table only when porter search returns 0 results */
|
|
182
|
+
ensureTrigramTable() {
|
|
183
|
+
if (this.hasTrigramTable)
|
|
184
|
+
return;
|
|
185
|
+
debug("Creating trigram FTS5 table (lazy)");
|
|
186
|
+
this.db.exec(`
|
|
187
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS chunks_trigram USING fts5(
|
|
188
|
+
title,
|
|
189
|
+
content,
|
|
190
|
+
source_id UNINDEXED,
|
|
191
|
+
content_type UNINDEXED,
|
|
192
|
+
tokenize='trigram'
|
|
193
|
+
);
|
|
194
|
+
`);
|
|
195
|
+
// Backfill from existing chunks
|
|
196
|
+
const rows = this.db
|
|
197
|
+
.prepare("SELECT title, content, source_id, content_type FROM chunks")
|
|
198
|
+
.all();
|
|
199
|
+
const insert = this.db.prepare("INSERT INTO chunks_trigram (title, content, source_id, content_type) VALUES (?, ?, ?, ?)");
|
|
200
|
+
const tx = this.db.transaction(() => {
|
|
201
|
+
for (const row of rows) {
|
|
202
|
+
insert.run(row.title, row.content, row.source_id, row.content_type);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
tx();
|
|
206
|
+
this.hasTrigramTable = true;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Index content into the store.
|
|
210
|
+
*/
|
|
211
|
+
index(content, label) {
|
|
212
|
+
const isMarkdown = HEADING_RE.test(content) || content.includes("```") || content.includes("---");
|
|
213
|
+
const chunks = isMarkdown ? chunkMarkdown(content) : chunkPlainText(content);
|
|
214
|
+
const insertSource = this.db.prepare("INSERT INTO sources (label, chunk_count, code_chunk_count) VALUES (?, ?, ?)");
|
|
215
|
+
const insertChunk = this.db.prepare("INSERT INTO chunks (title, content, source_id, content_type) VALUES (?, ?, ?, ?)");
|
|
216
|
+
const insertTrigram = this.hasTrigramTable
|
|
217
|
+
? this.db.prepare("INSERT INTO chunks_trigram (title, content, source_id, content_type) VALUES (?, ?, ?, ?)")
|
|
218
|
+
: null;
|
|
219
|
+
let codeChunks = 0;
|
|
220
|
+
const tx = this.db.transaction(() => {
|
|
221
|
+
const sourceInfo = insertSource.run(label, chunks.length, 0);
|
|
222
|
+
const sourceId = sourceInfo.lastInsertRowid;
|
|
223
|
+
for (const chunk of chunks) {
|
|
224
|
+
const contentType = chunk.hasCode ? "code" : "text";
|
|
225
|
+
if (chunk.hasCode)
|
|
226
|
+
codeChunks++;
|
|
227
|
+
insertChunk.run(chunk.title, chunk.content, sourceId, contentType);
|
|
228
|
+
insertTrigram?.run(chunk.title, chunk.content, sourceId, contentType);
|
|
229
|
+
}
|
|
230
|
+
// Update code chunk count
|
|
231
|
+
this.db
|
|
232
|
+
.prepare("UPDATE sources SET code_chunk_count = ? WHERE id = ?")
|
|
233
|
+
.run(codeChunks, sourceId);
|
|
234
|
+
// Update vocabulary
|
|
235
|
+
this.updateVocabulary(content);
|
|
236
|
+
return sourceId;
|
|
237
|
+
});
|
|
238
|
+
const sourceId = tx();
|
|
239
|
+
return {
|
|
240
|
+
sourceId,
|
|
241
|
+
label,
|
|
242
|
+
totalChunks: chunks.length,
|
|
243
|
+
codeChunks,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Three-layer search: Porter → Trigram (lazy) → Fuzzy correction.
|
|
248
|
+
*/
|
|
249
|
+
search(query, options) {
|
|
250
|
+
const limit = options?.limit ?? 3;
|
|
251
|
+
const sanitized = sanitizeQuery(query);
|
|
252
|
+
// Layer 1: Porter stemming search
|
|
253
|
+
let hits = this.porterSearch(sanitized, options?.source, limit);
|
|
254
|
+
if (hits.length > 0) {
|
|
255
|
+
return { query, results: hits };
|
|
256
|
+
}
|
|
257
|
+
// Layer 2: Trigram search (lazy table creation)
|
|
258
|
+
this.ensureTrigramTable();
|
|
259
|
+
hits = this.trigramSearch(sanitized, options?.source, limit);
|
|
260
|
+
if (hits.length > 0) {
|
|
261
|
+
return { query, results: hits };
|
|
262
|
+
}
|
|
263
|
+
// Layer 3: Fuzzy correction
|
|
264
|
+
const corrected = this.fuzzyCorrect(query);
|
|
265
|
+
if (corrected && corrected !== query) {
|
|
266
|
+
const correctedSanitized = sanitizeQuery(corrected);
|
|
267
|
+
hits = this.porterSearch(correctedSanitized, options?.source, limit);
|
|
268
|
+
if (hits.length > 0) {
|
|
269
|
+
return { query, results: hits, corrected };
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return { query, results: [] };
|
|
273
|
+
}
|
|
274
|
+
porterSearch(sanitized, source, limit) {
|
|
275
|
+
const sourceFilter = source ? "AND sources.label LIKE '%' || ? || '%'" : "";
|
|
276
|
+
const params = [sanitized];
|
|
277
|
+
if (source)
|
|
278
|
+
params.push(source);
|
|
279
|
+
params.push(limit);
|
|
280
|
+
const sql = `
|
|
281
|
+
SELECT
|
|
282
|
+
chunks.title,
|
|
283
|
+
chunks.content,
|
|
284
|
+
chunks.content_type,
|
|
285
|
+
sources.label,
|
|
286
|
+
bm25(chunks, 2.0, 1.0) AS rank,
|
|
287
|
+
highlight(chunks, 1, char(2), char(3)) AS highlighted
|
|
288
|
+
FROM chunks
|
|
289
|
+
JOIN sources ON sources.id = chunks.source_id
|
|
290
|
+
WHERE chunks MATCH ? ${sourceFilter}
|
|
291
|
+
ORDER BY rank
|
|
292
|
+
LIMIT ?
|
|
293
|
+
`;
|
|
294
|
+
try {
|
|
295
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
296
|
+
return rows.map((row) => ({
|
|
297
|
+
title: row.title,
|
|
298
|
+
snippet: extractSnippet(row.highlighted),
|
|
299
|
+
source: row.label,
|
|
300
|
+
score: Math.abs(row.rank),
|
|
301
|
+
}));
|
|
302
|
+
}
|
|
303
|
+
catch (e) {
|
|
304
|
+
debug("Porter search error:", e);
|
|
305
|
+
return [];
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
trigramSearch(sanitized, source, limit) {
|
|
309
|
+
const sourceFilter = source ? "AND sources.label LIKE '%' || ? || '%'" : "";
|
|
310
|
+
const params = [sanitized];
|
|
311
|
+
if (source)
|
|
312
|
+
params.push(source);
|
|
313
|
+
params.push(limit);
|
|
314
|
+
const sql = `
|
|
315
|
+
SELECT
|
|
316
|
+
chunks_trigram.title,
|
|
317
|
+
chunks_trigram.content,
|
|
318
|
+
chunks_trigram.content_type,
|
|
319
|
+
sources.label,
|
|
320
|
+
bm25(chunks_trigram, 2.0, 1.0) AS rank,
|
|
321
|
+
highlight(chunks_trigram, 1, char(2), char(3)) AS highlighted
|
|
322
|
+
FROM chunks_trigram
|
|
323
|
+
JOIN sources ON sources.id = chunks_trigram.source_id
|
|
324
|
+
WHERE chunks_trigram MATCH ? ${sourceFilter}
|
|
325
|
+
ORDER BY rank
|
|
326
|
+
LIMIT ?
|
|
327
|
+
`;
|
|
328
|
+
try {
|
|
329
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
330
|
+
return rows.map((row) => ({
|
|
331
|
+
title: row.title,
|
|
332
|
+
snippet: extractSnippet(row.highlighted),
|
|
333
|
+
source: row.label,
|
|
334
|
+
score: Math.abs(row.rank),
|
|
335
|
+
}));
|
|
336
|
+
}
|
|
337
|
+
catch (e) {
|
|
338
|
+
debug("Trigram search error:", e);
|
|
339
|
+
return [];
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Fuzzy correction using vocabulary + Levenshtein distance.
|
|
344
|
+
*/
|
|
345
|
+
fuzzyCorrect(query) {
|
|
346
|
+
const words = query.split(/\s+/).filter((w) => w.length >= 3);
|
|
347
|
+
if (words.length === 0)
|
|
348
|
+
return null;
|
|
349
|
+
const corrected = [];
|
|
350
|
+
let anyChanged = false;
|
|
351
|
+
for (const word of words) {
|
|
352
|
+
const maxDist = word.length <= 4 ? 1 : word.length <= 12 ? 2 : 3;
|
|
353
|
+
const minLen = word.length - maxDist;
|
|
354
|
+
const maxLen = word.length + maxDist;
|
|
355
|
+
const candidates = this.db
|
|
356
|
+
.prepare("SELECT word FROM vocabulary WHERE length(word) BETWEEN ? AND ?")
|
|
357
|
+
.all(minLen, maxLen);
|
|
358
|
+
let bestWord = word;
|
|
359
|
+
let bestDist = maxDist + 1;
|
|
360
|
+
for (const { word: candidate } of candidates) {
|
|
361
|
+
const dist = levenshtein(word.toLowerCase(), candidate.toLowerCase());
|
|
362
|
+
if (dist < bestDist && dist <= maxDist) {
|
|
363
|
+
bestDist = dist;
|
|
364
|
+
bestWord = candidate;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
if (bestWord !== word)
|
|
368
|
+
anyChanged = true;
|
|
369
|
+
corrected.push(bestWord);
|
|
370
|
+
}
|
|
371
|
+
return anyChanged ? corrected.join(" ") : null;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Update vocabulary table from content (bounded to MAX_VOCABULARY).
|
|
375
|
+
*/
|
|
376
|
+
updateVocabulary(content) {
|
|
377
|
+
const currentCount = this.db.prepare("SELECT COUNT(*) as cnt FROM vocabulary").get().cnt;
|
|
378
|
+
if (currentCount >= MAX_VOCABULARY)
|
|
379
|
+
return;
|
|
380
|
+
const words = content
|
|
381
|
+
.split(WORD_SPLIT_RE)
|
|
382
|
+
.filter((w) => w.length >= 3 && !STOPWORDS.has(w.toLowerCase()));
|
|
383
|
+
const unique = new Set(words.map((w) => w.toLowerCase()));
|
|
384
|
+
const insert = this.db.prepare("INSERT OR IGNORE INTO vocabulary (word) VALUES (?)");
|
|
385
|
+
let added = 0;
|
|
386
|
+
for (const word of unique) {
|
|
387
|
+
if (currentCount + added >= MAX_VOCABULARY)
|
|
388
|
+
break;
|
|
389
|
+
insert.run(word);
|
|
390
|
+
added++;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Get distinctive terms for search hint.
|
|
395
|
+
*/
|
|
396
|
+
getDistinctiveTerms(sourceId) {
|
|
397
|
+
const totalChunks = this.db
|
|
398
|
+
.prepare(sourceId
|
|
399
|
+
? "SELECT COUNT(*) as cnt FROM chunks WHERE source_id = ?"
|
|
400
|
+
: "SELECT COUNT(*) as cnt FROM chunks")
|
|
401
|
+
.get(...(sourceId ? [sourceId] : [])).cnt;
|
|
402
|
+
if (totalChunks === 0)
|
|
403
|
+
return [];
|
|
404
|
+
const filter = sourceId ? " WHERE source_id = ?" : "";
|
|
405
|
+
const stmt = this.db.prepare(`SELECT content FROM chunks${filter}`);
|
|
406
|
+
const rows = (sourceId ? stmt.all(sourceId) : stmt.all());
|
|
407
|
+
// Count document frequency per word
|
|
408
|
+
const docFreq = new Map();
|
|
409
|
+
for (const row of rows) {
|
|
410
|
+
const words = new Set(row.content
|
|
411
|
+
.split(WORD_SPLIT_RE)
|
|
412
|
+
.filter((w) => w.length >= 3 && !STOPWORDS.has(w.toLowerCase()))
|
|
413
|
+
.map((w) => w.toLowerCase()));
|
|
414
|
+
for (const word of words) {
|
|
415
|
+
docFreq.set(word, (docFreq.get(word) ?? 0) + 1);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
const minAppearances = 2;
|
|
419
|
+
const maxAppearances = Math.max(3, Math.ceil(totalChunks * 0.4));
|
|
420
|
+
const scored = [];
|
|
421
|
+
for (const [word, freq] of docFreq) {
|
|
422
|
+
if (freq < minAppearances || freq > maxAppearances)
|
|
423
|
+
continue;
|
|
424
|
+
const idf = Math.log(totalChunks / freq);
|
|
425
|
+
const lengthBonus = Math.min(word.length / 20, 0.5);
|
|
426
|
+
const identifierBonus = word.includes("_") ? 1.5 : word.length >= 12 ? 0.8 : 0;
|
|
427
|
+
const score = idf + lengthBonus + identifierBonus;
|
|
428
|
+
scored.push({ word, score });
|
|
429
|
+
}
|
|
430
|
+
scored.sort((a, b) => b.score - a.score);
|
|
431
|
+
return scored.slice(0, 40).map((s) => s.word);
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Get store statistics.
|
|
435
|
+
*/
|
|
436
|
+
getStats() {
|
|
437
|
+
const sources = this.db.prepare("SELECT COUNT(*) as cnt FROM sources").get().cnt;
|
|
438
|
+
const chunks = this.db.prepare("SELECT COUNT(*) as cnt FROM chunks").get()
|
|
439
|
+
.cnt;
|
|
440
|
+
const vocab = this.db.prepare("SELECT COUNT(*) as cnt FROM vocabulary").get().cnt;
|
|
441
|
+
return {
|
|
442
|
+
totalSources: sources,
|
|
443
|
+
totalChunks: chunks,
|
|
444
|
+
vocabularySize: vocab,
|
|
445
|
+
hasTrigramTable: this.hasTrigramTable,
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
close() {
|
|
449
|
+
this.db.close();
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
// ─── Chunking ────────────────────────────────────────────────
|
|
453
|
+
/**
|
|
454
|
+
* Chunk markdown by headings, preserving code blocks.
|
|
455
|
+
*/
|
|
456
|
+
function chunkMarkdown(content) {
|
|
457
|
+
const lines = content.split("\n");
|
|
458
|
+
const chunks = [];
|
|
459
|
+
const headingStack = [];
|
|
460
|
+
let currentLines = [];
|
|
461
|
+
let hasCode = false;
|
|
462
|
+
let inFence = false;
|
|
463
|
+
function flush() {
|
|
464
|
+
const text = currentLines.join("\n").trim();
|
|
465
|
+
if (text.length > 0) {
|
|
466
|
+
const title = headingStack.length > 0 ? headingStack.join(" > ") : text.slice(0, 80);
|
|
467
|
+
chunks.push({ title, content: text, hasCode });
|
|
468
|
+
}
|
|
469
|
+
currentLines = [];
|
|
470
|
+
hasCode = false;
|
|
471
|
+
}
|
|
472
|
+
for (const line of lines) {
|
|
473
|
+
// Track code fences
|
|
474
|
+
if (FENCE_RE.test(line)) {
|
|
475
|
+
inFence = !inFence;
|
|
476
|
+
hasCode = true;
|
|
477
|
+
currentLines.push(line);
|
|
478
|
+
continue;
|
|
479
|
+
}
|
|
480
|
+
if (inFence) {
|
|
481
|
+
currentLines.push(line);
|
|
482
|
+
continue;
|
|
483
|
+
}
|
|
484
|
+
// Separator line — flush current chunk
|
|
485
|
+
if (SEPARATOR_RE.test(line)) {
|
|
486
|
+
flush();
|
|
487
|
+
continue;
|
|
488
|
+
}
|
|
489
|
+
// Heading detection
|
|
490
|
+
const headingMatch = line.match(HEADING_RE);
|
|
491
|
+
if (headingMatch) {
|
|
492
|
+
flush();
|
|
493
|
+
const level = headingMatch[1].length;
|
|
494
|
+
const text = headingMatch[2].trim();
|
|
495
|
+
// Pop heading stack to correct level
|
|
496
|
+
while (headingStack.length >= level) {
|
|
497
|
+
headingStack.pop();
|
|
498
|
+
}
|
|
499
|
+
headingStack.push(text);
|
|
500
|
+
currentLines.push(line);
|
|
501
|
+
continue;
|
|
502
|
+
}
|
|
503
|
+
currentLines.push(line);
|
|
504
|
+
}
|
|
505
|
+
flush();
|
|
506
|
+
return chunks;
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Chunk plain text with blank-line splitting or fixed-size fallback.
|
|
510
|
+
*/
|
|
511
|
+
function chunkPlainText(content, linesPerChunk = 20, overlap = 2) {
|
|
512
|
+
const lines = content.split("\n");
|
|
513
|
+
// Strategy 1: Blank-line splitting (for naturally-sectioned output)
|
|
514
|
+
const sections = content.split(/\n\s*\n/);
|
|
515
|
+
if (sections.length >= 3 && sections.length <= 200 && sections.every((s) => s.length < 5120)) {
|
|
516
|
+
return sections
|
|
517
|
+
.map((section) => {
|
|
518
|
+
const trimmed = section.trim();
|
|
519
|
+
if (!trimmed)
|
|
520
|
+
return null;
|
|
521
|
+
return {
|
|
522
|
+
title: trimmed.split("\n")[0].slice(0, 80),
|
|
523
|
+
content: trimmed,
|
|
524
|
+
hasCode: FENCE_RE.test(trimmed),
|
|
525
|
+
};
|
|
526
|
+
})
|
|
527
|
+
.filter(Boolean);
|
|
528
|
+
}
|
|
529
|
+
// Strategy 2: Single chunk for small content
|
|
530
|
+
if (lines.length <= linesPerChunk) {
|
|
531
|
+
return [{ title: "Output", content: content.trim(), hasCode: false }];
|
|
532
|
+
}
|
|
533
|
+
// Strategy 3: Fixed-size overlapping chunks
|
|
534
|
+
const chunks = [];
|
|
535
|
+
const step = Math.max(linesPerChunk - overlap, 1);
|
|
536
|
+
for (let i = 0; i < lines.length; i += step) {
|
|
537
|
+
const slice = lines.slice(i, i + linesPerChunk);
|
|
538
|
+
const text = slice.join("\n").trim();
|
|
539
|
+
if (!text)
|
|
540
|
+
continue;
|
|
541
|
+
const title = slice[0].trim().slice(0, 80) || `Lines ${i + 1}-${i + slice.length}`;
|
|
542
|
+
chunks.push({ title, content: text, hasCode: false });
|
|
543
|
+
}
|
|
544
|
+
return chunks;
|
|
545
|
+
}
|
|
546
|
+
// ─── Stale DB cleanup ────────────────────────────────────────
|
|
547
|
+
/**
|
|
548
|
+
* Clean up stale database files from previous sessions.
|
|
549
|
+
*/
|
|
550
|
+
export function cleanupStaleDbs() {
|
|
551
|
+
const dir = tmpdir();
|
|
552
|
+
let cleaned = 0;
|
|
553
|
+
try {
|
|
554
|
+
const files = readdirSync(dir);
|
|
555
|
+
const dbPattern = /^context-compress-(\d+)\.db$/;
|
|
556
|
+
for (const file of files) {
|
|
557
|
+
const match = file.match(dbPattern);
|
|
558
|
+
if (!match)
|
|
559
|
+
continue;
|
|
560
|
+
const pid = Number.parseInt(match[1], 10);
|
|
561
|
+
if (pid === process.pid)
|
|
562
|
+
continue;
|
|
563
|
+
// Check if process is still alive
|
|
564
|
+
try {
|
|
565
|
+
process.kill(pid, 0);
|
|
566
|
+
// Process exists — skip
|
|
567
|
+
}
|
|
568
|
+
catch {
|
|
569
|
+
// Process is dead — clean up
|
|
570
|
+
const basePath = join(dir, file);
|
|
571
|
+
for (const suffix of ["", "-wal", "-shm"]) {
|
|
572
|
+
try {
|
|
573
|
+
unlinkSync(basePath + suffix);
|
|
574
|
+
}
|
|
575
|
+
catch {
|
|
576
|
+
// Ignore
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
cleaned++;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
catch (e) {
|
|
584
|
+
debug("Stale DB cleanup error:", e);
|
|
585
|
+
}
|
|
586
|
+
if (cleaned > 0)
|
|
587
|
+
debug(`Cleaned ${cleaned} stale database(s)`);
|
|
588
|
+
return cleaned;
|
|
589
|
+
}
|
|
590
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|