mcp-rag-memory 2.4.1 → 2.7.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/.env.example +3 -1
- package/LICENSE +21 -0
- package/README.md +151 -16
- package/dist/cli.js +102 -34
- package/dist/db/database.d.ts +10 -2
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +119 -18
- package/dist/db/database.js.map +1 -1
- package/dist/env.js +32 -12
- package/dist/mcp/rag-server.js +140 -39
- package/dist/mcp/rag-server.js.map +1 -1
- package/dist/memory/memory.d.ts +5 -1
- package/dist/memory/memory.d.ts.map +1 -1
- package/dist/memory/memory.js +245 -101
- package/dist/memory/memory.js.map +1 -1
- package/dist/rag/chunker.d.ts +7 -0
- package/dist/rag/chunker.d.ts.map +1 -1
- package/dist/rag/chunker.js +119 -11
- package/dist/rag/chunker.js.map +1 -1
- package/dist/rag/embeddings.d.ts +25 -0
- package/dist/rag/embeddings.d.ts.map +1 -1
- package/dist/rag/embeddings.js +56 -4
- package/dist/rag/embeddings.js.map +1 -1
- package/dist/rag/pipeline.d.ts +19 -2
- package/dist/rag/pipeline.d.ts.map +1 -1
- package/dist/rag/pipeline.js +212 -39
- package/dist/rag/pipeline.js.map +1 -1
- package/dist/rag/reindex.d.ts +27 -0
- package/dist/rag/reindex.d.ts.map +1 -0
- package/dist/rag/reindex.js +138 -0
- package/dist/rag/reindex.js.map +1 -0
- package/dist/rag/vector-search.d.ts +26 -1
- package/dist/rag/vector-search.d.ts.map +1 -1
- package/dist/rag/vector-search.js +207 -65
- package/dist/rag/vector-search.js.map +1 -1
- package/dist/session/transcript.d.ts +15 -5
- package/dist/session/transcript.d.ts.map +1 -1
- package/dist/session/transcript.js +152 -25
- package/dist/session/transcript.js.map +1 -1
- package/package.json +6 -3
|
@@ -1,45 +1,102 @@
|
|
|
1
1
|
import { getDB, unpackVector, getEmbedDim } from "../db/database.js";
|
|
2
2
|
import { dotProduct } from "./embedder.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
/** Read at call time (not frozen at import) so the mode can change per process/test. */
|
|
4
|
+
function searchMode() {
|
|
5
|
+
const raw = process.env.SEARCH_MODE;
|
|
6
|
+
return raw === "vector" || raw === "keyword" ? raw : "hybrid";
|
|
7
|
+
}
|
|
6
8
|
const RRF_K = 60;
|
|
7
9
|
const LIST_CAP = 60;
|
|
8
|
-
/* In-memory vector cache — invalidated on
|
|
10
|
+
/* In-memory vector cache — invalidated on local writes and whenever another
|
|
11
|
+
* process commits to the shared store (CLI, auto-save plugin, second server). */
|
|
9
12
|
let cacheChunks = null;
|
|
10
13
|
let cacheMemories = null;
|
|
14
|
+
let cacheDataVersion = null;
|
|
11
15
|
export function invalidateVectorCache() {
|
|
12
16
|
cacheChunks = null;
|
|
13
17
|
cacheMemories = null;
|
|
18
|
+
// Re-arm the watch: the version we recorded describes the store *before* the
|
|
19
|
+
// local write, so the next load must not treat our own commit as a foreign one.
|
|
20
|
+
cacheDataVersion = null;
|
|
21
|
+
}
|
|
22
|
+
/** PRAGMA data_version changes when another connection commits; ours never does. */
|
|
23
|
+
function dataVersion() {
|
|
24
|
+
const row = getDB().prepare("PRAGMA data_version").get();
|
|
25
|
+
return row ? Number(row.data_version) : 0;
|
|
26
|
+
}
|
|
27
|
+
function dropStaleCache() {
|
|
28
|
+
if (cacheDataVersion === null)
|
|
29
|
+
return;
|
|
30
|
+
const current = dataVersion();
|
|
31
|
+
if (current !== cacheDataVersion)
|
|
32
|
+
invalidateVectorCache();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Warn once per cache build when the in-memory vector cache is large enough to
|
|
36
|
+
* threaten the host process.
|
|
37
|
+
*
|
|
38
|
+
* The cache is deliberately uncapped and complete: truncating it would silently
|
|
39
|
+
* change which documents are searchable, which is far worse than being slow. So
|
|
40
|
+
* the honest options are to say so, or to OOM. At 1024 dims the cache costs 8 KB
|
|
41
|
+
* per row, so 100k chunks is ~800 MB — the failure mode arrives suddenly, with
|
|
42
|
+
* no diagnostic until the process is already dying.
|
|
43
|
+
*/
|
|
44
|
+
const VECTOR_CACHE_WARN_MB_DEFAULT = 256;
|
|
45
|
+
let cacheWarned = false;
|
|
46
|
+
/** Read at call time so the threshold can be tuned without a rebuild. */
|
|
47
|
+
function vectorCacheWarnMb() {
|
|
48
|
+
const raw = Number(process.env.RAG_VECTOR_CACHE_WARN_MB);
|
|
49
|
+
return Number.isFinite(raw) && raw > 0 ? raw : VECTOR_CACHE_WARN_MB_DEFAULT;
|
|
50
|
+
}
|
|
51
|
+
function warnIfLargeCache(table, rows, dim) {
|
|
52
|
+
if (cacheWarned || dim <= 0)
|
|
53
|
+
return;
|
|
54
|
+
const limitMb = vectorCacheWarnMb();
|
|
55
|
+
const mb = (rows * dim * 8) / (1024 * 1024);
|
|
56
|
+
if (mb < limitMb)
|
|
57
|
+
return;
|
|
58
|
+
cacheWarned = true;
|
|
59
|
+
process.stderr.write(`rag: vector cache for ${table} holds ${rows} rows (${dim}-dim) ≈ ${mb.toFixed(0)} MB in RAM ` +
|
|
60
|
+
`(threshold ${limitMb} MB). Search stays correct, but memory grows with the store; consider ` +
|
|
61
|
+
`pruning old documents, or set RAG_VECTOR_CACHE_WARN_MB to tune this warning.\n`);
|
|
14
62
|
}
|
|
15
63
|
function loadVectors(table) {
|
|
16
64
|
const db = getDB();
|
|
65
|
+
dropStaleCache();
|
|
17
66
|
if (table === "memories") {
|
|
18
67
|
if (cacheMemories)
|
|
19
68
|
return cacheMemories;
|
|
20
|
-
const rows = db.prepare("SELECT id, embedding FROM memories").all();
|
|
21
69
|
const out = [];
|
|
22
|
-
|
|
70
|
+
// iterate(), not all(): .all() materialised every embedding blob as a
|
|
71
|
+
// Uint8Array first, so peak memory held the packed store AND the unpacked
|
|
72
|
+
// Float64Array copies at once. Streaming keeps one blob alive at a time.
|
|
73
|
+
// Nothing inside the loop touches the DB, so the open statement is safe.
|
|
74
|
+
for (const r of db
|
|
75
|
+
.prepare("SELECT id, embedding FROM memories")
|
|
76
|
+
.iterate()) {
|
|
23
77
|
const vec = unpackVector(r.embedding);
|
|
24
78
|
if (vec)
|
|
25
79
|
out.push({ id: r.id, vec });
|
|
26
80
|
}
|
|
27
81
|
cacheMemories = out;
|
|
82
|
+
warnIfLargeCache("memories", out.length, out[0]?.vec.length ?? 0);
|
|
83
|
+
cacheDataVersion = dataVersion();
|
|
28
84
|
return out;
|
|
29
85
|
}
|
|
30
86
|
// chunks keep their implicit rowid too, for FTS bookkeeping.
|
|
31
87
|
if (cacheChunks)
|
|
32
88
|
return cacheChunks;
|
|
33
|
-
const rows = db
|
|
34
|
-
.prepare("SELECT id, rowid AS rid, embedding FROM chunks")
|
|
35
|
-
.all();
|
|
36
89
|
const out = [];
|
|
37
|
-
for (const r of
|
|
90
|
+
for (const r of db
|
|
91
|
+
.prepare("SELECT id, doc_id, rowid AS rid, embedding FROM chunks")
|
|
92
|
+
.iterate()) {
|
|
38
93
|
const vec = unpackVector(r.embedding);
|
|
39
94
|
if (vec)
|
|
40
|
-
out.push({ id: r.id, id2: String(r.rid), vec });
|
|
95
|
+
out.push({ id: r.id, id2: String(r.rid), docId: r.doc_id, vec });
|
|
41
96
|
}
|
|
42
97
|
cacheChunks = out;
|
|
98
|
+
warnIfLargeCache("chunks", out.length, out[0]?.vec.length ?? 0);
|
|
99
|
+
cacheDataVersion = dataVersion();
|
|
43
100
|
return out;
|
|
44
101
|
}
|
|
45
102
|
function dimGuard(queryVec) {
|
|
@@ -56,17 +113,37 @@ export function vectorSearch(queryVec, options = {}) {
|
|
|
56
113
|
const table = options.collection === "memories" ? "memories" : "chunks";
|
|
57
114
|
dimGuard(queryVec);
|
|
58
115
|
const rows = loadVectors(table);
|
|
116
|
+
const only = options.onlyKeys;
|
|
117
|
+
const onlyDocs = options.onlyDocIds;
|
|
59
118
|
const scored = [];
|
|
60
119
|
for (const r of rows) {
|
|
61
|
-
|
|
120
|
+
if (only && !only.has(r.id))
|
|
121
|
+
continue;
|
|
122
|
+
if (onlyDocs) {
|
|
123
|
+
const docId = r.docId;
|
|
124
|
+
if (!docId || !onlyDocs.has(docId))
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
// Clamp to [-1, 1]: these vectors are L2-normalized, but a hand-written or
|
|
128
|
+
// future provider's blob must not leak scores > 1 past min_score clamps.
|
|
129
|
+
const score = Math.max(-1, Math.min(1, dotProduct(queryVec, r.vec)));
|
|
62
130
|
if (score >= minScore)
|
|
63
131
|
scored.push({ key: r.id, score });
|
|
64
132
|
}
|
|
65
133
|
scored.sort((a, b) => b.score - a.score);
|
|
66
134
|
return scored.slice(0, topK);
|
|
67
135
|
}
|
|
68
|
-
/**
|
|
69
|
-
|
|
136
|
+
/**
|
|
137
|
+
* BM25 keyword hits via FTS5, best-first. Returns empty when the query has no terms.
|
|
138
|
+
* Filters are pushed into SQL (no id materialization) and every token is quoted as
|
|
139
|
+
* an FTS5 string, so punctuation like "opencode-db" cannot void the keyword leg.
|
|
140
|
+
*
|
|
141
|
+
* The raw BM25 value is carried through. bm25() returns a negative number that
|
|
142
|
+
* becomes more negative as relevance rises, so it is negated into a positive
|
|
143
|
+
* relevance figure for reporting; without it the keyword leg had no observable
|
|
144
|
+
* strength at all, making it impossible to tell a bad ranking from a weak match.
|
|
145
|
+
*/
|
|
146
|
+
function ftsHits(queryText, limit, filters) {
|
|
70
147
|
const tokens = queryText
|
|
71
148
|
.toLowerCase()
|
|
72
149
|
.replace(/[^\p{L}\p{N}_-]+/gu, " ")
|
|
@@ -77,22 +154,40 @@ function ftsHits(queryText, limit) {
|
|
|
77
154
|
if (tokens.length === 0)
|
|
78
155
|
return [];
|
|
79
156
|
const db = getDB();
|
|
157
|
+
const clauses = [];
|
|
158
|
+
const params = [];
|
|
159
|
+
if (filters?.docId) {
|
|
160
|
+
clauses.push("c.doc_id = ?");
|
|
161
|
+
params.push(filters.docId);
|
|
162
|
+
}
|
|
163
|
+
if (filters?.source) {
|
|
164
|
+
clauses.push("d.source = ?");
|
|
165
|
+
params.push(filters.source);
|
|
166
|
+
}
|
|
167
|
+
const filterClause = clauses.length ? ` AND ${clauses.join(" AND ")}` : "";
|
|
80
168
|
try {
|
|
81
169
|
const rows = db
|
|
82
|
-
.prepare(`SELECT c.id
|
|
170
|
+
.prepare(`SELECT c.id, bm25(chunks_fts) AS bm25
|
|
83
171
|
FROM chunks_fts
|
|
84
172
|
JOIN chunks c ON c.rowid = chunks_fts.rowid
|
|
85
|
-
|
|
173
|
+
JOIN documents d ON d.id = c.doc_id
|
|
174
|
+
WHERE chunks_fts MATCH ?${filterClause}
|
|
86
175
|
ORDER BY bm25(chunks_fts)
|
|
87
176
|
LIMIT ?`)
|
|
88
|
-
.all(tokens
|
|
89
|
-
return rows.map((r) => ({ key: r.id }));
|
|
177
|
+
.all(quoteFtsQuery(tokens), ...params, limit);
|
|
178
|
+
return rows.map((r) => ({ key: r.id, bm25: Number(r.bm25) }));
|
|
90
179
|
}
|
|
91
|
-
catch {
|
|
92
|
-
// FTS5 unavailable or unsupported query
|
|
180
|
+
catch (e) {
|
|
181
|
+
// FTS5 unavailable or an unsupported query — degrade to the vector leg
|
|
182
|
+
// instead of failing the whole search, but say so on stderr.
|
|
183
|
+
process.stderr.write(`rag: FTS5 keyword leg unavailable (${e.message})\n`);
|
|
93
184
|
return [];
|
|
94
185
|
}
|
|
95
186
|
}
|
|
187
|
+
/** Quote each token as an FTS5 string literal so "-" and other syntax stay literal. */
|
|
188
|
+
function quoteFtsQuery(tokens) {
|
|
189
|
+
return tokens.map((t) => `"${t.replace(/"/g, '""')}"`).join(" ");
|
|
190
|
+
}
|
|
96
191
|
/** Reciprocal-rank fusion over multiple ranked lists of {key}. */
|
|
97
192
|
function rrfMerge(lists) {
|
|
98
193
|
const scores = new Map();
|
|
@@ -104,54 +199,84 @@ function rrfMerge(lists) {
|
|
|
104
199
|
return scores;
|
|
105
200
|
}
|
|
106
201
|
/**
|
|
107
|
-
* Hybrid search: FTS5 BM25 keyword + vector, fused with RRF.
|
|
202
|
+
* Hybrid search: FTS5 BM25 keyword + vector, fused with RRF for ranking.
|
|
108
203
|
* Controlled by SEARCH_MODE=hybrid|vector|keyword (default hybrid).
|
|
204
|
+
*
|
|
205
|
+
* The reported `score` is always on a 0..1 relevance scale — the vector cosine
|
|
206
|
+
* when the chunk has one, otherwise a rank-decayed keyword score — so `minScore`
|
|
207
|
+
* means the same thing in every mode (RRF only decides the order).
|
|
109
208
|
*/
|
|
110
209
|
export function searchChunks(queryVec, opts) {
|
|
111
|
-
const { queryText = "", topK, minScore, filters } = opts;
|
|
210
|
+
const { queryText = "", topK, minScore, filters, explain = false } = opts;
|
|
112
211
|
const db = getDB();
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
let kwHits = [];
|
|
119
|
-
if (SEARCH_MODE !== "vector") {
|
|
120
|
-
kwHits = ftsHits(queryText, cap);
|
|
121
|
-
}
|
|
122
|
-
let finalIds;
|
|
123
|
-
if (SEARCH_MODE === "vector") {
|
|
124
|
-
finalIds = vectorHits.slice(0, topK);
|
|
125
|
-
}
|
|
126
|
-
else if (SEARCH_MODE === "keyword") {
|
|
127
|
-
finalIds = kwHits.slice(0, topK).map((h, i) => ({ key: h.key, score: 1 - i * 1e-6 }));
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
const fused = rrfMerge([vectorHits, kwHits]);
|
|
131
|
-
finalIds = [...fused.entries()]
|
|
132
|
-
.map(([key, score]) => ({ key, score }))
|
|
133
|
-
.sort((a, b) => b.score - a.score)
|
|
134
|
-
.slice(0, topK);
|
|
135
|
-
}
|
|
136
|
-
// Narrow ranked results to matching documents (docId and/or source).
|
|
212
|
+
const mode = searchMode();
|
|
213
|
+
// Resolve the doc filter BEFORE ranking so unfiltered chunks can never
|
|
214
|
+
// out-rank a filtered one and squeeze it out of the top-K. Document ids, not
|
|
215
|
+
// chunk ids: one row per document instead of one per chunk.
|
|
216
|
+
let allowedDocIds;
|
|
137
217
|
if (filters && (filters.docId || filters.source)) {
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
const params = finalIds.map((f) => f.key);
|
|
218
|
+
const clauses = [];
|
|
219
|
+
const params = [];
|
|
141
220
|
if (filters.docId) {
|
|
142
|
-
clauses.push("
|
|
221
|
+
clauses.push("id = ?");
|
|
143
222
|
params.push(filters.docId);
|
|
144
223
|
}
|
|
145
224
|
if (filters.source) {
|
|
146
|
-
clauses.push("
|
|
225
|
+
clauses.push("source = ?");
|
|
147
226
|
params.push(filters.source);
|
|
148
227
|
}
|
|
149
228
|
const allowed = db
|
|
150
|
-
.prepare(`SELECT
|
|
229
|
+
.prepare(`SELECT id FROM documents WHERE ${clauses.join(" AND ")}`)
|
|
151
230
|
.all(...params);
|
|
152
|
-
|
|
153
|
-
finalIds = finalIds.filter((f) => allowedSet.has(f.key));
|
|
231
|
+
allowedDocIds = new Set(allowed.map((r) => r.id));
|
|
154
232
|
}
|
|
233
|
+
const cap = Math.max(topK * 2, LIST_CAP);
|
|
234
|
+
let vectorHits = [];
|
|
235
|
+
if (mode !== "keyword") {
|
|
236
|
+
vectorHits = vectorSearch(queryVec, { topK: cap, minScore, collection: "chunks", onlyDocIds: allowedDocIds });
|
|
237
|
+
}
|
|
238
|
+
let kwHits = [];
|
|
239
|
+
if (mode !== "vector") {
|
|
240
|
+
kwHits = allowedDocIds && allowedDocIds.size === 0 ? [] : ftsHits(queryText, cap, filters);
|
|
241
|
+
}
|
|
242
|
+
// Rank-decayed keyword relevance in 0..1, so keyword-only hits still carry a
|
|
243
|
+
// comparable score instead of the old flat 1.0 / RRF value.
|
|
244
|
+
const kwScore = new Map();
|
|
245
|
+
kwHits.forEach((h, rank) => kwScore.set(h.key, 1 - rank / (kwHits.length + 1)));
|
|
246
|
+
const vectorScore = new Map();
|
|
247
|
+
for (const h of vectorHits)
|
|
248
|
+
vectorScore.set(h.key, h.score);
|
|
249
|
+
// Per-leg ranks and true BM25 strength, kept for `explain` and for `legs`.
|
|
250
|
+
const vectorRank = new Map();
|
|
251
|
+
vectorHits.forEach((h, rank) => vectorRank.set(h.key, rank));
|
|
252
|
+
const keywordRank = new Map();
|
|
253
|
+
kwHits.forEach((h, rank) => keywordRank.set(h.key, rank));
|
|
254
|
+
const bm25Raw = new Map();
|
|
255
|
+
for (const h of kwHits)
|
|
256
|
+
bm25Raw.set(h.key, -h.bm25);
|
|
257
|
+
// Strongest BM25 in this result set defines the top of the 0..1 keyword scale,
|
|
258
|
+
// so keyword relevance is comparable between queries instead of being an
|
|
259
|
+
// absolute number that drifts with corpus size and term frequency.
|
|
260
|
+
const bm25Max = bm25Raw.size === 0 ? 0 : Math.max(...bm25Raw.values());
|
|
261
|
+
const bm25Norm = new Map();
|
|
262
|
+
for (const [key, v] of bm25Raw)
|
|
263
|
+
bm25Norm.set(key, bm25Max > 0 ? v / bm25Max : 0);
|
|
264
|
+
let ordered;
|
|
265
|
+
let rrf = new Map();
|
|
266
|
+
if (mode === "vector") {
|
|
267
|
+
ordered = vectorHits.slice(0, topK).map((h) => h.key);
|
|
268
|
+
}
|
|
269
|
+
else if (mode === "keyword") {
|
|
270
|
+
ordered = kwHits.slice(0, topK).map((h) => h.key);
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
rrf = rrfMerge([vectorHits, kwHits]);
|
|
274
|
+
ordered = [...rrf.entries()].sort((a, b) => b[1] - a[1]).map(([key]) => key).slice(0, topK);
|
|
275
|
+
}
|
|
276
|
+
// Threshold on the final score, in every mode — not just on the vector leg.
|
|
277
|
+
const finalIds = ordered
|
|
278
|
+
.map((key) => ({ key, score: Math.max(vectorScore.get(key) ?? 0, kwScore.get(key) ?? 0) }))
|
|
279
|
+
.filter((f) => f.score >= minScore);
|
|
155
280
|
if (finalIds.length === 0)
|
|
156
281
|
return [];
|
|
157
282
|
const ids = finalIds.map((f) => f.key);
|
|
@@ -167,17 +292,34 @@ export function searchChunks(queryVec, opts) {
|
|
|
167
292
|
const row = byId.get(f.key);
|
|
168
293
|
if (!row)
|
|
169
294
|
return [];
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
295
|
+
const vRank = vectorRank.get(f.key);
|
|
296
|
+
const kRank = keywordRank.get(f.key);
|
|
297
|
+
const legs = [];
|
|
298
|
+
if (vRank !== undefined)
|
|
299
|
+
legs.push("vector");
|
|
300
|
+
if (kRank !== undefined)
|
|
301
|
+
legs.push("keyword");
|
|
302
|
+
const hit = {
|
|
303
|
+
id: row.id,
|
|
304
|
+
docId: row.doc_id,
|
|
305
|
+
docTitle: row.doc_title,
|
|
306
|
+
chunkIndex: row.idx,
|
|
307
|
+
content: row.content,
|
|
308
|
+
score: f.score,
|
|
309
|
+
tokenCount: row.token_count,
|
|
310
|
+
legs,
|
|
311
|
+
};
|
|
312
|
+
if (explain) {
|
|
313
|
+
hit.explain = {
|
|
314
|
+
rrfScore: Number((rrf.get(f.key) ?? 0).toFixed(6)),
|
|
315
|
+
// The raw per-leg values, never `f.score`: that is max(cosine, keyword),
|
|
316
|
+
// so reporting it as the vector score would overstate the vector leg
|
|
317
|
+
// precisely when the keyword leg carried the hit.
|
|
318
|
+
...(vRank !== undefined ? { vectorScore: vectorScore.get(f.key), vectorRank: vRank } : {}),
|
|
319
|
+
...(kRank !== undefined ? { keywordScore: bm25Norm.get(f.key) ?? 0, keywordRank: kRank } : {}),
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
return [hit];
|
|
181
323
|
});
|
|
182
324
|
}
|
|
183
325
|
//# sourceMappingURL=vector-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-search.js","sourceRoot":"","sources":["../../src/rag/vector-search.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vector-search.js","sourceRoot":"","sources":["../../src/rag/vector-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,12 @@ export interface SyncResult {
|
|
|
10
10
|
skipped: number;
|
|
11
11
|
}
|
|
12
12
|
export type SessionSource = "opencode-db" | "session-log";
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Where opencode keeps its session/message history, in probe order.
|
|
15
|
+
* Read on every call (not frozen at import) so OPENCODE_DB can be pointed at a
|
|
16
|
+
* different store — or a fixture — at any time. Opencode uses the POSIX XDG
|
|
17
|
+
* path on Linux/macOS and %LOCALAPPDATA% on Windows.
|
|
18
|
+
*/
|
|
17
19
|
export declare function opencodeDbs(): string[];
|
|
18
20
|
/** Merge top-level sessions from the global + local opencode DBs, newest first. */
|
|
19
21
|
export declare function listOpenCodeSessions(limit?: number, opts?: {
|
|
@@ -43,7 +45,15 @@ export declare function ingestLatest(opts?: {
|
|
|
43
45
|
sessionId?: string;
|
|
44
46
|
entries: number;
|
|
45
47
|
} & SyncResult>;
|
|
46
|
-
/** Extract user-typed text from one session, oldest first.
|
|
48
|
+
/** Extract user-typed text from one session, oldest first. Searches the global
|
|
49
|
+
* and local opencode DBs (a session may live in either, depending on mode).
|
|
50
|
+
*
|
|
51
|
+
* Each candidate DB is probed independently: `opencodeDbs()` returns both the
|
|
52
|
+
* global and local paths whether or not each one exists, so a stale or corrupt
|
|
53
|
+
* file must not abort the sync when a healthy DB is also present. Failures are
|
|
54
|
+
* collected and only reported when every candidate failed *and* none of them
|
|
55
|
+
* held the session, so a single bad path can no longer masquerade as
|
|
56
|
+
* "session not found". */
|
|
47
57
|
export declare function getSessionTranscript(sessionId: string, limit?: number): SessionEntry[];
|
|
48
58
|
/** Read entries from a plugin-written .jsonl file. */
|
|
49
59
|
export declare function readJsonl(file: string): SessionEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/session/transcript.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC;AAE1D
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/session/transcript.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAwBtC;AA0ED,mFAAmF;AACnF,wBAAgB,oBAAoB,CAClC,KAAK,SAAK,EACV,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB9E;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAM3I;AAED,wFAAwF;AACxF,wBAAsB,YAAY,CAChC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAO,GACxE,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAAC,CAK/E;AAkBD;;;;;;;;0BAQ0B;AAC1B,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,YAAY,EAAE,CA8CjF;AAyDD,sDAAsD;AACtD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CA+BtD;AA+CD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAyBlD;AAED,qFAAqF;AACrF,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAwBvG;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAO,GACpD,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAAC,CAI9D;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,aAAa,CAAA;CAAO,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAAC,CAIjI;AAED,wBAAsB,YAAY,CAChC,GAAG,SAAkB,EACrB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,aAAa,CAAA;CAAO,GACpC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAAC,CAsBzC"}
|