@framers/agentos 0.2.12 → 0.3.1
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} +106 -23
- package/dist/memory/retrieval/store/Brain.d.ts.map +1 -0
- package/dist/memory/retrieval/store/Brain.js +898 -0
- 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/MigrationRunner.d.ts +50 -0
- package/dist/memory/retrieval/store/migrations/MigrationRunner.d.ts.map +1 -0
- package/dist/memory/retrieval/store/migrations/MigrationRunner.js +100 -0
- package/dist/memory/retrieval/store/migrations/MigrationRunner.js.map +1 -0
- package/dist/memory/retrieval/store/migrations/index.d.ts +20 -0
- package/dist/memory/retrieval/store/migrations/index.d.ts.map +1 -0
- package/dist/memory/retrieval/store/migrations/index.js +19 -0
- package/dist/memory/retrieval/store/migrations/index.js.map +1 -0
- package/dist/memory/retrieval/store/migrations/types.d.ts +28 -0
- package/dist/memory/retrieval/store/migrations/types.d.ts.map +1 -0
- package/dist/memory/retrieval/store/migrations/types.js +7 -0
- package/dist/memory/retrieval/store/migrations/types.js.map +1 -0
- package/dist/memory/retrieval/store/migrations/v1-to-v2.d.ts +40 -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 +491 -0
- package/dist/memory/retrieval/store/migrations/v1-to-v2.js.map +1 -0
- package/dist/memory/retrieval/store/portable-tables.d.ts +27 -0
- package/dist/memory/retrieval/store/portable-tables.d.ts.map +1 -0
- package/dist/memory/retrieval/store/portable-tables.js +56 -0
- package/dist/memory/retrieval/store/portable-tables.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 +0 -553
- 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
|
@@ -0,0 +1,491 @@
|
|
|
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 { PORTABLE_TABLES } from '../portable-tables.js';
|
|
18
|
+
/**
|
|
19
|
+
* The 14 tables that gain `brain_id` in v2. Order matters for FK resolution:
|
|
20
|
+
* documents must exist before document_chunks; conversations before messages.
|
|
21
|
+
*/
|
|
22
|
+
const V2_TABLES = [
|
|
23
|
+
{
|
|
24
|
+
name: 'brain_meta',
|
|
25
|
+
columnsDdl: 'brain_id TEXT NOT NULL, key TEXT NOT NULL, value TEXT NOT NULL',
|
|
26
|
+
primaryKey: ['brain_id', 'key'],
|
|
27
|
+
indexes: [],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'memory_traces',
|
|
31
|
+
columnsDdl: `
|
|
32
|
+
brain_id TEXT NOT NULL,
|
|
33
|
+
id TEXT NOT NULL,
|
|
34
|
+
type TEXT NOT NULL,
|
|
35
|
+
scope TEXT NOT NULL,
|
|
36
|
+
content TEXT NOT NULL,
|
|
37
|
+
embedding BLOB,
|
|
38
|
+
strength REAL NOT NULL DEFAULT 1.0,
|
|
39
|
+
created_at INTEGER NOT NULL,
|
|
40
|
+
last_accessed INTEGER,
|
|
41
|
+
retrieval_count INTEGER NOT NULL DEFAULT 0,
|
|
42
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
43
|
+
emotions TEXT NOT NULL DEFAULT '{}',
|
|
44
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
45
|
+
deleted INTEGER NOT NULL DEFAULT 0
|
|
46
|
+
`,
|
|
47
|
+
primaryKey: ['brain_id', 'id'],
|
|
48
|
+
indexes: [
|
|
49
|
+
`CREATE INDEX IF NOT EXISTS idx_memory_traces_brain_type
|
|
50
|
+
ON memory_traces (brain_id, type, created_at DESC)`,
|
|
51
|
+
`CREATE INDEX IF NOT EXISTS idx_memory_traces_brain_scope
|
|
52
|
+
ON memory_traces (brain_id, scope)`,
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'knowledge_nodes',
|
|
57
|
+
columnsDdl: `
|
|
58
|
+
brain_id TEXT NOT NULL,
|
|
59
|
+
id TEXT NOT NULL,
|
|
60
|
+
type TEXT NOT NULL,
|
|
61
|
+
label TEXT NOT NULL,
|
|
62
|
+
properties TEXT NOT NULL DEFAULT '{}',
|
|
63
|
+
embedding BLOB,
|
|
64
|
+
confidence REAL NOT NULL DEFAULT 1.0,
|
|
65
|
+
source TEXT NOT NULL DEFAULT '{}',
|
|
66
|
+
created_at INTEGER NOT NULL
|
|
67
|
+
`,
|
|
68
|
+
primaryKey: ['brain_id', 'id'],
|
|
69
|
+
indexes: [
|
|
70
|
+
`CREATE INDEX IF NOT EXISTS idx_knowledge_nodes_brain_type
|
|
71
|
+
ON knowledge_nodes (brain_id, type)`,
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'knowledge_edges',
|
|
76
|
+
columnsDdl: `
|
|
77
|
+
brain_id TEXT NOT NULL,
|
|
78
|
+
id TEXT NOT NULL,
|
|
79
|
+
source_id TEXT NOT NULL,
|
|
80
|
+
target_id TEXT NOT NULL,
|
|
81
|
+
type TEXT NOT NULL,
|
|
82
|
+
weight REAL NOT NULL DEFAULT 1.0,
|
|
83
|
+
bidirectional INTEGER NOT NULL DEFAULT 0,
|
|
84
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
85
|
+
created_at INTEGER NOT NULL
|
|
86
|
+
`,
|
|
87
|
+
primaryKey: ['brain_id', 'id'],
|
|
88
|
+
foreignKeys: [
|
|
89
|
+
'FOREIGN KEY (brain_id, source_id) REFERENCES knowledge_nodes(brain_id, id)',
|
|
90
|
+
'FOREIGN KEY (brain_id, target_id) REFERENCES knowledge_nodes(brain_id, id)',
|
|
91
|
+
],
|
|
92
|
+
indexes: [
|
|
93
|
+
`CREATE INDEX IF NOT EXISTS idx_knowledge_edges_brain_source
|
|
94
|
+
ON knowledge_edges (brain_id, source_id)`,
|
|
95
|
+
`CREATE INDEX IF NOT EXISTS idx_knowledge_edges_brain_target
|
|
96
|
+
ON knowledge_edges (brain_id, target_id)`,
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'documents',
|
|
101
|
+
columnsDdl: `
|
|
102
|
+
brain_id TEXT NOT NULL,
|
|
103
|
+
id TEXT NOT NULL,
|
|
104
|
+
path TEXT NOT NULL,
|
|
105
|
+
format TEXT NOT NULL,
|
|
106
|
+
title TEXT,
|
|
107
|
+
content_hash TEXT NOT NULL,
|
|
108
|
+
chunk_count INTEGER NOT NULL DEFAULT 0,
|
|
109
|
+
metadata TEXT NOT NULL DEFAULT '{}',
|
|
110
|
+
ingested_at INTEGER NOT NULL
|
|
111
|
+
`,
|
|
112
|
+
primaryKey: ['brain_id', 'id'],
|
|
113
|
+
indexes: [],
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'document_chunks',
|
|
117
|
+
columnsDdl: `
|
|
118
|
+
brain_id TEXT NOT NULL,
|
|
119
|
+
id TEXT NOT NULL,
|
|
120
|
+
document_id TEXT NOT NULL,
|
|
121
|
+
trace_id TEXT,
|
|
122
|
+
content TEXT NOT NULL,
|
|
123
|
+
chunk_index INTEGER NOT NULL,
|
|
124
|
+
page_number INTEGER,
|
|
125
|
+
embedding BLOB
|
|
126
|
+
`,
|
|
127
|
+
primaryKey: ['brain_id', 'id'],
|
|
128
|
+
foreignKeys: [
|
|
129
|
+
'FOREIGN KEY (brain_id, document_id) REFERENCES documents(brain_id, id)',
|
|
130
|
+
'FOREIGN KEY (brain_id, trace_id) REFERENCES memory_traces(brain_id, id)',
|
|
131
|
+
],
|
|
132
|
+
indexes: [
|
|
133
|
+
`CREATE INDEX IF NOT EXISTS idx_document_chunks_brain_document
|
|
134
|
+
ON document_chunks (brain_id, document_id, chunk_index)`,
|
|
135
|
+
],
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: 'document_images',
|
|
139
|
+
columnsDdl: `
|
|
140
|
+
brain_id TEXT NOT NULL,
|
|
141
|
+
id TEXT NOT NULL,
|
|
142
|
+
document_id TEXT NOT NULL,
|
|
143
|
+
chunk_id TEXT,
|
|
144
|
+
data BLOB NOT NULL,
|
|
145
|
+
mime_type TEXT NOT NULL,
|
|
146
|
+
caption TEXT,
|
|
147
|
+
page_number INTEGER,
|
|
148
|
+
embedding BLOB
|
|
149
|
+
`,
|
|
150
|
+
primaryKey: ['brain_id', 'id'],
|
|
151
|
+
foreignKeys: [
|
|
152
|
+
'FOREIGN KEY (brain_id, document_id) REFERENCES documents(brain_id, id)',
|
|
153
|
+
'FOREIGN KEY (brain_id, chunk_id) REFERENCES document_chunks(brain_id, id)',
|
|
154
|
+
],
|
|
155
|
+
indexes: [],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'consolidation_log',
|
|
159
|
+
columnsDdl: `
|
|
160
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
161
|
+
brain_id TEXT NOT NULL,
|
|
162
|
+
ran_at INTEGER NOT NULL,
|
|
163
|
+
pruned INTEGER NOT NULL DEFAULT 0,
|
|
164
|
+
merged INTEGER NOT NULL DEFAULT 0,
|
|
165
|
+
derived INTEGER NOT NULL DEFAULT 0,
|
|
166
|
+
compacted INTEGER NOT NULL DEFAULT 0,
|
|
167
|
+
duration_ms INTEGER NOT NULL DEFAULT 0
|
|
168
|
+
`,
|
|
169
|
+
primaryKey: [], // AUTOINCREMENT id is global; brain_id scopes via index
|
|
170
|
+
autoincrementId: true,
|
|
171
|
+
indexes: [
|
|
172
|
+
`CREATE INDEX IF NOT EXISTS idx_consolidation_log_brain_time
|
|
173
|
+
ON consolidation_log (brain_id, ran_at DESC)`,
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
name: 'retrieval_feedback',
|
|
178
|
+
columnsDdl: `
|
|
179
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
180
|
+
brain_id TEXT NOT NULL,
|
|
181
|
+
trace_id TEXT NOT NULL,
|
|
182
|
+
signal TEXT NOT NULL,
|
|
183
|
+
query TEXT,
|
|
184
|
+
created_at INTEGER NOT NULL
|
|
185
|
+
`,
|
|
186
|
+
primaryKey: [],
|
|
187
|
+
autoincrementId: true,
|
|
188
|
+
foreignKeys: [
|
|
189
|
+
'FOREIGN KEY (brain_id, trace_id) REFERENCES memory_traces(brain_id, id)',
|
|
190
|
+
],
|
|
191
|
+
indexes: [
|
|
192
|
+
`CREATE INDEX IF NOT EXISTS idx_retrieval_feedback_brain_trace
|
|
193
|
+
ON retrieval_feedback (brain_id, trace_id, created_at DESC)`,
|
|
194
|
+
],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: 'conversations',
|
|
198
|
+
columnsDdl: `
|
|
199
|
+
brain_id TEXT NOT NULL,
|
|
200
|
+
id TEXT NOT NULL,
|
|
201
|
+
title TEXT,
|
|
202
|
+
created_at INTEGER NOT NULL,
|
|
203
|
+
updated_at INTEGER NOT NULL,
|
|
204
|
+
metadata TEXT NOT NULL DEFAULT '{}'
|
|
205
|
+
`,
|
|
206
|
+
primaryKey: ['brain_id', 'id'],
|
|
207
|
+
indexes: [],
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: 'messages',
|
|
211
|
+
columnsDdl: `
|
|
212
|
+
brain_id TEXT NOT NULL,
|
|
213
|
+
id TEXT NOT NULL,
|
|
214
|
+
conversation_id TEXT NOT NULL,
|
|
215
|
+
role TEXT NOT NULL,
|
|
216
|
+
content TEXT NOT NULL,
|
|
217
|
+
created_at INTEGER NOT NULL,
|
|
218
|
+
metadata TEXT NOT NULL DEFAULT '{}'
|
|
219
|
+
`,
|
|
220
|
+
primaryKey: ['brain_id', 'id'],
|
|
221
|
+
foreignKeys: [
|
|
222
|
+
'FOREIGN KEY (brain_id, conversation_id) REFERENCES conversations(brain_id, id)',
|
|
223
|
+
],
|
|
224
|
+
indexes: [
|
|
225
|
+
`CREATE INDEX IF NOT EXISTS idx_messages_brain_conversation
|
|
226
|
+
ON messages (brain_id, conversation_id, created_at)`,
|
|
227
|
+
],
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
name: 'prospective_items',
|
|
231
|
+
columnsDdl: `
|
|
232
|
+
brain_id TEXT NOT NULL,
|
|
233
|
+
id TEXT NOT NULL,
|
|
234
|
+
content TEXT NOT NULL,
|
|
235
|
+
trigger_type TEXT NOT NULL,
|
|
236
|
+
trigger_at INTEGER,
|
|
237
|
+
trigger_event TEXT,
|
|
238
|
+
cue_text TEXT,
|
|
239
|
+
cue_embedding BLOB,
|
|
240
|
+
similarity_threshold REAL DEFAULT 0.7,
|
|
241
|
+
importance REAL NOT NULL DEFAULT 0.5,
|
|
242
|
+
triggered INTEGER NOT NULL DEFAULT 0,
|
|
243
|
+
recurring INTEGER NOT NULL DEFAULT 0,
|
|
244
|
+
source_trace_id TEXT,
|
|
245
|
+
created_at INTEGER NOT NULL
|
|
246
|
+
`,
|
|
247
|
+
primaryKey: ['brain_id', 'id'],
|
|
248
|
+
indexes: [],
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
name: 'archived_traces',
|
|
252
|
+
columnsDdl: `
|
|
253
|
+
brain_id TEXT NOT NULL,
|
|
254
|
+
trace_id TEXT NOT NULL,
|
|
255
|
+
agent_id TEXT NOT NULL,
|
|
256
|
+
verbatim_content TEXT NOT NULL,
|
|
257
|
+
content_hash TEXT NOT NULL,
|
|
258
|
+
trace_type TEXT NOT NULL,
|
|
259
|
+
emotional_context TEXT NOT NULL DEFAULT '{}',
|
|
260
|
+
entities TEXT NOT NULL DEFAULT '[]',
|
|
261
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
262
|
+
created_at INTEGER NOT NULL,
|
|
263
|
+
archived_at INTEGER NOT NULL,
|
|
264
|
+
archive_reason TEXT NOT NULL,
|
|
265
|
+
byte_size INTEGER NOT NULL DEFAULT 0
|
|
266
|
+
`,
|
|
267
|
+
primaryKey: ['brain_id', 'trace_id'],
|
|
268
|
+
// Migration: copy existing agent_id column into brain_id (legacy archive
|
|
269
|
+
// already discriminated by agent_id, which is semantically the same).
|
|
270
|
+
//
|
|
271
|
+
// CAVEAT: if the caller passes an explicit brainId override that differs
|
|
272
|
+
// from the original agent_id, archived_traces row brain_ids stay at the
|
|
273
|
+
// original agent_id values (not the override). Live tables receive the
|
|
274
|
+
// override; only archived_traces inherits agent_id. To rebrand archives,
|
|
275
|
+
// run a separate UPDATE statement after migration.
|
|
276
|
+
brainIdSourceColumn: 'agent_id',
|
|
277
|
+
indexes: [
|
|
278
|
+
`CREATE INDEX IF NOT EXISTS idx_archived_traces_brain_time
|
|
279
|
+
ON archived_traces (brain_id, archived_at)`,
|
|
280
|
+
`CREATE INDEX IF NOT EXISTS idx_archived_traces_brain_reason
|
|
281
|
+
ON archived_traces (brain_id, archive_reason)`,
|
|
282
|
+
],
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
name: 'archive_access_log',
|
|
286
|
+
columnsDdl: `
|
|
287
|
+
brain_id TEXT NOT NULL,
|
|
288
|
+
trace_id TEXT NOT NULL,
|
|
289
|
+
accessed_at INTEGER NOT NULL,
|
|
290
|
+
request_context TEXT
|
|
291
|
+
`,
|
|
292
|
+
primaryKey: ['brain_id', 'trace_id', 'accessed_at'],
|
|
293
|
+
indexes: [
|
|
294
|
+
`CREATE INDEX IF NOT EXISTS idx_archive_access_recency
|
|
295
|
+
ON archive_access_log (brain_id, trace_id, accessed_at DESC)`,
|
|
296
|
+
],
|
|
297
|
+
},
|
|
298
|
+
];
|
|
299
|
+
// Sanity check: V2_TABLES names must exactly equal PORTABLE_TABLES order.
|
|
300
|
+
// Failing this assertion means the migration order would not match the
|
|
301
|
+
// portable-artifact order, breaking import/export.
|
|
302
|
+
const v2TableNames = V2_TABLES.map((t) => t.name);
|
|
303
|
+
const portableTableNames = [...PORTABLE_TABLES];
|
|
304
|
+
if (v2TableNames.length !== portableTableNames.length ||
|
|
305
|
+
v2TableNames.some((n, i) => n !== portableTableNames[i])) {
|
|
306
|
+
throw new Error(`v1-to-v2.ts: V2_TABLES order (${v2TableNames.join(',')}) does not match ` +
|
|
307
|
+
`PORTABLE_TABLES (${portableTableNames.join(',')}). Reconcile portable-tables.ts.`);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Run the v1 -> v2 migration on the given storage adapter.
|
|
311
|
+
*
|
|
312
|
+
* Idempotent: returns immediately when schema is already v2.
|
|
313
|
+
*
|
|
314
|
+
* @param adapter - The storage adapter to migrate.
|
|
315
|
+
* @param features - Platform-aware feature bundle (used for dialect-specific paths).
|
|
316
|
+
* @param brainId - The brain identifier to assign to all existing rows.
|
|
317
|
+
* @returns `{ migrated: true }` if migration ran, `{ migrated: false }` if no-op.
|
|
318
|
+
*/
|
|
319
|
+
export async function migrateV1ToV2(adapter, features, brainId) {
|
|
320
|
+
const isPostgres = adapter.kind.includes('postgres');
|
|
321
|
+
// Detect v2 schema via brain_meta column existence.
|
|
322
|
+
// If brain_meta does not exist yet, this is a fresh database; no migration needed.
|
|
323
|
+
const brainMetaExists = isPostgres
|
|
324
|
+
? await postgresTableExists(adapter, 'brain_meta')
|
|
325
|
+
: await sqliteTableExists(adapter, 'brain_meta');
|
|
326
|
+
if (!brainMetaExists) {
|
|
327
|
+
// Fresh database; the upcoming _initSchema() call creates v2 directly.
|
|
328
|
+
return { migrated: false };
|
|
329
|
+
}
|
|
330
|
+
const hasBrainId = isPostgres
|
|
331
|
+
? await postgresHasColumn(adapter, 'brain_meta', 'brain_id')
|
|
332
|
+
: await sqliteHasColumn(adapter, 'brain_meta', 'brain_id');
|
|
333
|
+
if (hasBrainId) {
|
|
334
|
+
return { migrated: false };
|
|
335
|
+
}
|
|
336
|
+
// Run migration. SQLite uses recreate-table dance; Postgres uses ALTER.
|
|
337
|
+
for (const table of V2_TABLES) {
|
|
338
|
+
const exists = isPostgres
|
|
339
|
+
? await postgresTableExists(adapter, table.name)
|
|
340
|
+
: await sqliteTableExists(adapter, table.name);
|
|
341
|
+
if (!exists)
|
|
342
|
+
continue;
|
|
343
|
+
if (isPostgres) {
|
|
344
|
+
await migratePostgresTable(adapter, table, brainId);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
await migrateSqliteTable(adapter, table, brainId);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return { migrated: true };
|
|
351
|
+
}
|
|
352
|
+
async function sqliteTableExists(adapter, table) {
|
|
353
|
+
const row = await adapter.get(`SELECT name FROM sqlite_master WHERE type='table' AND name=?`, [table]);
|
|
354
|
+
return Boolean(row);
|
|
355
|
+
}
|
|
356
|
+
async function postgresTableExists(adapter, table) {
|
|
357
|
+
const row = await adapter.get(`SELECT EXISTS (
|
|
358
|
+
SELECT 1 FROM information_schema.tables
|
|
359
|
+
WHERE table_schema = current_schema() AND table_name = $1
|
|
360
|
+
) AS exists`, [table]);
|
|
361
|
+
return row?.exists ?? false;
|
|
362
|
+
}
|
|
363
|
+
async function sqliteHasColumn(adapter, table, column) {
|
|
364
|
+
const rows = await adapter.all(`PRAGMA table_info(${table})`);
|
|
365
|
+
return rows.some((r) => r.name === column);
|
|
366
|
+
}
|
|
367
|
+
async function postgresHasColumn(adapter, table, column) {
|
|
368
|
+
const row = await adapter.get(`SELECT EXISTS (
|
|
369
|
+
SELECT 1 FROM information_schema.columns
|
|
370
|
+
WHERE table_name = $1 AND column_name = $2
|
|
371
|
+
) AS exists`, [table, column]);
|
|
372
|
+
return row?.exists ?? false;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* SQLite recreate-table dance for a single table.
|
|
376
|
+
*
|
|
377
|
+
* 1. Read existing column names.
|
|
378
|
+
* 2. Rename table to `<name>_v1`.
|
|
379
|
+
* 3. Create new table with v2 schema.
|
|
380
|
+
* 4. Copy rows: for tables with `brainIdSourceColumn`, use that column;
|
|
381
|
+
* otherwise default to the supplied brainId.
|
|
382
|
+
* 5. Drop old table.
|
|
383
|
+
* 6. Apply indexes.
|
|
384
|
+
*/
|
|
385
|
+
async function migrateSqliteTable(adapter, table, brainId) {
|
|
386
|
+
const oldColumns = (await adapter.all(`PRAGMA table_info(${table.name})`)).map((r) => r.name);
|
|
387
|
+
await adapter.exec(`ALTER TABLE ${table.name} RENAME TO ${table.name}_v1`);
|
|
388
|
+
const pkClause = table.primaryKey.length > 0 ? `, PRIMARY KEY (${table.primaryKey.join(', ')})` : '';
|
|
389
|
+
const fkClause = table.foreignKeys && table.foreignKeys.length > 0
|
|
390
|
+
? ',\n ' + table.foreignKeys.join(',\n ')
|
|
391
|
+
: '';
|
|
392
|
+
await adapter.exec(`CREATE TABLE ${table.name} (
|
|
393
|
+
${table.columnsDdl}${pkClause}${fkClause}
|
|
394
|
+
)`);
|
|
395
|
+
const oldColList = oldColumns.join(', ');
|
|
396
|
+
if (table.brainIdSourceColumn && oldColumns.includes(table.brainIdSourceColumn)) {
|
|
397
|
+
// Copy rows using the existing column as brain_id source.
|
|
398
|
+
await adapter.exec(`INSERT INTO ${table.name} (brain_id, ${oldColList})
|
|
399
|
+
SELECT ${table.brainIdSourceColumn}, ${oldColList} FROM ${table.name}_v1`);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
await adapter.run(`INSERT INTO ${table.name} (brain_id, ${oldColList})
|
|
403
|
+
SELECT ?, ${oldColList} FROM ${table.name}_v1`, [brainId]);
|
|
404
|
+
}
|
|
405
|
+
await adapter.exec(`DROP TABLE ${table.name}_v1`);
|
|
406
|
+
for (const idx of table.indexes) {
|
|
407
|
+
await adapter.exec(idx);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Postgres ALTER-based migration for a single table.
|
|
412
|
+
*
|
|
413
|
+
* 1. Add brain_id column with default = brainId (or copy from agent_id when present).
|
|
414
|
+
* 2. Drop existing primary key constraint.
|
|
415
|
+
* 3. Add composite primary key (or skip for AUTOINCREMENT tables).
|
|
416
|
+
* 4. Drop the default on brain_id (future INSERTs supply it explicitly).
|
|
417
|
+
* 5. Apply indexes.
|
|
418
|
+
*/
|
|
419
|
+
async function migratePostgresTable(adapter, table, brainId) {
|
|
420
|
+
const escapedBrainId = brainId.replace(/'/g, "''");
|
|
421
|
+
if (table.brainIdSourceColumn) {
|
|
422
|
+
// Defensive: an old archived_traces table might exist without the
|
|
423
|
+
// expected source column (e.g., schema drift from manual SQL or pre-
|
|
424
|
+
// archive-feature deployments). Mirror the SQLite path's column-existence
|
|
425
|
+
// check (see migrateSqliteTable) so a missing source column falls back
|
|
426
|
+
// to the supplied brainId default rather than crashing the migration.
|
|
427
|
+
const hasSourceColumn = await postgresHasColumn(adapter, table.name, table.brainIdSourceColumn);
|
|
428
|
+
if (hasSourceColumn) {
|
|
429
|
+
await adapter.exec(`ALTER TABLE ${table.name} ADD COLUMN brain_id TEXT`);
|
|
430
|
+
await adapter.exec(`UPDATE ${table.name} SET brain_id = ${table.brainIdSourceColumn}`);
|
|
431
|
+
await adapter.exec(`ALTER TABLE ${table.name} ALTER COLUMN brain_id SET NOT NULL`);
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
// Source column missing: fall back to the supplied brainId default,
|
|
435
|
+
// same as the no-source-column path.
|
|
436
|
+
await adapter.exec(`ALTER TABLE ${table.name} ADD COLUMN brain_id TEXT NOT NULL DEFAULT '${escapedBrainId}'`);
|
|
437
|
+
await adapter.exec(`ALTER TABLE ${table.name} ALTER COLUMN brain_id DROP DEFAULT`);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
await adapter.exec(`ALTER TABLE ${table.name} ADD COLUMN brain_id TEXT NOT NULL DEFAULT '${escapedBrainId}'`);
|
|
442
|
+
await adapter.exec(`ALTER TABLE ${table.name} ALTER COLUMN brain_id DROP DEFAULT`);
|
|
443
|
+
}
|
|
444
|
+
if (table.primaryKey.length > 0) {
|
|
445
|
+
// Drop existing PK (Postgres names it <table>_pkey by default).
|
|
446
|
+
await adapter.exec(`ALTER TABLE ${table.name} DROP CONSTRAINT IF EXISTS ${table.name}_pkey`);
|
|
447
|
+
await adapter.exec(`ALTER TABLE ${table.name} ADD PRIMARY KEY (${table.primaryKey.join(', ')})`);
|
|
448
|
+
}
|
|
449
|
+
for (const idx of table.indexes) {
|
|
450
|
+
await adapter.exec(idx);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* The v1 -> v2 schema migration as a Migration object for MigrationRunner.
|
|
455
|
+
*
|
|
456
|
+
* The runner handles transaction wrapping, advisory locking, and the
|
|
457
|
+
* schema_version bump. This Migration's `up` function only runs the schema
|
|
458
|
+
* diff (the 14-table walk).
|
|
459
|
+
*/
|
|
460
|
+
export const v1ToV2 = {
|
|
461
|
+
version: 2,
|
|
462
|
+
up: async (adapter, _features, brainId) => {
|
|
463
|
+
// The runner already detected that schema_version < 2 (or null=fresh; in
|
|
464
|
+
// the fresh case the runner would have skipped this migration entirely).
|
|
465
|
+
// We still defensively check brain_meta column existence so a partial v1
|
|
466
|
+
// schema doesn't blow up the migration.
|
|
467
|
+
const isPostgres = adapter.kind.includes('postgres');
|
|
468
|
+
const hasBrainId = isPostgres
|
|
469
|
+
? await postgresHasColumn(adapter, 'brain_meta', 'brain_id')
|
|
470
|
+
: await sqliteHasColumn(adapter, 'brain_meta', 'brain_id');
|
|
471
|
+
if (hasBrainId) {
|
|
472
|
+
// Schema is already at v2 column shape; runner's version filter caught
|
|
473
|
+
// this case. Defensive no-op.
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
for (const table of V2_TABLES) {
|
|
477
|
+
const exists = isPostgres
|
|
478
|
+
? await postgresTableExists(adapter, table.name)
|
|
479
|
+
: await sqliteTableExists(adapter, table.name);
|
|
480
|
+
if (!exists)
|
|
481
|
+
continue;
|
|
482
|
+
if (isPostgres) {
|
|
483
|
+
await migratePostgresTable(adapter, table, brainId);
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
await migrateSqliteTable(adapter, table, brainId);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
},
|
|
490
|
+
};
|
|
491
|
+
//# sourceMappingURL=v1-to-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v1-to-v2.js","sourceRoot":"","sources":["../../../../../src/memory/retrieval/store/migrations/v1-to-v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Single source of truth for the list of brain-owned tables that
|
|
3
|
+
* are exported, imported, and migrated as a portable artifact.
|
|
4
|
+
*
|
|
5
|
+
* Three call sites import from here:
|
|
6
|
+
* 1. `Brain.exportToSqlite` / `importFromSqlite` (export/import row copies)
|
|
7
|
+
* 2. `migrations/v1-to-v2.ts` (migration walk order: parents before children for FKs)
|
|
8
|
+
* 3. `__tests__/Brain.postgres.test.ts` (cleanup between tests)
|
|
9
|
+
*
|
|
10
|
+
* Adding a new portable table requires editing only this file.
|
|
11
|
+
*
|
|
12
|
+
* @module memory/retrieval/store/portable-tables
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Order matters: parents before children to satisfy FK constraints during import.
|
|
16
|
+
*/
|
|
17
|
+
export declare const PORTABLE_TABLES: readonly ["brain_meta", "memory_traces", "knowledge_nodes", "knowledge_edges", "documents", "document_chunks", "document_images", "consolidation_log", "retrieval_feedback", "conversations", "messages", "prospective_items", "archived_traces", "archive_access_log"];
|
|
18
|
+
/**
|
|
19
|
+
* Composite primary key columns for each portable table, used by
|
|
20
|
+
* `dialect.insertOrReplace` as the conflict target during merge import.
|
|
21
|
+
*
|
|
22
|
+
* Tables with `INTEGER PRIMARY KEY AUTOINCREMENT` (consolidation_log,
|
|
23
|
+
* retrieval_feedback) use `id` alone since their PK is system-generated.
|
|
24
|
+
*/
|
|
25
|
+
export declare const PORTABLE_TABLE_PRIMARY_KEYS: Record<string, string>;
|
|
26
|
+
export type PortableTable = typeof PORTABLE_TABLES[number];
|
|
27
|
+
//# sourceMappingURL=portable-tables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-tables.d.ts","sourceRoot":"","sources":["../../../../src/memory/retrieval/store/portable-tables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe,yQAelB,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAe9D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Single source of truth for the list of brain-owned tables that
|
|
3
|
+
* are exported, imported, and migrated as a portable artifact.
|
|
4
|
+
*
|
|
5
|
+
* Three call sites import from here:
|
|
6
|
+
* 1. `Brain.exportToSqlite` / `importFromSqlite` (export/import row copies)
|
|
7
|
+
* 2. `migrations/v1-to-v2.ts` (migration walk order: parents before children for FKs)
|
|
8
|
+
* 3. `__tests__/Brain.postgres.test.ts` (cleanup between tests)
|
|
9
|
+
*
|
|
10
|
+
* Adding a new portable table requires editing only this file.
|
|
11
|
+
*
|
|
12
|
+
* @module memory/retrieval/store/portable-tables
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Order matters: parents before children to satisfy FK constraints during import.
|
|
16
|
+
*/
|
|
17
|
+
export const PORTABLE_TABLES = [
|
|
18
|
+
'brain_meta',
|
|
19
|
+
'memory_traces',
|
|
20
|
+
'knowledge_nodes',
|
|
21
|
+
'knowledge_edges',
|
|
22
|
+
'documents',
|
|
23
|
+
'document_chunks',
|
|
24
|
+
'document_images',
|
|
25
|
+
'consolidation_log',
|
|
26
|
+
'retrieval_feedback',
|
|
27
|
+
'conversations',
|
|
28
|
+
'messages',
|
|
29
|
+
'prospective_items',
|
|
30
|
+
'archived_traces',
|
|
31
|
+
'archive_access_log',
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Composite primary key columns for each portable table, used by
|
|
35
|
+
* `dialect.insertOrReplace` as the conflict target during merge import.
|
|
36
|
+
*
|
|
37
|
+
* Tables with `INTEGER PRIMARY KEY AUTOINCREMENT` (consolidation_log,
|
|
38
|
+
* retrieval_feedback) use `id` alone since their PK is system-generated.
|
|
39
|
+
*/
|
|
40
|
+
export const PORTABLE_TABLE_PRIMARY_KEYS = {
|
|
41
|
+
brain_meta: 'brain_id, key',
|
|
42
|
+
memory_traces: 'brain_id, id',
|
|
43
|
+
knowledge_nodes: 'brain_id, id',
|
|
44
|
+
knowledge_edges: 'brain_id, id',
|
|
45
|
+
documents: 'brain_id, id',
|
|
46
|
+
document_chunks: 'brain_id, id',
|
|
47
|
+
document_images: 'brain_id, id',
|
|
48
|
+
consolidation_log: 'id',
|
|
49
|
+
retrieval_feedback: 'id',
|
|
50
|
+
conversations: 'brain_id, id',
|
|
51
|
+
messages: 'brain_id, id',
|
|
52
|
+
prospective_items: 'brain_id, id',
|
|
53
|
+
archived_traces: 'brain_id, trace_id',
|
|
54
|
+
archive_access_log: 'brain_id, trace_id, accessed_at',
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=portable-tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable-tables.js","sourceRoot":"","sources":["../../../../src/memory/retrieval/store/portable-tables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,oBAAoB;IACpB,eAAe;IACf,UAAU;IACV,mBAAmB;IACnB,iBAAiB;IACjB,oBAAoB;CACZ,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,UAAU,EAAE,eAAe;IAC3B,aAAa,EAAE,cAAc;IAC7B,eAAe,EAAE,cAAc;IAC/B,eAAe,EAAE,cAAc;IAC/B,SAAS,EAAE,cAAc;IACzB,eAAe,EAAE,cAAc;IAC/B,eAAe,EAAE,cAAc;IAC/B,iBAAiB,EAAE,IAAI;IACvB,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,cAAc;IAC7B,QAAQ,EAAE,cAAc;IACxB,iBAAiB,EAAE,cAAc;IACjC,eAAe,EAAE,oBAAoB;IACrC,kBAAkB,EAAE,iCAAiC;CACtD,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file EntityRetrievalRanker.ts
|
|
3
|
+
* @description Mem0-v3-style recall-stage re-ranker. Adds an
|
|
4
|
+
* entity-overlap signal to the existing semantic-similarity score:
|
|
5
|
+
*
|
|
6
|
+
* combinedScore = (1 - entityWeight) * semanticScore
|
|
7
|
+
* + entityWeight * (overlap / queryEntityCount)
|
|
8
|
+
*
|
|
9
|
+
* Returns candidates sorted descending by combinedScore. The original
|
|
10
|
+
* fields (id, text, semanticScore, entities) are preserved alongside
|
|
11
|
+
* the new combinedScore + entityOverlap.
|
|
12
|
+
*
|
|
13
|
+
* The query's entities are extracted via {@link EntityExtractor} so
|
|
14
|
+
* this ranker is end-to-end self-contained: pass a query string and
|
|
15
|
+
* candidate list, get a re-ranked list back.
|
|
16
|
+
*
|
|
17
|
+
* Reference: docs.mem0.ai/migration/oss-v2-to-v3.
|
|
18
|
+
*
|
|
19
|
+
* @module @framers/agentos/memory-router/backends/EntityRetrievalRanker
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* One candidate to be ranked. The bench (or any consumer) passes a
|
|
23
|
+
* list of these from its hybrid retrieval pool.
|
|
24
|
+
*/
|
|
25
|
+
export interface RankedCandidate {
|
|
26
|
+
id: string;
|
|
27
|
+
text: string;
|
|
28
|
+
/** Pre-computed semantic similarity (cosine, BM25, or a blend). */
|
|
29
|
+
semanticScore: number;
|
|
30
|
+
/** Entities extracted at ingest, indexed alongside the chunk. */
|
|
31
|
+
entities: string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Re-ranked candidate with the combined score + per-candidate
|
|
35
|
+
* entity-overlap count for diagnostics.
|
|
36
|
+
*/
|
|
37
|
+
export interface RankedCandidateWithBoost extends RankedCandidate {
|
|
38
|
+
combinedScore: number;
|
|
39
|
+
entityOverlap: number;
|
|
40
|
+
}
|
|
41
|
+
export interface EntityRetrievalRankerOptions {
|
|
42
|
+
/**
|
|
43
|
+
* Weight on the entity-overlap signal in the combined score.
|
|
44
|
+
* 0 = pure semantic. 1 = pure entity overlap. Mem0-v3 default ~0.5.
|
|
45
|
+
*/
|
|
46
|
+
entityWeight: number;
|
|
47
|
+
}
|
|
48
|
+
export declare class EntityRetrievalRanker {
|
|
49
|
+
private readonly entityWeight;
|
|
50
|
+
private readonly extractor;
|
|
51
|
+
constructor(opts: EntityRetrievalRankerOptions);
|
|
52
|
+
rank(query: string, candidates: RankedCandidate[]): RankedCandidateWithBoost[];
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=EntityRetrievalRanker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityRetrievalRanker.d.ts","sourceRoot":"","sources":["../../../src/memory-router/backends/EntityRetrievalRanker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAyB,SAAQ,eAAe;IAC/D,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;gBAEvC,IAAI,EAAE,4BAA4B;IAI9C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,wBAAwB,EAAE;CAc/E"}
|