@j0hanz/memdb 1.0.7 → 1.0.9

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 (142) hide show
  1. package/README.md +55 -26
  2. package/package.json +5 -6
  3. package/dist/core/database.d.ts +0 -4
  4. package/dist/core/database.d.ts.map +0 -1
  5. package/dist/core/database.js +0 -81
  6. package/dist/core/database.js.map +0 -1
  7. package/dist/core/db-helpers.d.ts +0 -10
  8. package/dist/core/db-helpers.d.ts.map +0 -1
  9. package/dist/core/db-helpers.js +0 -17
  10. package/dist/core/db-helpers.js.map +0 -1
  11. package/dist/core/db-worker-client.d.ts +0 -8
  12. package/dist/core/db-worker-client.d.ts.map +0 -1
  13. package/dist/core/db-worker-client.js +0 -67
  14. package/dist/core/db-worker-client.js.map +0 -1
  15. package/dist/core/db-worker-protocol.d.ts +0 -77
  16. package/dist/core/db-worker-protocol.d.ts.map +0 -1
  17. package/dist/core/db-worker-protocol.js +0 -2
  18. package/dist/core/db-worker-protocol.js.map +0 -1
  19. package/dist/core/db-worker.d.ts +0 -2
  20. package/dist/core/db-worker.d.ts.map +0 -1
  21. package/dist/core/db-worker.js +0 -73
  22. package/dist/core/db-worker.js.map +0 -1
  23. package/dist/core/memory-helpers.d.ts +0 -3
  24. package/dist/core/memory-helpers.d.ts.map +0 -1
  25. package/dist/core/memory-helpers.js +0 -18
  26. package/dist/core/memory-helpers.js.map +0 -1
  27. package/dist/core/memory-mappers.d.ts +0 -11
  28. package/dist/core/memory-mappers.d.ts.map +0 -1
  29. package/dist/core/memory-mappers.js +0 -52
  30. package/dist/core/memory-mappers.js.map +0 -1
  31. package/dist/core/memory-search.d.ts +0 -9
  32. package/dist/core/memory-search.d.ts.map +0 -1
  33. package/dist/core/memory-search.js +0 -46
  34. package/dist/core/memory-search.js.map +0 -1
  35. package/dist/core/memory-service-core.d.ts +0 -9
  36. package/dist/core/memory-service-core.d.ts.map +0 -1
  37. package/dist/core/memory-service-core.js +0 -229
  38. package/dist/core/memory-service-core.js.map +0 -1
  39. package/dist/core/memory-service.d.ts +0 -11
  40. package/dist/core/memory-service.d.ts.map +0 -1
  41. package/dist/core/memory-service.js +0 -83
  42. package/dist/core/memory-service.js.map +0 -1
  43. package/dist/core/memory-stats.d.ts +0 -3
  44. package/dist/core/memory-stats.d.ts.map +0 -1
  45. package/dist/core/memory-stats.js +0 -44
  46. package/dist/core/memory-stats.js.map +0 -1
  47. package/dist/core/memory-types.d.ts +0 -18
  48. package/dist/core/memory-types.d.ts.map +0 -1
  49. package/dist/core/memory-types.js +0 -2
  50. package/dist/core/memory-types.js.map +0 -1
  51. package/dist/core/memory-updates.d.ts +0 -11
  52. package/dist/core/memory-updates.d.ts.map +0 -1
  53. package/dist/core/memory-updates.js +0 -102
  54. package/dist/core/memory-updates.js.map +0 -1
  55. package/dist/core/relation-queries.d.ts +0 -8
  56. package/dist/core/relation-queries.d.ts.map +0 -1
  57. package/dist/core/relation-queries.js +0 -107
  58. package/dist/core/relation-queries.js.map +0 -1
  59. package/dist/core/row-mappers.d.ts +0 -7
  60. package/dist/core/row-mappers.d.ts.map +0 -1
  61. package/dist/core/row-mappers.js +0 -52
  62. package/dist/core/row-mappers.js.map +0 -1
  63. package/dist/core/search-errors.d.ts +0 -2
  64. package/dist/core/search-errors.d.ts.map +0 -1
  65. package/dist/core/search-errors.js +0 -21
  66. package/dist/core/search-errors.js.map +0 -1
  67. package/dist/core/search.d.ts +0 -9
  68. package/dist/core/search.d.ts.map +0 -1
  69. package/dist/core/search.js +0 -57
  70. package/dist/core/search.js.map +0 -1
  71. package/dist/core/tag-helpers.d.ts +0 -2
  72. package/dist/core/tag-helpers.d.ts.map +0 -1
  73. package/dist/core/tag-helpers.js +0 -22
  74. package/dist/core/tag-helpers.js.map +0 -1
  75. package/dist/index.d.ts +0 -3
  76. package/dist/index.d.ts.map +0 -1
  77. package/dist/index.js +0 -131
  78. package/dist/index.js.map +0 -1
  79. package/dist/lib/errors.d.ts +0 -20
  80. package/dist/lib/errors.d.ts.map +0 -1
  81. package/dist/lib/errors.js +0 -20
  82. package/dist/lib/errors.js.map +0 -1
  83. package/dist/lib/tool_response.d.ts +0 -5
  84. package/dist/lib/tool_response.d.ts.map +0 -1
  85. package/dist/lib/tool_response.js +0 -7
  86. package/dist/lib/tool_response.js.map +0 -1
  87. package/dist/schemas/inputs.d.ts +0 -52
  88. package/dist/schemas/inputs.d.ts.map +0 -1
  89. package/dist/schemas/inputs.js +0 -134
  90. package/dist/schemas/inputs.js.map +0 -1
  91. package/dist/schemas/outputs.d.ts +0 -10
  92. package/dist/schemas/outputs.d.ts.map +0 -1
  93. package/dist/schemas/outputs.js +0 -30
  94. package/dist/schemas/outputs.js.map +0 -1
  95. package/dist/tools/delete-memory.d.ts +0 -3
  96. package/dist/tools/delete-memory.d.ts.map +0 -1
  97. package/dist/tools/delete-memory.js +0 -32
  98. package/dist/tools/delete-memory.js.map +0 -1
  99. package/dist/tools/get-memory.d.ts +0 -3
  100. package/dist/tools/get-memory.d.ts.map +0 -1
  101. package/dist/tools/get-memory.js +0 -32
  102. package/dist/tools/get-memory.js.map +0 -1
  103. package/dist/tools/get-related.d.ts +0 -3
  104. package/dist/tools/get-related.d.ts.map +0 -1
  105. package/dist/tools/get-related.js +0 -29
  106. package/dist/tools/get-related.js.map +0 -1
  107. package/dist/tools/index.d.ts +0 -3
  108. package/dist/tools/index.d.ts.map +0 -1
  109. package/dist/tools/index.js +0 -147
  110. package/dist/tools/index.js.map +0 -1
  111. package/dist/tools/link-memories.d.ts +0 -3
  112. package/dist/tools/link-memories.d.ts.map +0 -1
  113. package/dist/tools/link-memories.js +0 -29
  114. package/dist/tools/link-memories.js.map +0 -1
  115. package/dist/tools/memory-stats.d.ts +0 -3
  116. package/dist/tools/memory-stats.d.ts.map +0 -1
  117. package/dist/tools/memory-stats.js +0 -28
  118. package/dist/tools/memory-stats.js.map +0 -1
  119. package/dist/tools/search-memories.d.ts +0 -3
  120. package/dist/tools/search-memories.d.ts.map +0 -1
  121. package/dist/tools/search-memories.js +0 -29
  122. package/dist/tools/search-memories.js.map +0 -1
  123. package/dist/tools/store-memory.d.ts +0 -3
  124. package/dist/tools/store-memory.d.ts.map +0 -1
  125. package/dist/tools/store-memory.js +0 -29
  126. package/dist/tools/store-memory.js.map +0 -1
  127. package/dist/types/index.d.ts +0 -38
  128. package/dist/types/index.d.ts.map +0 -1
  129. package/dist/types/index.js +0 -2
  130. package/dist/types/index.js.map +0 -1
  131. package/dist/utils/config.d.ts +0 -10
  132. package/dist/utils/config.d.ts.map +0 -1
  133. package/dist/utils/config.js +0 -75
  134. package/dist/utils/config.js.map +0 -1
  135. package/dist/utils/logger.d.ts +0 -10
  136. package/dist/utils/logger.d.ts.map +0 -1
  137. package/dist/utils/logger.js +0 -21
  138. package/dist/utils/logger.js.map +0 -1
  139. package/dist/utils/protocol.d.ts +0 -2
  140. package/dist/utils/protocol.d.ts.map +0 -1
  141. package/dist/utils/protocol.js +0 -7
  142. package/dist/utils/protocol.js.map +0 -1
@@ -1,52 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-mappers.js","sourceRoot":"","sources":["../../src/core/memory-mappers.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,46 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,229 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-service-core.js","sourceRoot":"","sources":["../../src/core/memory-service-core.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { Memory, MemoryInsertResult, 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, offset?: 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
- type RelationDirection = 'outgoing' | 'incoming' | 'both';
8
- export declare const getRelated: (hash: string, relationType?: string, depth?: number, direction?: RelationDirection) => RelatedMemory[];
9
- export { getStats } from './memory-stats.js';
10
- export { updateMemory } from './memory-updates.js';
11
- //# sourceMappingURL=memory-service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-service.d.ts","sourceRoot":"","sources":["../../src/core/memory-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,eAAe,EAChB,MAAM,mBAAmB,CAAC;AA2B3B,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,EACrB,SAAS,MAAM,KACd,YAAY,EAUd,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,KAAK,iBAAiB,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAY1D,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,cAAS,EACT,YAAW,iBAA8B,KACxC,aAAa,EASf,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,83 +0,0 @@
1
- import crypto from 'node:crypto';
2
- import { db } from './database.js';
3
- import { executeGet, executeRun, withImmediateTransaction, } from './db-helpers.js';
4
- import { findMemoryIdByHash, insertTags } from './memory-helpers.js';
5
- import { deduplicateByHash, queryBothDirect, queryIncomingDirect, queryIncomingRecursive, queryOutgoingDirect, queryOutgoingRecursive, } from './relation-queries.js';
6
- import { mapRowToMemory, mapRowToSearchResult, toSafeInteger, } from './row-mappers.js';
7
- import { buildSearchQuery, executeSearch } from './search.js';
8
- import { normalizeTags } from './tag-helpers.js';
9
- const buildHash = (content) => crypto.createHash('md5').update(content).digest('hex');
10
- export const createMemory = (content, tags = [], importance = 0, memoryType = 'general') => withImmediateTransaction(() => {
11
- const hash = buildHash(content);
12
- const normalizedTags = normalizeTags(tags, 100);
13
- const insert = db.prepare('INSERT OR IGNORE INTO memories (content, importance, ' +
14
- 'memory_type, hash) VALUES (?, ?, ?, ?)');
15
- const result = executeRun(insert, content, importance, memoryType, hash);
16
- const id = findMemoryIdByHash(hash);
17
- if (id === undefined) {
18
- throw new Error('Failed to resolve memory id');
19
- }
20
- insertTags(id, normalizedTags);
21
- return { id, hash, isNew: toSafeInteger(result.changes, 'changes') === 1 };
22
- });
23
- export const searchMemories = (query, limit = 10, tags = [], minRelevance, offset) => {
24
- const { sql, params } = buildSearchQuery(query, limit, normalizeTags(tags, 50), minRelevance, offset);
25
- const rows = executeSearch(sql, params);
26
- return rows.map((row) => mapRowToSearchResult(row));
27
- };
28
- export const getMemory = (hash) => {
29
- const row = executeGet(db.prepare('SELECT * FROM memories WHERE hash = ?'), hash);
30
- return row ? mapRowToMemory(row) : undefined;
31
- };
32
- export const deleteMemory = (hash) => {
33
- const result = executeRun(db.prepare('DELETE FROM memories WHERE hash = ?'), hash);
34
- return { changes: toSafeInteger(result.changes, 'changes') };
35
- };
36
- export const linkMemories = (fromHash, toHash, relationType) => {
37
- const fromId = findMemoryIdByHash(fromHash);
38
- const toId = findMemoryIdByHash(toHash);
39
- if (fromId === undefined || toId === undefined) {
40
- throw new Error('One or both memories not found');
41
- }
42
- const insert = db.prepare('INSERT OR IGNORE INTO relationships (from_memory_id, to_memory_id, ' +
43
- 'relation_type) VALUES (?, ?, ?)');
44
- const result = executeRun(insert, fromId, toId, relationType);
45
- return { changes: toSafeInteger(result.changes, 'changes') };
46
- };
47
- const resolveMaxDepth = (depth, direction) => {
48
- if (direction === 'both') {
49
- return Math.min(depth, 2);
50
- }
51
- return Math.max(1, depth);
52
- };
53
- export const getRelated = (hash, relationType, depth = 1, direction = 'outgoing') => {
54
- const memoryId = findMemoryIdByHash(hash);
55
- if (memoryId === undefined)
56
- return [];
57
- const maxDepth = resolveMaxDepth(depth, direction);
58
- if (maxDepth === 1) {
59
- return getRelatedDirect(memoryId, relationType, direction);
60
- }
61
- return getRelatedRecursive(memoryId, relationType, maxDepth, direction);
62
- };
63
- export { getStats } from './memory-stats.js';
64
- export { updateMemory } from './memory-updates.js';
65
- const getRelatedDirect = (memoryId, relationType, direction = 'outgoing') => {
66
- if (direction === 'outgoing')
67
- return queryOutgoingDirect(memoryId, relationType);
68
- if (direction === 'incoming')
69
- return queryIncomingDirect(memoryId, relationType);
70
- return queryBothDirect(memoryId, relationType);
71
- };
72
- const getRelatedRecursive = (memoryId, relationType, maxDepth, direction = 'outgoing') => {
73
- if (direction === 'outgoing') {
74
- return queryOutgoingRecursive(memoryId, relationType, maxDepth);
75
- }
76
- if (direction === 'incoming') {
77
- return queryIncomingRecursive(memoryId, relationType, maxDepth);
78
- }
79
- const outgoing = queryOutgoingRecursive(memoryId, relationType, maxDepth);
80
- const incoming = queryIncomingRecursive(memoryId, relationType, maxDepth);
81
- return deduplicateByHash([...outgoing, ...incoming]);
82
- };
83
- //# sourceMappingURL=memory-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-service.js","sourceRoot":"","sources":["../../src/core/memory-service.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { MemoryStats } from '../types/index.js';
2
- export declare const getStats: () => MemoryStats;
3
- //# sourceMappingURL=memory-stats.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-stats.d.ts","sourceRoot":"","sources":["../../src/core/memory-stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA0CrD,eAAO,MAAM,QAAQ,QAAO,WAwB3B,CAAC"}
@@ -1,44 +0,0 @@
1
- import { db } from './database.js';
2
- import { executeAll, executeGet } from './db-helpers.js';
3
- import { toSafeInteger } from './row-mappers.js';
4
- const buildMemoryTypes = (typeRows) => {
5
- const memoryTypes = {};
6
- for (const row of typeRows) {
7
- const rawType = row.memory_type;
8
- const typeKey = typeof rawType === 'string' ? rawType : 'unknown';
9
- memoryTypes[typeKey] = toSafeInteger(row.count, 'typeCount');
10
- }
11
- return memoryTypes;
12
- };
13
- const toDateString = (value) => {
14
- if (value == null)
15
- return null;
16
- if (typeof value === 'string')
17
- return value;
18
- if (typeof value === 'number')
19
- return String(value);
20
- return null;
21
- };
22
- const queryCounts = () => {
23
- const memoryRow = executeGet(db.prepare('SELECT COUNT(*) as count FROM memories'));
24
- const relationshipRow = executeGet(db.prepare('SELECT COUNT(*) as count FROM relationships'));
25
- const tagRow = executeGet(db.prepare('SELECT COUNT(DISTINCT tag) as count FROM tags'));
26
- if (!memoryRow || !relationshipRow || !tagRow) {
27
- throw new Error('Failed to load database stats');
28
- }
29
- return { memoryRow, relationshipRow, tagRow };
30
- };
31
- export const getStats = () => {
32
- const { memoryRow, relationshipRow, tagRow } = queryCounts();
33
- const typeRows = executeAll(db.prepare('SELECT memory_type, COUNT(*) as count FROM memories GROUP BY memory_type'));
34
- const dateRow = executeGet(db.prepare('SELECT MIN(created_at) as oldest, MAX(created_at) as newest FROM memories'));
35
- return {
36
- memoryCount: toSafeInteger(memoryRow.count, 'memoryCount'),
37
- relationshipCount: toSafeInteger(relationshipRow.count, 'relationshipCount'),
38
- tagCount: toSafeInteger(tagRow.count, 'tagCount'),
39
- memoryTypes: buildMemoryTypes(typeRows),
40
- oldestMemory: toDateString(dateRow?.oldest),
41
- newestMemory: toDateString(dateRow?.newest),
42
- };
43
- };
44
- //# sourceMappingURL=memory-stats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-stats.js","sourceRoot":"","sources":["../../src/core/memory-stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,gBAAgB,GAAG,CAAC,QAAiB,EAA0B,EAAE;IACrE,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC;QAChC,MAAM,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,WAAW,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAiB,EAAE;IACrD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,GAIlB,EAAE;IACF,MAAM,SAAS,GAAG,UAAU,CAC1B,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CACrD,CAAC;IACF,MAAM,eAAe,GAAG,UAAU,CAChC,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAC1D,CAAC;IACF,MAAM,MAAM,GAAG,UAAU,CACvB,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAC5D,CAAC;IACF,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAgB,EAAE;IACxC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IAC7D,MAAM,QAAQ,GAAG,UAAU,CACzB,EAAE,CAAC,OAAO,CACR,0EAA0E,CAC3E,CACF,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CACxB,EAAE,CAAC,OAAO,CACR,2EAA2E,CAC5E,CACF,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC;QAC1D,iBAAiB,EAAE,aAAa,CAC9B,eAAe,CAAC,KAAK,EACrB,mBAAmB,CACpB;QACD,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC;QACjD,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC;QACvC,YAAY,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;QAC3C,YAAY,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;KAC5C,CAAC;AACJ,CAAC,CAAC"}
@@ -1,18 +0,0 @@
1
- import type { Memory } from '../types/index.js';
2
- export interface RelatedMemory extends Memory {
3
- relation_type: string;
4
- depth: number;
5
- }
6
- export interface StatementResult {
7
- changes: number;
8
- }
9
- export interface MemoryInsertResult {
10
- id: number;
11
- hash: string;
12
- isNew: boolean;
13
- }
14
- export interface MemoryStats {
15
- memoryCount: number;
16
- relationshipCount: number;
17
- }
18
- //# sourceMappingURL=memory-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-types.d.ts","sourceRoot":"","sources":["../../src/core/memory-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=memory-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-types.js","sourceRoot":"","sources":["../../src/core/memory-types.ts"],"names":[],"mappings":""}
@@ -1,11 +0,0 @@
1
- import type { MemoryUpdateResult } from '../types/index.js';
2
- interface UpdateMemoryOptions {
3
- importance?: number | undefined;
4
- memoryType?: string | undefined;
5
- tags?: readonly string[] | undefined;
6
- addTags?: readonly string[] | undefined;
7
- removeTags?: readonly string[] | undefined;
8
- }
9
- export declare const updateMemory: (hash: string, options: UpdateMemoryOptions) => MemoryUpdateResult;
10
- export {};
11
- //# sourceMappingURL=memory-updates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-updates.d.ts","sourceRoot":"","sources":["../../src/core/memory-updates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA4B5D,UAAU,mBAAmB;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAC5C;AAyGD,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,SAAS,mBAAmB,KAC3B,kBASF,CAAC"}