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.
Files changed (40) hide show
  1. package/.env.example +3 -1
  2. package/LICENSE +21 -0
  3. package/README.md +151 -16
  4. package/dist/cli.js +102 -34
  5. package/dist/db/database.d.ts +10 -2
  6. package/dist/db/database.d.ts.map +1 -1
  7. package/dist/db/database.js +119 -18
  8. package/dist/db/database.js.map +1 -1
  9. package/dist/env.js +32 -12
  10. package/dist/mcp/rag-server.js +140 -39
  11. package/dist/mcp/rag-server.js.map +1 -1
  12. package/dist/memory/memory.d.ts +5 -1
  13. package/dist/memory/memory.d.ts.map +1 -1
  14. package/dist/memory/memory.js +245 -101
  15. package/dist/memory/memory.js.map +1 -1
  16. package/dist/rag/chunker.d.ts +7 -0
  17. package/dist/rag/chunker.d.ts.map +1 -1
  18. package/dist/rag/chunker.js +119 -11
  19. package/dist/rag/chunker.js.map +1 -1
  20. package/dist/rag/embeddings.d.ts +25 -0
  21. package/dist/rag/embeddings.d.ts.map +1 -1
  22. package/dist/rag/embeddings.js +56 -4
  23. package/dist/rag/embeddings.js.map +1 -1
  24. package/dist/rag/pipeline.d.ts +19 -2
  25. package/dist/rag/pipeline.d.ts.map +1 -1
  26. package/dist/rag/pipeline.js +212 -39
  27. package/dist/rag/pipeline.js.map +1 -1
  28. package/dist/rag/reindex.d.ts +27 -0
  29. package/dist/rag/reindex.d.ts.map +1 -0
  30. package/dist/rag/reindex.js +138 -0
  31. package/dist/rag/reindex.js.map +1 -0
  32. package/dist/rag/vector-search.d.ts +26 -1
  33. package/dist/rag/vector-search.d.ts.map +1 -1
  34. package/dist/rag/vector-search.js +207 -65
  35. package/dist/rag/vector-search.js.map +1 -1
  36. package/dist/session/transcript.d.ts +15 -5
  37. package/dist/session/transcript.d.ts.map +1 -1
  38. package/dist/session/transcript.js +152 -25
  39. package/dist/session/transcript.js.map +1 -1
  40. 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
- const SEARCH_MODE = process.env.SEARCH_MODE === "vector" || process.env.SEARCH_MODE === "keyword"
4
- ? process.env.SEARCH_MODE
5
- : "hybrid";
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 every write. */
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
- for (const r of rows) {
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 rows) {
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
- const score = dotProduct(queryVec, r.vec);
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
- /** BM25 keyword hits via FTS5, best-first. Returns empty when the query has no terms. */
69
- function ftsHits(queryText, limit) {
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
- WHERE chunks_fts MATCH ?
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.join(" "), limit);
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 syntax — degrade to vector-only.
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 cap = Math.max(topK * 2, LIST_CAP);
114
- let vectorHits = [];
115
- if (SEARCH_MODE !== "keyword") {
116
- vectorHits = vectorSearch(queryVec, { topK: cap, minScore, collection: "chunks" });
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 idPlaceholders = finalIds.map(() => "?").join(", ");
139
- const clauses = [`c.id IN (${idPlaceholders})`];
140
- const params = finalIds.map((f) => f.key);
218
+ const clauses = [];
219
+ const params = [];
141
220
  if (filters.docId) {
142
- clauses.push("c.doc_id = ?");
221
+ clauses.push("id = ?");
143
222
  params.push(filters.docId);
144
223
  }
145
224
  if (filters.source) {
146
- clauses.push("d.source = ?");
225
+ clauses.push("source = ?");
147
226
  params.push(filters.source);
148
227
  }
149
228
  const allowed = db
150
- .prepare(`SELECT c.id FROM chunks c JOIN documents d ON d.id = c.doc_id WHERE ${clauses.join(" AND ")}`)
229
+ .prepare(`SELECT id FROM documents WHERE ${clauses.join(" AND ")}`)
151
230
  .all(...params);
152
- const allowedSet = new Set(allowed.map((r) => r.id));
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
- return [
171
- {
172
- id: row.id,
173
- docId: row.doc_id,
174
- docTitle: row.doc_title,
175
- chunkIndex: row.idx,
176
- content: row.content,
177
- score: f.score,
178
- tokenCount: row.token_count,
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
- /** Where opencode keeps its session/message history. Override via OPENCODE_DB. */
14
- export declare const OPENCODE_DB: string;
15
- /** Desktop/local-mode db (per-project sessions) used as a fallback source. */
16
- export declare const OPENCODE_DB_LOCAL: string;
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,kFAAkF;AAClF,eAAO,MAAM,WAAW,EAAE,MACwE,CAAC;AAEnG,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,EAAE,MAC8E,CAAC;AAE/G,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAkED,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;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,YAAY,EAAE,CAkCjF;AAED,sDAAsD;AACtD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAsBtD;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,CAoBvG;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"}
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"}