mcp-rag-memory 2.4.1 → 2.6.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 +41 -7
- package/dist/cli.js +85 -32
- package/dist/db/database.d.ts +2 -2
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +90 -18
- package/dist/db/database.js.map +1 -1
- package/dist/env.js +32 -12
- package/dist/mcp/rag-server.js +20 -12
- 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 +234 -102
- 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.map +1 -1
- package/dist/rag/embeddings.js +14 -0
- package/dist/rag/embeddings.js.map +1 -1
- package/dist/rag/pipeline.d.ts +18 -1
- package/dist/rag/pipeline.d.ts.map +1 -1
- package/dist/rag/pipeline.js +210 -37
- package/dist/rag/pipeline.js.map +1 -1
- package/dist/rag/vector-search.d.ts +8 -1
- package/dist/rag/vector-search.d.ts.map +1 -1
- package/dist/rag/vector-search.js +126 -51
- package/dist/rag/vector-search.js.map +1 -1
- package/dist/session/transcript.d.ts +8 -5
- package/dist/session/transcript.d.ts.map +1 -1
- package/dist/session/transcript.js +118 -25
- package/dist/session/transcript.js.map +1 -1
- package/package.json +6 -3
|
@@ -1,45 +1,71 @@
|
|
|
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();
|
|
14
33
|
}
|
|
15
34
|
function loadVectors(table) {
|
|
16
35
|
const db = getDB();
|
|
36
|
+
dropStaleCache();
|
|
17
37
|
if (table === "memories") {
|
|
18
38
|
if (cacheMemories)
|
|
19
39
|
return cacheMemories;
|
|
20
|
-
const rows = db.prepare("SELECT id, embedding FROM memories").all();
|
|
21
40
|
const out = [];
|
|
22
|
-
|
|
41
|
+
// iterate(), not all(): .all() materialised every embedding blob as a
|
|
42
|
+
// Uint8Array first, so peak memory held the packed store AND the unpacked
|
|
43
|
+
// Float64Array copies at once. Streaming keeps one blob alive at a time.
|
|
44
|
+
// Nothing inside the loop touches the DB, so the open statement is safe.
|
|
45
|
+
for (const r of db
|
|
46
|
+
.prepare("SELECT id, embedding FROM memories")
|
|
47
|
+
.iterate()) {
|
|
23
48
|
const vec = unpackVector(r.embedding);
|
|
24
49
|
if (vec)
|
|
25
50
|
out.push({ id: r.id, vec });
|
|
26
51
|
}
|
|
27
52
|
cacheMemories = out;
|
|
53
|
+
cacheDataVersion = dataVersion();
|
|
28
54
|
return out;
|
|
29
55
|
}
|
|
30
56
|
// chunks keep their implicit rowid too, for FTS bookkeeping.
|
|
31
57
|
if (cacheChunks)
|
|
32
58
|
return cacheChunks;
|
|
33
|
-
const rows = db
|
|
34
|
-
.prepare("SELECT id, rowid AS rid, embedding FROM chunks")
|
|
35
|
-
.all();
|
|
36
59
|
const out = [];
|
|
37
|
-
for (const r of
|
|
60
|
+
for (const r of db
|
|
61
|
+
.prepare("SELECT id, doc_id, rowid AS rid, embedding FROM chunks")
|
|
62
|
+
.iterate()) {
|
|
38
63
|
const vec = unpackVector(r.embedding);
|
|
39
64
|
if (vec)
|
|
40
|
-
out.push({ id: r.id, id2: String(r.rid), vec });
|
|
65
|
+
out.push({ id: r.id, id2: String(r.rid), docId: r.doc_id, vec });
|
|
41
66
|
}
|
|
42
67
|
cacheChunks = out;
|
|
68
|
+
cacheDataVersion = dataVersion();
|
|
43
69
|
return out;
|
|
44
70
|
}
|
|
45
71
|
function dimGuard(queryVec) {
|
|
@@ -56,17 +82,32 @@ export function vectorSearch(queryVec, options = {}) {
|
|
|
56
82
|
const table = options.collection === "memories" ? "memories" : "chunks";
|
|
57
83
|
dimGuard(queryVec);
|
|
58
84
|
const rows = loadVectors(table);
|
|
85
|
+
const only = options.onlyKeys;
|
|
86
|
+
const onlyDocs = options.onlyDocIds;
|
|
59
87
|
const scored = [];
|
|
60
88
|
for (const r of rows) {
|
|
61
|
-
|
|
89
|
+
if (only && !only.has(r.id))
|
|
90
|
+
continue;
|
|
91
|
+
if (onlyDocs) {
|
|
92
|
+
const docId = r.docId;
|
|
93
|
+
if (!docId || !onlyDocs.has(docId))
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
// Clamp to [-1, 1]: these vectors are L2-normalized, but a hand-written or
|
|
97
|
+
// future provider's blob must not leak scores > 1 past min_score clamps.
|
|
98
|
+
const score = Math.max(-1, Math.min(1, dotProduct(queryVec, r.vec)));
|
|
62
99
|
if (score >= minScore)
|
|
63
100
|
scored.push({ key: r.id, score });
|
|
64
101
|
}
|
|
65
102
|
scored.sort((a, b) => b.score - a.score);
|
|
66
103
|
return scored.slice(0, topK);
|
|
67
104
|
}
|
|
68
|
-
/**
|
|
69
|
-
|
|
105
|
+
/**
|
|
106
|
+
* BM25 keyword hits via FTS5, best-first. Returns empty when the query has no terms.
|
|
107
|
+
* Filters are pushed into SQL (no id materialization) and every token is quoted as
|
|
108
|
+
* an FTS5 string, so punctuation like "opencode-db" cannot void the keyword leg.
|
|
109
|
+
*/
|
|
110
|
+
function ftsHits(queryText, limit, filters) {
|
|
70
111
|
const tokens = queryText
|
|
71
112
|
.toLowerCase()
|
|
72
113
|
.replace(/[^\p{L}\p{N}_-]+/gu, " ")
|
|
@@ -77,22 +118,40 @@ function ftsHits(queryText, limit) {
|
|
|
77
118
|
if (tokens.length === 0)
|
|
78
119
|
return [];
|
|
79
120
|
const db = getDB();
|
|
121
|
+
const clauses = [];
|
|
122
|
+
const params = [];
|
|
123
|
+
if (filters?.docId) {
|
|
124
|
+
clauses.push("c.doc_id = ?");
|
|
125
|
+
params.push(filters.docId);
|
|
126
|
+
}
|
|
127
|
+
if (filters?.source) {
|
|
128
|
+
clauses.push("d.source = ?");
|
|
129
|
+
params.push(filters.source);
|
|
130
|
+
}
|
|
131
|
+
const filterClause = clauses.length ? ` AND ${clauses.join(" AND ")}` : "";
|
|
80
132
|
try {
|
|
81
133
|
const rows = db
|
|
82
134
|
.prepare(`SELECT c.id
|
|
83
135
|
FROM chunks_fts
|
|
84
136
|
JOIN chunks c ON c.rowid = chunks_fts.rowid
|
|
85
|
-
|
|
137
|
+
JOIN documents d ON d.id = c.doc_id
|
|
138
|
+
WHERE chunks_fts MATCH ?${filterClause}
|
|
86
139
|
ORDER BY bm25(chunks_fts)
|
|
87
140
|
LIMIT ?`)
|
|
88
|
-
.all(tokens
|
|
141
|
+
.all(quoteFtsQuery(tokens), ...params, limit);
|
|
89
142
|
return rows.map((r) => ({ key: r.id }));
|
|
90
143
|
}
|
|
91
|
-
catch {
|
|
92
|
-
// FTS5 unavailable or unsupported query
|
|
144
|
+
catch (e) {
|
|
145
|
+
// FTS5 unavailable or an unsupported query — degrade to the vector leg
|
|
146
|
+
// instead of failing the whole search, but say so on stderr.
|
|
147
|
+
process.stderr.write(`rag: FTS5 keyword leg unavailable (${e.message})\n`);
|
|
93
148
|
return [];
|
|
94
149
|
}
|
|
95
150
|
}
|
|
151
|
+
/** Quote each token as an FTS5 string literal so "-" and other syntax stay literal. */
|
|
152
|
+
function quoteFtsQuery(tokens) {
|
|
153
|
+
return tokens.map((t) => `"${t.replace(/"/g, '""')}"`).join(" ");
|
|
154
|
+
}
|
|
96
155
|
/** Reciprocal-rank fusion over multiple ranked lists of {key}. */
|
|
97
156
|
function rrfMerge(lists) {
|
|
98
157
|
const scores = new Map();
|
|
@@ -104,54 +163,70 @@ function rrfMerge(lists) {
|
|
|
104
163
|
return scores;
|
|
105
164
|
}
|
|
106
165
|
/**
|
|
107
|
-
* Hybrid search: FTS5 BM25 keyword + vector, fused with RRF.
|
|
166
|
+
* Hybrid search: FTS5 BM25 keyword + vector, fused with RRF for ranking.
|
|
108
167
|
* Controlled by SEARCH_MODE=hybrid|vector|keyword (default hybrid).
|
|
168
|
+
*
|
|
169
|
+
* The reported `score` is always on a 0..1 relevance scale — the vector cosine
|
|
170
|
+
* when the chunk has one, otherwise a rank-decayed keyword score — so `minScore`
|
|
171
|
+
* means the same thing in every mode (RRF only decides the order).
|
|
109
172
|
*/
|
|
110
173
|
export function searchChunks(queryVec, opts) {
|
|
111
174
|
const { queryText = "", topK, minScore, filters } = opts;
|
|
112
175
|
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).
|
|
176
|
+
const mode = searchMode();
|
|
177
|
+
// Resolve the doc filter BEFORE ranking so unfiltered chunks can never
|
|
178
|
+
// out-rank a filtered one and squeeze it out of the top-K. Document ids, not
|
|
179
|
+
// chunk ids: one row per document instead of one per chunk.
|
|
180
|
+
let allowedDocIds;
|
|
137
181
|
if (filters && (filters.docId || filters.source)) {
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
const params = finalIds.map((f) => f.key);
|
|
182
|
+
const clauses = [];
|
|
183
|
+
const params = [];
|
|
141
184
|
if (filters.docId) {
|
|
142
|
-
clauses.push("
|
|
185
|
+
clauses.push("id = ?");
|
|
143
186
|
params.push(filters.docId);
|
|
144
187
|
}
|
|
145
188
|
if (filters.source) {
|
|
146
|
-
clauses.push("
|
|
189
|
+
clauses.push("source = ?");
|
|
147
190
|
params.push(filters.source);
|
|
148
191
|
}
|
|
149
192
|
const allowed = db
|
|
150
|
-
.prepare(`SELECT
|
|
193
|
+
.prepare(`SELECT id FROM documents WHERE ${clauses.join(" AND ")}`)
|
|
151
194
|
.all(...params);
|
|
152
|
-
|
|
153
|
-
|
|
195
|
+
allowedDocIds = new Set(allowed.map((r) => r.id));
|
|
196
|
+
}
|
|
197
|
+
const cap = Math.max(topK * 2, LIST_CAP);
|
|
198
|
+
let vectorHits = [];
|
|
199
|
+
if (mode !== "keyword") {
|
|
200
|
+
vectorHits = vectorSearch(queryVec, { topK: cap, minScore, collection: "chunks", onlyDocIds: allowedDocIds });
|
|
201
|
+
}
|
|
202
|
+
let kwHits = [];
|
|
203
|
+
if (mode !== "vector") {
|
|
204
|
+
kwHits = allowedDocIds && allowedDocIds.size === 0 ? [] : ftsHits(queryText, cap, filters);
|
|
205
|
+
}
|
|
206
|
+
// Rank-decayed keyword relevance in 0..1, so keyword-only hits still carry a
|
|
207
|
+
// comparable score instead of the old flat 1.0 / RRF value.
|
|
208
|
+
const kwScore = new Map();
|
|
209
|
+
kwHits.forEach((h, rank) => kwScore.set(h.key, 1 - rank / (kwHits.length + 1)));
|
|
210
|
+
const vectorScore = new Map();
|
|
211
|
+
for (const h of vectorHits)
|
|
212
|
+
vectorScore.set(h.key, h.score);
|
|
213
|
+
let ordered;
|
|
214
|
+
if (mode === "vector") {
|
|
215
|
+
ordered = vectorHits.slice(0, topK).map((h) => h.key);
|
|
216
|
+
}
|
|
217
|
+
else if (mode === "keyword") {
|
|
218
|
+
ordered = kwHits.slice(0, topK).map((h) => h.key);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
ordered = [...rrfMerge([vectorHits, kwHits]).entries()]
|
|
222
|
+
.sort((a, b) => b[1] - a[1])
|
|
223
|
+
.map(([key]) => key)
|
|
224
|
+
.slice(0, topK);
|
|
154
225
|
}
|
|
226
|
+
// Threshold on the final score, in every mode — not just on the vector leg.
|
|
227
|
+
const finalIds = ordered
|
|
228
|
+
.map((key) => ({ key, score: Math.max(vectorScore.get(key) ?? 0, kwScore.get(key) ?? 0) }))
|
|
229
|
+
.filter((f) => f.score >= minScore);
|
|
155
230
|
if (finalIds.length === 0)
|
|
156
231
|
return [];
|
|
157
232
|
const ids = finalIds.map((f) => f.key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-search.js","sourceRoot":"","sources":["../../src/rag/vector-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
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,8 @@ 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). */
|
|
47
50
|
export declare function getSessionTranscript(sessionId: string, limit?: number): SessionEntry[];
|
|
48
51
|
/** Read entries from a plugin-written .jsonl file. */
|
|
49
52
|
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;+EAC+E;AAC/E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,YAAY,EAAE,CAmBjF;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"}
|
|
@@ -15,12 +15,39 @@ import * as os from "os";
|
|
|
15
15
|
import * as path from "path";
|
|
16
16
|
import { DatabaseSync } from "node:sqlite";
|
|
17
17
|
import { ingestText } from "../rag/pipeline.js";
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Where opencode keeps its session/message history, in probe order.
|
|
20
|
+
* Read on every call (not frozen at import) so OPENCODE_DB can be pointed at a
|
|
21
|
+
* different store — or a fixture — at any time. Opencode uses the POSIX XDG
|
|
22
|
+
* path on Linux/macOS and %LOCALAPPDATA% on Windows.
|
|
23
|
+
*/
|
|
22
24
|
export function opencodeDbs() {
|
|
23
|
-
|
|
25
|
+
const home = os.homedir();
|
|
26
|
+
const candidates = [
|
|
27
|
+
process.env.OPENCODE_DB,
|
|
28
|
+
process.env.OPENCODE_DB_LOCAL,
|
|
29
|
+
path.join(home, ".local", "share", "opencode", "opencode.db"),
|
|
30
|
+
path.join(home, ".local", "share", "opencode", "opencode-local.db"),
|
|
31
|
+
process.platform === "win32"
|
|
32
|
+
? path.join(process.env.LOCALAPPDATA ?? path.join(home, "AppData", "Local"), "opencode", "opencode.db")
|
|
33
|
+
: undefined,
|
|
34
|
+
process.platform === "win32"
|
|
35
|
+
? path.join(process.env.LOCALAPPDATA ?? path.join(home, "AppData", "Local"), "opencode", "opencode-local.db")
|
|
36
|
+
: undefined,
|
|
37
|
+
];
|
|
38
|
+
const seen = new Set();
|
|
39
|
+
const out = [];
|
|
40
|
+
for (const p of candidates) {
|
|
41
|
+
if (!p)
|
|
42
|
+
continue;
|
|
43
|
+
const abs = path.resolve(p);
|
|
44
|
+
if (seen.has(abs))
|
|
45
|
+
continue;
|
|
46
|
+
seen.add(abs);
|
|
47
|
+
if (fs.existsSync(abs))
|
|
48
|
+
out.push(abs);
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
24
51
|
}
|
|
25
52
|
function normalizeDir(d) {
|
|
26
53
|
return d.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
@@ -52,8 +79,15 @@ function assertOpencodeSchema(db, table, required) {
|
|
|
52
79
|
"Update mcp-rag-memory to a version matching your opencode.");
|
|
53
80
|
}
|
|
54
81
|
}
|
|
55
|
-
function
|
|
82
|
+
function openReadonly(dbPath) {
|
|
56
83
|
const db = new DatabaseSync(dbPath, { readOnly: true });
|
|
84
|
+
// opencode writes to this DB continuously; without a busy timeout a read taken
|
|
85
|
+
// during a write lock fails instantly with SQLITE_BUSY.
|
|
86
|
+
db.exec("PRAGMA busy_timeout = 5000;");
|
|
87
|
+
return db;
|
|
88
|
+
}
|
|
89
|
+
function querySessions(dbPath, limit) {
|
|
90
|
+
const db = openReadonly(dbPath);
|
|
57
91
|
try {
|
|
58
92
|
assertOpencodeSchema(db, "session", ["id", "directory", "time_updated"]);
|
|
59
93
|
const cols = tableColumns(db, "session");
|
|
@@ -106,35 +140,83 @@ export async function ingestLatest(opts = {}) {
|
|
|
106
140
|
const res = await ingestSession(hit.id, { limit: opts.limit, source: opts.source });
|
|
107
141
|
return { found: true, sessionId: hit.id, entries: res.entries, messages: res.messages, newDocs: res.newDocs, deduplicated: res.deduplicated, skipped: res.skipped };
|
|
108
142
|
}
|
|
109
|
-
/**
|
|
143
|
+
/** Hard cap on user messages read from one session (a whole session can be huge). */
|
|
144
|
+
const DEFAULT_MAX_MESSAGES = 500;
|
|
145
|
+
/** 64 MB: far above any real session log, far below what would exhaust the heap. */
|
|
146
|
+
const DEFAULT_MAX_LOG_BYTES = 64 * 1024 * 1024;
|
|
147
|
+
function maxMessages() {
|
|
148
|
+
const raw = Number(process.env.RAG_SESSION_MAX_MSGS);
|
|
149
|
+
return Number.isFinite(raw) && raw > 0 ? Math.trunc(raw) : DEFAULT_MAX_MESSAGES;
|
|
150
|
+
}
|
|
151
|
+
/** Upper bound on a plugin-written .jsonl log before we refuse to read it. */
|
|
152
|
+
function maxJsonlBytes() {
|
|
153
|
+
const raw = Number(process.env.RAG_SESSION_MAX_LOG_BYTES);
|
|
154
|
+
return Number.isFinite(raw) && raw > 0 ? Math.trunc(raw) : DEFAULT_MAX_LOG_BYTES;
|
|
155
|
+
}
|
|
156
|
+
/** Extract user-typed text from one session, oldest first. Searches the global
|
|
157
|
+
* and local opencode DBs (a session may live in either, depending on mode). */
|
|
110
158
|
export function getSessionTranscript(sessionId, limit = 0) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
159
|
+
const dbs = opencodeDbs();
|
|
160
|
+
if (dbs.length === 0) {
|
|
161
|
+
throw new Error("opencode DB not found. Set OPENCODE_DB (and/or OPENCODE_DB_LOCAL) to the path of " +
|
|
162
|
+
"opencode's opencode.db, or use 'ingest-dir' / 'ingest-text' instead.");
|
|
163
|
+
}
|
|
164
|
+
for (const dbPath of dbs) {
|
|
165
|
+
const entries = transcriptFromDb(dbPath, sessionId, limit);
|
|
166
|
+
if (entries.length > 0)
|
|
167
|
+
return entries;
|
|
168
|
+
}
|
|
169
|
+
// Nothing anywhere: distinguish "unknown session" from "no user messages".
|
|
170
|
+
for (const dbPath of dbs) {
|
|
171
|
+
if (sessionExists(dbPath, sessionId)) {
|
|
172
|
+
throw new Error(`Session ${sessionId} has no user messages to ingest.`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
throw new Error(`Session ${sessionId} not found in any opencode DB (${dbs.join(", ")}).`);
|
|
176
|
+
}
|
|
177
|
+
function sessionExists(dbPath, sessionId) {
|
|
178
|
+
const db = openReadonly(dbPath);
|
|
179
|
+
try {
|
|
180
|
+
const row = db.prepare("SELECT 1 AS ok FROM session WHERE id = ?").get(sessionId);
|
|
181
|
+
return row !== undefined;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
db.close();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
function transcriptFromDb(dbPath, sessionId, limit) {
|
|
191
|
+
const db = openReadonly(dbPath);
|
|
114
192
|
const entries = [];
|
|
115
193
|
try {
|
|
116
194
|
assertOpencodeSchema(db, "message", ["id", "session_id", "time_created", "data"]);
|
|
117
195
|
assertOpencodeSchema(db, "part", ["message_id", "data"]);
|
|
196
|
+
const cap = limit > 0 ? limit : maxMessages();
|
|
118
197
|
const msgs = db
|
|
119
|
-
.prepare(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
198
|
+
.prepare(
|
|
199
|
+
// json_valid() guards both sides: json_extract on a malformed blob raises
|
|
200
|
+
// "malformed JSON" and killed the whole read, so one corrupt part lost
|
|
201
|
+
// every other message in the session.
|
|
202
|
+
`SELECT id, time_created, data FROM message
|
|
203
|
+
WHERE session_id = ? AND json_valid(data)
|
|
204
|
+
AND json_extract(data, '$.role') = 'user'
|
|
205
|
+
ORDER BY time_created ASC
|
|
206
|
+
LIMIT ?`)
|
|
207
|
+
.all(sessionId, cap);
|
|
208
|
+
// Pull only text parts in SQL — a session holds multi-MB image/tool blobs and
|
|
209
|
+
// parsing every one of them just to throw it away was the memory spike.
|
|
210
|
+
const partsStatement = db.prepare(`SELECT json_extract(data, '$.text') AS text FROM part
|
|
211
|
+
WHERE message_id = ? AND json_valid(data)
|
|
212
|
+
AND json_extract(data, '$.type') = 'text'`);
|
|
124
213
|
for (const m of msgs) {
|
|
125
214
|
if (limit > 0 && entries.length >= limit)
|
|
126
215
|
break;
|
|
127
|
-
const parts = partsStatement.all(m.id);
|
|
128
216
|
const texts = [];
|
|
129
|
-
for (const p of
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if (d.type === "text" && d.text)
|
|
133
|
-
texts.push(String(d.text));
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
/* unparseable part — skip */
|
|
137
|
-
}
|
|
217
|
+
for (const p of partsStatement.all(m.id)) {
|
|
218
|
+
if (typeof p.text === "string" && p.text.trim())
|
|
219
|
+
texts.push(p.text);
|
|
138
220
|
}
|
|
139
221
|
if (texts.length > 0)
|
|
140
222
|
entries.push({ sessionId, ts: m.time_created, content: texts.join("\n") });
|
|
@@ -149,6 +231,13 @@ export function getSessionTranscript(sessionId, limit = 0) {
|
|
|
149
231
|
export function readJsonl(file) {
|
|
150
232
|
if (!fs.existsSync(file))
|
|
151
233
|
throw new Error(`Not found: ${file}`);
|
|
234
|
+
// Bound the read: the plugin appends for the life of a session, so a long-running
|
|
235
|
+
// .jsonl grows without limit and readFileSync would pull all of it into memory.
|
|
236
|
+
const size = fs.statSync(file).size;
|
|
237
|
+
if (size > maxJsonlBytes()) {
|
|
238
|
+
throw new Error(`Session log too large (${size} bytes > limit ${maxJsonlBytes()}): ${file}. ` +
|
|
239
|
+
`Rotate or truncate the log, or raise RAG_SESSION_MAX_LOG_BYTES.`);
|
|
240
|
+
}
|
|
152
241
|
const raw = fs.readFileSync(file, "utf8");
|
|
153
242
|
const base = path.basename(file).replace(/\.jsonl$/, "");
|
|
154
243
|
const entries = [];
|
|
@@ -249,10 +338,14 @@ export async function ingestEntries(entries, source) {
|
|
|
249
338
|
continue;
|
|
250
339
|
}
|
|
251
340
|
const content = condenseInput(original);
|
|
341
|
+
// Scope the dedup hash to (source, session, ts): without it, the same short
|
|
342
|
+
// message ("ok", "continue") typed in two sessions collapsed into one
|
|
343
|
+
// document and the second session silently disappeared from the store.
|
|
252
344
|
const res = await ingestText(content, `${e.sessionId.slice(-12)}-${e.ts}`, {
|
|
253
345
|
source,
|
|
254
346
|
contentType: "text",
|
|
255
347
|
metadata: { source, session_id: e.sessionId, ts: e.ts, condensed: content !== original },
|
|
348
|
+
dedupScope: `${source}:${e.sessionId}:${e.ts}`,
|
|
256
349
|
});
|
|
257
350
|
if (res.deduplicated)
|
|
258
351
|
deduplicated++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/session/transcript.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/session/transcript.ts"],"names":[],"mappings":"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"}
|