@j0hanz/memdb 1.0.1 → 1.0.2

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 (71) hide show
  1. package/README.md +157 -66
  2. package/dist/core/database.d.ts +2 -7
  3. package/dist/core/database.d.ts.map +1 -1
  4. package/dist/core/database.js +72 -81
  5. package/dist/core/database.js.map +1 -1
  6. package/dist/core/db-worker-client.d.ts +8 -0
  7. package/dist/core/db-worker-client.d.ts.map +1 -0
  8. package/dist/core/db-worker-client.js +67 -0
  9. package/dist/core/db-worker-client.js.map +1 -0
  10. package/dist/core/db-worker-protocol.d.ts +77 -0
  11. package/dist/core/db-worker-protocol.d.ts.map +1 -0
  12. package/dist/core/db-worker-protocol.js +2 -0
  13. package/dist/core/db-worker-protocol.js.map +1 -0
  14. package/dist/core/db-worker.d.ts +2 -0
  15. package/dist/core/db-worker.d.ts.map +1 -0
  16. package/dist/core/db-worker.js +73 -0
  17. package/dist/core/db-worker.js.map +1 -0
  18. package/dist/core/memory-mappers.d.ts +11 -0
  19. package/dist/core/memory-mappers.d.ts.map +1 -0
  20. package/dist/core/memory-mappers.js +52 -0
  21. package/dist/core/memory-mappers.js.map +1 -0
  22. package/dist/core/memory-search.d.ts +9 -0
  23. package/dist/core/memory-search.d.ts.map +1 -0
  24. package/dist/core/memory-search.js +46 -0
  25. package/dist/core/memory-search.js.map +1 -0
  26. package/dist/core/memory-service-core.d.ts +9 -0
  27. package/dist/core/memory-service-core.d.ts.map +1 -0
  28. package/dist/core/memory-service-core.js +229 -0
  29. package/dist/core/memory-service-core.js.map +1 -0
  30. package/dist/core/memory-service.d.ts +8 -30
  31. package/dist/core/memory-service.d.ts.map +1 -1
  32. package/dist/core/memory-service.js +184 -169
  33. package/dist/core/memory-service.js.map +1 -1
  34. package/dist/core/memory-types.d.ts +18 -0
  35. package/dist/core/memory-types.d.ts.map +1 -0
  36. package/dist/core/memory-types.js +2 -0
  37. package/dist/core/memory-types.js.map +1 -0
  38. package/dist/core/row-mappers.d.ts +7 -0
  39. package/dist/core/row-mappers.d.ts.map +1 -0
  40. package/dist/core/row-mappers.js +52 -0
  41. package/dist/core/row-mappers.js.map +1 -0
  42. package/dist/core/search-errors.d.ts +2 -0
  43. package/dist/core/search-errors.d.ts.map +1 -0
  44. package/dist/core/search-errors.js +21 -0
  45. package/dist/core/search-errors.js.map +1 -0
  46. package/dist/index.js +85 -18
  47. package/dist/index.js.map +1 -1
  48. package/dist/lib/errors.d.ts +3 -2
  49. package/dist/lib/errors.d.ts.map +1 -1
  50. package/dist/lib/errors.js.map +1 -1
  51. package/dist/schemas/inputs.d.ts.map +1 -1
  52. package/dist/schemas/inputs.js +5 -5
  53. package/dist/schemas/inputs.js.map +1 -1
  54. package/dist/tools/index.d.ts.map +1 -1
  55. package/dist/tools/index.js +130 -14
  56. package/dist/tools/index.js.map +1 -1
  57. package/dist/types/index.d.ts +25 -17
  58. package/dist/types/index.d.ts.map +1 -1
  59. package/dist/utils/config.d.ts +4 -0
  60. package/dist/utils/config.d.ts.map +1 -1
  61. package/dist/utils/config.js +48 -1
  62. package/dist/utils/config.js.map +1 -1
  63. package/dist/utils/logger.d.ts +6 -2
  64. package/dist/utils/logger.d.ts.map +1 -1
  65. package/dist/utils/logger.js +25 -10
  66. package/dist/utils/logger.js.map +1 -1
  67. package/dist/utils/protocol.d.ts +2 -0
  68. package/dist/utils/protocol.d.ts.map +1 -0
  69. package/dist/utils/protocol.js +7 -0
  70. package/dist/utils/protocol.js.map +1 -0
  71. package/package.json +5 -1
@@ -0,0 +1,77 @@
1
+ import type { Memory, MemoryInsertResult, MemoryStats, RelatedMemory, SearchResult, StatementResult } from '../types/index.js';
2
+ export interface DbWorkerCallMap {
3
+ createMemory: {
4
+ payload: {
5
+ content: string;
6
+ tags: readonly string[];
7
+ importance: number;
8
+ memoryType: string;
9
+ };
10
+ result: MemoryInsertResult;
11
+ };
12
+ searchMemories: {
13
+ payload: {
14
+ query: string;
15
+ limit: number;
16
+ tags: readonly string[];
17
+ minRelevance?: number;
18
+ };
19
+ result: SearchResult[];
20
+ };
21
+ getMemory: {
22
+ payload: {
23
+ hash: string;
24
+ };
25
+ result: Memory | undefined;
26
+ };
27
+ deleteMemory: {
28
+ payload: {
29
+ hash: string;
30
+ };
31
+ result: StatementResult;
32
+ };
33
+ linkMemories: {
34
+ payload: {
35
+ fromHash: string;
36
+ toHash: string;
37
+ relationType: string;
38
+ };
39
+ result: StatementResult;
40
+ };
41
+ getRelated: {
42
+ payload: {
43
+ hash: string;
44
+ relationType?: string;
45
+ depth: number;
46
+ };
47
+ result: RelatedMemory[];
48
+ };
49
+ getStats: {
50
+ payload: undefined;
51
+ result: MemoryStats;
52
+ };
53
+ close: {
54
+ payload: undefined;
55
+ result: undefined;
56
+ };
57
+ }
58
+ export type DbWorkerRequest = {
59
+ [K in keyof DbWorkerCallMap]: {
60
+ id: number;
61
+ type: K;
62
+ } & (DbWorkerCallMap[K]['payload'] extends undefined ? Record<string, never> : {
63
+ payload: DbWorkerCallMap[K]['payload'];
64
+ });
65
+ }[keyof DbWorkerCallMap];
66
+ export type DbWorkerResponse = {
67
+ id: number;
68
+ ok: true;
69
+ result: unknown;
70
+ } | {
71
+ id: number;
72
+ ok: false;
73
+ error: {
74
+ message: string;
75
+ };
76
+ };
77
+ //# sourceMappingURL=db-worker-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-worker-protocol.d.ts","sourceRoot":"","sources":["../../src/core/db-worker-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE;QACZ,OAAO,EAAE;YACP,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;YACxB,UAAU,EAAE,MAAM,CAAC;YACnB,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,MAAM,EAAE,kBAAkB,CAAC;KAC5B,CAAC;IACF,cAAc,EAAE;QACd,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;YACxB,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;QACF,MAAM,EAAE,YAAY,EAAE,CAAC;KACxB,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;KAC5B,CAAC;IACF,YAAY,EAAE;QACZ,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1B,MAAM,EAAE,eAAe,CAAC;KACzB,CAAC;IACF,YAAY,EAAE;QACZ,OAAO,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAA;SAAE,CAAC;QACpE,MAAM,EAAE,eAAe,CAAC;KACzB,CAAC;IACF,UAAU,EAAE;QACV,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QAChE,MAAM,EAAE,aAAa,EAAE,CAAC;KACzB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,SAAS,CAAC;QACnB,MAAM,EAAE,WAAW,CAAC;KACrB,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,SAAS,CAAC;QACnB,MAAM,EAAE,SAAS,CAAC;KACnB,CAAC;CACH;AAED,MAAM,MAAM,eAAe,GAAG;KAC3B,CAAC,IAAI,MAAM,eAAe,GAAG;QAC5B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,CAAC,CAAC;KACT,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,SAAS,GAChD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACrB;QAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;KAAE,CAAC;CAChD,CAAC,MAAM,eAAe,CAAC,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=db-worker-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-worker-protocol.js","sourceRoot":"","sources":["../../src/core/db-worker-protocol.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=db-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-worker.d.ts","sourceRoot":"","sources":["../../src/core/db-worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import { parentPort } from 'node:worker_threads';
2
+ import { closeDb } from './database.js';
3
+ import { createMemory, deleteMemory, getMemory, getRelated, getStats, linkMemories, searchMemories, } from './memory-service-core.js';
4
+ const port = parentPort;
5
+ if (!port) {
6
+ throw new Error('db-worker must be started as a worker thread');
7
+ }
8
+ const respond = (response) => {
9
+ port.postMessage(response);
10
+ };
11
+ const handleRequest = (request) => {
12
+ try {
13
+ switch (request.type) {
14
+ case 'createMemory': {
15
+ const { content, tags, importance, memoryType } = request.payload;
16
+ return {
17
+ id: request.id,
18
+ ok: true,
19
+ result: createMemory(content, tags, importance, memoryType),
20
+ };
21
+ }
22
+ case 'searchMemories': {
23
+ const { query, limit, tags, minRelevance } = request.payload;
24
+ return {
25
+ id: request.id,
26
+ ok: true,
27
+ result: searchMemories(query, limit, tags, minRelevance),
28
+ };
29
+ }
30
+ case 'getMemory':
31
+ return {
32
+ id: request.id,
33
+ ok: true,
34
+ result: getMemory(request.payload.hash),
35
+ };
36
+ case 'deleteMemory':
37
+ return {
38
+ id: request.id,
39
+ ok: true,
40
+ result: deleteMemory(request.payload.hash),
41
+ };
42
+ case 'linkMemories': {
43
+ const { fromHash, toHash, relationType } = request.payload;
44
+ return {
45
+ id: request.id,
46
+ ok: true,
47
+ result: linkMemories(fromHash, toHash, relationType),
48
+ };
49
+ }
50
+ case 'getRelated': {
51
+ const { hash, relationType, depth } = request.payload;
52
+ return {
53
+ id: request.id,
54
+ ok: true,
55
+ result: getRelated(hash, relationType, depth),
56
+ };
57
+ }
58
+ case 'getStats':
59
+ return { id: request.id, ok: true, result: getStats() };
60
+ case 'close':
61
+ closeDb();
62
+ return { id: request.id, ok: true, result: undefined };
63
+ }
64
+ }
65
+ catch (err) {
66
+ const message = err instanceof Error ? err.message : String(err);
67
+ return { id: request.id, ok: false, error: { message } };
68
+ }
69
+ };
70
+ port.on('message', (request) => {
71
+ respond(handleRequest(request));
72
+ });
73
+ //# sourceMappingURL=db-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-worker.js","sourceRoot":"","sources":["../../src/core/db-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Memory, SearchResult } from '../types/index.js';
2
+ import type { RelatedMemory } from './memory-types.js';
3
+ export type DbRow = Record<string, unknown>;
4
+ export declare const toSafeInteger: (value: unknown, field: string) => number;
5
+ export declare const toString: (value: unknown, field: string) => string;
6
+ export declare const toOptionalString: (value: unknown, field: string) => string | undefined;
7
+ export declare const toOptionalNumber: (value: unknown, field: string) => number | undefined;
8
+ export declare const mapRowToMemory: (row: DbRow) => Memory;
9
+ export declare const mapRowToSearchResult: (row: DbRow) => SearchResult;
10
+ export declare const mapRowToRelatedMemory: (row: DbRow) => RelatedMemory;
11
+ //# sourceMappingURL=memory-mappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-mappers.d.ts","sourceRoot":"","sources":["../../src/core/memory-mappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAW5C,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,EAAE,OAAO,MAAM,KAAG,MAM7D,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,EAAE,OAAO,MAAM,KAAG,MAGxD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,OAAO,EACd,OAAO,MAAM,KACZ,MAAM,GAAG,SAGX,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,OAAO,EACd,OAAO,MAAM,KACZ,MAAM,GAAG,SAGX,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,KAAK,KAAK,KAAG,MAS1C,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAAI,KAAK,KAAK,KAAG,YAGhD,CAAC;AAEH,eAAO,MAAM,qBAAqB,GAAI,KAAK,KAAK,KAAG,aAIjD,CAAC"}
@@ -0,0 +1,52 @@
1
+ const toNumber = (value, field) => {
2
+ if (typeof value === 'number' && Number.isFinite(value))
3
+ return value;
4
+ if (typeof value === 'bigint') {
5
+ const asNumber = Number(value);
6
+ if (Number.isFinite(asNumber))
7
+ return asNumber;
8
+ }
9
+ throw new Error(`Invalid ${field}`);
10
+ };
11
+ export const toSafeInteger = (value, field) => {
12
+ const numeric = toNumber(value, field);
13
+ if (!Number.isSafeInteger(numeric)) {
14
+ throw new Error(`Invalid ${field}`);
15
+ }
16
+ return numeric;
17
+ };
18
+ export const toString = (value, field) => {
19
+ if (typeof value === 'string')
20
+ return value;
21
+ throw new Error(`Invalid ${field}`);
22
+ };
23
+ export const toOptionalString = (value, field) => {
24
+ if (value === null || value === undefined)
25
+ return undefined;
26
+ return toString(value, field);
27
+ };
28
+ export const toOptionalNumber = (value, field) => {
29
+ if (value === null || value === undefined)
30
+ return undefined;
31
+ return toNumber(value, field);
32
+ };
33
+ export const mapRowToMemory = (row) => ({
34
+ id: toSafeInteger(row.id, 'id'),
35
+ content: toString(row.content, 'content'),
36
+ summary: toOptionalString(row.summary, 'summary'),
37
+ importance: toSafeInteger(row.importance, 'importance'),
38
+ memory_type: toString(row.memory_type, 'memory_type'),
39
+ created_at: toString(row.created_at, 'created_at'),
40
+ accessed_at: toString(row.accessed_at, 'accessed_at'),
41
+ hash: toString(row.hash, 'hash'),
42
+ });
43
+ export const mapRowToSearchResult = (row) => ({
44
+ ...mapRowToMemory(row),
45
+ relevance: toOptionalNumber(row.relevance, 'relevance'),
46
+ });
47
+ export const mapRowToRelatedMemory = (row) => ({
48
+ ...mapRowToMemory(row),
49
+ relation_type: toString(row.relation_type, 'relation_type'),
50
+ depth: toSafeInteger(row.depth, 'depth'),
51
+ });
52
+ //# sourceMappingURL=memory-mappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-mappers.js","sourceRoot":"","sources":["../../src/core/memory-mappers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { DatabaseSync } from 'node:sqlite';
2
+ import type { DbRow } from './memory-mappers.js';
3
+ export interface SearchQuery {
4
+ sql: string;
5
+ params: (number | string)[];
6
+ }
7
+ export declare const buildSearchQuery: (query: string, limit: number, tags: string[], minRelevance?: number) => SearchQuery;
8
+ export declare const executeSearch: (db: DatabaseSync, sql: string, params: (number | string)[]) => DbRow[];
9
+ //# sourceMappingURL=memory-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-search.d.ts","sourceRoot":"","sources":["../../src/core/memory-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CAC7B;AAED,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,EACb,OAAO,MAAM,EACb,MAAM,MAAM,EAAE,EACd,eAAe,MAAM,KACpB,WAiCF,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,IAAI,YAAY,EAChB,KAAK,MAAM,EACX,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAC1B,KAAK,EAuBP,CAAC"}
@@ -0,0 +1,46 @@
1
+ export const buildSearchQuery = (query, limit, tags, minRelevance) => {
2
+ const relevanceExpr = '1.0 / (1.0 + abs(bm25(memories_fts)))';
3
+ const whereParts = ['memories_fts MATCH ?'];
4
+ const params = [query];
5
+ if (tags.length > 0) {
6
+ whereParts.push(`m.id IN (SELECT memory_id FROM tags WHERE tag IN (${tags
7
+ .map(() => '?')
8
+ .join(', ')}))`);
9
+ params.push(...tags);
10
+ }
11
+ let sql = `
12
+ WITH ranked AS (
13
+ SELECT m.*, ${relevanceExpr} as relevance
14
+ FROM memories m
15
+ JOIN memories_fts fts ON m.id = fts.rowid
16
+ WHERE ${whereParts.join(' AND ')}
17
+ )
18
+ SELECT * FROM ranked
19
+ `;
20
+ if (minRelevance !== undefined) {
21
+ sql += ' WHERE relevance >= ?';
22
+ params.push(minRelevance);
23
+ }
24
+ sql += ' ORDER BY relevance DESC LIMIT ?';
25
+ params.push(limit);
26
+ return { sql, params };
27
+ };
28
+ export const executeSearch = (db, sql, params) => {
29
+ const stmt = db.prepare(sql);
30
+ try {
31
+ return stmt.all(...params);
32
+ }
33
+ catch (err) {
34
+ const message = err instanceof Error ? err.message : String(err);
35
+ if (message.includes('no such module: fts5') ||
36
+ message.includes('no such table: memories_fts')) {
37
+ throw new Error('Search index unavailable. Ensure FTS5 is enabled and the index is initialized.');
38
+ }
39
+ if (message.includes('fts5') || message.includes('syntax error')) {
40
+ throw new Error('Invalid search query syntax. Check for unbalanced quotes or special characters. ' +
41
+ `Details: ${message}`);
42
+ }
43
+ throw err;
44
+ }
45
+ };
46
+ //# sourceMappingURL=memory-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-search.js","sourceRoot":"","sources":["../../src/core/memory-search.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,KAAa,EACb,KAAa,EACb,IAAc,EACd,YAAqB,EACR,EAAE;IACf,MAAM,aAAa,GAAG,uCAAuC,CAAC;IAC9D,MAAM,UAAU,GAAa,CAAC,sBAAsB,CAAC,CAAC;IACtD,MAAM,MAAM,GAAwB,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CACb,qDAAqD,IAAI;aACtD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;aACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAClB,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,GAAG,GAAG;;oBAEQ,aAAa;;;cAGnB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;;GAGnC,CAAC;IAEF,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,GAAG,IAAI,uBAAuB,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,IAAI,kCAAkC,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,EAAgB,EAChB,GAAW,EACX,MAA2B,EAClB,EAAE;IACX,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAY,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,IACE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACxC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAC/C,CAAC;YACD,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CACb,kFAAkF;gBAChF,YAAY,OAAO,EAAE,CACxB,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Memory, MemoryInsertResult, MemoryStats, RelatedMemory, SearchResult, StatementResult } from '../types/index.js';
2
+ export declare const createMemory: (content: string, tags?: readonly string[], importance?: number, memoryType?: string) => MemoryInsertResult;
3
+ export declare const searchMemories: (query: string, limit?: number, tags?: readonly string[], minRelevance?: number) => SearchResult[];
4
+ export declare const getMemory: (hash: string) => Memory | undefined;
5
+ export declare const deleteMemory: (hash: string) => StatementResult;
6
+ export declare const linkMemories: (fromHash: string, toHash: string, relationType: string) => StatementResult;
7
+ export declare const getRelated: (hash: string, relationType?: string, depth?: number) => RelatedMemory[];
8
+ export declare const getStats: () => MemoryStats;
9
+ //# sourceMappingURL=memory-service-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-service-core.d.ts","sourceRoot":"","sources":["../../src/core/memory-service-core.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAsK3B,eAAO,MAAM,YAAY,GACvB,SAAS,MAAM,EACf,OAAM,SAAS,MAAM,EAAO,EAC5B,mBAAc,EACd,mBAAsB,KACrB,kBAoCF,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,EACb,cAAU,EACV,OAAM,SAAS,MAAM,EAAO,EAC5B,eAAe,MAAM,KACpB,YAAY,EASd,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,SAKjD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,eAK3C,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,cAAc,MAAM,KACnB,eAaF,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,cAAS,KACR,aAAa,EAUf,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,WAiB3B,CAAC"}
@@ -0,0 +1,229 @@
1
+ import crypto from 'node:crypto';
2
+ import { db } from './database.js';
3
+ const toNumber = (value, field) => {
4
+ if (typeof value === 'number' && Number.isFinite(value))
5
+ return value;
6
+ if (typeof value === 'bigint') {
7
+ const numeric = Number(value);
8
+ if (Number.isFinite(numeric))
9
+ return numeric;
10
+ }
11
+ throw new Error(`Invalid ${field}`);
12
+ };
13
+ const toSafeInteger = (value, field) => {
14
+ const numeric = toNumber(value, field);
15
+ if (!Number.isSafeInteger(numeric)) {
16
+ throw new Error(`Invalid ${field}`);
17
+ }
18
+ return numeric;
19
+ };
20
+ const toString = (value, field) => {
21
+ if (typeof value === 'string')
22
+ return value;
23
+ throw new Error(`Invalid ${field}`);
24
+ };
25
+ const toOptionalString = (value, field) => {
26
+ if (value === null || value === undefined)
27
+ return undefined;
28
+ return toString(value, field);
29
+ };
30
+ const toOptionalNumber = (value, field) => {
31
+ if (value === null || value === undefined)
32
+ return undefined;
33
+ return toNumber(value, field);
34
+ };
35
+ const mapRowToMemory = (row) => ({
36
+ id: toSafeInteger(row.id, 'id'),
37
+ content: toString(row.content, 'content'),
38
+ summary: toOptionalString(row.summary, 'summary'),
39
+ importance: toSafeInteger(row.importance, 'importance'),
40
+ memory_type: toString(row.memory_type, 'memory_type'),
41
+ created_at: toString(row.created_at, 'created_at'),
42
+ accessed_at: toString(row.accessed_at, 'accessed_at'),
43
+ hash: toString(row.hash, 'hash'),
44
+ });
45
+ const mapRowToSearchResult = (row) => ({
46
+ ...mapRowToMemory(row),
47
+ relevance: toOptionalNumber(row.relevance, 'relevance'),
48
+ });
49
+ const mapRowToRelatedMemory = (row) => ({
50
+ ...mapRowToMemory(row),
51
+ relation_type: toString(row.relation_type, 'relation_type'),
52
+ depth: toSafeInteger(row.depth, 'depth'),
53
+ });
54
+ const sanitizeFts5Query = (query) => {
55
+ const escaped = query.replace(/"/g, '""');
56
+ return `"${escaped}"`;
57
+ };
58
+ const buildSearchQuery = (query, limit, tags, minRelevance) => {
59
+ const sanitizedQuery = sanitizeFts5Query(query);
60
+ const relevanceExpr = '1.0 / (1.0 + abs(bm25(memories_fts)))';
61
+ const whereParts = ['memories_fts MATCH ?'];
62
+ const params = [sanitizedQuery];
63
+ if (tags.length > 0) {
64
+ whereParts.push(`m.id IN (SELECT memory_id FROM tags WHERE tag IN (${tags
65
+ .map(() => '?')
66
+ .join(', ')}))`);
67
+ params.push(...tags);
68
+ }
69
+ let sql = `
70
+ WITH ranked AS (
71
+ SELECT m.*, ${relevanceExpr} as relevance
72
+ FROM memories m
73
+ JOIN memories_fts fts ON m.id = fts.rowid
74
+ WHERE ${whereParts.join(' AND ')}
75
+ )
76
+ SELECT * FROM ranked
77
+ `;
78
+ if (minRelevance !== undefined) {
79
+ sql += ' WHERE relevance >= ?';
80
+ params.push(minRelevance);
81
+ }
82
+ sql += ' ORDER BY relevance DESC LIMIT ?';
83
+ params.push(limit);
84
+ return { sql, params };
85
+ };
86
+ const executeSearch = (sql, params) => {
87
+ const stmt = db.prepare(sql);
88
+ try {
89
+ return stmt.all(...params);
90
+ }
91
+ catch (err) {
92
+ const message = err instanceof Error ? err.message : String(err);
93
+ if (message.includes('no such module: fts5') ||
94
+ message.includes('no such table: memories_fts')) {
95
+ throw new Error('Search index unavailable. Ensure FTS5 is enabled and the index is initialized.');
96
+ }
97
+ if (message.includes('fts5') || message.includes('syntax error')) {
98
+ throw new Error('Invalid search query syntax. Check for unbalanced quotes or special characters. ' +
99
+ `Details: ${message}`);
100
+ }
101
+ throw err;
102
+ }
103
+ };
104
+ const buildHash = (content) => crypto.createHash('md5').update(content).digest('hex');
105
+ const uniqueTags = (tags) => tags.length > 0 ? [...new Set(tags)] : [];
106
+ const findMemoryIdByHash = (hash) => {
107
+ const row = db.prepare('SELECT id FROM memories WHERE hash = ?').get(hash);
108
+ if (!row)
109
+ return undefined;
110
+ return toSafeInteger(row.id, 'id');
111
+ };
112
+ const relationFilter = (relationType) => {
113
+ if (!relationType)
114
+ return { clause: '', params: [] };
115
+ return { clause: ' AND r.relation_type = ?', params: [relationType] };
116
+ };
117
+ export const createMemory = (content, tags = [], importance = 0, memoryType = 'general') => {
118
+ const hash = buildHash(content);
119
+ const normalizedTags = uniqueTags(tags);
120
+ db.exec('BEGIN IMMEDIATE');
121
+ try {
122
+ const insert = db.prepare('INSERT OR IGNORE INTO memories (content, importance, memory_type, hash) VALUES (?, ?, ?, ?)');
123
+ const result = insert.run(content, importance, memoryType, hash);
124
+ const id = findMemoryIdByHash(hash);
125
+ if (id === undefined) {
126
+ throw new Error('Failed to resolve memory id');
127
+ }
128
+ if (normalizedTags.length > 0) {
129
+ const insertTag = db.prepare('INSERT OR IGNORE INTO tags (memory_id, tag) VALUES (?, ?)');
130
+ for (const tag of normalizedTags) {
131
+ insertTag.run(id, tag);
132
+ }
133
+ }
134
+ db.exec('COMMIT');
135
+ return { id, hash, isNew: toSafeInteger(result.changes, 'changes') === 1 };
136
+ }
137
+ catch (err) {
138
+ db.exec('ROLLBACK');
139
+ throw err;
140
+ }
141
+ };
142
+ export const searchMemories = (query, limit = 10, tags = [], minRelevance) => {
143
+ const { sql, params } = buildSearchQuery(query, limit, uniqueTags(tags), minRelevance);
144
+ const rows = executeSearch(sql, params);
145
+ return rows.map((row) => mapRowToSearchResult(row));
146
+ };
147
+ export const getMemory = (hash) => {
148
+ const row = db.prepare('SELECT * FROM memories WHERE hash = ?').get(hash);
149
+ return row ? mapRowToMemory(row) : undefined;
150
+ };
151
+ export const deleteMemory = (hash) => {
152
+ const result = db
153
+ .prepare('DELETE FROM memories WHERE hash = ?')
154
+ .run(hash);
155
+ return { changes: toSafeInteger(result.changes, 'changes') };
156
+ };
157
+ export const linkMemories = (fromHash, toHash, relationType) => {
158
+ const fromId = findMemoryIdByHash(fromHash);
159
+ const toId = findMemoryIdByHash(toHash);
160
+ if (fromId === undefined || toId === undefined) {
161
+ throw new Error('One or both memories not found');
162
+ }
163
+ const insert = db.prepare('INSERT OR IGNORE INTO relationships (from_memory_id, to_memory_id, relation_type) VALUES (?, ?, ?)');
164
+ const result = insert.run(fromId, toId, relationType);
165
+ return { changes: toSafeInteger(result.changes, 'changes') };
166
+ };
167
+ export const getRelated = (hash, relationType, depth = 1) => {
168
+ const memoryId = findMemoryIdByHash(hash);
169
+ if (memoryId === undefined)
170
+ return [];
171
+ const maxDepth = Math.max(1, depth);
172
+ if (maxDepth === 1) {
173
+ return getRelatedDirect(memoryId, relationType);
174
+ }
175
+ return getRelatedRecursive(memoryId, relationType, maxDepth);
176
+ };
177
+ export const getStats = () => {
178
+ const memoryRow = db
179
+ .prepare('SELECT COUNT(*) as count FROM memories')
180
+ .get();
181
+ const relationshipRow = db
182
+ .prepare('SELECT COUNT(*) as count FROM relationships')
183
+ .get();
184
+ if (!memoryRow || !relationshipRow) {
185
+ throw new Error('Failed to load database stats');
186
+ }
187
+ return {
188
+ memoryCount: toSafeInteger(memoryRow.count, 'memoryCount'),
189
+ relationshipCount: toSafeInteger(relationshipRow.count, 'relationshipCount'),
190
+ };
191
+ };
192
+ const getRelatedDirect = (memoryId, relationType) => {
193
+ const { clause, params } = relationFilter(relationType);
194
+ const sql = `
195
+ SELECT m.*, r.relation_type as relation_type, 1 as depth
196
+ FROM memories m
197
+ JOIN relationships r ON m.id = r.to_memory_id
198
+ WHERE r.from_memory_id = ?${clause}
199
+ LIMIT 1000
200
+ `;
201
+ const rows = db.prepare(sql).all(memoryId, ...params);
202
+ return rows.map((row) => mapRowToRelatedMemory(row));
203
+ };
204
+ const getRelatedRecursive = (memoryId, relationType, maxDepth) => {
205
+ const { clause, params } = relationFilter(relationType);
206
+ const sql = `
207
+ WITH RECURSIVE rels(depth, from_id, to_id, relation_type) AS (
208
+ SELECT 1, r.from_memory_id, r.to_memory_id, r.relation_type
209
+ FROM relationships r
210
+ WHERE r.from_memory_id = ?${clause}
211
+ UNION ALL
212
+ SELECT rels.depth + 1, r.from_memory_id, r.to_memory_id, r.relation_type
213
+ FROM relationships r
214
+ JOIN rels ON r.from_memory_id = rels.to_id
215
+ WHERE rels.depth < ?${clause}
216
+ )
217
+ SELECT m.*, rels.relation_type as relation_type, MIN(rels.depth) as depth
218
+ FROM rels
219
+ JOIN memories m ON m.id = rels.to_id
220
+ GROUP BY m.id, rels.relation_type
221
+ ORDER BY depth, m.id
222
+ LIMIT 1000
223
+ `;
224
+ const baseParams = [memoryId, ...params, maxDepth];
225
+ const recursiveParams = params.length > 0 ? [...baseParams, ...params] : baseParams;
226
+ const rows = db.prepare(sql).all(...recursiveParams);
227
+ return rows.map((row) => mapRowToRelatedMemory(row));
228
+ };
229
+ //# sourceMappingURL=memory-service-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-service-core.js","sourceRoot":"","sources":["../../src/core/memory-service-core.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,9 @@
1
- import type { Memory, SearchResult } from '../types/index.js';
2
- interface RelatedMemory extends Memory {
3
- relation_type: string;
4
- depth: number;
5
- }
6
- interface StatementResult {
7
- changes: number | bigint;
8
- lastInsertRowid: number | bigint;
9
- }
10
- interface MemoryInsertResult {
11
- id: number;
12
- hash: string;
13
- isNew: boolean;
14
- }
15
- interface MemoryStats {
16
- memoryCount: number;
17
- relationshipCount: number;
18
- }
19
- export declare class MemoryService {
20
- private db;
21
- createMemory(content: string, tags?: string[], importance?: number, memoryType?: string): MemoryInsertResult;
22
- searchMemories(query: string, limit?: number, tags?: string[], minRelevance?: number): SearchResult[];
23
- getMemory(hash: string): Memory | undefined;
24
- deleteMemory(hash: string): StatementResult;
25
- linkMemories(fromHash: string, toHash: string, relationType: string): StatementResult;
26
- getRelated(hash: string, relationType?: string, depth?: number): RelatedMemory[];
27
- getStats(): MemoryStats;
28
- }
29
- export declare const memoryService: MemoryService;
30
- export {};
1
+ import type { Memory, MemoryInsertResult, MemoryStats, RelatedMemory, SearchResult, StatementResult } from '../types/index.js';
2
+ export declare const createMemory: (content: string, tags?: readonly string[], importance?: number, memoryType?: string) => MemoryInsertResult;
3
+ export declare const searchMemories: (query: string, limit?: number, tags?: readonly string[], minRelevance?: number) => SearchResult[];
4
+ export declare const getMemory: (hash: string) => Memory | undefined;
5
+ export declare const deleteMemory: (hash: string) => StatementResult;
6
+ export declare const linkMemories: (fromHash: string, toHash: string, relationType: string) => StatementResult;
7
+ export declare const getRelated: (hash: string, relationType?: string, depth?: number) => RelatedMemory[];
8
+ export declare const getStats: () => MemoryStats;
31
9
  //# sourceMappingURL=memory-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-service.d.ts","sourceRoot":"","sources":["../../src/core/memory-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG9D,UAAU,aAAc,SAAQ,MAAM;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;CAClC;AAED,UAAU,kBAAkB;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAqB;IAE/B,YAAY,CACV,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,UAAU,SAAI,EACd,UAAU,SAAY,GACrB,kBAAkB;IAwCrB,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,EACV,IAAI,GAAE,MAAM,EAAO,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,YAAY,EAAE;IA+DjB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAM3C,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAM3C,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,eAAe;IAclB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,aAAa,EAAE;IA+E3E,QAAQ,IAAI,WAAW;CAaxB;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"memory-service.d.ts","sourceRoot":"","sources":["../../src/core/memory-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAgJ3B,eAAO,MAAM,YAAY,GACvB,SAAS,MAAM,EACf,OAAM,SAAS,MAAM,EAAO,EAC5B,mBAAc,EACd,mBAAsB,KACrB,kBAeC,CAAC;AAEL,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,EACb,cAAU,EACV,OAAM,SAAS,MAAM,EAAO,EAC5B,eAAe,MAAM,KACpB,YAAY,EASd,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,SAMjD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,eAM3C,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,cAAc,MAAM,KACnB,eAcF,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,cAAS,KACR,aAAa,EAUf,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,WAiB3B,CAAC"}