@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.
Files changed (173) hide show
  1. package/dist/ingest-router/executors/EntityExtractor.d.ts +23 -0
  2. package/dist/ingest-router/executors/EntityExtractor.d.ts.map +1 -0
  3. package/dist/ingest-router/executors/EntityExtractor.js +69 -0
  4. package/dist/ingest-router/executors/EntityExtractor.js.map +1 -0
  5. package/dist/ingest-router/executors/EntityLinkingIngestExecutor.d.ts +46 -0
  6. package/dist/ingest-router/executors/EntityLinkingIngestExecutor.d.ts.map +1 -0
  7. package/dist/ingest-router/executors/EntityLinkingIngestExecutor.js +45 -0
  8. package/dist/ingest-router/executors/EntityLinkingIngestExecutor.js.map +1 -0
  9. package/dist/ingest-router/executors/RawChunksIngestExecutor.d.ts +36 -0
  10. package/dist/ingest-router/executors/RawChunksIngestExecutor.d.ts.map +1 -0
  11. package/dist/ingest-router/executors/RawChunksIngestExecutor.js +33 -0
  12. package/dist/ingest-router/executors/RawChunksIngestExecutor.js.map +1 -0
  13. package/dist/ingest-router/executors/SkipIngestExecutor.d.ts +20 -0
  14. package/dist/ingest-router/executors/SkipIngestExecutor.d.ts.map +1 -0
  15. package/dist/ingest-router/executors/SkipIngestExecutor.js +28 -0
  16. package/dist/ingest-router/executors/SkipIngestExecutor.js.map +1 -0
  17. package/dist/ingest-router/executors/SummarizedIngestExecutor.d.ts +68 -0
  18. package/dist/ingest-router/executors/SummarizedIngestExecutor.d.ts.map +1 -0
  19. package/dist/ingest-router/executors/SummarizedIngestExecutor.js +56 -0
  20. package/dist/ingest-router/executors/SummarizedIngestExecutor.js.map +1 -0
  21. package/dist/ingest-router/executors/entity-types.d.ts +55 -0
  22. package/dist/ingest-router/executors/entity-types.d.ts.map +1 -0
  23. package/dist/ingest-router/executors/entity-types.js +17 -0
  24. package/dist/ingest-router/executors/entity-types.js.map +1 -0
  25. package/dist/ingest-router/executors/index.d.ts +37 -0
  26. package/dist/ingest-router/executors/index.d.ts.map +1 -0
  27. package/dist/ingest-router/executors/index.js +37 -0
  28. package/dist/ingest-router/executors/index.js.map +1 -0
  29. package/dist/ingest-router/index.d.ts +2 -0
  30. package/dist/ingest-router/index.d.ts.map +1 -1
  31. package/dist/ingest-router/index.js +14 -0
  32. package/dist/ingest-router/index.js.map +1 -1
  33. package/dist/memory/AgentMemory.js +1 -1
  34. package/dist/memory/AgentMemory.js.map +1 -1
  35. package/dist/memory/CognitiveMemoryManager.js +4 -4
  36. package/dist/memory/CognitiveMemoryManager.js.map +1 -1
  37. package/dist/memory/archive/IMemoryArchive.d.ts +2 -2
  38. package/dist/memory/archive/SqlStorageMemoryArchive.d.ts +17 -13
  39. package/dist/memory/archive/SqlStorageMemoryArchive.d.ts.map +1 -1
  40. package/dist/memory/archive/SqlStorageMemoryArchive.js +36 -28
  41. package/dist/memory/archive/SqlStorageMemoryArchive.js.map +1 -1
  42. package/dist/memory/core/config.d.ts +4 -4
  43. package/dist/memory/core/config.d.ts.map +1 -1
  44. package/dist/memory/index.d.ts +3 -3
  45. package/dist/memory/index.d.ts.map +1 -1
  46. package/dist/memory/index.js +3 -3
  47. package/dist/memory/index.js.map +1 -1
  48. package/dist/memory/io/ChatGptImporter.d.ts +5 -5
  49. package/dist/memory/io/ChatGptImporter.d.ts.map +1 -1
  50. package/dist/memory/io/ChatGptImporter.js +9 -7
  51. package/dist/memory/io/ChatGptImporter.js.map +1 -1
  52. package/dist/memory/io/CsvImporter.d.ts +4 -4
  53. package/dist/memory/io/CsvImporter.d.ts.map +1 -1
  54. package/dist/memory/io/CsvImporter.js +11 -8
  55. package/dist/memory/io/CsvImporter.js.map +1 -1
  56. package/dist/memory/io/JsonExporter.d.ts +5 -5
  57. package/dist/memory/io/JsonExporter.d.ts.map +1 -1
  58. package/dist/memory/io/JsonExporter.js +13 -12
  59. package/dist/memory/io/JsonExporter.js.map +1 -1
  60. package/dist/memory/io/JsonImporter.d.ts +5 -5
  61. package/dist/memory/io/JsonImporter.d.ts.map +1 -1
  62. package/dist/memory/io/JsonImporter.js +50 -34
  63. package/dist/memory/io/JsonImporter.js.map +1 -1
  64. package/dist/memory/io/MarkdownExporter.d.ts +4 -4
  65. package/dist/memory/io/MarkdownExporter.d.ts.map +1 -1
  66. package/dist/memory/io/MarkdownExporter.js +1 -1
  67. package/dist/memory/io/MarkdownExporter.js.map +1 -1
  68. package/dist/memory/io/MarkdownImporter.d.ts +6 -6
  69. package/dist/memory/io/MarkdownImporter.d.ts.map +1 -1
  70. package/dist/memory/io/MarkdownImporter.js +8 -7
  71. package/dist/memory/io/MarkdownImporter.js.map +1 -1
  72. package/dist/memory/io/ObsidianImporter.d.ts +4 -4
  73. package/dist/memory/io/ObsidianImporter.d.ts.map +1 -1
  74. package/dist/memory/io/ObsidianImporter.js +15 -10
  75. package/dist/memory/io/ObsidianImporter.js.map +1 -1
  76. package/dist/memory/io/SqliteExporter.d.ts +5 -5
  77. package/dist/memory/io/SqliteExporter.d.ts.map +1 -1
  78. package/dist/memory/io/SqliteExporter.js +3 -3
  79. package/dist/memory/io/SqliteExporter.js.map +1 -1
  80. package/dist/memory/io/SqliteImporter.d.ts +4 -4
  81. package/dist/memory/io/SqliteImporter.d.ts.map +1 -1
  82. package/dist/memory/io/SqliteImporter.js +23 -16
  83. package/dist/memory/io/SqliteImporter.js.map +1 -1
  84. package/dist/memory/io/facade/Memory.d.ts +58 -10
  85. package/dist/memory/io/facade/Memory.d.ts.map +1 -1
  86. package/dist/memory/io/facade/Memory.js +124 -50
  87. package/dist/memory/io/facade/Memory.js.map +1 -1
  88. package/dist/memory/io/facade/types.d.ts +1 -1
  89. package/dist/memory/io/index.d.ts +2 -2
  90. package/dist/memory/io/index.js +2 -2
  91. package/dist/memory/io/tools/MemoryAddTool.d.ts +2 -2
  92. package/dist/memory/io/tools/MemoryAddTool.d.ts.map +1 -1
  93. package/dist/memory/io/tools/MemoryAddTool.js +2 -2
  94. package/dist/memory/io/tools/MemoryAddTool.js.map +1 -1
  95. package/dist/memory/io/tools/MemoryDeleteTool.d.ts +2 -2
  96. package/dist/memory/io/tools/MemoryDeleteTool.d.ts.map +1 -1
  97. package/dist/memory/io/tools/MemoryDeleteTool.js +1 -1
  98. package/dist/memory/io/tools/MemoryDeleteTool.js.map +1 -1
  99. package/dist/memory/io/tools/MemoryMergeTool.d.ts +2 -2
  100. package/dist/memory/io/tools/MemoryMergeTool.d.ts.map +1 -1
  101. package/dist/memory/io/tools/MemoryMergeTool.js +4 -3
  102. package/dist/memory/io/tools/MemoryMergeTool.js.map +1 -1
  103. package/dist/memory/io/tools/MemoryReflectTool.d.ts +2 -2
  104. package/dist/memory/io/tools/MemoryReflectTool.d.ts.map +1 -1
  105. package/dist/memory/io/tools/MemoryReflectTool.js.map +1 -1
  106. package/dist/memory/io/tools/MemorySearchTool.d.ts +2 -2
  107. package/dist/memory/io/tools/MemorySearchTool.d.ts.map +1 -1
  108. package/dist/memory/io/tools/MemorySearchTool.js.map +1 -1
  109. package/dist/memory/io/tools/MemoryUpdateTool.d.ts +2 -2
  110. package/dist/memory/io/tools/MemoryUpdateTool.d.ts.map +1 -1
  111. package/dist/memory/io/tools/MemoryUpdateTool.js +5 -4
  112. package/dist/memory/io/tools/MemoryUpdateTool.js.map +1 -1
  113. package/dist/memory/pipeline/consolidation/ConsolidationLoop.d.ts +3 -3
  114. package/dist/memory/pipeline/consolidation/ConsolidationLoop.d.ts.map +1 -1
  115. package/dist/memory/pipeline/consolidation/ConsolidationLoop.js +22 -17
  116. package/dist/memory/pipeline/consolidation/ConsolidationLoop.js.map +1 -1
  117. package/dist/memory/retrieval/feedback/RetrievalFeedbackSignal.d.ts +3 -3
  118. package/dist/memory/retrieval/feedback/RetrievalFeedbackSignal.d.ts.map +1 -1
  119. package/dist/memory/retrieval/feedback/RetrievalFeedbackSignal.js +15 -12
  120. package/dist/memory/retrieval/feedback/RetrievalFeedbackSignal.js.map +1 -1
  121. package/dist/memory/retrieval/graph/index.d.ts +0 -1
  122. package/dist/memory/retrieval/graph/index.d.ts.map +1 -1
  123. package/dist/memory/retrieval/graph/index.js +4 -1
  124. package/dist/memory/retrieval/graph/index.js.map +1 -1
  125. package/dist/memory/retrieval/store/{SqliteBrain.d.ts → Brain.d.ts} +111 -23
  126. package/dist/memory/retrieval/store/Brain.d.ts.map +1 -0
  127. package/dist/memory/retrieval/store/{SqliteBrain.js → Brain.js} +367 -76
  128. package/dist/memory/retrieval/store/Brain.js.map +1 -0
  129. package/dist/memory/retrieval/store/HnswSidecar.d.ts +1 -1
  130. package/dist/memory/retrieval/store/HnswSidecar.js +1 -1
  131. package/dist/memory/retrieval/store/MemoryStore.d.ts +6 -6
  132. package/dist/memory/retrieval/store/MemoryStore.d.ts.map +1 -1
  133. package/dist/memory/retrieval/store/MemoryStore.js +10 -9
  134. package/dist/memory/retrieval/store/MemoryStore.js.map +1 -1
  135. package/dist/memory/retrieval/store/{SqliteKnowledgeGraph.d.ts → SqlKnowledgeGraph.d.ts} +12 -12
  136. package/dist/memory/retrieval/store/SqlKnowledgeGraph.d.ts.map +1 -0
  137. package/dist/memory/retrieval/store/{SqliteKnowledgeGraph.js → SqlKnowledgeGraph.js} +83 -64
  138. package/dist/memory/retrieval/store/SqlKnowledgeGraph.js.map +1 -0
  139. package/dist/memory/retrieval/store/{SqliteMemoryGraph.d.ts → SqlMemoryGraph.d.ts} +11 -11
  140. package/dist/memory/retrieval/store/SqlMemoryGraph.d.ts.map +1 -0
  141. package/dist/memory/retrieval/store/{SqliteMemoryGraph.js → SqlMemoryGraph.js} +26 -24
  142. package/dist/memory/retrieval/store/SqlMemoryGraph.js.map +1 -0
  143. package/dist/memory/retrieval/store/migrations/v1-to-v2.d.ts +31 -0
  144. package/dist/memory/retrieval/store/migrations/v1-to-v2.d.ts.map +1 -0
  145. package/dist/memory/retrieval/store/migrations/v1-to-v2.js +423 -0
  146. package/dist/memory/retrieval/store/migrations/v1-to-v2.js.map +1 -0
  147. package/dist/memory-router/backends/EntityRetrievalRanker.d.ts +54 -0
  148. package/dist/memory-router/backends/EntityRetrievalRanker.d.ts.map +1 -0
  149. package/dist/memory-router/backends/EntityRetrievalRanker.js +39 -0
  150. package/dist/memory-router/backends/EntityRetrievalRanker.js.map +1 -0
  151. package/dist/memory-router/backends/index.d.ts +16 -0
  152. package/dist/memory-router/backends/index.d.ts.map +1 -0
  153. package/dist/memory-router/backends/index.js +16 -0
  154. package/dist/memory-router/backends/index.js.map +1 -0
  155. package/dist/memory-router/index.d.ts +2 -0
  156. package/dist/memory-router/index.d.ts.map +1 -1
  157. package/dist/memory-router/index.js +4 -0
  158. package/dist/memory-router/index.js.map +1 -1
  159. package/dist/rag/utils/vectorMath.d.ts +1 -1
  160. package/dist/rag/utils/vectorMath.js +1 -1
  161. package/dist/rag/vector-search/HnswIndexSidecar.d.ts +1 -1
  162. package/dist/rag/vector-search/HnswIndexSidecar.js +1 -1
  163. package/package.json +2 -2
  164. package/dist/memory/retrieval/graph/knowledge/SqliteKnowledgeGraph.d.ts +0 -10
  165. package/dist/memory/retrieval/graph/knowledge/SqliteKnowledgeGraph.d.ts.map +0 -1
  166. package/dist/memory/retrieval/graph/knowledge/SqliteKnowledgeGraph.js +0 -10
  167. package/dist/memory/retrieval/graph/knowledge/SqliteKnowledgeGraph.js.map +0 -1
  168. package/dist/memory/retrieval/store/SqliteBrain.d.ts.map +0 -1
  169. package/dist/memory/retrieval/store/SqliteBrain.js.map +0 -1
  170. package/dist/memory/retrieval/store/SqliteKnowledgeGraph.d.ts.map +0 -1
  171. package/dist/memory/retrieval/store/SqliteKnowledgeGraph.js.map +0 -1
  172. package/dist/memory/retrieval/store/SqliteMemoryGraph.d.ts.map +0 -1
  173. 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
- * - SqliteBrain (unified SQLite connection with WAL, full schema)
6
- * - SqliteKnowledgeGraph (IKnowledgeGraph backed by SQLite)
7
- * - SqliteMemoryGraph (IMemoryGraph with spreading activation)
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 SqliteBrain and
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 `SqliteBrain.open(config.path)`.
81
+ * 2. Await `Brain.openSqlite(config.path)`.
82
82
  * 3. Check embedding dimension compatibility (warn on mismatch).
83
- * 4. Create `SqliteKnowledgeGraph(brain)`.
84
- * 5. Create `SqliteMemoryGraph(brain)` and call `.initialize()`.
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
- static create(config?: MemoryConfig): Promise<Memory>;
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 `SqliteKnowledgeGraph.upsertEntity()`. Accepts a partial
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 `SqliteKnowledgeGraph.upsertRelation()`. Accepts a partial
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":"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"}
1
+ {"version":3,"file":"Memory.d.ts","sourceRoot":"","sources":["../../../../src/memory/io/facade/Memory.ts"],"names":[],"mappings":"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"}
@@ -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
- * - SqliteBrain (unified SQLite connection with WAL, full schema)
6
- * - SqliteKnowledgeGraph (IKnowledgeGraph backed by SQLite)
7
- * - SqliteMemoryGraph (IMemoryGraph with spreading activation)
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 { SqliteBrain } from '../../retrieval/store/SqliteBrain.js';
37
+ import { Brain } from '../../retrieval/store/Brain.js';
38
38
  import { buildNaturalLanguageFtsQuery, buildInitialTraceMetadata, parseTraceMetadata, readPersistedDecayState, withPersistedDecayState, } from '../../retrieval/store/tracePersistence.js';
39
- import { SqliteKnowledgeGraph } from '../../retrieval/store/SqliteKnowledgeGraph.js';
40
- import { SqliteMemoryGraph } from '../../retrieval/store/SqliteMemoryGraph.js';
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 SqliteBrain and
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 SqliteKnowledgeGraph.
125
- this._knowledgeGraph = new SqliteKnowledgeGraph(this._brain);
126
- // Create SqliteMemoryGraph and initialize.
127
- this._memoryGraph = new SqliteMemoryGraph(this._brain);
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 `SqliteBrain.open(config.path)`.
170
+ * 2. Await `Brain.openSqlite(config.path)`.
171
171
  * 3. Check embedding dimension compatibility (warn on mismatch).
172
- * 4. Create `SqliteKnowledgeGraph(brain)`.
173
- * 5. Create `SqliteMemoryGraph(brain)` and call `.initialize()`.
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
- static async create(config) {
183
- // Step 1: merge with defaults.
184
- const randomSuffix = Math.random().toString(36).slice(2, 10);
185
- let defaultPath;
186
- if (_isNode) {
187
- const osModule = await _getOs();
188
- const pathModule = await _getPath();
189
- defaultPath = pathModule.join(osModule.tmpdir(), `brain-${randomSuffix}.sqlite`);
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
- defaultPath = `brain-${randomSuffix}.sqlite`;
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
- if (merged.store !== 'sqlite') {
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 `SqliteKnowledgeGraph.upsertEntity()`. Accepts a partial
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 `SqliteKnowledgeGraph.upsertRelation()`. Accepts a partial
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,