@framers/agentos 0.2.12 → 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/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 +7 -0
- package/dist/ingest-router/executors/index.d.ts.map +1 -1
- package/dist/ingest-router/executors/index.js +6 -0
- package/dist/ingest-router/executors/index.js.map +1 -1
- package/dist/ingest-router/index.d.ts +2 -2
- package/dist/ingest-router/index.d.ts.map +1 -1
- package/dist/ingest-router/index.js +1 -1
- 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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Stores memory graph nodes in the `knowledge_nodes` table (type = 'memory_graph')
|
|
5
5
|
* and memory association edges in the `knowledge_edges` table — both managed by
|
|
6
|
-
*
|
|
6
|
+
* Brain. All node metadata is serialised into the `properties` JSON column.
|
|
7
7
|
*
|
|
8
8
|
* ## Algorithms
|
|
9
9
|
*
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* The `centroidId` is chosen as the member with the highest total edge weight
|
|
29
29
|
* (i.e. the most central node in the component's subgraph).
|
|
30
30
|
*
|
|
31
|
-
* @module memory/store/
|
|
31
|
+
* @module memory/store/SqlMemoryGraph
|
|
32
32
|
*/
|
|
33
33
|
import { sha256 } from '../../core/util/crossPlatformCrypto.js';
|
|
34
34
|
// ---------------------------------------------------------------------------
|
|
@@ -53,7 +53,7 @@ const SA_DEFAULTS = {
|
|
|
53
53
|
/** Node type discriminator stored in knowledge_nodes.type. */
|
|
54
54
|
const NODE_TYPE = 'memory_graph';
|
|
55
55
|
// ---------------------------------------------------------------------------
|
|
56
|
-
//
|
|
56
|
+
// SqlMemoryGraph
|
|
57
57
|
// ---------------------------------------------------------------------------
|
|
58
58
|
/**
|
|
59
59
|
* SQLite-backed implementation of {@link IMemoryGraph}.
|
|
@@ -63,8 +63,8 @@ const NODE_TYPE = 'memory_graph';
|
|
|
63
63
|
*
|
|
64
64
|
* **Usage:**
|
|
65
65
|
* ```ts
|
|
66
|
-
* const brain = await
|
|
67
|
-
* const graph = new
|
|
66
|
+
* const brain = await Brain.openSqlite('/path/to/brain.sqlite');
|
|
67
|
+
* const graph = new SqlMemoryGraph(brain);
|
|
68
68
|
* await graph.initialize();
|
|
69
69
|
*
|
|
70
70
|
* await graph.addNode('mem-1', { type: 'episodic', scope: 'session', scopeId: 's1', strength: 1.0, createdAt: Date.now() });
|
|
@@ -73,14 +73,14 @@ const NODE_TYPE = 'memory_graph';
|
|
|
73
73
|
* const activated = await graph.spreadingActivation(['mem-1']);
|
|
74
74
|
* ```
|
|
75
75
|
*/
|
|
76
|
-
export class
|
|
76
|
+
export class SqlMemoryGraph {
|
|
77
77
|
// ---------------------------------------------------------------------------
|
|
78
78
|
// Constructor
|
|
79
79
|
// ---------------------------------------------------------------------------
|
|
80
80
|
/**
|
|
81
|
-
* @param brain - The shared
|
|
81
|
+
* @param brain - The shared Brain connection for this agent.
|
|
82
82
|
* The `knowledge_nodes` and `knowledge_edges` tables must already exist
|
|
83
|
-
* (
|
|
83
|
+
* (Brain creates them in its constructor).
|
|
84
84
|
*/
|
|
85
85
|
constructor(brain) {
|
|
86
86
|
this.brain = brain;
|
|
@@ -115,7 +115,7 @@ export class SqliteMemoryGraph {
|
|
|
115
115
|
this._nodes.clear();
|
|
116
116
|
this._edges.clear();
|
|
117
117
|
// Load all memory graph nodes.
|
|
118
|
-
const nodeRows = await this.brain.all(`SELECT id, properties FROM knowledge_nodes WHERE type = ?`, [NODE_TYPE]);
|
|
118
|
+
const nodeRows = await this.brain.all(`SELECT id, properties FROM knowledge_nodes WHERE brain_id = ? AND type = ?`, [this.brain.brainId, NODE_TYPE]);
|
|
119
119
|
for (const row of nodeRows) {
|
|
120
120
|
try {
|
|
121
121
|
const meta = JSON.parse(row.properties);
|
|
@@ -132,10 +132,10 @@ export class SqliteMemoryGraph {
|
|
|
132
132
|
// we can filter by the set of known types.
|
|
133
133
|
const edgeRows = await this.brain.all(`SELECT id, source_id, target_id, type, weight, created_at
|
|
134
134
|
FROM knowledge_edges
|
|
135
|
-
WHERE type IN (
|
|
135
|
+
WHERE brain_id = ? AND type IN (
|
|
136
136
|
'SHARED_ENTITY','TEMPORAL_SEQUENCE','SAME_TOPIC',
|
|
137
137
|
'CONTRADICTS','SUPERSEDES','CAUSED_BY','CO_ACTIVATED','SCHEMA_INSTANCE'
|
|
138
|
-
)
|
|
138
|
+
)`, [this.brain.brainId]);
|
|
139
139
|
for (const row of edgeRows) {
|
|
140
140
|
const key = `${row.source_id}:${row.target_id}`;
|
|
141
141
|
this._edges.set(key, {
|
|
@@ -150,11 +150,11 @@ export class SqliteMemoryGraph {
|
|
|
150
150
|
/**
|
|
151
151
|
* Shut down the memory graph.
|
|
152
152
|
*
|
|
153
|
-
* Currently a no-op because
|
|
153
|
+
* Currently a no-op because Brain owns the DB connection lifetime.
|
|
154
154
|
* Provided for interface compliance and forward compatibility.
|
|
155
155
|
*/
|
|
156
156
|
async shutdown() {
|
|
157
|
-
// No-op:
|
|
157
|
+
// No-op: Brain owns the connection; callers must call brain.close().
|
|
158
158
|
}
|
|
159
159
|
// ---------------------------------------------------------------------------
|
|
160
160
|
// Node operations
|
|
@@ -172,7 +172,8 @@ export class SqliteMemoryGraph {
|
|
|
172
172
|
async addNode(memoryId, metadata) {
|
|
173
173
|
const now = Date.now();
|
|
174
174
|
const { dialect } = this.brain.features;
|
|
175
|
-
await this.brain.run(dialect.insertOrReplace('knowledge_nodes', ['id', 'type', 'label', 'properties', 'confidence', 'source', 'created_at'], ['?', '?', '?', '?', '?', '?', '?'], 'id'), [
|
|
175
|
+
await this.brain.run(dialect.insertOrReplace('knowledge_nodes', ['brain_id', 'id', 'type', 'label', 'properties', 'confidence', 'source', 'created_at'], ['?', '?', '?', '?', '?', '?', '?', '?'], 'brain_id, id'), [
|
|
176
|
+
this.brain.brainId,
|
|
176
177
|
memoryId,
|
|
177
178
|
NODE_TYPE,
|
|
178
179
|
memoryId,
|
|
@@ -201,13 +202,13 @@ export class SqliteMemoryGraph {
|
|
|
201
202
|
}
|
|
202
203
|
}
|
|
203
204
|
if (toDelete.length > 0) {
|
|
204
|
-
await this.brain.run(`DELETE FROM knowledge_edges WHERE source_id = ? OR target_id =
|
|
205
|
+
await this.brain.run(`DELETE FROM knowledge_edges WHERE brain_id = ? AND (source_id = ? OR target_id = ?)`, [this.brain.brainId, memoryId, memoryId]);
|
|
205
206
|
for (const key of toDelete) {
|
|
206
207
|
this._edges.delete(key);
|
|
207
208
|
}
|
|
208
209
|
}
|
|
209
210
|
// Now delete the node itself.
|
|
210
|
-
await this.brain.run(`DELETE FROM knowledge_nodes WHERE id = ? AND type = ?`, [memoryId, NODE_TYPE]);
|
|
211
|
+
await this.brain.run(`DELETE FROM knowledge_nodes WHERE brain_id = ? AND id = ? AND type = ?`, [this.brain.brainId, memoryId, NODE_TYPE]);
|
|
211
212
|
this._nodes.delete(memoryId);
|
|
212
213
|
}
|
|
213
214
|
/**
|
|
@@ -238,7 +239,7 @@ export class SqliteMemoryGraph {
|
|
|
238
239
|
const edgeId = await this._edgeId(edge.sourceId, edge.targetId);
|
|
239
240
|
const key = `${edge.sourceId}:${edge.targetId}`;
|
|
240
241
|
const { dialect } = this.brain.features;
|
|
241
|
-
await this.brain.run(dialect.insertOrReplace('knowledge_edges', ['id', 'source_id', 'target_id', 'type', 'weight', 'bidirectional', 'metadata', 'created_at'], ['?', '?', '?', '?', '?', '0', "'{}'", '?'], 'id'), [edgeId, edge.sourceId, edge.targetId, edge.type, edge.weight, edge.createdAt]);
|
|
242
|
+
await this.brain.run(dialect.insertOrReplace('knowledge_edges', ['brain_id', 'id', 'source_id', 'target_id', 'type', 'weight', 'bidirectional', 'metadata', 'created_at'], ['?', '?', '?', '?', '?', '?', '0', "'{}'", '?'], 'brain_id, id'), [this.brain.brainId, edgeId, edge.sourceId, edge.targetId, edge.type, edge.weight, edge.createdAt]);
|
|
242
243
|
this._edges.set(key, { ...edge });
|
|
243
244
|
}
|
|
244
245
|
/**
|
|
@@ -273,7 +274,7 @@ export class SqliteMemoryGraph {
|
|
|
273
274
|
*/
|
|
274
275
|
async removeEdge(sourceId, targetId) {
|
|
275
276
|
const edgeId = await this._edgeId(sourceId, targetId);
|
|
276
|
-
await this.brain.run(`DELETE FROM knowledge_edges WHERE id = ?`, [edgeId]);
|
|
277
|
+
await this.brain.run(`DELETE FROM knowledge_edges WHERE brain_id = ? AND id = ?`, [this.brain.brainId, edgeId]);
|
|
277
278
|
this._edges.delete(`${sourceId}:${targetId}`);
|
|
278
279
|
}
|
|
279
280
|
// ---------------------------------------------------------------------------
|
|
@@ -427,7 +428,7 @@ export class SqliteMemoryGraph {
|
|
|
427
428
|
existing.weight = newWeight;
|
|
428
429
|
// Update SQLite row weight in-place.
|
|
429
430
|
const edgeId = await this._edgeId(sourceId, targetId);
|
|
430
|
-
await this.brain.run(`UPDATE knowledge_edges SET weight = ? WHERE id = ?`, [newWeight, edgeId]);
|
|
431
|
+
await this.brain.run(`UPDATE knowledge_edges SET weight = ? WHERE brain_id = ? AND id = ?`, [newWeight, this.brain.brainId, edgeId]);
|
|
431
432
|
}
|
|
432
433
|
else {
|
|
433
434
|
// Create a new CO_ACTIVATED edge.
|
|
@@ -602,14 +603,15 @@ export class SqliteMemoryGraph {
|
|
|
602
603
|
* administrative resets only.
|
|
603
604
|
*/
|
|
604
605
|
async clear() {
|
|
606
|
+
const brainId = this.brain.brainId;
|
|
605
607
|
// Delete all knowledge_edges whose type is a MemoryEdgeType value.
|
|
606
|
-
await this.brain.
|
|
607
|
-
WHERE type IN (
|
|
608
|
+
await this.brain.run(`DELETE FROM knowledge_edges
|
|
609
|
+
WHERE brain_id = ? AND type IN (
|
|
608
610
|
'SHARED_ENTITY','TEMPORAL_SEQUENCE','SAME_TOPIC',
|
|
609
611
|
'CONTRADICTS','SUPERSEDES','CAUSED_BY','CO_ACTIVATED','SCHEMA_INSTANCE'
|
|
610
|
-
)
|
|
612
|
+
)`, [brainId]);
|
|
611
613
|
// Delete all memory_graph nodes.
|
|
612
|
-
await this.brain.run(`DELETE FROM knowledge_nodes WHERE type = ?`, [NODE_TYPE]);
|
|
614
|
+
await this.brain.run(`DELETE FROM knowledge_nodes WHERE brain_id = ? AND type = ?`, [brainId, NODE_TYPE]);
|
|
613
615
|
this._nodes.clear();
|
|
614
616
|
this._edges.clear();
|
|
615
617
|
}
|
|
@@ -633,4 +635,4 @@ export class SqliteMemoryGraph {
|
|
|
633
635
|
return hash.slice(0, 32);
|
|
634
636
|
}
|
|
635
637
|
}
|
|
636
|
-
//# sourceMappingURL=
|
|
638
|
+
//# sourceMappingURL=SqlMemoryGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqlMemoryGraph.js","sourceRoot":"","sources":["../../../../src/memory/retrieval/store/SqlMemoryGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file v1-to-v2.ts
|
|
3
|
+
* @description Schema migration v1 -> v2: add `brain_id TEXT NOT NULL` column
|
|
4
|
+
* to all 14 brain-owned tables and recreate composite primary keys / indexes.
|
|
5
|
+
*
|
|
6
|
+
* SQLite does not support `ALTER TABLE ADD PRIMARY KEY`, so the migration uses
|
|
7
|
+
* the standard recreate-table dance: rename old to `<name>_v1`, create new
|
|
8
|
+
* with target schema, copy rows with the brain_id default, drop the old.
|
|
9
|
+
*
|
|
10
|
+
* Postgres uses simple ALTER statements (ADD COLUMN with default, DROP CONSTRAINT,
|
|
11
|
+
* ADD PRIMARY KEY) since it supports those operations natively.
|
|
12
|
+
*
|
|
13
|
+
* Idempotent: detects v2 schema and returns early without touching data.
|
|
14
|
+
*
|
|
15
|
+
* @module memory/retrieval/store/migrations/v1-to-v2
|
|
16
|
+
*/
|
|
17
|
+
import type { StorageAdapter, StorageFeatures } from '@framers/sql-storage-adapter';
|
|
18
|
+
/**
|
|
19
|
+
* Run the v1 -> v2 migration on the given storage adapter.
|
|
20
|
+
*
|
|
21
|
+
* Idempotent: returns immediately when schema is already v2.
|
|
22
|
+
*
|
|
23
|
+
* @param adapter - The storage adapter to migrate.
|
|
24
|
+
* @param features - Platform-aware feature bundle (used for dialect-specific paths).
|
|
25
|
+
* @param brainId - The brain identifier to assign to all existing rows.
|
|
26
|
+
* @returns `{ migrated: true }` if migration ran, `{ migrated: false }` if no-op.
|
|
27
|
+
*/
|
|
28
|
+
export declare function migrateV1ToV2(adapter: StorageAdapter, features: StorageFeatures, brainId: string): Promise<{
|
|
29
|
+
migrated: boolean;
|
|
30
|
+
}>;
|
|
31
|
+
//# sourceMappingURL=v1-to-v2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v1-to-v2.d.ts","sourceRoot":"","sources":["../../../../../src/memory/retrieval/store/migrations/v1-to-v2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AA2SpF;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAqChC"}
|
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file v1-to-v2.ts
|
|
3
|
+
* @description Schema migration v1 -> v2: add `brain_id TEXT NOT NULL` column
|
|
4
|
+
* to all 14 brain-owned tables and recreate composite primary keys / indexes.
|
|
5
|
+
*
|
|
6
|
+
* SQLite does not support `ALTER TABLE ADD PRIMARY KEY`, so the migration uses
|
|
7
|
+
* the standard recreate-table dance: rename old to `<name>_v1`, create new
|
|
8
|
+
* with target schema, copy rows with the brain_id default, drop the old.
|
|
9
|
+
*
|
|
10
|
+
* Postgres uses simple ALTER statements (ADD COLUMN with default, DROP CONSTRAINT,
|
|
11
|
+
* ADD PRIMARY KEY) since it supports those operations natively.
|
|
12
|
+
*
|
|
13
|
+
* Idempotent: detects v2 schema and returns early without touching data.
|
|
14
|
+
*
|
|
15
|
+
* @module memory/retrieval/store/migrations/v1-to-v2
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The 14 tables that gain `brain_id` in v2. Order matters for FK resolution:
|
|
19
|
+
* documents must exist before document_chunks; conversations before messages.
|
|
20
|
+
*/
|
|
21
|
+
const V2_TABLES = [
|
|
22
|
+
{
|
|
23
|
+
name: 'brain_meta',
|
|
24
|
+
columnsDdl: 'brain_id TEXT NOT NULL, key TEXT NOT NULL, value TEXT NOT NULL',
|
|
25
|
+
primaryKey: ['brain_id', 'key'],
|
|
26
|
+
indexes: [],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'memory_traces',
|
|
30
|
+
columnsDdl: `
|
|
31
|
+
brain_id TEXT NOT NULL,
|
|
32
|
+
id TEXT NOT NULL,
|
|
33
|
+
type TEXT NOT NULL,
|
|
34
|
+
scope TEXT NOT NULL,
|
|
35
|
+
content TEXT NOT NULL,
|
|
36
|
+
embedding BLOB,
|
|
37
|
+
strength REAL NOT NULL DEFAULT 1.0,
|
|
38
|
+
created_at INTEGER NOT NULL,
|
|
39
|
+
last_accessed INTEGER,
|
|
40
|
+
retrieval_count INTEGER NOT NULL DEFAULT 0,
|
|
41
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
42
|
+
emotions TEXT NOT NULL DEFAULT '{}',
|
|
43
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
44
|
+
deleted INTEGER NOT NULL DEFAULT 0
|
|
45
|
+
`,
|
|
46
|
+
primaryKey: ['brain_id', 'id'],
|
|
47
|
+
indexes: [
|
|
48
|
+
`CREATE INDEX IF NOT EXISTS idx_memory_traces_brain_type
|
|
49
|
+
ON memory_traces (brain_id, type, created_at DESC)`,
|
|
50
|
+
`CREATE INDEX IF NOT EXISTS idx_memory_traces_brain_scope
|
|
51
|
+
ON memory_traces (brain_id, scope)`,
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'knowledge_nodes',
|
|
56
|
+
columnsDdl: `
|
|
57
|
+
brain_id TEXT NOT NULL,
|
|
58
|
+
id TEXT NOT NULL,
|
|
59
|
+
type TEXT NOT NULL,
|
|
60
|
+
label TEXT NOT NULL,
|
|
61
|
+
properties TEXT NOT NULL DEFAULT '{}',
|
|
62
|
+
embedding BLOB,
|
|
63
|
+
confidence REAL NOT NULL DEFAULT 1.0,
|
|
64
|
+
source TEXT NOT NULL DEFAULT '{}',
|
|
65
|
+
created_at INTEGER NOT NULL
|
|
66
|
+
`,
|
|
67
|
+
primaryKey: ['brain_id', 'id'],
|
|
68
|
+
indexes: [
|
|
69
|
+
`CREATE INDEX IF NOT EXISTS idx_knowledge_nodes_brain_type
|
|
70
|
+
ON knowledge_nodes (brain_id, type)`,
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'knowledge_edges',
|
|
75
|
+
columnsDdl: `
|
|
76
|
+
brain_id TEXT NOT NULL,
|
|
77
|
+
id TEXT NOT NULL,
|
|
78
|
+
source_id TEXT NOT NULL,
|
|
79
|
+
target_id TEXT NOT NULL,
|
|
80
|
+
type TEXT NOT NULL,
|
|
81
|
+
weight REAL NOT NULL DEFAULT 1.0,
|
|
82
|
+
bidirectional INTEGER NOT NULL DEFAULT 0,
|
|
83
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
84
|
+
created_at INTEGER NOT NULL
|
|
85
|
+
`,
|
|
86
|
+
primaryKey: ['brain_id', 'id'],
|
|
87
|
+
foreignKeys: [
|
|
88
|
+
'FOREIGN KEY (brain_id, source_id) REFERENCES knowledge_nodes(brain_id, id)',
|
|
89
|
+
'FOREIGN KEY (brain_id, target_id) REFERENCES knowledge_nodes(brain_id, id)',
|
|
90
|
+
],
|
|
91
|
+
indexes: [
|
|
92
|
+
`CREATE INDEX IF NOT EXISTS idx_knowledge_edges_brain_source
|
|
93
|
+
ON knowledge_edges (brain_id, source_id)`,
|
|
94
|
+
`CREATE INDEX IF NOT EXISTS idx_knowledge_edges_brain_target
|
|
95
|
+
ON knowledge_edges (brain_id, target_id)`,
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'documents',
|
|
100
|
+
columnsDdl: `
|
|
101
|
+
brain_id TEXT NOT NULL,
|
|
102
|
+
id TEXT NOT NULL,
|
|
103
|
+
path TEXT NOT NULL,
|
|
104
|
+
format TEXT NOT NULL,
|
|
105
|
+
title TEXT,
|
|
106
|
+
content_hash TEXT NOT NULL,
|
|
107
|
+
chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
108
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
109
|
+
ingested_at INTEGER NOT NULL
|
|
110
|
+
`,
|
|
111
|
+
primaryKey: ['brain_id', 'id'],
|
|
112
|
+
indexes: [],
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'document_chunks',
|
|
116
|
+
columnsDdl: `
|
|
117
|
+
brain_id TEXT NOT NULL,
|
|
118
|
+
id TEXT NOT NULL,
|
|
119
|
+
document_id TEXT NOT NULL,
|
|
120
|
+
trace_id TEXT,
|
|
121
|
+
content TEXT NOT NULL,
|
|
122
|
+
chunk_index INTEGER NOT NULL,
|
|
123
|
+
page_number INTEGER,
|
|
124
|
+
embedding BLOB
|
|
125
|
+
`,
|
|
126
|
+
primaryKey: ['brain_id', 'id'],
|
|
127
|
+
foreignKeys: [
|
|
128
|
+
'FOREIGN KEY (brain_id, document_id) REFERENCES documents(brain_id, id)',
|
|
129
|
+
'FOREIGN KEY (brain_id, trace_id) REFERENCES memory_traces(brain_id, id)',
|
|
130
|
+
],
|
|
131
|
+
indexes: [
|
|
132
|
+
`CREATE INDEX IF NOT EXISTS idx_document_chunks_brain_document
|
|
133
|
+
ON document_chunks (brain_id, document_id, chunk_index)`,
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'document_images',
|
|
138
|
+
columnsDdl: `
|
|
139
|
+
brain_id TEXT NOT NULL,
|
|
140
|
+
id TEXT NOT NULL,
|
|
141
|
+
document_id TEXT NOT NULL,
|
|
142
|
+
chunk_id TEXT,
|
|
143
|
+
data BLOB NOT NULL,
|
|
144
|
+
mime_type TEXT NOT NULL,
|
|
145
|
+
caption TEXT,
|
|
146
|
+
page_number INTEGER,
|
|
147
|
+
embedding BLOB
|
|
148
|
+
`,
|
|
149
|
+
primaryKey: ['brain_id', 'id'],
|
|
150
|
+
foreignKeys: [
|
|
151
|
+
'FOREIGN KEY (brain_id, document_id) REFERENCES documents(brain_id, id)',
|
|
152
|
+
'FOREIGN KEY (brain_id, chunk_id) REFERENCES document_chunks(brain_id, id)',
|
|
153
|
+
],
|
|
154
|
+
indexes: [],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'consolidation_log',
|
|
158
|
+
columnsDdl: `
|
|
159
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
160
|
+
brain_id TEXT NOT NULL,
|
|
161
|
+
ran_at INTEGER NOT NULL,
|
|
162
|
+
pruned INTEGER NOT NULL DEFAULT 0,
|
|
163
|
+
merged INTEGER NOT NULL DEFAULT 0,
|
|
164
|
+
derived INTEGER NOT NULL DEFAULT 0,
|
|
165
|
+
compacted INTEGER NOT NULL DEFAULT 0,
|
|
166
|
+
duration_ms INTEGER NOT NULL DEFAULT 0
|
|
167
|
+
`,
|
|
168
|
+
primaryKey: [], // AUTOINCREMENT id is global; brain_id scopes via index
|
|
169
|
+
autoincrementId: true,
|
|
170
|
+
indexes: [
|
|
171
|
+
`CREATE INDEX IF NOT EXISTS idx_consolidation_log_brain_time
|
|
172
|
+
ON consolidation_log (brain_id, ran_at DESC)`,
|
|
173
|
+
],
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'retrieval_feedback',
|
|
177
|
+
columnsDdl: `
|
|
178
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
179
|
+
brain_id TEXT NOT NULL,
|
|
180
|
+
trace_id TEXT NOT NULL,
|
|
181
|
+
signal TEXT NOT NULL,
|
|
182
|
+
query TEXT,
|
|
183
|
+
created_at INTEGER NOT NULL
|
|
184
|
+
`,
|
|
185
|
+
primaryKey: [],
|
|
186
|
+
autoincrementId: true,
|
|
187
|
+
foreignKeys: [
|
|
188
|
+
'FOREIGN KEY (brain_id, trace_id) REFERENCES memory_traces(brain_id, id)',
|
|
189
|
+
],
|
|
190
|
+
indexes: [
|
|
191
|
+
`CREATE INDEX IF NOT EXISTS idx_retrieval_feedback_brain_trace
|
|
192
|
+
ON retrieval_feedback (brain_id, trace_id, created_at DESC)`,
|
|
193
|
+
],
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: 'conversations',
|
|
197
|
+
columnsDdl: `
|
|
198
|
+
brain_id TEXT NOT NULL,
|
|
199
|
+
id TEXT NOT NULL,
|
|
200
|
+
title TEXT,
|
|
201
|
+
created_at INTEGER NOT NULL,
|
|
202
|
+
updated_at INTEGER NOT NULL,
|
|
203
|
+
metadata TEXT NOT NULL DEFAULT '{}'
|
|
204
|
+
`,
|
|
205
|
+
primaryKey: ['brain_id', 'id'],
|
|
206
|
+
indexes: [],
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: 'messages',
|
|
210
|
+
columnsDdl: `
|
|
211
|
+
brain_id TEXT NOT NULL,
|
|
212
|
+
id TEXT NOT NULL,
|
|
213
|
+
conversation_id TEXT NOT NULL,
|
|
214
|
+
role TEXT NOT NULL,
|
|
215
|
+
content TEXT NOT NULL,
|
|
216
|
+
created_at INTEGER NOT NULL,
|
|
217
|
+
metadata TEXT NOT NULL DEFAULT '{}'
|
|
218
|
+
`,
|
|
219
|
+
primaryKey: ['brain_id', 'id'],
|
|
220
|
+
foreignKeys: [
|
|
221
|
+
'FOREIGN KEY (brain_id, conversation_id) REFERENCES conversations(brain_id, id)',
|
|
222
|
+
],
|
|
223
|
+
indexes: [
|
|
224
|
+
`CREATE INDEX IF NOT EXISTS idx_messages_brain_conversation
|
|
225
|
+
ON messages (brain_id, conversation_id, created_at)`,
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
name: 'prospective_items',
|
|
230
|
+
columnsDdl: `
|
|
231
|
+
brain_id TEXT NOT NULL,
|
|
232
|
+
id TEXT NOT NULL,
|
|
233
|
+
content TEXT NOT NULL,
|
|
234
|
+
trigger_type TEXT NOT NULL,
|
|
235
|
+
trigger_at INTEGER,
|
|
236
|
+
trigger_event TEXT,
|
|
237
|
+
cue_text TEXT,
|
|
238
|
+
cue_embedding BLOB,
|
|
239
|
+
similarity_threshold REAL DEFAULT 0.7,
|
|
240
|
+
importance REAL NOT NULL DEFAULT 0.5,
|
|
241
|
+
triggered INTEGER NOT NULL DEFAULT 0,
|
|
242
|
+
recurring INTEGER NOT NULL DEFAULT 0,
|
|
243
|
+
source_trace_id TEXT,
|
|
244
|
+
created_at INTEGER NOT NULL
|
|
245
|
+
`,
|
|
246
|
+
primaryKey: ['brain_id', 'id'],
|
|
247
|
+
indexes: [],
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
name: 'archived_traces',
|
|
251
|
+
columnsDdl: `
|
|
252
|
+
brain_id TEXT NOT NULL,
|
|
253
|
+
trace_id TEXT NOT NULL,
|
|
254
|
+
agent_id TEXT NOT NULL,
|
|
255
|
+
verbatim_content TEXT NOT NULL,
|
|
256
|
+
content_hash TEXT NOT NULL,
|
|
257
|
+
trace_type TEXT NOT NULL,
|
|
258
|
+
emotional_context TEXT NOT NULL DEFAULT '{}',
|
|
259
|
+
entities TEXT NOT NULL DEFAULT '[]',
|
|
260
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
261
|
+
created_at INTEGER NOT NULL,
|
|
262
|
+
archived_at INTEGER NOT NULL,
|
|
263
|
+
archive_reason TEXT NOT NULL,
|
|
264
|
+
byte_size INTEGER NOT NULL DEFAULT 0
|
|
265
|
+
`,
|
|
266
|
+
primaryKey: ['brain_id', 'trace_id'],
|
|
267
|
+
// Migration: copy existing agent_id column into brain_id (legacy archive
|
|
268
|
+
// already discriminated by agent_id, which is semantically the same).
|
|
269
|
+
brainIdSourceColumn: 'agent_id',
|
|
270
|
+
indexes: [
|
|
271
|
+
`CREATE INDEX IF NOT EXISTS idx_archived_traces_brain_time
|
|
272
|
+
ON archived_traces (brain_id, archived_at)`,
|
|
273
|
+
`CREATE INDEX IF NOT EXISTS idx_archived_traces_brain_reason
|
|
274
|
+
ON archived_traces (brain_id, archive_reason)`,
|
|
275
|
+
],
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
name: 'archive_access_log',
|
|
279
|
+
columnsDdl: `
|
|
280
|
+
brain_id TEXT NOT NULL,
|
|
281
|
+
trace_id TEXT NOT NULL,
|
|
282
|
+
accessed_at INTEGER NOT NULL,
|
|
283
|
+
request_context TEXT
|
|
284
|
+
`,
|
|
285
|
+
primaryKey: ['brain_id', 'trace_id', 'accessed_at'],
|
|
286
|
+
indexes: [
|
|
287
|
+
`CREATE INDEX IF NOT EXISTS idx_archive_access_recency
|
|
288
|
+
ON archive_access_log (brain_id, trace_id, accessed_at DESC)`,
|
|
289
|
+
],
|
|
290
|
+
},
|
|
291
|
+
];
|
|
292
|
+
/**
|
|
293
|
+
* Run the v1 -> v2 migration on the given storage adapter.
|
|
294
|
+
*
|
|
295
|
+
* Idempotent: returns immediately when schema is already v2.
|
|
296
|
+
*
|
|
297
|
+
* @param adapter - The storage adapter to migrate.
|
|
298
|
+
* @param features - Platform-aware feature bundle (used for dialect-specific paths).
|
|
299
|
+
* @param brainId - The brain identifier to assign to all existing rows.
|
|
300
|
+
* @returns `{ migrated: true }` if migration ran, `{ migrated: false }` if no-op.
|
|
301
|
+
*/
|
|
302
|
+
export async function migrateV1ToV2(adapter, features, brainId) {
|
|
303
|
+
const isPostgres = adapter.kind.includes('postgres');
|
|
304
|
+
// Detect v2 schema via brain_meta column existence.
|
|
305
|
+
// If brain_meta does not exist yet, this is a fresh database; no migration needed.
|
|
306
|
+
const brainMetaExists = isPostgres
|
|
307
|
+
? await postgresTableExists(adapter, 'brain_meta')
|
|
308
|
+
: await sqliteTableExists(adapter, 'brain_meta');
|
|
309
|
+
if (!brainMetaExists) {
|
|
310
|
+
// Fresh database; the upcoming _initSchema() call creates v2 directly.
|
|
311
|
+
return { migrated: false };
|
|
312
|
+
}
|
|
313
|
+
const hasBrainId = isPostgres
|
|
314
|
+
? await postgresHasColumn(adapter, 'brain_meta', 'brain_id')
|
|
315
|
+
: await sqliteHasColumn(adapter, 'brain_meta', 'brain_id');
|
|
316
|
+
if (hasBrainId) {
|
|
317
|
+
return { migrated: false };
|
|
318
|
+
}
|
|
319
|
+
// Run migration. SQLite uses recreate-table dance; Postgres uses ALTER.
|
|
320
|
+
for (const table of V2_TABLES) {
|
|
321
|
+
const exists = isPostgres
|
|
322
|
+
? await postgresTableExists(adapter, table.name)
|
|
323
|
+
: await sqliteTableExists(adapter, table.name);
|
|
324
|
+
if (!exists)
|
|
325
|
+
continue;
|
|
326
|
+
if (isPostgres) {
|
|
327
|
+
await migratePostgresTable(adapter, table, brainId);
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
await migrateSqliteTable(adapter, table, brainId);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return { migrated: true };
|
|
334
|
+
}
|
|
335
|
+
async function sqliteTableExists(adapter, table) {
|
|
336
|
+
const row = await adapter.get(`SELECT name FROM sqlite_master WHERE type='table' AND name=?`, [table]);
|
|
337
|
+
return Boolean(row);
|
|
338
|
+
}
|
|
339
|
+
async function postgresTableExists(adapter, table) {
|
|
340
|
+
const row = await adapter.get(`SELECT EXISTS (
|
|
341
|
+
SELECT 1 FROM information_schema.tables
|
|
342
|
+
WHERE table_schema = current_schema() AND table_name = $1
|
|
343
|
+
) AS exists`, [table]);
|
|
344
|
+
return row?.exists ?? false;
|
|
345
|
+
}
|
|
346
|
+
async function sqliteHasColumn(adapter, table, column) {
|
|
347
|
+
const rows = await adapter.all(`PRAGMA table_info(${table})`);
|
|
348
|
+
return rows.some((r) => r.name === column);
|
|
349
|
+
}
|
|
350
|
+
async function postgresHasColumn(adapter, table, column) {
|
|
351
|
+
const row = await adapter.get(`SELECT EXISTS (
|
|
352
|
+
SELECT 1 FROM information_schema.columns
|
|
353
|
+
WHERE table_name = $1 AND column_name = $2
|
|
354
|
+
) AS exists`, [table, column]);
|
|
355
|
+
return row?.exists ?? false;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* SQLite recreate-table dance for a single table.
|
|
359
|
+
*
|
|
360
|
+
* 1. Read existing column names.
|
|
361
|
+
* 2. Rename table to `<name>_v1`.
|
|
362
|
+
* 3. Create new table with v2 schema.
|
|
363
|
+
* 4. Copy rows: for tables with `brainIdSourceColumn`, use that column;
|
|
364
|
+
* otherwise default to the supplied brainId.
|
|
365
|
+
* 5. Drop old table.
|
|
366
|
+
* 6. Apply indexes.
|
|
367
|
+
*/
|
|
368
|
+
async function migrateSqliteTable(adapter, table, brainId) {
|
|
369
|
+
const oldColumns = (await adapter.all(`PRAGMA table_info(${table.name})`)).map((r) => r.name);
|
|
370
|
+
await adapter.exec(`ALTER TABLE ${table.name} RENAME TO ${table.name}_v1`);
|
|
371
|
+
const pkClause = table.primaryKey.length > 0 ? `, PRIMARY KEY (${table.primaryKey.join(', ')})` : '';
|
|
372
|
+
const fkClause = table.foreignKeys && table.foreignKeys.length > 0
|
|
373
|
+
? ',\n ' + table.foreignKeys.join(',\n ')
|
|
374
|
+
: '';
|
|
375
|
+
await adapter.exec(`CREATE TABLE ${table.name} (
|
|
376
|
+
${table.columnsDdl}${pkClause}${fkClause}
|
|
377
|
+
)`);
|
|
378
|
+
const oldColList = oldColumns.join(', ');
|
|
379
|
+
if (table.brainIdSourceColumn && oldColumns.includes(table.brainIdSourceColumn)) {
|
|
380
|
+
// Copy rows using the existing column as brain_id source.
|
|
381
|
+
await adapter.exec(`INSERT INTO ${table.name} (brain_id, ${oldColList})
|
|
382
|
+
SELECT ${table.brainIdSourceColumn}, ${oldColList} FROM ${table.name}_v1`);
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
await adapter.run(`INSERT INTO ${table.name} (brain_id, ${oldColList})
|
|
386
|
+
SELECT ?, ${oldColList} FROM ${table.name}_v1`, [brainId]);
|
|
387
|
+
}
|
|
388
|
+
await adapter.exec(`DROP TABLE ${table.name}_v1`);
|
|
389
|
+
for (const idx of table.indexes) {
|
|
390
|
+
await adapter.exec(idx);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Postgres ALTER-based migration for a single table.
|
|
395
|
+
*
|
|
396
|
+
* 1. Add brain_id column with default = brainId (or copy from agent_id when present).
|
|
397
|
+
* 2. Drop existing primary key constraint.
|
|
398
|
+
* 3. Add composite primary key (or skip for AUTOINCREMENT tables).
|
|
399
|
+
* 4. Drop the default on brain_id (future INSERTs supply it explicitly).
|
|
400
|
+
* 5. Apply indexes.
|
|
401
|
+
*/
|
|
402
|
+
async function migratePostgresTable(adapter, table, brainId) {
|
|
403
|
+
const escapedBrainId = brainId.replace(/'/g, "''");
|
|
404
|
+
if (table.brainIdSourceColumn) {
|
|
405
|
+
// Add nullable, then UPDATE from source column, then SET NOT NULL.
|
|
406
|
+
await adapter.exec(`ALTER TABLE ${table.name} ADD COLUMN brain_id TEXT`);
|
|
407
|
+
await adapter.exec(`UPDATE ${table.name} SET brain_id = ${table.brainIdSourceColumn}`);
|
|
408
|
+
await adapter.exec(`ALTER TABLE ${table.name} ALTER COLUMN brain_id SET NOT NULL`);
|
|
409
|
+
}
|
|
410
|
+
else {
|
|
411
|
+
await adapter.exec(`ALTER TABLE ${table.name} ADD COLUMN brain_id TEXT NOT NULL DEFAULT '${escapedBrainId}'`);
|
|
412
|
+
await adapter.exec(`ALTER TABLE ${table.name} ALTER COLUMN brain_id DROP DEFAULT`);
|
|
413
|
+
}
|
|
414
|
+
if (table.primaryKey.length > 0) {
|
|
415
|
+
// Drop existing PK (Postgres names it <table>_pkey by default).
|
|
416
|
+
await adapter.exec(`ALTER TABLE ${table.name} DROP CONSTRAINT IF EXISTS ${table.name}_pkey`);
|
|
417
|
+
await adapter.exec(`ALTER TABLE ${table.name} ADD PRIMARY KEY (${table.primaryKey.join(', ')})`);
|
|
418
|
+
}
|
|
419
|
+
for (const idx of table.indexes) {
|
|
420
|
+
await adapter.exec(idx);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=v1-to-v2.js.map
|