@monoes/memory 1.0.10 → 1.0.12

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 (42) hide show
  1. package/README.md +10 -11
  2. package/dist/controller-registry.d.ts +7 -5
  3. package/dist/controller-registry.d.ts.map +1 -1
  4. package/dist/controller-registry.js +8 -6
  5. package/dist/controller-registry.js.map +1 -1
  6. package/dist/index.d.ts +38 -10
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +39 -12
  9. package/dist/index.js.map +1 -1
  10. package/dist/migration.d.ts +3 -2
  11. package/dist/migration.d.ts.map +1 -1
  12. package/dist/migration.js +3 -2
  13. package/dist/migration.js.map +1 -1
  14. package/dist/sql-backend.d.ts +81 -0
  15. package/dist/sql-backend.d.ts.map +1 -0
  16. package/dist/sql-backend.js +553 -0
  17. package/dist/sql-backend.js.map +1 -0
  18. package/dist/sql-driver.d.ts +135 -0
  19. package/dist/sql-driver.d.ts.map +1 -0
  20. package/dist/sql-driver.js +187 -0
  21. package/dist/sql-driver.js.map +1 -0
  22. package/dist/sql-schema.d.ts +74 -0
  23. package/dist/sql-schema.d.ts.map +1 -0
  24. package/dist/sql-schema.js +178 -0
  25. package/dist/sql-schema.js.map +1 -0
  26. package/dist/sqlite-backend.d.ts +16 -106
  27. package/dist/sqlite-backend.d.ts.map +1 -1
  28. package/dist/sqlite-backend.js +53 -725
  29. package/dist/sqlite-backend.js.map +1 -1
  30. package/dist/sqljs-backend.d.ts +26 -98
  31. package/dist/sqljs-backend.d.ts.map +1 -1
  32. package/dist/sqljs-backend.js +75 -609
  33. package/dist/sqljs-backend.js.map +1 -1
  34. package/dist/types.d.ts +5 -2
  35. package/dist/types.d.ts.map +1 -1
  36. package/dist/types.js +5 -2
  37. package/dist/types.js.map +1 -1
  38. package/package.json +5 -4
  39. package/dist/lancedb-backend.d.ts +0 -79
  40. package/dist/lancedb-backend.d.ts.map +0 -1
  41. package/dist/lancedb-backend.js +0 -567
  42. package/dist/lancedb-backend.js.map +0 -1
@@ -1,567 +0,0 @@
1
- /**
2
- * LanceDB Backend - IMemoryBackend via @lancedb/lancedb
3
- *
4
- * Uses LanceDB's columnar
5
- * format, native IVF-PQ ANN search, SQL predicate push-down, and optional
6
- * full-text search — all in one embedded Rust engine with no server process.
7
- *
8
- * Loaded dynamically: install @lancedb/lancedb + apache-arrow to enable.
9
- *
10
- * @module v1/memory/lancedb-backend
11
- */
12
- import { EventEmitter } from 'node:events';
13
- import { join } from 'node:path';
14
- import { homedir } from 'node:os';
15
- import { CacheManager } from './cache-manager.js';
16
- // ===== Optional dynamic import =====
17
- let lancedb;
18
- let importError = null;
19
- async function ensureLanceDB() {
20
- if (lancedb)
21
- return;
22
- if (importError)
23
- throw importError;
24
- try {
25
- lancedb = await import('@lancedb/lancedb');
26
- }
27
- catch (err) {
28
- importError = new Error(`LanceDB not installed. Run:\n npm install @lancedb/lancedb apache-arrow\n\nOriginal error: ${err.message}`);
29
- throw importError;
30
- }
31
- }
32
- // ===== Helpers =====
33
- function sqlStr(s) {
34
- return `'${s.replace(/'/g, "''")}'`;
35
- }
36
- // LanceDB table names allow only alphanumerics, underscores, hyphens, and
37
- // periods. Namespaces like 'patterns:short_term' contain a colon and would
38
- // otherwise crash the native binding with an unrecoverable Rust panic
39
- // (InvalidTableName) — sanitize before using a namespace as a table name.
40
- function toTableName(namespace) {
41
- return namespace.replace(/[^A-Za-z0-9_.-]/g, '_');
42
- }
43
- function toRecord(entry, dim) {
44
- return {
45
- id: entry.id,
46
- key: entry.key,
47
- content: entry.content,
48
- type: entry.type,
49
- namespace: entry.namespace,
50
- ownerId: entry.ownerId ?? '',
51
- accessLevel: entry.accessLevel,
52
- tagsStr: entry.tags.length ? `|${entry.tags.join('|')}|` : '||',
53
- refsStr: JSON.stringify(entry.references ?? []),
54
- metadataStr: JSON.stringify(entry.metadata ?? {}),
55
- vector: entry.embedding ? Array.from(entry.embedding) : new Array(dim).fill(0),
56
- createdAt: entry.createdAt,
57
- updatedAt: entry.updatedAt,
58
- lastAccessedAt: entry.lastAccessedAt,
59
- expiresAt: entry.expiresAt ?? 0,
60
- eventAt: entry.eventAt ?? 0,
61
- version: entry.version,
62
- accessCount: entry.accessCount,
63
- importanceScore: entry.importanceScore ?? 1.0,
64
- };
65
- }
66
- function fromRecord(r) {
67
- const tags = String(r.tagsStr ?? '').split('|').filter(Boolean);
68
- let references = [];
69
- try {
70
- references = JSON.parse(String(r.refsStr ?? '[]'));
71
- }
72
- catch { /* leave empty */ }
73
- let metadata = {};
74
- try {
75
- metadata = JSON.parse(String(r.metadataStr ?? '{}'));
76
- }
77
- catch { /* leave empty */ }
78
- return {
79
- id: String(r.id),
80
- key: String(r.key),
81
- content: String(r.content),
82
- type: r.type,
83
- namespace: String(r.namespace),
84
- ownerId: r.ownerId ? String(r.ownerId) : undefined,
85
- accessLevel: r.accessLevel,
86
- tags,
87
- references,
88
- metadata,
89
- // r.vector comes back from LanceDB as an Apache Arrow Vector, not a plain
90
- // JS array — Array.isArray(r.vector) is always false for it, so the old
91
- // check silently discarded every real embedding on read, which is what
92
- // caused loadPatterns() to see 0-length vectors and fail the HNSW
93
- // dimension check. Arrow Vectors are iterable/array-like (support
94
- // .length and Array.from), so check .length directly instead.
95
- embedding: r.vector != null && r.vector.length > 0 ? new Float32Array(Array.from(r.vector)) : undefined,
96
- createdAt: Number(r.createdAt),
97
- updatedAt: Number(r.updatedAt),
98
- lastAccessedAt: Number(r.lastAccessedAt),
99
- expiresAt: Number(r.expiresAt) || undefined,
100
- eventAt: Number(r.eventAt) || undefined,
101
- version: Number(r.version),
102
- accessCount: Number(r.accessCount),
103
- importanceScore: Number(r.importanceScore),
104
- };
105
- }
106
- function buildFilter(q) {
107
- const conds = [];
108
- if (q.namespace)
109
- conds.push(`namespace = ${sqlStr(q.namespace)}`);
110
- if (q.key)
111
- conds.push(`key = ${sqlStr(q.key)}`);
112
- if (q.keyPrefix)
113
- conds.push(`starts_with(key, ${sqlStr(q.keyPrefix)})`);
114
- if (q.memoryType)
115
- conds.push(`type = ${sqlStr(q.memoryType)}`);
116
- if (q.ownerId)
117
- conds.push(`ownerId = ${sqlStr(q.ownerId)}`);
118
- if (q.tags?.length) {
119
- for (const t of q.tags)
120
- conds.push(`contains(tagsStr, ${sqlStr(`|${t}|`)})`);
121
- }
122
- if (q.createdAfter)
123
- conds.push(`createdAt >= ${q.createdAfter}`);
124
- if (q.createdBefore)
125
- conds.push(`createdAt <= ${q.createdBefore}`);
126
- if (q.updatedAfter)
127
- conds.push(`updatedAt >= ${q.updatedAfter}`);
128
- if (q.updatedBefore)
129
- conds.push(`updatedAt <= ${q.updatedBefore}`);
130
- if (q.eventAfter)
131
- conds.push(`eventAt >= ${q.eventAfter}`);
132
- if (q.eventBefore)
133
- conds.push(`eventAt <= ${q.eventBefore}`);
134
- if (!q.includeExpired)
135
- conds.push(`(expiresAt = 0 OR expiresAt > ${Date.now()})`);
136
- return conds.length ? conds.join(' AND ') : '';
137
- }
138
- // ===== Backend =====
139
- export class LanceDBBackend extends EventEmitter {
140
- config;
141
- db = null;
142
- // table per namespace, lazy-created
143
- tables = new Map();
144
- ftsBuilt = new Set();
145
- initialized = false;
146
- queryCount = 0;
147
- queryTotalMs = 0;
148
- searchCount = 0;
149
- searchTotalMs = 0;
150
- // Read-through cache for get()/getByKey() — LanceDB has no index-free point
151
- // lookup faster than a table scan, so caching hot reads avoids repeated
152
- // scans across every open namespace table (see get()'s toSearch loop).
153
- readCache = new CacheManager({ maxSize: 500, ttl: 60_000 });
154
- constructor(config = {}) {
155
- super();
156
- this.config = {
157
- dbPath: config.dbPath ?? join(homedir(), '.monomind', 'lancedb'),
158
- namespace: config.namespace ?? 'default',
159
- vectorDimension: config.vectorDimension ?? 1536,
160
- enableFts: config.enableFts ?? false,
161
- nProbes: config.nProbes ?? 20,
162
- embeddingGenerator: config.embeddingGenerator,
163
- };
164
- }
165
- /** Cache key for getByKey() lookups — distinct namespace from id cache keys. */
166
- static byKeyCacheKey(namespace, key) {
167
- return `byKey:${namespace}:${key}`;
168
- }
169
- /** Invalidate both the id-keyed and namespace:key-keyed cache entries for an entry. */
170
- invalidateCache(entry) {
171
- this.readCache.delete(entry.id);
172
- this.readCache.delete(LanceDBBackend.byKeyCacheKey(entry.namespace, entry.key));
173
- }
174
- async initialize() {
175
- if (this.initialized)
176
- return;
177
- await ensureLanceDB();
178
- this.db = await lancedb.connect(this.config.dbPath);
179
- this.initialized = true;
180
- this.emit('initialized');
181
- }
182
- async shutdown() {
183
- this.tables.clear();
184
- this.readCache.shutdown();
185
- this.db = null;
186
- this.initialized = false;
187
- this.emit('shutdown');
188
- }
189
- // ===== Table management =====
190
- /** Open an existing table. Returns null without creating if the namespace doesn't exist. */
191
- async openExistingTable(namespace) {
192
- if (this.tables.has(namespace))
193
- return this.tables.get(namespace);
194
- if (!this.initialized || !this.db)
195
- throw new Error('LanceDBBackend not initialized — call initialize() first');
196
- const tableName = toTableName(namespace);
197
- const tableNames = await this.db.tableNames();
198
- if (!tableNames.includes(tableName))
199
- return null;
200
- const table = await this.db.openTable(tableName);
201
- void this.sweepExpired(table);
202
- this.tables.set(namespace, table);
203
- return table;
204
- }
205
- /** Physically remove expired rows — reads only filter them, so without this
206
- * the store grows without bound. Runs once per table per process, fire-and-
207
- * forget; a failed sweep never blocks the caller's read/write.
208
- * monolean: no fragment compaction (table.optimize) — add if .lance dirs
209
- * grow noticeably despite sweeps. */
210
- async sweepExpired(table) {
211
- try {
212
- await table.delete(`expiresAt > 0 AND expiresAt < ${Date.now()}`);
213
- }
214
- catch { /* best-effort */ }
215
- }
216
- /** Open or create a table — call only from write paths (store, bulkInsert). */
217
- async getTable(namespace) {
218
- if (this.tables.has(namespace))
219
- return this.tables.get(namespace);
220
- if (!this.initialized || !this.db)
221
- throw new Error('LanceDBBackend not initialized — call initialize() first');
222
- const tableName = toTableName(namespace);
223
- const tableNames = await this.db.tableNames();
224
- let table;
225
- if (tableNames.includes(tableName)) {
226
- table = await this.db.openTable(tableName);
227
- void this.sweepExpired(table);
228
- }
229
- else {
230
- // Create with a placeholder row so the schema is fully established.
231
- // The placeholder is deleted immediately after creation.
232
- const dim = this.config.vectorDimension;
233
- const placeholder = {
234
- id: '__init__',
235
- key: '__init__',
236
- content: '',
237
- type: 'working',
238
- namespace,
239
- ownerId: '',
240
- accessLevel: 'private',
241
- tagsStr: '||',
242
- refsStr: '[]',
243
- metadataStr: '{}',
244
- vector: new Array(dim).fill(0),
245
- createdAt: 0,
246
- updatedAt: 0,
247
- lastAccessedAt: 0,
248
- expiresAt: 0,
249
- eventAt: 0,
250
- version: 0,
251
- accessCount: 0,
252
- importanceScore: 0,
253
- };
254
- table = await this.db.createTable(tableName, [placeholder]);
255
- await table.delete(`id = '__init__'`);
256
- }
257
- this.tables.set(namespace, table);
258
- return table;
259
- }
260
- // ===== IMemoryBackend implementation =====
261
- async store(entry) {
262
- // Fall back to the configured default namespace, matching every other
263
- // method here (query/count/search) — store() was the one path that
264
- // didn't, so an entry with no namespace crashed instead of using the
265
- // default table.
266
- const ns = entry.namespace ?? this.config.namespace;
267
- const table = await this.getTable(ns);
268
- // Persist the resolved namespace, not entry.namespace — otherwise an
269
- // entry stored without an explicit namespace lands in the right table
270
- // but its own namespace column stays unset, so query({namespace: ns})
271
- // can never find it again.
272
- const record = toRecord({ ...entry, namespace: ns }, this.config.vectorDimension);
273
- // Upsert: delete any existing row with same id, then insert
274
- await table.delete(`id = ${sqlStr(entry.id)}`);
275
- await table.add([record]);
276
- // Invalidate stale reads (this is also how update() takes effect, since
277
- // update() re-stores the full entry rather than patching a row in place).
278
- this.invalidateCache({ id: entry.id, namespace: ns, key: entry.key });
279
- // Build FTS index on first real write (LanceDB needs at least 1 row)
280
- if (this.config.enableFts && !this.ftsBuilt.has(ns)) {
281
- try {
282
- await table.createIndex({
283
- config: lancedb.Index.fts(['content', 'key']),
284
- });
285
- this.ftsBuilt.add(ns);
286
- }
287
- catch {
288
- // FTS build is best-effort; search falls back to vector-only
289
- }
290
- }
291
- this.emit('entry:stored', { id: entry.id, namespace: entry.namespace });
292
- }
293
- async get(id) {
294
- const cached = this.readCache.get(id);
295
- if (cached)
296
- return cached;
297
- // Search default namespace first, then any other open tables (deduped).
298
- // openExistingTable is used to avoid creating phantom tables during reads.
299
- const toSearch = [...new Set([this.config.namespace, ...this.tables.keys()])];
300
- for (const ns of toSearch) {
301
- try {
302
- const table = await this.openExistingTable(ns);
303
- if (!table)
304
- continue;
305
- const rows = await table.query()
306
- .where(`id = ${sqlStr(id)}`)
307
- .limit(1)
308
- .toArray();
309
- if (rows.length > 0) {
310
- const entry = fromRecord(rows[0]);
311
- this.readCache.set(id, entry);
312
- return entry;
313
- }
314
- }
315
- catch { /* ignore per-namespace errors */ }
316
- }
317
- return null;
318
- }
319
- async getByKey(namespace, key) {
320
- const cacheKey = LanceDBBackend.byKeyCacheKey(namespace, key);
321
- const cached = this.readCache.get(cacheKey);
322
- if (cached)
323
- return cached;
324
- try {
325
- const table = await this.openExistingTable(namespace);
326
- if (!table)
327
- return null;
328
- const rows = await table.query()
329
- .where(`namespace = ${sqlStr(namespace)} AND key = ${sqlStr(key)}`)
330
- .limit(1)
331
- .toArray();
332
- if (rows.length === 0)
333
- return null;
334
- const entry = fromRecord(rows[0]);
335
- this.readCache.set(cacheKey, entry);
336
- this.readCache.set(entry.id, entry);
337
- return entry;
338
- }
339
- catch (e) {
340
- if (process.env.DEBUG || process.env.MONOMIND_DEBUG)
341
- console.error('[lancedb-backend] getByKey failed:', e);
342
- return null;
343
- }
344
- }
345
- async update(id, update) {
346
- const existing = await this.get(id);
347
- if (!existing)
348
- return null;
349
- const updated = {
350
- ...existing,
351
- ...(update.content !== undefined && { content: update.content }),
352
- ...(update.tags !== undefined && { tags: update.tags }),
353
- ...(update.metadata !== undefined && { metadata: update.metadata }),
354
- ...(update.accessLevel !== undefined && { accessLevel: update.accessLevel }),
355
- ...(update.expiresAt !== undefined && { expiresAt: update.expiresAt }),
356
- ...(update.references !== undefined && { references: update.references }),
357
- updatedAt: Date.now(),
358
- version: existing.version + 1,
359
- };
360
- await this.store(updated);
361
- this.emit('entry:updated', { id });
362
- return updated;
363
- }
364
- async delete(id) {
365
- // Check existence first — lance.delete() returns void, can't tell if row matched
366
- const existing = await this.get(id);
367
- if (!existing)
368
- return false;
369
- try {
370
- const table = await this.getTable(existing.namespace);
371
- await table.delete(`id = ${sqlStr(id)}`);
372
- this.invalidateCache(existing);
373
- this.emit('entry:deleted', { id, namespace: existing.namespace });
374
- return true;
375
- }
376
- catch (e) {
377
- if (process.env.DEBUG || process.env.MONOMIND_DEBUG)
378
- console.error('[lancedb-backend] delete failed:', e);
379
- return false;
380
- }
381
- }
382
- async query(query) {
383
- const ns = query.namespace ?? this.config.namespace;
384
- const t0 = Date.now();
385
- try {
386
- const table = await this.openExistingTable(ns);
387
- if (!table)
388
- return [];
389
- const filter = buildFilter(query);
390
- let q = table.query();
391
- if (filter)
392
- q = q.where(filter);
393
- q = q.limit(query.limit ?? 100);
394
- if (query.offset)
395
- q = q.offset(query.offset);
396
- const rows = await q.toArray();
397
- this.queryCount++;
398
- this.queryTotalMs += Date.now() - t0;
399
- return rows.map(fromRecord);
400
- }
401
- catch (e) {
402
- if (process.env.DEBUG || process.env.MONOMIND_DEBUG)
403
- console.error('[lancedb-backend] query failed:', e);
404
- return [];
405
- }
406
- }
407
- async search(embedding, options) {
408
- const ns = options.filters?.namespace ?? this.config.namespace;
409
- const t0 = Date.now();
410
- try {
411
- const table = await this.openExistingTable(ns);
412
- if (!table)
413
- return [];
414
- const queryVector = Array.from(embedding);
415
- const k = options.k ?? 10;
416
- // over-fetch for threshold filtering, then trim; single predicate (chaining may overwrite)
417
- const preFilter = `namespace = ${sqlStr(ns)} AND (expiresAt = 0 OR expiresAt > ${Date.now()})`;
418
- // LanceDB defaults to L2 distance — the score formula below assumes cosine
419
- // (score = 1 - distance); without this, related pairs score ~0.1 and get
420
- // filtered by any sane threshold.
421
- let q = table.search(queryVector).distanceType('cosine')
422
- .nprobes(this.config.nProbes).limit(k * 2).where(preFilter);
423
- const rows = await q.toArray();
424
- const threshold = options.threshold ?? 0;
425
- const results = rows
426
- .map((r) => {
427
- // LanceDB _distance: cosine distance (0=identical, 1=orthogonal, 2=opposite)
428
- const distance = Number(r._distance ?? 0);
429
- const score = Math.max(0, 1 - distance);
430
- return { entry: fromRecord(r), score, distance };
431
- })
432
- .filter(r => r.score >= threshold)
433
- .slice(0, k);
434
- this.searchCount++;
435
- this.searchTotalMs += Date.now() - t0;
436
- return results;
437
- }
438
- catch (e) {
439
- if (process.env.DEBUG || process.env.MONOMIND_DEBUG)
440
- console.error('[lancedb-backend] search failed:', e);
441
- return [];
442
- }
443
- }
444
- async bulkInsert(entries) {
445
- if (!entries.length)
446
- return;
447
- // Group by namespace to minimize table opens
448
- const byNs = new Map();
449
- for (const e of entries) {
450
- const list = byNs.get(e.namespace) ?? [];
451
- list.push(e);
452
- byNs.set(e.namespace, list);
453
- }
454
- const dim = this.config.vectorDimension;
455
- for (const [ns, group] of byNs) {
456
- const table = await this.getTable(ns);
457
- const ids = group.map(e => sqlStr(e.id)).join(', ');
458
- await table.delete(`id IN (${ids})`);
459
- await table.add(group.map(e => toRecord(e, dim)));
460
- for (const e of group)
461
- this.invalidateCache({ id: e.id, namespace: ns, key: e.key });
462
- }
463
- }
464
- async bulkDelete(ids) {
465
- if (!ids.length)
466
- return 0;
467
- const idList = ids.map(sqlStr).join(', ');
468
- // Count before deleting to get accurate return value (lance.delete returns void)
469
- let deleted = 0;
470
- for (const [ns, table] of this.tables) {
471
- try {
472
- const before = typeof table.countRows === 'function'
473
- ? await table.countRows(`id IN (${idList})`)
474
- : 0; // skip pre-count if API unavailable; return 0 (conservative)
475
- await table.delete(`id IN (${idList})`);
476
- deleted += before;
477
- }
478
- catch { /* ignore */ }
479
- }
480
- for (const id of ids)
481
- this.readCache.delete(id);
482
- return deleted;
483
- }
484
- async count(namespace) {
485
- const ns = namespace ?? this.config.namespace;
486
- try {
487
- const table = await this.openExistingTable(ns);
488
- if (!table)
489
- return 0;
490
- // countRows() avoids loading all IDs into memory (available in lancedb >= 0.9)
491
- if (typeof table.countRows === 'function') {
492
- return await table.countRows(`namespace = ${sqlStr(ns)}`);
493
- }
494
- const rows = await table.query()
495
- .where(`namespace = ${sqlStr(ns)}`)
496
- .select(['id'])
497
- .toArray();
498
- return rows.length;
499
- }
500
- catch (e) {
501
- if (process.env.DEBUG || process.env.MONOMIND_DEBUG)
502
- console.error('[lancedb-backend] count failed:', e);
503
- return 0;
504
- }
505
- }
506
- async listNamespaces() {
507
- try {
508
- return await this.db.tableNames();
509
- }
510
- catch (e) {
511
- if (process.env.DEBUG || process.env.MONOMIND_DEBUG)
512
- console.error('[lancedb-backend] listNamespaces failed:', e);
513
- return [];
514
- }
515
- }
516
- async clearNamespace(namespace) {
517
- try {
518
- const n = await this.count(namespace);
519
- await this.db.dropTable(toTableName(namespace));
520
- this.tables.delete(namespace);
521
- this.ftsBuilt.delete(namespace);
522
- // Namespace-scoped invalidation: byKey entries are prefixed with the
523
- // namespace, id entries aren't — clear the whole cache rather than track
524
- // per-namespace id membership just for this rare admin operation.
525
- this.readCache.clear();
526
- return n;
527
- }
528
- catch (e) {
529
- if (process.env.DEBUG || process.env.MONOMIND_DEBUG)
530
- console.error('[lancedb-backend] clearNamespace failed:', e);
531
- return 0;
532
- }
533
- }
534
- async getStats() {
535
- const namespaces = await this.listNamespaces();
536
- const entriesByNamespace = {};
537
- let totalEntries = 0;
538
- for (const ns of namespaces) {
539
- const n = await this.count(ns);
540
- entriesByNamespace[ns] = n;
541
- totalEntries += n;
542
- }
543
- return {
544
- totalEntries,
545
- entriesByNamespace,
546
- entriesByType: {}, // groupby query is expensive; omit
547
- memoryUsage: this.readCache.getStats().memoryUsage, // Lance manages its own columnar compression; this is just the read cache
548
- avgQueryTime: this.queryCount ? this.queryTotalMs / this.queryCount : 0,
549
- avgSearchTime: this.searchCount ? this.searchTotalMs / this.searchCount : 0,
550
- };
551
- }
552
- async healthCheck() {
553
- const ok = this.initialized && this.db !== null;
554
- const status = ok ? 'healthy' : 'unhealthy';
555
- const component = { status, latency: 0 };
556
- const cacheStats = this.readCache.getStats();
557
- const cacheComponent = { status, latency: 0, hitRate: cacheStats.hitRate, size: cacheStats.size };
558
- return {
559
- status,
560
- components: { storage: component, index: component, cache: cacheComponent },
561
- timestamp: Date.now(),
562
- issues: ok ? [] : ['LanceDB not initialized'],
563
- recommendations: [],
564
- };
565
- }
566
- }
567
- //# sourceMappingURL=lancedb-backend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lancedb-backend.js","sourceRoot":"","sources":["../src/lancedb-backend.ts"],"names":[],"mappings":"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"}