@framers/agentos 0.2.11 → 0.3.0
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/dist/ingest-router/executors/EntityExtractor.d.ts +23 -0
- package/dist/ingest-router/executors/EntityExtractor.d.ts.map +1 -0
- package/dist/ingest-router/executors/EntityExtractor.js +69 -0
- package/dist/ingest-router/executors/EntityExtractor.js.map +1 -0
- package/dist/ingest-router/executors/EntityLinkingIngestExecutor.d.ts +46 -0
- package/dist/ingest-router/executors/EntityLinkingIngestExecutor.d.ts.map +1 -0
- package/dist/ingest-router/executors/EntityLinkingIngestExecutor.js +45 -0
- package/dist/ingest-router/executors/EntityLinkingIngestExecutor.js.map +1 -0
- package/dist/ingest-router/executors/RawChunksIngestExecutor.d.ts +36 -0
- package/dist/ingest-router/executors/RawChunksIngestExecutor.d.ts.map +1 -0
- package/dist/ingest-router/executors/RawChunksIngestExecutor.js +33 -0
- package/dist/ingest-router/executors/RawChunksIngestExecutor.js.map +1 -0
- package/dist/ingest-router/executors/SkipIngestExecutor.d.ts +20 -0
- package/dist/ingest-router/executors/SkipIngestExecutor.d.ts.map +1 -0
- package/dist/ingest-router/executors/SkipIngestExecutor.js +28 -0
- package/dist/ingest-router/executors/SkipIngestExecutor.js.map +1 -0
- package/dist/ingest-router/executors/SummarizedIngestExecutor.d.ts +68 -0
- package/dist/ingest-router/executors/SummarizedIngestExecutor.d.ts.map +1 -0
- package/dist/ingest-router/executors/SummarizedIngestExecutor.js +56 -0
- package/dist/ingest-router/executors/SummarizedIngestExecutor.js.map +1 -0
- package/dist/ingest-router/executors/entity-types.d.ts +55 -0
- package/dist/ingest-router/executors/entity-types.d.ts.map +1 -0
- package/dist/ingest-router/executors/entity-types.js +17 -0
- package/dist/ingest-router/executors/entity-types.js.map +1 -0
- package/dist/ingest-router/executors/index.d.ts +37 -0
- package/dist/ingest-router/executors/index.d.ts.map +1 -0
- package/dist/ingest-router/executors/index.js +37 -0
- package/dist/ingest-router/executors/index.js.map +1 -0
- package/dist/ingest-router/index.d.ts +2 -0
- package/dist/ingest-router/index.d.ts.map +1 -1
- package/dist/ingest-router/index.js +14 -0
- package/dist/ingest-router/index.js.map +1 -1
- package/dist/memory/AgentMemory.js +1 -1
- package/dist/memory/AgentMemory.js.map +1 -1
- package/dist/memory/CognitiveMemoryManager.js +4 -4
- package/dist/memory/CognitiveMemoryManager.js.map +1 -1
- package/dist/memory/archive/IMemoryArchive.d.ts +2 -2
- package/dist/memory/archive/SqlStorageMemoryArchive.d.ts +17 -13
- package/dist/memory/archive/SqlStorageMemoryArchive.d.ts.map +1 -1
- package/dist/memory/archive/SqlStorageMemoryArchive.js +36 -28
- package/dist/memory/archive/SqlStorageMemoryArchive.js.map +1 -1
- package/dist/memory/core/config.d.ts +4 -4
- package/dist/memory/core/config.d.ts.map +1 -1
- package/dist/memory/index.d.ts +3 -3
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +3 -3
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/io/ChatGptImporter.d.ts +5 -5
- package/dist/memory/io/ChatGptImporter.d.ts.map +1 -1
- package/dist/memory/io/ChatGptImporter.js +9 -7
- package/dist/memory/io/ChatGptImporter.js.map +1 -1
- package/dist/memory/io/CsvImporter.d.ts +4 -4
- package/dist/memory/io/CsvImporter.d.ts.map +1 -1
- package/dist/memory/io/CsvImporter.js +11 -8
- package/dist/memory/io/CsvImporter.js.map +1 -1
- package/dist/memory/io/JsonExporter.d.ts +5 -5
- package/dist/memory/io/JsonExporter.d.ts.map +1 -1
- package/dist/memory/io/JsonExporter.js +13 -12
- package/dist/memory/io/JsonExporter.js.map +1 -1
- package/dist/memory/io/JsonImporter.d.ts +5 -5
- package/dist/memory/io/JsonImporter.d.ts.map +1 -1
- package/dist/memory/io/JsonImporter.js +50 -34
- package/dist/memory/io/JsonImporter.js.map +1 -1
- package/dist/memory/io/MarkdownExporter.d.ts +4 -4
- package/dist/memory/io/MarkdownExporter.d.ts.map +1 -1
- package/dist/memory/io/MarkdownExporter.js +1 -1
- package/dist/memory/io/MarkdownExporter.js.map +1 -1
- package/dist/memory/io/MarkdownImporter.d.ts +6 -6
- package/dist/memory/io/MarkdownImporter.d.ts.map +1 -1
- package/dist/memory/io/MarkdownImporter.js +8 -7
- package/dist/memory/io/MarkdownImporter.js.map +1 -1
- package/dist/memory/io/ObsidianImporter.d.ts +4 -4
- package/dist/memory/io/ObsidianImporter.d.ts.map +1 -1
- package/dist/memory/io/ObsidianImporter.js +15 -10
- package/dist/memory/io/ObsidianImporter.js.map +1 -1
- package/dist/memory/io/SqliteExporter.d.ts +5 -5
- package/dist/memory/io/SqliteExporter.d.ts.map +1 -1
- package/dist/memory/io/SqliteExporter.js +3 -3
- package/dist/memory/io/SqliteExporter.js.map +1 -1
- package/dist/memory/io/SqliteImporter.d.ts +4 -4
- package/dist/memory/io/SqliteImporter.d.ts.map +1 -1
- package/dist/memory/io/SqliteImporter.js +23 -16
- package/dist/memory/io/SqliteImporter.js.map +1 -1
- package/dist/memory/io/facade/Memory.d.ts +58 -10
- package/dist/memory/io/facade/Memory.d.ts.map +1 -1
- package/dist/memory/io/facade/Memory.js +124 -50
- package/dist/memory/io/facade/Memory.js.map +1 -1
- package/dist/memory/io/facade/types.d.ts +1 -1
- package/dist/memory/io/index.d.ts +2 -2
- package/dist/memory/io/index.js +2 -2
- package/dist/memory/io/tools/MemoryAddTool.d.ts +2 -2
- package/dist/memory/io/tools/MemoryAddTool.d.ts.map +1 -1
- package/dist/memory/io/tools/MemoryAddTool.js +2 -2
- package/dist/memory/io/tools/MemoryAddTool.js.map +1 -1
- package/dist/memory/io/tools/MemoryDeleteTool.d.ts +2 -2
- package/dist/memory/io/tools/MemoryDeleteTool.d.ts.map +1 -1
- package/dist/memory/io/tools/MemoryDeleteTool.js +1 -1
- package/dist/memory/io/tools/MemoryDeleteTool.js.map +1 -1
- package/dist/memory/io/tools/MemoryMergeTool.d.ts +2 -2
- package/dist/memory/io/tools/MemoryMergeTool.d.ts.map +1 -1
- package/dist/memory/io/tools/MemoryMergeTool.js +4 -3
- package/dist/memory/io/tools/MemoryMergeTool.js.map +1 -1
- package/dist/memory/io/tools/MemoryReflectTool.d.ts +2 -2
- package/dist/memory/io/tools/MemoryReflectTool.d.ts.map +1 -1
- package/dist/memory/io/tools/MemoryReflectTool.js.map +1 -1
- package/dist/memory/io/tools/MemorySearchTool.d.ts +2 -2
- package/dist/memory/io/tools/MemorySearchTool.d.ts.map +1 -1
- package/dist/memory/io/tools/MemorySearchTool.js.map +1 -1
- package/dist/memory/io/tools/MemoryUpdateTool.d.ts +2 -2
- package/dist/memory/io/tools/MemoryUpdateTool.d.ts.map +1 -1
- package/dist/memory/io/tools/MemoryUpdateTool.js +5 -4
- package/dist/memory/io/tools/MemoryUpdateTool.js.map +1 -1
- package/dist/memory/pipeline/consolidation/ConsolidationLoop.d.ts +3 -3
- package/dist/memory/pipeline/consolidation/ConsolidationLoop.d.ts.map +1 -1
- package/dist/memory/pipeline/consolidation/ConsolidationLoop.js +22 -17
- package/dist/memory/pipeline/consolidation/ConsolidationLoop.js.map +1 -1
- package/dist/memory/retrieval/feedback/RetrievalFeedbackSignal.d.ts +3 -3
- package/dist/memory/retrieval/feedback/RetrievalFeedbackSignal.d.ts.map +1 -1
- package/dist/memory/retrieval/feedback/RetrievalFeedbackSignal.js +15 -12
- package/dist/memory/retrieval/feedback/RetrievalFeedbackSignal.js.map +1 -1
- package/dist/memory/retrieval/graph/index.d.ts +0 -1
- package/dist/memory/retrieval/graph/index.d.ts.map +1 -1
- package/dist/memory/retrieval/graph/index.js +4 -1
- package/dist/memory/retrieval/graph/index.js.map +1 -1
- package/dist/memory/retrieval/store/{SqliteBrain.d.ts → Brain.d.ts} +111 -23
- package/dist/memory/retrieval/store/Brain.d.ts.map +1 -0
- package/dist/memory/retrieval/store/{SqliteBrain.js → Brain.js} +367 -76
- package/dist/memory/retrieval/store/Brain.js.map +1 -0
- package/dist/memory/retrieval/store/HnswSidecar.d.ts +1 -1
- package/dist/memory/retrieval/store/HnswSidecar.js +1 -1
- package/dist/memory/retrieval/store/MemoryStore.d.ts +6 -6
- package/dist/memory/retrieval/store/MemoryStore.d.ts.map +1 -1
- package/dist/memory/retrieval/store/MemoryStore.js +10 -9
- package/dist/memory/retrieval/store/MemoryStore.js.map +1 -1
- package/dist/memory/retrieval/store/{SqliteKnowledgeGraph.d.ts → SqlKnowledgeGraph.d.ts} +12 -12
- package/dist/memory/retrieval/store/SqlKnowledgeGraph.d.ts.map +1 -0
- package/dist/memory/retrieval/store/{SqliteKnowledgeGraph.js → SqlKnowledgeGraph.js} +83 -64
- package/dist/memory/retrieval/store/SqlKnowledgeGraph.js.map +1 -0
- package/dist/memory/retrieval/store/{SqliteMemoryGraph.d.ts → SqlMemoryGraph.d.ts} +11 -11
- package/dist/memory/retrieval/store/SqlMemoryGraph.d.ts.map +1 -0
- package/dist/memory/retrieval/store/{SqliteMemoryGraph.js → SqlMemoryGraph.js} +26 -24
- package/dist/memory/retrieval/store/SqlMemoryGraph.js.map +1 -0
- package/dist/memory/retrieval/store/migrations/v1-to-v2.d.ts +31 -0
- package/dist/memory/retrieval/store/migrations/v1-to-v2.d.ts.map +1 -0
- package/dist/memory/retrieval/store/migrations/v1-to-v2.js +423 -0
- package/dist/memory/retrieval/store/migrations/v1-to-v2.js.map +1 -0
- package/dist/memory-router/backends/EntityRetrievalRanker.d.ts +54 -0
- package/dist/memory-router/backends/EntityRetrievalRanker.d.ts.map +1 -0
- package/dist/memory-router/backends/EntityRetrievalRanker.js +39 -0
- package/dist/memory-router/backends/EntityRetrievalRanker.js.map +1 -0
- package/dist/memory-router/backends/index.d.ts +16 -0
- package/dist/memory-router/backends/index.d.ts.map +1 -0
- package/dist/memory-router/backends/index.js +16 -0
- package/dist/memory-router/backends/index.js.map +1 -0
- package/dist/memory-router/index.d.ts +2 -0
- package/dist/memory-router/index.d.ts.map +1 -1
- package/dist/memory-router/index.js +4 -0
- package/dist/memory-router/index.js.map +1 -1
- package/dist/rag/utils/vectorMath.d.ts +1 -1
- package/dist/rag/utils/vectorMath.js +1 -1
- package/dist/rag/vector-search/HnswIndexSidecar.d.ts +1 -1
- package/dist/rag/vector-search/HnswIndexSidecar.js +1 -1
- package/package.json +2 -2
- package/dist/memory/retrieval/graph/knowledge/SqliteKnowledgeGraph.d.ts +0 -10
- package/dist/memory/retrieval/graph/knowledge/SqliteKnowledgeGraph.d.ts.map +0 -1
- package/dist/memory/retrieval/graph/knowledge/SqliteKnowledgeGraph.js +0 -10
- package/dist/memory/retrieval/graph/knowledge/SqliteKnowledgeGraph.js.map +0 -1
- package/dist/memory/retrieval/store/SqliteBrain.d.ts.map +0 -1
- package/dist/memory/retrieval/store/SqliteBrain.js.map +0 -1
- package/dist/memory/retrieval/store/SqliteKnowledgeGraph.d.ts.map +0 -1
- package/dist/memory/retrieval/store/SqliteKnowledgeGraph.js.map +0 -1
- package/dist/memory/retrieval/store/SqliteMemoryGraph.d.ts.map +0 -1
- package/dist/memory/retrieval/store/SqliteMemoryGraph.js.map +0 -1
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* @fileoverview Memory facade -- unified public API for the complete memory system.
|
|
3
3
|
*
|
|
4
4
|
* The `Memory` class wires together every subsystem built in Tasks 1-12:
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
5
|
+
* - Brain (unified SQLite connection with WAL, full schema)
|
|
6
|
+
* - SqlKnowledgeGraph (IKnowledgeGraph backed by SQLite)
|
|
7
|
+
* - SqlMemoryGraph (IMemoryGraph with spreading activation)
|
|
8
8
|
* - LoaderRegistry (document loaders: text, md, html, pdf, docx)
|
|
9
9
|
* - FolderScanner (recursive directory scanning)
|
|
10
10
|
* - ChunkingEngine (4 chunking strategies)
|
|
@@ -68,7 +68,7 @@ export declare class Memory {
|
|
|
68
68
|
/** Optional embedding function for vector search (set via config.embed). */
|
|
69
69
|
private readonly _embed;
|
|
70
70
|
/**
|
|
71
|
-
* Private constructor. Receives an already-opened
|
|
71
|
+
* Private constructor. Receives an already-opened Brain and
|
|
72
72
|
* pre-computed configuration. Use {@link Memory.create} to instantiate.
|
|
73
73
|
*/
|
|
74
74
|
private constructor();
|
|
@@ -78,10 +78,10 @@ export declare class Memory {
|
|
|
78
78
|
* Initialization sequence:
|
|
79
79
|
* 1. Merge `config` with defaults (store='sqlite', path=tmpdir, graph=true,
|
|
80
80
|
* selfImprove=true, decay=true).
|
|
81
|
-
* 2. Await `
|
|
81
|
+
* 2. Await `Brain.openSqlite(config.path)`.
|
|
82
82
|
* 3. Check embedding dimension compatibility (warn on mismatch).
|
|
83
|
-
* 4. Create `
|
|
84
|
-
* 5. Create `
|
|
83
|
+
* 4. Create `SqlKnowledgeGraph(brain)`.
|
|
84
|
+
* 5. Create `SqlMemoryGraph(brain)` and call `.initialize()`.
|
|
85
85
|
* 6. Create `ChunkingEngine()`.
|
|
86
86
|
* 7. Lazily create ingestion loaders on first `ingest()` call.
|
|
87
87
|
* 8. If `selfImprove`: create `RetrievalFeedbackSignal(brain)` and
|
|
@@ -90,7 +90,55 @@ export declare class Memory {
|
|
|
90
90
|
* @param config - Optional configuration; see {@link MemoryConfig}.
|
|
91
91
|
* @returns A fully initialised Memory instance.
|
|
92
92
|
*/
|
|
93
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Open a Memory backed by SQLite. Defaults to a tmp file when no path is given.
|
|
95
|
+
*
|
|
96
|
+
* Accepts either a path string + opts, or a `MemoryConfig` object for
|
|
97
|
+
* compatibility with the old `Memory.create(config)` shape.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* await Memory.createSqlite('./brain.sqlite');
|
|
102
|
+
* await Memory.createSqlite('./brain.sqlite', { graph: true });
|
|
103
|
+
* await Memory.createSqlite({ path: './brain.sqlite', graph: true });
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
static createSqlite(pathOrConfig?: string | MemoryConfig, opts?: Omit<MemoryConfig, 'store' | 'path'> & {
|
|
107
|
+
brainId?: string;
|
|
108
|
+
priority?: ('better-sqlite3' | 'sqljs' | 'indexeddb')[];
|
|
109
|
+
}): Promise<Memory>;
|
|
110
|
+
/**
|
|
111
|
+
* Open a Memory backed by PostgreSQL. Requires the `pg` npm package.
|
|
112
|
+
*
|
|
113
|
+
* @param connectionString - Standard Postgres connection URL.
|
|
114
|
+
* @param opts.brainId - REQUIRED. Multi-tenant scope per query.
|
|
115
|
+
* @param opts.poolSize - pg pool max size. Defaults to 10.
|
|
116
|
+
* @param opts - Plus standard Memory options (graph, selfImprove, decay,
|
|
117
|
+
* embeddings).
|
|
118
|
+
*/
|
|
119
|
+
static createPostgres(connectionString: string, opts: Omit<MemoryConfig, 'store' | 'path'> & {
|
|
120
|
+
brainId: string;
|
|
121
|
+
poolSize?: number;
|
|
122
|
+
}): Promise<Memory>;
|
|
123
|
+
/**
|
|
124
|
+
* Open a Memory with a pre-resolved StorageAdapter. Use when sharing an
|
|
125
|
+
* adapter across subsystems or when you need full control over adapter
|
|
126
|
+
* resolution.
|
|
127
|
+
*/
|
|
128
|
+
static createWithAdapter(adapter: import('@framers/sql-storage-adapter').StorageAdapter, opts?: Omit<MemoryConfig, 'store' | 'path'> & {
|
|
129
|
+
brainId?: string;
|
|
130
|
+
}): Promise<Memory>;
|
|
131
|
+
/**
|
|
132
|
+
* Internal common initialization path for all three factories.
|
|
133
|
+
* Wires the Memory facade around an already-opened Brain.
|
|
134
|
+
*/
|
|
135
|
+
private static _initialize;
|
|
136
|
+
/**
|
|
137
|
+
* Generate a default temp SQLite path for `createSqlite()` when no
|
|
138
|
+
* explicit path is supplied. Node-only; browsers must pass a path
|
|
139
|
+
* (typically `:memory:` or an indexeddb-backed adapter).
|
|
140
|
+
*/
|
|
141
|
+
private static _defaultSqlitePath;
|
|
94
142
|
/**
|
|
95
143
|
* Store a new memory trace.
|
|
96
144
|
*
|
|
@@ -143,7 +191,7 @@ export declare class Memory {
|
|
|
143
191
|
/**
|
|
144
192
|
* Add or update an entity in the knowledge graph.
|
|
145
193
|
*
|
|
146
|
-
* Delegates to `
|
|
194
|
+
* Delegates to `SqlKnowledgeGraph.upsertEntity()`. Accepts a partial
|
|
147
195
|
* entity; `id`, `createdAt`, and `updatedAt` are auto-generated when omitted.
|
|
148
196
|
*
|
|
149
197
|
* @param entity - Partial entity descriptor.
|
|
@@ -153,7 +201,7 @@ export declare class Memory {
|
|
|
153
201
|
/**
|
|
154
202
|
* Add or update a relation (edge) in the knowledge graph.
|
|
155
203
|
*
|
|
156
|
-
* Delegates to `
|
|
204
|
+
* Delegates to `SqlKnowledgeGraph.upsertRelation()`. Accepts a partial
|
|
157
205
|
* relation; `id` and `createdAt` are auto-generated when omitted.
|
|
158
206
|
*
|
|
159
207
|
* @param relation - Partial relation descriptor.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Memory.d.ts","sourceRoot":"","sources":["../../../../src/memory/io/facade/Memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAqBH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,YAAY,EAEb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EAClB,MAAM,oDAAoD,CAAC;AAiB5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AAqB7F;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,KAAK,EAAE,WAAW,CAAC;IACnB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AA2ED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,MAAM;IAEjB,OAAO,CAAC,QAAQ,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"Memory.d.ts","sourceRoot":"","sources":["../../../../src/memory/io/facade/Memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAqBH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,YAAY,EAEb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,iBAAiB,EAClB,MAAM,oDAAoD,CAAC;AAiB5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AAqB7F;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,KAAK,EAAE,WAAW,CAAC;IACnB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AA2ED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,MAAM;IAEjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,sBAAsB,CAEd;IAChB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiC;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2F;IACnH,OAAO,CAAC,YAAY,CAAgB;IAEpC,sEAAsE;IACtE,OAAO,CAAC,YAAY,CAA2E;IAE/F,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IAMtE;;;OAGG;IACH,OAAO;IAsDP;;;;;;;;;;;;;;;;;OAiBG;IACH;;;;;;;;;;;;OAYG;WACU,YAAY,CACvB,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,EACpC,IAAI,GAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG;QAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,CAAC,gBAAgB,GAAG,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC;KACpD,GACL,OAAO,CAAC,MAAM,CAAC;IA+BlB;;;;;;;;OAQG;WACU,cAAc,CACzB,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG;QAC3C,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GACA,OAAO,CAAC,MAAM,CAAC;IAQlB;;;;OAIG;WACU,iBAAiB,CAC5B,OAAO,EAAE,OAAO,8BAA8B,EAAE,cAAc,EAC9D,IAAI,GAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACrE,OAAO,CAAC,MAAM,CAAC;IAKlB;;;OAGG;mBACkB,WAAW;IA0BhC;;;;OAIG;mBACkB,kBAAkB;IAcvC;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAyIhF;;;;;;;;;;OAUG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA+L5E;;;;;;;OAOG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5C;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YAkF9D,qBAAqB;IAuCnC;;;;;;;;OAQG;IACG,SAAS,CACb,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAC/B,OAAO,CAAC,eAAe,CAAC;IAoB3B;;;;;;;;OAQG;IACG,WAAW,CACf,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACnC,OAAO,CAAC,iBAAiB,CAAC;IAsB7B;;;;;OAKG;IACH,IAAI,KAAK,IAAI,eAAe,CAE3B;IAMD;;;;;;;OAOG;IACG,WAAW,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAa7E;;;;;;;;;OASG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwE1F;;;;;;OAMG;IACG,oBAAoB,CACxB,cAAc,EAAE,WAAW,EAAE,EAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAS/B;;;;;;;;;;OAUG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCxE;;;;;;;;;OASG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAkDhF;;;;;;;;;;OAUG;IACG,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAAG,KAAK,EACtB,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GACrC,OAAO,CAAC,YAAY,CAAC;IAoBxB;;;;;;;;OAQG;IACG,cAAc,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAU9D;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,KAAK,EAAE;IAqB5D;;;;;OAKG;IACG,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAwFrC;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAmDnB;;;;;;OAMG;YACW,wBAAwB;IAyBtC;;;OAGG;YACW,yBAAyB;IA4CvC;;;;;OAKG;YACW,qBAAqB;IA0GnC;;OAEG;YACW,gBAAgB;YAQhB,iBAAiB;IAuC/B;;;;;OAKG;YACW,iBAAiB;IA+B/B;;OAEG;YACW,mBAAmB;IAgBjC;;OAEG;YACW,mBAAmB;CAkClC"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* @fileoverview Memory facade -- unified public API for the complete memory system.
|
|
3
3
|
*
|
|
4
4
|
* The `Memory` class wires together every subsystem built in Tasks 1-12:
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
5
|
+
* - Brain (unified SQLite connection with WAL, full schema)
|
|
6
|
+
* - SqlKnowledgeGraph (IKnowledgeGraph backed by SQLite)
|
|
7
|
+
* - SqlMemoryGraph (IMemoryGraph with spreading activation)
|
|
8
8
|
* - LoaderRegistry (document loaders: text, md, html, pdf, docx)
|
|
9
9
|
* - FolderScanner (recursive directory scanning)
|
|
10
10
|
* - ChunkingEngine (4 chunking strategies)
|
|
@@ -34,10 +34,10 @@ async function _getOs() {
|
|
|
34
34
|
throw new Error('OS operations are not available in browser environments.');
|
|
35
35
|
return import('node:os');
|
|
36
36
|
}
|
|
37
|
-
import {
|
|
37
|
+
import { Brain } from '../../retrieval/store/Brain.js';
|
|
38
38
|
import { buildNaturalLanguageFtsQuery, buildInitialTraceMetadata, parseTraceMetadata, readPersistedDecayState, withPersistedDecayState, } from '../../retrieval/store/tracePersistence.js';
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
39
|
+
import { SqlKnowledgeGraph } from '../../retrieval/store/SqlKnowledgeGraph.js';
|
|
40
|
+
import { SqlMemoryGraph } from '../../retrieval/store/SqlMemoryGraph.js';
|
|
41
41
|
import { ChunkingEngine } from '../ingestion/ChunkingEngine.js';
|
|
42
42
|
import { UrlLoader } from '../ingestion/UrlLoader.js';
|
|
43
43
|
import { RetrievalFeedbackSignal } from '../../retrieval/feedback/RetrievalFeedbackSignal.js';
|
|
@@ -108,7 +108,7 @@ export class Memory {
|
|
|
108
108
|
// Constructor (private — use Memory.create() instead)
|
|
109
109
|
// -------------------------------------------------------------------
|
|
110
110
|
/**
|
|
111
|
-
* Private constructor. Receives an already-opened
|
|
111
|
+
* Private constructor. Receives an already-opened Brain and
|
|
112
112
|
* pre-computed configuration. Use {@link Memory.create} to instantiate.
|
|
113
113
|
*/
|
|
114
114
|
constructor(brain, config) {
|
|
@@ -121,10 +121,10 @@ export class Memory {
|
|
|
121
121
|
this._config = config;
|
|
122
122
|
// Store the optional embedding function for vector search.
|
|
123
123
|
this._embed = config.embed ?? null;
|
|
124
|
-
// Create
|
|
125
|
-
this._knowledgeGraph = new
|
|
126
|
-
// Create
|
|
127
|
-
this._memoryGraph = new
|
|
124
|
+
// Create SqlKnowledgeGraph.
|
|
125
|
+
this._knowledgeGraph = new SqlKnowledgeGraph(this._brain);
|
|
126
|
+
// Create SqlMemoryGraph and initialize.
|
|
127
|
+
this._memoryGraph = new SqlMemoryGraph(this._brain);
|
|
128
128
|
this._initPromise = this._memoryGraph.initialize();
|
|
129
129
|
// Create ChunkingEngine.
|
|
130
130
|
this._chunkingEngine = new ChunkingEngine();
|
|
@@ -167,10 +167,10 @@ export class Memory {
|
|
|
167
167
|
* Initialization sequence:
|
|
168
168
|
* 1. Merge `config` with defaults (store='sqlite', path=tmpdir, graph=true,
|
|
169
169
|
* selfImprove=true, decay=true).
|
|
170
|
-
* 2. Await `
|
|
170
|
+
* 2. Await `Brain.openSqlite(config.path)`.
|
|
171
171
|
* 3. Check embedding dimension compatibility (warn on mismatch).
|
|
172
|
-
* 4. Create `
|
|
173
|
-
* 5. Create `
|
|
172
|
+
* 4. Create `SqlKnowledgeGraph(brain)`.
|
|
173
|
+
* 5. Create `SqlMemoryGraph(brain)` and call `.initialize()`.
|
|
174
174
|
* 6. Create `ChunkingEngine()`.
|
|
175
175
|
* 7. Lazily create ingestion loaders on first `ingest()` call.
|
|
176
176
|
* 8. If `selfImprove`: create `RetrievalFeedbackSignal(brain)` and
|
|
@@ -179,33 +179,84 @@ export class Memory {
|
|
|
179
179
|
* @param config - Optional configuration; see {@link MemoryConfig}.
|
|
180
180
|
* @returns A fully initialised Memory instance.
|
|
181
181
|
*/
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
182
|
+
/**
|
|
183
|
+
* Open a Memory backed by SQLite. Defaults to a tmp file when no path is given.
|
|
184
|
+
*
|
|
185
|
+
* Accepts either a path string + opts, or a `MemoryConfig` object for
|
|
186
|
+
* compatibility with the old `Memory.create(config)` shape.
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```ts
|
|
190
|
+
* await Memory.createSqlite('./brain.sqlite');
|
|
191
|
+
* await Memory.createSqlite('./brain.sqlite', { graph: true });
|
|
192
|
+
* await Memory.createSqlite({ path: './brain.sqlite', graph: true });
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
static async createSqlite(pathOrConfig, opts = {}) {
|
|
196
|
+
let path;
|
|
197
|
+
let mergedOpts;
|
|
198
|
+
if (typeof pathOrConfig === 'string' || pathOrConfig === undefined) {
|
|
199
|
+
path = pathOrConfig;
|
|
200
|
+
mergedOpts = opts;
|
|
190
201
|
}
|
|
191
202
|
else {
|
|
192
|
-
|
|
203
|
+
// Config-object form for compat with the prior Memory.create({path, ...}) API.
|
|
204
|
+
// Reject explicit non-sqlite stores so callers know to use a different factory.
|
|
205
|
+
if (pathOrConfig.store && pathOrConfig.store !== 'sqlite') {
|
|
206
|
+
throw new Error(`Memory.createSqlite supports only the SQLite-backed facade at runtime. ` +
|
|
207
|
+
`Received store="${pathOrConfig.store}". ` +
|
|
208
|
+
`Use Memory.createPostgres(connectionString, opts) for Postgres or ` +
|
|
209
|
+
`Memory.createWithAdapter(adapter, opts) for a pre-resolved adapter.`);
|
|
210
|
+
}
|
|
211
|
+
const { store: _store, path: cfgPath, ...rest } = pathOrConfig;
|
|
212
|
+
path = cfgPath;
|
|
213
|
+
mergedOpts = { ...rest, ...opts };
|
|
193
214
|
}
|
|
215
|
+
const resolvedPath = path ?? (await Memory._defaultSqlitePath());
|
|
216
|
+
const brain = await Brain.openSqlite(resolvedPath, {
|
|
217
|
+
brainId: mergedOpts.brainId,
|
|
218
|
+
priority: mergedOpts.priority,
|
|
219
|
+
});
|
|
220
|
+
return Memory._initialize(brain, { ...mergedOpts, store: 'sqlite', path: resolvedPath });
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Open a Memory backed by PostgreSQL. Requires the `pg` npm package.
|
|
224
|
+
*
|
|
225
|
+
* @param connectionString - Standard Postgres connection URL.
|
|
226
|
+
* @param opts.brainId - REQUIRED. Multi-tenant scope per query.
|
|
227
|
+
* @param opts.poolSize - pg pool max size. Defaults to 10.
|
|
228
|
+
* @param opts - Plus standard Memory options (graph, selfImprove, decay,
|
|
229
|
+
* embeddings).
|
|
230
|
+
*/
|
|
231
|
+
static async createPostgres(connectionString, opts) {
|
|
232
|
+
const brain = await Brain.openPostgres(connectionString, {
|
|
233
|
+
brainId: opts.brainId,
|
|
234
|
+
poolSize: opts.poolSize,
|
|
235
|
+
});
|
|
236
|
+
return Memory._initialize(brain, { ...opts, store: 'sqlite' });
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Open a Memory with a pre-resolved StorageAdapter. Use when sharing an
|
|
240
|
+
* adapter across subsystems or when you need full control over adapter
|
|
241
|
+
* resolution.
|
|
242
|
+
*/
|
|
243
|
+
static async createWithAdapter(adapter, opts = {}) {
|
|
244
|
+
const brain = await Brain.openWithAdapter(adapter, { brainId: opts.brainId });
|
|
245
|
+
return Memory._initialize(brain, { ...opts, store: 'sqlite' });
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Internal common initialization path for all three factories.
|
|
249
|
+
* Wires the Memory facade around an already-opened Brain.
|
|
250
|
+
*/
|
|
251
|
+
static async _initialize(brain, config) {
|
|
194
252
|
const merged = {
|
|
195
253
|
store: 'sqlite',
|
|
196
|
-
path: defaultPath,
|
|
197
254
|
graph: true,
|
|
198
255
|
selfImprove: true,
|
|
199
256
|
decay: true,
|
|
200
257
|
...config,
|
|
201
258
|
};
|
|
202
|
-
|
|
203
|
-
throw new Error(`Memory currently supports only the SQLite-backed facade at runtime. ` +
|
|
204
|
-
`Received store="${merged.store}".`);
|
|
205
|
-
}
|
|
206
|
-
// Step 2: create SqliteBrain (async).
|
|
207
|
-
const brain = await SqliteBrain.open(merged.path);
|
|
208
|
-
// Step 3: check embedding dimension compatibility.
|
|
259
|
+
// Embedding dimension compatibility check.
|
|
209
260
|
const dimensions = merged.embeddings?.dimensions ?? 1536;
|
|
210
261
|
const compatible = await brain.checkEmbeddingCompat(dimensions);
|
|
211
262
|
if (!compatible) {
|
|
@@ -215,6 +266,20 @@ export class Memory {
|
|
|
215
266
|
}
|
|
216
267
|
return new Memory(brain, merged);
|
|
217
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* Generate a default temp SQLite path for `createSqlite()` when no
|
|
271
|
+
* explicit path is supplied. Node-only; browsers must pass a path
|
|
272
|
+
* (typically `:memory:` or an indexeddb-backed adapter).
|
|
273
|
+
*/
|
|
274
|
+
static async _defaultSqlitePath() {
|
|
275
|
+
const randomSuffix = Math.random().toString(36).slice(2, 10);
|
|
276
|
+
if (_isNode) {
|
|
277
|
+
const osModule = await _getOs();
|
|
278
|
+
const pathModule = await _getPath();
|
|
279
|
+
return pathModule.join(osModule.tmpdir(), `brain-${randomSuffix}.sqlite`);
|
|
280
|
+
}
|
|
281
|
+
return `brain-${randomSuffix}.sqlite`;
|
|
282
|
+
}
|
|
218
283
|
// =========================================================================
|
|
219
284
|
// Core memory operations
|
|
220
285
|
// =========================================================================
|
|
@@ -258,9 +323,10 @@ export class Memory {
|
|
|
258
323
|
}
|
|
259
324
|
// Insert into memory_traces.
|
|
260
325
|
await this._brain.run(`INSERT INTO memory_traces
|
|
261
|
-
(id, type, scope, content, embedding, strength, created_at,
|
|
326
|
+
(brain_id, id, type, scope, content, embedding, strength, created_at,
|
|
262
327
|
last_accessed, retrieval_count, tags, emotions, metadata, deleted)
|
|
263
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, NULL, 0, ?, ?, ?, 0)`, [
|
|
328
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, NULL, 0, ?, ?, ?, 0)`, [
|
|
329
|
+
this._brain.brainId,
|
|
264
330
|
id,
|
|
265
331
|
type,
|
|
266
332
|
scope,
|
|
@@ -520,7 +586,7 @@ export class Memory {
|
|
|
520
586
|
*/
|
|
521
587
|
async forget(traceId) {
|
|
522
588
|
await this._initPromise;
|
|
523
|
-
await this._brain.run('UPDATE memory_traces SET deleted = 1 WHERE id = ?', [traceId]);
|
|
589
|
+
await this._brain.run('UPDATE memory_traces SET deleted = 1 WHERE brain_id = ? AND id = ?', [this._brain.brainId, traceId]);
|
|
524
590
|
}
|
|
525
591
|
// =========================================================================
|
|
526
592
|
// Document ingestion
|
|
@@ -653,7 +719,7 @@ export class Memory {
|
|
|
653
719
|
/**
|
|
654
720
|
* Add or update an entity in the knowledge graph.
|
|
655
721
|
*
|
|
656
|
-
* Delegates to `
|
|
722
|
+
* Delegates to `SqlKnowledgeGraph.upsertEntity()`. Accepts a partial
|
|
657
723
|
* entity; `id`, `createdAt`, and `updatedAt` are auto-generated when omitted.
|
|
658
724
|
*
|
|
659
725
|
* @param entity - Partial entity descriptor.
|
|
@@ -680,7 +746,7 @@ export class Memory {
|
|
|
680
746
|
/**
|
|
681
747
|
* Add or update a relation (edge) in the knowledge graph.
|
|
682
748
|
*
|
|
683
|
-
* Delegates to `
|
|
749
|
+
* Delegates to `SqlKnowledgeGraph.upsertRelation()`. Accepts a partial
|
|
684
750
|
* relation; `id` and `createdAt` are auto-generated when omitted.
|
|
685
751
|
*
|
|
686
752
|
* @param relation - Partial relation descriptor.
|
|
@@ -749,13 +815,14 @@ export class Memory {
|
|
|
749
815
|
return;
|
|
750
816
|
try {
|
|
751
817
|
const now = Date.now();
|
|
818
|
+
const brainId = this._brain.brainId;
|
|
752
819
|
const row = await this._brain.get(`SELECT id, type, scope, content, embedding, strength, created_at,
|
|
753
820
|
last_accessed, retrieval_count, tags, emotions, metadata, deleted
|
|
754
821
|
FROM memory_traces
|
|
755
|
-
WHERE id = ?
|
|
756
|
-
LIMIT 1`, [traceId]);
|
|
757
|
-
await this._brain.run(`INSERT INTO retrieval_feedback (trace_id, signal, query, created_at)
|
|
758
|
-
VALUES (?, ?, ?, ?)`, [traceId, signal, query ?? null, now]);
|
|
822
|
+
WHERE brain_id = ? AND id = ?
|
|
823
|
+
LIMIT 1`, [brainId, traceId]);
|
|
824
|
+
await this._brain.run(`INSERT INTO retrieval_feedback (brain_id, trace_id, signal, query, created_at)
|
|
825
|
+
VALUES (?, ?, ?, ?, ?)`, [brainId, traceId, signal, query ?? null, now]);
|
|
759
826
|
if (!row)
|
|
760
827
|
return;
|
|
761
828
|
if (signal === 'used') {
|
|
@@ -768,11 +835,12 @@ export class Memory {
|
|
|
768
835
|
}));
|
|
769
836
|
await this._brain.run(`UPDATE memory_traces
|
|
770
837
|
SET strength = ?, last_accessed = ?, retrieval_count = ?, metadata = ?
|
|
771
|
-
WHERE id = ?`, [
|
|
838
|
+
WHERE brain_id = ? AND id = ?`, [
|
|
772
839
|
update.encodingStrength,
|
|
773
840
|
update.lastAccessedAt,
|
|
774
841
|
update.retrievalCount,
|
|
775
842
|
metadata,
|
|
843
|
+
brainId,
|
|
776
844
|
traceId,
|
|
777
845
|
]);
|
|
778
846
|
return;
|
|
@@ -789,7 +857,7 @@ export class Memory {
|
|
|
789
857
|
}));
|
|
790
858
|
await this._brain.run(`UPDATE memory_traces
|
|
791
859
|
SET strength = ?, last_accessed = ?, metadata = ?
|
|
792
|
-
WHERE id = ?`, [penalty.encodingStrength, penalty.lastAccessedAt, metadata, traceId]);
|
|
860
|
+
WHERE brain_id = ? AND id = ?`, [penalty.encodingStrength, penalty.lastAccessedAt, metadata, brainId, traceId]);
|
|
793
861
|
}
|
|
794
862
|
catch {
|
|
795
863
|
// Explicit feedback is best-effort; the caller should not fail on analytics updates.
|
|
@@ -1148,6 +1216,7 @@ export class Memory {
|
|
|
1148
1216
|
if (rows.length === 0)
|
|
1149
1217
|
return rows;
|
|
1150
1218
|
const now = Date.now();
|
|
1219
|
+
const brainId = this._brain.brainId;
|
|
1151
1220
|
return this._brain.transaction(async (trx) => {
|
|
1152
1221
|
const results = [];
|
|
1153
1222
|
for (const row of rows) {
|
|
@@ -1160,11 +1229,12 @@ export class Memory {
|
|
|
1160
1229
|
}));
|
|
1161
1230
|
await trx.run(`UPDATE memory_traces
|
|
1162
1231
|
SET strength = ?, last_accessed = ?, retrieval_count = ?, metadata = ?
|
|
1163
|
-
WHERE id = ?`, [
|
|
1232
|
+
WHERE brain_id = ? AND id = ?`, [
|
|
1164
1233
|
update.encodingStrength,
|
|
1165
1234
|
update.lastAccessedAt,
|
|
1166
1235
|
update.retrievalCount,
|
|
1167
1236
|
metadata,
|
|
1237
|
+
brainId,
|
|
1168
1238
|
row.id,
|
|
1169
1239
|
]);
|
|
1170
1240
|
results.push({
|
|
@@ -1185,16 +1255,18 @@ export class Memory {
|
|
|
1185
1255
|
* the same source content is idempotent.
|
|
1186
1256
|
*/
|
|
1187
1257
|
async _ingestLoadedDocument(source, doc, chunking, result) {
|
|
1258
|
+
const brainId = this._brain.brainId;
|
|
1188
1259
|
const contentHash = await sha256(doc.content);
|
|
1189
|
-
const existingDoc = await this._brain.get(`SELECT id FROM documents WHERE content_hash = ? LIMIT 1`, [contentHash]);
|
|
1260
|
+
const existingDoc = await this._brain.get(`SELECT id FROM documents WHERE brain_id = ? AND content_hash = ? LIMIT 1`, [brainId, contentHash]);
|
|
1190
1261
|
if (existingDoc) {
|
|
1191
1262
|
return;
|
|
1192
1263
|
}
|
|
1193
1264
|
const chunks = await this._chunkingEngine.chunk(doc.content, chunking);
|
|
1194
1265
|
const docId = `doc_${uuid()}`;
|
|
1195
1266
|
await this._brain.run(`INSERT INTO documents
|
|
1196
|
-
(id, path, format, title, content_hash, chunk_count, metadata, ingested_at)
|
|
1197
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
1267
|
+
(brain_id, id, path, format, title, content_hash, chunk_count, metadata, ingested_at)
|
|
1268
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
1269
|
+
brainId,
|
|
1198
1270
|
docId,
|
|
1199
1271
|
doc.metadata.source ?? source,
|
|
1200
1272
|
doc.format,
|
|
@@ -1209,9 +1281,10 @@ export class Memory {
|
|
|
1209
1281
|
const traceId = nextTraceId();
|
|
1210
1282
|
const createdAt = Date.now();
|
|
1211
1283
|
await this._brain.run(`INSERT INTO memory_traces
|
|
1212
|
-
(id, type, scope, content, embedding, strength, created_at,
|
|
1284
|
+
(brain_id, id, type, scope, content, embedding, strength, created_at,
|
|
1213
1285
|
last_accessed, retrieval_count, tags, emotions, metadata, deleted)
|
|
1214
|
-
VALUES (?, 'semantic', 'user', ?, NULL, 1.0, ?, NULL, 0, '[]', '{}', ?, 0)`, [
|
|
1286
|
+
VALUES (?, ?, 'semantic', 'user', ?, NULL, 1.0, ?, NULL, 0, '[]', '{}', ?, 0)`, [
|
|
1287
|
+
brainId,
|
|
1215
1288
|
traceId,
|
|
1216
1289
|
chunk.content,
|
|
1217
1290
|
createdAt,
|
|
@@ -1234,8 +1307,9 @@ export class Memory {
|
|
|
1234
1307
|
createdAt,
|
|
1235
1308
|
});
|
|
1236
1309
|
}
|
|
1237
|
-
await this._brain.run(`INSERT INTO document_chunks (id, document_id, trace_id, content, chunk_index, page_number, embedding)
|
|
1238
|
-
VALUES (?, ?, ?, ?, ?, ?, NULL)`, [
|
|
1310
|
+
await this._brain.run(`INSERT INTO document_chunks (brain_id, id, document_id, trace_id, content, chunk_index, page_number, embedding)
|
|
1311
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, NULL)`, [
|
|
1312
|
+
brainId,
|
|
1239
1313
|
chunkId,
|
|
1240
1314
|
docId,
|
|
1241
1315
|
traceId,
|