@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.
- package/README.md +55 -26
- package/package.json +5 -6
- package/dist/core/database.d.ts +0 -4
- package/dist/core/database.d.ts.map +0 -1
- package/dist/core/database.js +0 -81
- package/dist/core/database.js.map +0 -1
- package/dist/core/db-helpers.d.ts +0 -10
- package/dist/core/db-helpers.d.ts.map +0 -1
- package/dist/core/db-helpers.js +0 -17
- package/dist/core/db-helpers.js.map +0 -1
- package/dist/core/db-worker-client.d.ts +0 -8
- package/dist/core/db-worker-client.d.ts.map +0 -1
- package/dist/core/db-worker-client.js +0 -67
- package/dist/core/db-worker-client.js.map +0 -1
- package/dist/core/db-worker-protocol.d.ts +0 -77
- package/dist/core/db-worker-protocol.d.ts.map +0 -1
- package/dist/core/db-worker-protocol.js +0 -2
- package/dist/core/db-worker-protocol.js.map +0 -1
- package/dist/core/db-worker.d.ts +0 -2
- package/dist/core/db-worker.d.ts.map +0 -1
- package/dist/core/db-worker.js +0 -73
- package/dist/core/db-worker.js.map +0 -1
- package/dist/core/memory-helpers.d.ts +0 -3
- package/dist/core/memory-helpers.d.ts.map +0 -1
- package/dist/core/memory-helpers.js +0 -18
- package/dist/core/memory-helpers.js.map +0 -1
- package/dist/core/memory-mappers.d.ts +0 -11
- package/dist/core/memory-mappers.d.ts.map +0 -1
- package/dist/core/memory-mappers.js +0 -52
- package/dist/core/memory-mappers.js.map +0 -1
- package/dist/core/memory-search.d.ts +0 -9
- package/dist/core/memory-search.d.ts.map +0 -1
- package/dist/core/memory-search.js +0 -46
- package/dist/core/memory-search.js.map +0 -1
- package/dist/core/memory-service-core.d.ts +0 -9
- package/dist/core/memory-service-core.d.ts.map +0 -1
- package/dist/core/memory-service-core.js +0 -229
- package/dist/core/memory-service-core.js.map +0 -1
- package/dist/core/memory-service.d.ts +0 -11
- package/dist/core/memory-service.d.ts.map +0 -1
- package/dist/core/memory-service.js +0 -83
- package/dist/core/memory-service.js.map +0 -1
- package/dist/core/memory-stats.d.ts +0 -3
- package/dist/core/memory-stats.d.ts.map +0 -1
- package/dist/core/memory-stats.js +0 -44
- package/dist/core/memory-stats.js.map +0 -1
- package/dist/core/memory-types.d.ts +0 -18
- package/dist/core/memory-types.d.ts.map +0 -1
- package/dist/core/memory-types.js +0 -2
- package/dist/core/memory-types.js.map +0 -1
- package/dist/core/memory-updates.d.ts +0 -11
- package/dist/core/memory-updates.d.ts.map +0 -1
- package/dist/core/memory-updates.js +0 -102
- package/dist/core/memory-updates.js.map +0 -1
- package/dist/core/relation-queries.d.ts +0 -8
- package/dist/core/relation-queries.d.ts.map +0 -1
- package/dist/core/relation-queries.js +0 -107
- package/dist/core/relation-queries.js.map +0 -1
- package/dist/core/row-mappers.d.ts +0 -7
- package/dist/core/row-mappers.d.ts.map +0 -1
- package/dist/core/row-mappers.js +0 -52
- package/dist/core/row-mappers.js.map +0 -1
- package/dist/core/search-errors.d.ts +0 -2
- package/dist/core/search-errors.d.ts.map +0 -1
- package/dist/core/search-errors.js +0 -21
- package/dist/core/search-errors.js.map +0 -1
- package/dist/core/search.d.ts +0 -9
- package/dist/core/search.d.ts.map +0 -1
- package/dist/core/search.js +0 -57
- package/dist/core/search.js.map +0 -1
- package/dist/core/tag-helpers.d.ts +0 -2
- package/dist/core/tag-helpers.d.ts.map +0 -1
- package/dist/core/tag-helpers.js +0 -22
- package/dist/core/tag-helpers.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -131
- package/dist/index.js.map +0 -1
- package/dist/lib/errors.d.ts +0 -20
- package/dist/lib/errors.d.ts.map +0 -1
- package/dist/lib/errors.js +0 -20
- package/dist/lib/errors.js.map +0 -1
- package/dist/lib/tool_response.d.ts +0 -5
- package/dist/lib/tool_response.d.ts.map +0 -1
- package/dist/lib/tool_response.js +0 -7
- package/dist/lib/tool_response.js.map +0 -1
- package/dist/schemas/inputs.d.ts +0 -52
- package/dist/schemas/inputs.d.ts.map +0 -1
- package/dist/schemas/inputs.js +0 -134
- package/dist/schemas/inputs.js.map +0 -1
- package/dist/schemas/outputs.d.ts +0 -10
- package/dist/schemas/outputs.d.ts.map +0 -1
- package/dist/schemas/outputs.js +0 -30
- package/dist/schemas/outputs.js.map +0 -1
- package/dist/tools/delete-memory.d.ts +0 -3
- package/dist/tools/delete-memory.d.ts.map +0 -1
- package/dist/tools/delete-memory.js +0 -32
- package/dist/tools/delete-memory.js.map +0 -1
- package/dist/tools/get-memory.d.ts +0 -3
- package/dist/tools/get-memory.d.ts.map +0 -1
- package/dist/tools/get-memory.js +0 -32
- package/dist/tools/get-memory.js.map +0 -1
- package/dist/tools/get-related.d.ts +0 -3
- package/dist/tools/get-related.d.ts.map +0 -1
- package/dist/tools/get-related.js +0 -29
- package/dist/tools/get-related.js.map +0 -1
- package/dist/tools/index.d.ts +0 -3
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -147
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/link-memories.d.ts +0 -3
- package/dist/tools/link-memories.d.ts.map +0 -1
- package/dist/tools/link-memories.js +0 -29
- package/dist/tools/link-memories.js.map +0 -1
- package/dist/tools/memory-stats.d.ts +0 -3
- package/dist/tools/memory-stats.d.ts.map +0 -1
- package/dist/tools/memory-stats.js +0 -28
- package/dist/tools/memory-stats.js.map +0 -1
- package/dist/tools/search-memories.d.ts +0 -3
- package/dist/tools/search-memories.d.ts.map +0 -1
- package/dist/tools/search-memories.js +0 -29
- package/dist/tools/search-memories.js.map +0 -1
- package/dist/tools/store-memory.d.ts +0 -3
- package/dist/tools/store-memory.d.ts.map +0 -1
- package/dist/tools/store-memory.js +0 -29
- package/dist/tools/store-memory.js.map +0 -1
- package/dist/types/index.d.ts +0 -38
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/utils/config.d.ts +0 -10
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -75
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -10
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -21
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/protocol.d.ts +0 -2
- package/dist/utils/protocol.d.ts.map +0 -1
- package/dist/utils/protocol.js +0 -7
- 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 +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 +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"}
|