@easynet/agent-memory 0.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.
- package/README.md +260 -0
- package/bin/chat +11 -0
- package/dist/adapters/index.d.ts +8 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +29 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mem0/mem0-store.d.ts +29 -0
- package/dist/adapters/mem0/mem0-store.d.ts.map +1 -0
- package/dist/adapters/mem0/mem0-store.js +174 -0
- package/dist/adapters/mem0/mem0-store.js.map +1 -0
- package/dist/adapters/rag-http/rag-http-retriever.d.ts +18 -0
- package/dist/adapters/rag-http/rag-http-retriever.d.ts.map +1 -0
- package/dist/adapters/rag-http/rag-http-retriever.js +71 -0
- package/dist/adapters/rag-http/rag-http-retriever.js.map +1 -0
- package/dist/adapters/types.d.ts +25 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +6 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/boot/boot-rebuilder.d.ts +26 -0
- package/dist/boot/boot-rebuilder.d.ts.map +1 -0
- package/dist/boot/boot-rebuilder.js +112 -0
- package/dist/boot/boot-rebuilder.js.map +1 -0
- package/dist/boot/index.d.ts +3 -0
- package/dist/boot/index.d.ts.map +1 -0
- package/dist/boot/index.js +6 -0
- package/dist/boot/index.js.map +1 -0
- package/dist/cli/chat-split.d.ts +22 -0
- package/dist/cli/chat-split.d.ts.map +1 -0
- package/dist/cli/chat-split.js +187 -0
- package/dist/cli/chat-split.js.map +1 -0
- package/dist/cli/chat.d.ts +19 -0
- package/dist/cli/chat.d.ts.map +1 -0
- package/dist/cli/chat.js +266 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/commands/command-handler.d.ts +32 -0
- package/dist/cli/commands/command-handler.d.ts.map +1 -0
- package/dist/cli/commands/command-handler.js +143 -0
- package/dist/cli/commands/command-handler.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/display-manager.d.ts +18 -0
- package/dist/cli/ui/display-manager.d.ts.map +1 -0
- package/dist/cli/ui/display-manager.js +69 -0
- package/dist/cli/ui/display-manager.js.map +1 -0
- package/dist/cli/ui/screen-layout.d.ts +12 -0
- package/dist/cli/ui/screen-layout.d.ts.map +1 -0
- package/dist/cli/ui/screen-layout.js +125 -0
- package/dist/cli/ui/screen-layout.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +9 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +107 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/context/context-builder.d.ts +18 -0
- package/dist/context/context-builder.d.ts.map +1 -0
- package/dist/context/context-builder.js +91 -0
- package/dist/context/context-builder.js.map +1 -0
- package/dist/core/agent-memory.d.ts +50 -0
- package/dist/core/agent-memory.d.ts.map +1 -0
- package/dist/core/agent-memory.js +297 -0
- package/dist/core/agent-memory.js.map +1 -0
- package/dist/embedding/embedder.d.ts +49 -0
- package/dist/embedding/embedder.d.ts.map +1 -0
- package/dist/embedding/embedder.js +146 -0
- package/dist/embedding/embedder.js.map +1 -0
- package/dist/embedding/index.d.ts +3 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +8 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/gate/deduplicator.d.ts +22 -0
- package/dist/gate/deduplicator.d.ts.map +1 -0
- package/dist/gate/deduplicator.js +74 -0
- package/dist/gate/deduplicator.js.map +1 -0
- package/dist/gate/extractor.d.ts +33 -0
- package/dist/gate/extractor.d.ts.map +1 -0
- package/dist/gate/extractor.js +122 -0
- package/dist/gate/extractor.js.map +1 -0
- package/dist/gate/index.d.ts +3 -0
- package/dist/gate/index.d.ts.map +1 -0
- package/dist/gate/index.js +6 -0
- package/dist/gate/index.js.map +1 -0
- package/dist/gate/memory-gate.d.ts +27 -0
- package/dist/gate/memory-gate.d.ts.map +1 -0
- package/dist/gate/memory-gate.js +86 -0
- package/dist/gate/memory-gate.js.map +1 -0
- package/dist/gate/redactor.d.ts +14 -0
- package/dist/gate/redactor.d.ts.map +1 -0
- package/dist/gate/redactor.js +24 -0
- package/dist/gate/redactor.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/indexing/in-memory-index.d.ts +67 -0
- package/dist/indexing/in-memory-index.d.ts.map +1 -0
- package/dist/indexing/in-memory-index.js +135 -0
- package/dist/indexing/in-memory-index.js.map +1 -0
- package/dist/indexing/index.d.ts +3 -0
- package/dist/indexing/index.d.ts.map +1 -0
- package/dist/indexing/index.js +6 -0
- package/dist/indexing/index.js.map +1 -0
- package/dist/persistence/database/schema.d.ts +6 -0
- package/dist/persistence/database/schema.d.ts.map +1 -0
- package/dist/persistence/database/schema.js +75 -0
- package/dist/persistence/database/schema.js.map +1 -0
- package/dist/persistence/index.d.ts +3 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +6 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/repository/embedding-operations.d.ts +17 -0
- package/dist/persistence/repository/embedding-operations.d.ts.map +1 -0
- package/dist/persistence/repository/embedding-operations.js +58 -0
- package/dist/persistence/repository/embedding-operations.js.map +1 -0
- package/dist/persistence/repository/memory-operations.d.ts +28 -0
- package/dist/persistence/repository/memory-operations.d.ts.map +1 -0
- package/dist/persistence/repository/memory-operations.js +87 -0
- package/dist/persistence/repository/memory-operations.js.map +1 -0
- package/dist/persistence/repository/meta-operations.d.ts +15 -0
- package/dist/persistence/repository/meta-operations.d.ts.map +1 -0
- package/dist/persistence/repository/meta-operations.js +20 -0
- package/dist/persistence/repository/meta-operations.js.map +1 -0
- package/dist/persistence/sqlite-repo.d.ts +58 -0
- package/dist/persistence/sqlite-repo.d.ts.map +1 -0
- package/dist/persistence/sqlite-repo.js +81 -0
- package/dist/persistence/sqlite-repo.js.map +1 -0
- package/dist/persistence/utils/hash.d.ts +8 -0
- package/dist/persistence/utils/hash.d.ts.map +1 -0
- package/dist/persistence/utils/hash.js +48 -0
- package/dist/persistence/utils/hash.js.map +1 -0
- package/dist/persistence/utils/serialization.d.ts +33 -0
- package/dist/persistence/utils/serialization.d.ts.map +1 -0
- package/dist/persistence/utils/serialization.js +85 -0
- package/dist/persistence/utils/serialization.js.map +1 -0
- package/dist/processing/document/document-processor.d.ts +30 -0
- package/dist/processing/document/document-processor.d.ts.map +1 -0
- package/dist/processing/document/document-processor.js +158 -0
- package/dist/processing/document/document-processor.js.map +1 -0
- package/dist/processing/document/index.d.ts +3 -0
- package/dist/processing/document/index.d.ts.map +1 -0
- package/dist/processing/document/index.js +6 -0
- package/dist/processing/document/index.js.map +1 -0
- package/dist/ranker/ranker.d.ts +26 -0
- package/dist/ranker/ranker.d.ts.map +1 -0
- package/dist/ranker/ranker.js +40 -0
- package/dist/ranker/ranker.js.map +1 -0
- package/dist/recall/recall-engine.d.ts +19 -0
- package/dist/recall/recall-engine.d.ts.map +1 -0
- package/dist/recall/recall-engine.js +79 -0
- package/dist/recall/recall-engine.js.map +1 -0
- package/dist/types/config.d.ts +821 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +128 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/document.d.ts +37 -0
- package/dist/types/document.d.ts.map +1 -0
- package/dist/types/document.js +6 -0
- package/dist/types/document.js.map +1 -0
- package/dist/types/index.d.ts +86 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Database schema definitions
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SCHEMA_SQL = void 0;
|
|
7
|
+
exports.initializeDatabase = initializeDatabase;
|
|
8
|
+
exports.SCHEMA_SQL = `
|
|
9
|
+
CREATE TABLE IF NOT EXISTS memory_items (
|
|
10
|
+
id TEXT PRIMARY KEY,
|
|
11
|
+
type TEXT NOT NULL,
|
|
12
|
+
content TEXT NOT NULL,
|
|
13
|
+
content_hash TEXT NOT NULL,
|
|
14
|
+
|
|
15
|
+
actor_id TEXT,
|
|
16
|
+
actor_type TEXT,
|
|
17
|
+
scope_project_id TEXT,
|
|
18
|
+
scope_channel_id TEXT,
|
|
19
|
+
scope_thread_id TEXT,
|
|
20
|
+
scope_run_id TEXT,
|
|
21
|
+
|
|
22
|
+
tags_json TEXT,
|
|
23
|
+
confidence REAL,
|
|
24
|
+
utility REAL DEFAULT 0,
|
|
25
|
+
|
|
26
|
+
source_kind TEXT,
|
|
27
|
+
source_ref TEXT,
|
|
28
|
+
|
|
29
|
+
created_at TEXT NOT NULL,
|
|
30
|
+
updated_at TEXT,
|
|
31
|
+
deleted_at TEXT,
|
|
32
|
+
|
|
33
|
+
embedding_status TEXT NOT NULL DEFAULT 'pending',
|
|
34
|
+
embedding_model TEXT,
|
|
35
|
+
embedding_dim INTEGER,
|
|
36
|
+
embedding_updated_at TEXT
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_memory_scope
|
|
40
|
+
ON memory_items(scope_project_id, scope_channel_id, scope_thread_id, actor_id);
|
|
41
|
+
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_memory_hash
|
|
43
|
+
ON memory_items(content_hash);
|
|
44
|
+
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_memory_deleted
|
|
46
|
+
ON memory_items(deleted_at);
|
|
47
|
+
|
|
48
|
+
CREATE TABLE IF NOT EXISTS memory_embeddings (
|
|
49
|
+
memory_id TEXT PRIMARY KEY,
|
|
50
|
+
model TEXT NOT NULL,
|
|
51
|
+
dim INTEGER NOT NULL,
|
|
52
|
+
vector_blob BLOB NOT NULL,
|
|
53
|
+
created_at TEXT NOT NULL,
|
|
54
|
+
FOREIGN KEY(memory_id) REFERENCES memory_items(id) ON DELETE CASCADE
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
CREATE INDEX IF NOT EXISTS idx_embedding_model
|
|
58
|
+
ON memory_embeddings(model, dim);
|
|
59
|
+
|
|
60
|
+
CREATE TABLE IF NOT EXISTS kv_meta (
|
|
61
|
+
k TEXT PRIMARY KEY,
|
|
62
|
+
v TEXT NOT NULL
|
|
63
|
+
);
|
|
64
|
+
`;
|
|
65
|
+
function initializeDatabase(db, wal = true) {
|
|
66
|
+
// Set PRAGMA for performance
|
|
67
|
+
if (wal !== false) {
|
|
68
|
+
db.pragma("journal_mode = WAL");
|
|
69
|
+
}
|
|
70
|
+
db.pragma("synchronous = NORMAL");
|
|
71
|
+
db.pragma("busy_timeout = 5000");
|
|
72
|
+
// Create tables
|
|
73
|
+
db.exec(exports.SCHEMA_SQL);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/persistence/database/schema.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA4DH,gDAUC;AApEY,QAAA,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDzB,CAAC;AAEF,SAAgB,kBAAkB,CAAC,EAAO,EAAE,MAAe,IAAI;IAC7D,6BAA6B;IAC7B,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAClC,CAAC;IACD,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEjC,gBAAgB;IAChB,EAAE,CAAC,IAAI,CAAC,kBAAU,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SqliteMemoryRepo = void 0;
|
|
4
|
+
var sqlite_repo_1 = require("./sqlite-repo");
|
|
5
|
+
Object.defineProperty(exports, "SqliteMemoryRepo", { enumerable: true, get: function () { return sqlite_repo_1.SqliteMemoryRepo; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":";;;AAAA,6CAAiD;AAAxC,+GAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding operations for SQLite repository
|
|
3
|
+
*/
|
|
4
|
+
import Database from "better-sqlite3";
|
|
5
|
+
export interface EmbeddingOperations {
|
|
6
|
+
saveEmbedding(memoryId: string, model: string, dim: number, vector: Float32Array): Promise<void>;
|
|
7
|
+
markEmbeddingReady(memoryId: string, model: string, dim: number): Promise<void>;
|
|
8
|
+
loadEmbedding(memoryId: string): Promise<Float32Array | null>;
|
|
9
|
+
}
|
|
10
|
+
export declare class EmbeddingOperationsImpl implements EmbeddingOperations {
|
|
11
|
+
private db;
|
|
12
|
+
constructor(db: Database.Database);
|
|
13
|
+
saveEmbedding(memoryId: string, model: string, dim: number, vector: Float32Array): Promise<void>;
|
|
14
|
+
markEmbeddingReady(memoryId: string, model: string, dim: number): Promise<void>;
|
|
15
|
+
loadEmbedding(memoryId: string): Promise<Float32Array | null>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=embedding-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-operations.d.ts","sourceRoot":"","sources":["../../../src/persistence/repository/embedding-operations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;CAC/D;AAED,qBAAa,uBAAwB,YAAW,mBAAmB;IACrD,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAEnC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BhG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/E,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CAapE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Embedding operations for SQLite repository
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EmbeddingOperationsImpl = void 0;
|
|
7
|
+
class EmbeddingOperationsImpl {
|
|
8
|
+
constructor(db) {
|
|
9
|
+
this.db = db;
|
|
10
|
+
}
|
|
11
|
+
async saveEmbedding(memoryId, model, dim, vector) {
|
|
12
|
+
const buffer = Buffer.from(vector.buffer);
|
|
13
|
+
const now = new Date().toISOString();
|
|
14
|
+
this.db
|
|
15
|
+
.prepare(`
|
|
16
|
+
INSERT OR REPLACE INTO memory_embeddings (memory_id, model, dim, vector_blob, created_at)
|
|
17
|
+
VALUES (?, ?, ?, ?, ?)
|
|
18
|
+
`)
|
|
19
|
+
.run(memoryId, model, dim, buffer, now);
|
|
20
|
+
// Update embedding status
|
|
21
|
+
this.db
|
|
22
|
+
.prepare(`
|
|
23
|
+
UPDATE memory_items
|
|
24
|
+
SET embedding_status = 'ready',
|
|
25
|
+
embedding_model = ?,
|
|
26
|
+
embedding_dim = ?,
|
|
27
|
+
embedding_updated_at = ?
|
|
28
|
+
WHERE id = ?
|
|
29
|
+
`)
|
|
30
|
+
.run(model, dim, now, memoryId);
|
|
31
|
+
}
|
|
32
|
+
async markEmbeddingReady(memoryId, model, dim) {
|
|
33
|
+
const now = new Date().toISOString();
|
|
34
|
+
this.db
|
|
35
|
+
.prepare(`
|
|
36
|
+
UPDATE memory_items
|
|
37
|
+
SET embedding_status = 'ready',
|
|
38
|
+
embedding_model = ?,
|
|
39
|
+
embedding_dim = ?,
|
|
40
|
+
embedding_updated_at = ?
|
|
41
|
+
WHERE id = ?
|
|
42
|
+
`)
|
|
43
|
+
.run(model, dim, now, memoryId);
|
|
44
|
+
}
|
|
45
|
+
async loadEmbedding(memoryId) {
|
|
46
|
+
const row = this.db
|
|
47
|
+
.prepare("SELECT vector_blob FROM memory_embeddings WHERE memory_id = ?")
|
|
48
|
+
.get(memoryId);
|
|
49
|
+
if (!row) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
// Convert BLOB to Float32Array
|
|
53
|
+
const buffer = row.vector_blob;
|
|
54
|
+
return new Float32Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / 4);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.EmbeddingOperationsImpl = EmbeddingOperationsImpl;
|
|
58
|
+
//# sourceMappingURL=embedding-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-operations.js","sourceRoot":"","sources":["../../../src/persistence/repository/embedding-operations.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAUH,MAAa,uBAAuB;IAClC,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAE7C,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,KAAa,EAAE,GAAW,EAAE,MAAoB;QACpF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;OAGD,CACA;aACA,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAE1C,0BAA0B;QAC1B,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;OAOD,CACA;aACA,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAgB,EAAE,KAAa,EAAE,GAAW;QACnE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;OAOD,CACA;aACA,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,+DAA+D,CAAC;aACxE,GAAG,CAAC,QAAQ,CAAwC,CAAC;QAExD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,+BAA+B;QAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC;QAC/B,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACnF,CAAC;CACF;AA5DD,0DA4DC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory operations for SQLite repository
|
|
3
|
+
*/
|
|
4
|
+
import Database from "better-sqlite3";
|
|
5
|
+
import { MemoryItem } from "../../types";
|
|
6
|
+
export interface MemoryOperations {
|
|
7
|
+
upsertMemory(item: MemoryItem): Promise<{
|
|
8
|
+
inserted: boolean;
|
|
9
|
+
}>;
|
|
10
|
+
loadAllActive(opts?: {
|
|
11
|
+
limit?: number;
|
|
12
|
+
orderBy?: "utility" | "createdAt";
|
|
13
|
+
}): Promise<MemoryItem[]>;
|
|
14
|
+
loadByIds(ids: string[]): Promise<MemoryItem[]>;
|
|
15
|
+
}
|
|
16
|
+
export declare class MemoryOperationsImpl implements MemoryOperations {
|
|
17
|
+
private db;
|
|
18
|
+
constructor(db: Database.Database);
|
|
19
|
+
upsertMemory(item: MemoryItem): Promise<{
|
|
20
|
+
inserted: boolean;
|
|
21
|
+
}>;
|
|
22
|
+
loadAllActive(opts?: {
|
|
23
|
+
limit?: number;
|
|
24
|
+
orderBy?: "utility" | "createdAt";
|
|
25
|
+
}): Promise<MemoryItem[]>;
|
|
26
|
+
loadByIds(ids: string[]): Promise<MemoryItem[]>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=memory-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-operations.d.ts","sourceRoot":"","sources":["../../../src/persistence/repository/memory-operations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC/D,aAAa,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACnG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CACjD;AAED,qBAAa,oBAAqB,YAAW,gBAAgB;IAC/C,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAEnC,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAkF9D,aAAa,CAAC,IAAI,CAAC,EAAE;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;KACnC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAkBnB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAetD"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Memory operations for SQLite repository
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MemoryOperationsImpl = void 0;
|
|
7
|
+
const hash_1 = require("../utils/hash");
|
|
8
|
+
const serialization_1 = require("../utils/serialization");
|
|
9
|
+
class MemoryOperationsImpl {
|
|
10
|
+
constructor(db) {
|
|
11
|
+
this.db = db;
|
|
12
|
+
}
|
|
13
|
+
async upsertMemory(item) {
|
|
14
|
+
const contentHash = (0, hash_1.computeContentHash)(item.content);
|
|
15
|
+
const actorFields = (0, serialization_1.serializeActor)(item.actor);
|
|
16
|
+
const scopeFields = (0, serialization_1.serializeScope)(item.scope);
|
|
17
|
+
const now = new Date().toISOString();
|
|
18
|
+
// Check if exists (same content_hash + scope)
|
|
19
|
+
const existing = this.db
|
|
20
|
+
.prepare(`
|
|
21
|
+
SELECT id FROM memory_items
|
|
22
|
+
WHERE content_hash = ?
|
|
23
|
+
AND scope_project_id IS ?
|
|
24
|
+
AND scope_channel_id IS ?
|
|
25
|
+
AND scope_thread_id IS ?
|
|
26
|
+
AND actor_id IS ?
|
|
27
|
+
AND deleted_at IS NULL
|
|
28
|
+
LIMIT 1
|
|
29
|
+
`)
|
|
30
|
+
.get(contentHash, scopeFields.scope_project_id || null, scopeFields.scope_channel_id || null, scopeFields.scope_thread_id || null, actorFields.actor_id || null);
|
|
31
|
+
if (existing) {
|
|
32
|
+
// Update existing
|
|
33
|
+
this.db
|
|
34
|
+
.prepare(`
|
|
35
|
+
UPDATE memory_items
|
|
36
|
+
SET updated_at = ?,
|
|
37
|
+
confidence = COALESCE(?, confidence),
|
|
38
|
+
utility = COALESCE(?, utility),
|
|
39
|
+
tags_json = ?
|
|
40
|
+
WHERE id = ?
|
|
41
|
+
`)
|
|
42
|
+
.run(now, item.confidence, item.utility, item.tags ? JSON.stringify(item.tags) : null, existing.id);
|
|
43
|
+
return { inserted: false };
|
|
44
|
+
}
|
|
45
|
+
// Insert new
|
|
46
|
+
this.db
|
|
47
|
+
.prepare(`
|
|
48
|
+
INSERT INTO memory_items (
|
|
49
|
+
id, type, content, content_hash,
|
|
50
|
+
actor_id, actor_type,
|
|
51
|
+
scope_project_id, scope_channel_id, scope_thread_id, scope_run_id,
|
|
52
|
+
tags_json, confidence, utility,
|
|
53
|
+
source_kind, source_ref,
|
|
54
|
+
created_at, embedding_status
|
|
55
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending')
|
|
56
|
+
`)
|
|
57
|
+
.run(item.id, item.type, item.content, contentHash, actorFields.actor_id || null, actorFields.actor_type || null, scopeFields.scope_project_id || null, scopeFields.scope_channel_id || null, scopeFields.scope_thread_id || null, scopeFields.scope_run_id || null, item.tags ? JSON.stringify(item.tags) : null, item.confidence || null, item.utility || 0, item.source?.kind || null, item.source?.ref || null, now);
|
|
58
|
+
return { inserted: true };
|
|
59
|
+
}
|
|
60
|
+
async loadAllActive(opts) {
|
|
61
|
+
const orderBy = opts?.orderBy === "utility" ? "utility DESC, created_at DESC" : "created_at DESC";
|
|
62
|
+
const limit = opts?.limit ? `LIMIT ${opts.limit}` : "";
|
|
63
|
+
const rows = this.db
|
|
64
|
+
.prepare(`
|
|
65
|
+
SELECT * FROM memory_items
|
|
66
|
+
WHERE deleted_at IS NULL
|
|
67
|
+
ORDER BY ${orderBy}
|
|
68
|
+
${limit}
|
|
69
|
+
`)
|
|
70
|
+
.all();
|
|
71
|
+
return rows.map((row) => (0, serialization_1.rowToMemoryItem)(row, serialization_1.deserializeActor, serialization_1.deserializeScope));
|
|
72
|
+
}
|
|
73
|
+
async loadByIds(ids) {
|
|
74
|
+
if (ids.length === 0)
|
|
75
|
+
return [];
|
|
76
|
+
const placeholders = ids.map(() => "?").join(",");
|
|
77
|
+
const rows = this.db
|
|
78
|
+
.prepare(`
|
|
79
|
+
SELECT * FROM memory_items
|
|
80
|
+
WHERE id IN (${placeholders}) AND deleted_at IS NULL
|
|
81
|
+
`)
|
|
82
|
+
.all(...ids);
|
|
83
|
+
return rows.map((row) => (0, serialization_1.rowToMemoryItem)(row, serialization_1.deserializeActor, serialization_1.deserializeScope));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.MemoryOperationsImpl = MemoryOperationsImpl;
|
|
87
|
+
//# sourceMappingURL=memory-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-operations.js","sourceRoot":"","sources":["../../../src/persistence/repository/memory-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metadata operations for SQLite repository
|
|
3
|
+
*/
|
|
4
|
+
import Database from "better-sqlite3";
|
|
5
|
+
export interface MetaOperations {
|
|
6
|
+
getMeta(key: string): Promise<string | null>;
|
|
7
|
+
setMeta(key: string, value: string): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare class MetaOperationsImpl implements MetaOperations {
|
|
10
|
+
private db;
|
|
11
|
+
constructor(db: Database.Database);
|
|
12
|
+
getMeta(key: string): Promise<string | null>;
|
|
13
|
+
setMeta(key: string, value: string): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=meta-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-operations.d.ts","sourceRoot":"","sources":["../../../src/persistence/repository/meta-operations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED,qBAAa,kBAAmB,YAAW,cAAc;IAC3C,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAEnC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK5C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Metadata operations for SQLite repository
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MetaOperationsImpl = void 0;
|
|
7
|
+
class MetaOperationsImpl {
|
|
8
|
+
constructor(db) {
|
|
9
|
+
this.db = db;
|
|
10
|
+
}
|
|
11
|
+
async getMeta(key) {
|
|
12
|
+
const row = this.db.prepare("SELECT v FROM kv_meta WHERE k = ?").get(key);
|
|
13
|
+
return row?.v || null;
|
|
14
|
+
}
|
|
15
|
+
async setMeta(key, value) {
|
|
16
|
+
this.db.prepare("INSERT OR REPLACE INTO kv_meta (k, v) VALUES (?, ?)").run(key, value);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.MetaOperationsImpl = MetaOperationsImpl;
|
|
20
|
+
//# sourceMappingURL=meta-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-operations.js","sourceRoot":"","sources":["../../../src/persistence/repository/meta-operations.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AASH,MAAa,kBAAkB;IAC7B,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAE7C,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,CAAC,GAAG,CAA8B,CAAC;QACvG,OAAO,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAa;QACtC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzF,CAAC;CACF;AAXD,gDAWC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Memory Repository - Source of Truth
|
|
3
|
+
*/
|
|
4
|
+
import { MemoryItem } from "../types";
|
|
5
|
+
export interface SqliteMemoryRepoOptions {
|
|
6
|
+
path: string;
|
|
7
|
+
wal?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class SqliteMemoryRepo {
|
|
10
|
+
private options;
|
|
11
|
+
private db;
|
|
12
|
+
private memoryOps;
|
|
13
|
+
private embeddingOps;
|
|
14
|
+
private metaOps;
|
|
15
|
+
constructor(options: SqliteMemoryRepoOptions);
|
|
16
|
+
/**
|
|
17
|
+
* UPSERT memory item
|
|
18
|
+
*/
|
|
19
|
+
upsertMemory(item: MemoryItem): Promise<{
|
|
20
|
+
inserted: boolean;
|
|
21
|
+
}>;
|
|
22
|
+
/**
|
|
23
|
+
* Save embedding vector
|
|
24
|
+
*/
|
|
25
|
+
saveEmbedding(memoryId: string, model: string, dim: number, vector: Float32Array): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Mark embedding as ready
|
|
28
|
+
*/
|
|
29
|
+
markEmbeddingReady(memoryId: string, model: string, dim: number): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Load all active memory items
|
|
32
|
+
*/
|
|
33
|
+
loadAllActive(opts?: {
|
|
34
|
+
limit?: number;
|
|
35
|
+
orderBy?: "utility" | "createdAt";
|
|
36
|
+
}): Promise<MemoryItem[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Load memory items by IDs
|
|
39
|
+
*/
|
|
40
|
+
loadByIds(ids: string[]): Promise<MemoryItem[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Get metadata value
|
|
43
|
+
*/
|
|
44
|
+
getMeta(key: string): Promise<string | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Set metadata value
|
|
47
|
+
*/
|
|
48
|
+
setMeta(key: string, value: string): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Load embedding vector by memory ID
|
|
51
|
+
*/
|
|
52
|
+
loadEmbedding(memoryId: string): Promise<Float32Array | null>;
|
|
53
|
+
/**
|
|
54
|
+
* Close database connection
|
|
55
|
+
*/
|
|
56
|
+
close(): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=sqlite-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-repo.d.ts","sourceRoot":"","sources":["../../src/persistence/sqlite-repo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAMtC,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,qBAAa,gBAAgB;IAMf,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,OAAO,CAAqB;gBAEhB,OAAO,EAAE,uBAAuB;IAUpD;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAIpE;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAItG;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF;;OAEG;IACG,aAAa,CAAC,IAAI,CAAC,EAAE;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;KACnC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIzB;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIrD;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIlD;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAInE;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SQLite Memory Repository - Source of Truth
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.SqliteMemoryRepo = void 0;
|
|
10
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
11
|
+
const schema_1 = require("./database/schema");
|
|
12
|
+
const memory_operations_1 = require("./repository/memory-operations");
|
|
13
|
+
const embedding_operations_1 = require("./repository/embedding-operations");
|
|
14
|
+
const meta_operations_1 = require("./repository/meta-operations");
|
|
15
|
+
class SqliteMemoryRepo {
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.options = options;
|
|
18
|
+
this.db = new better_sqlite3_1.default(options.path);
|
|
19
|
+
(0, schema_1.initializeDatabase)(this.db, options.wal !== false);
|
|
20
|
+
// Initialize operation handlers
|
|
21
|
+
this.memoryOps = new memory_operations_1.MemoryOperationsImpl(this.db);
|
|
22
|
+
this.embeddingOps = new embedding_operations_1.EmbeddingOperationsImpl(this.db);
|
|
23
|
+
this.metaOps = new meta_operations_1.MetaOperationsImpl(this.db);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* UPSERT memory item
|
|
27
|
+
*/
|
|
28
|
+
async upsertMemory(item) {
|
|
29
|
+
return this.memoryOps.upsertMemory(item);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Save embedding vector
|
|
33
|
+
*/
|
|
34
|
+
async saveEmbedding(memoryId, model, dim, vector) {
|
|
35
|
+
return this.embeddingOps.saveEmbedding(memoryId, model, dim, vector);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Mark embedding as ready
|
|
39
|
+
*/
|
|
40
|
+
async markEmbeddingReady(memoryId, model, dim) {
|
|
41
|
+
return this.embeddingOps.markEmbeddingReady(memoryId, model, dim);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Load all active memory items
|
|
45
|
+
*/
|
|
46
|
+
async loadAllActive(opts) {
|
|
47
|
+
return this.memoryOps.loadAllActive(opts);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load memory items by IDs
|
|
51
|
+
*/
|
|
52
|
+
async loadByIds(ids) {
|
|
53
|
+
return this.memoryOps.loadByIds(ids);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get metadata value
|
|
57
|
+
*/
|
|
58
|
+
async getMeta(key) {
|
|
59
|
+
return this.metaOps.getMeta(key);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Set metadata value
|
|
63
|
+
*/
|
|
64
|
+
async setMeta(key, value) {
|
|
65
|
+
return this.metaOps.setMeta(key, value);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Load embedding vector by memory ID
|
|
69
|
+
*/
|
|
70
|
+
async loadEmbedding(memoryId) {
|
|
71
|
+
return this.embeddingOps.loadEmbedding(memoryId);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Close database connection
|
|
75
|
+
*/
|
|
76
|
+
close() {
|
|
77
|
+
this.db.close();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.SqliteMemoryRepo = SqliteMemoryRepo;
|
|
81
|
+
//# sourceMappingURL=sqlite-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-repo.js","sourceRoot":"","sources":["../../src/persistence/sqlite-repo.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,oEAAsC;AAEtC,8CAAuD;AACvD,sEAAsE;AACtE,4EAA4E;AAC5E,kEAAkE;AAOlE,MAAa,gBAAgB;IAM3B,YAAoB,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;QAClD,IAAI,CAAC,EAAE,GAAG,IAAI,wBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAA,2BAAkB,EAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;QAEnD,gCAAgC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,wCAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,8CAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,IAAI,oCAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,IAAgB;QACjC,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,KAAa,EAAE,GAAW,EAAE,MAAoB;QACpF,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,QAAgB,EAAE,KAAa,EAAE,GAAW;QACnE,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,IAGnB;QACC,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,GAAa;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAa;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAjFD,4CAiFC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../src/persistence/utils/hash.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG1D"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hash utilities for content deduplication
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.computeContentHash = computeContentHash;
|
|
40
|
+
const crypto = __importStar(require("crypto"));
|
|
41
|
+
/**
|
|
42
|
+
* Compute content hash for deduplication
|
|
43
|
+
*/
|
|
44
|
+
function computeContentHash(content) {
|
|
45
|
+
const normalized = content.trim().toLowerCase();
|
|
46
|
+
return crypto.createHash("sha256").update(normalized).digest("hex");
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/persistence/utils/hash.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOH,gDAGC;AARD,+CAAiC;AAEjC;;GAEG;AACH,SAAgB,kBAAkB,CAAC,OAAe;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialization utilities for SQLite repository
|
|
3
|
+
*/
|
|
4
|
+
import { Actor, Scope, MemoryItem } from "../../types";
|
|
5
|
+
/**
|
|
6
|
+
* Serialize actor to database fields
|
|
7
|
+
*/
|
|
8
|
+
export declare function serializeActor(actor?: Actor): {
|
|
9
|
+
actor_id?: string;
|
|
10
|
+
actor_type?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Deserialize actor from database
|
|
14
|
+
*/
|
|
15
|
+
export declare function deserializeActor(row: any): Actor | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Serialize scope to database fields
|
|
18
|
+
*/
|
|
19
|
+
export declare function serializeScope(scope?: Scope): {
|
|
20
|
+
scope_project_id?: string;
|
|
21
|
+
scope_channel_id?: string;
|
|
22
|
+
scope_thread_id?: string;
|
|
23
|
+
scope_run_id?: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Deserialize scope from database
|
|
27
|
+
*/
|
|
28
|
+
export declare function deserializeScope(row: any): Scope | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Convert database row to MemoryItem
|
|
31
|
+
*/
|
|
32
|
+
export declare function rowToMemoryItem(row: any, deserializeActorFn: (row: any) => Actor | undefined, deserializeScopeFn: (row: any) => Scope | undefined): MemoryItem;
|
|
33
|
+
//# sourceMappingURL=serialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../../src/persistence/utils/serialization.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAMxF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,GAAG,SAAS,CAO5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAQA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,GAAG,SAAS,CAU5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,KAAK,GAAG,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,KAAK,GAAG,SAAS,GAAG,UAAU,CAoB9J"}
|