agentdb 3.0.0-alpha.11 → 3.0.0-alpha.13
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/src/backends/graph/GraphDatabaseAdapter.d.ts +54 -0
- package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts.map +1 -1
- package/dist/src/backends/graph/GraphDatabaseAdapter.js +125 -0
- package/dist/src/backends/graph/GraphDatabaseAdapter.js.map +1 -1
- package/dist/src/cli/agentdb-cli.js +0 -0
- package/dist/src/controllers/ReflexionMemory.d.ts +50 -0
- package/dist/src/controllers/ReflexionMemory.d.ts.map +1 -1
- package/dist/src/controllers/ReflexionMemory.js +258 -0
- package/dist/src/controllers/ReflexionMemory.js.map +1 -1
- package/dist/src/controllers/index.d.ts +2 -0
- package/dist/src/controllers/index.d.ts.map +1 -1
- package/dist/src/controllers/index.js +2 -0
- package/dist/src/controllers/index.js.map +1 -1
- package/dist/src/controllers/prerequisites.d.ts +76 -0
- package/dist/src/controllers/prerequisites.d.ts.map +1 -0
- package/dist/src/controllers/prerequisites.js +235 -0
- package/dist/src/controllers/prerequisites.js.map +1 -0
- package/dist/src/db-fallback.d.ts.map +1 -1
- package/dist/src/db-fallback.js +55 -45
- package/dist/src/db-fallback.js.map +1 -1
- package/package.json +1 -1
- package/dist/schemas/frontier-schema.sql +0 -378
- package/dist/schemas/schema.sql +0 -382
- package/dist/src/backends/index.cjs +0 -6
- package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts +0 -93
- package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts.map +0 -1
- package/dist/src/backends/ruvector/GuardedVectorBackend.js +0 -182
- package/dist/src/backends/ruvector/GuardedVectorBackend.js.map +0 -1
- package/dist/src/consensus/RaftConsensus.d.ts +0 -220
- package/dist/src/consensus/RaftConsensus.d.ts.map +0 -1
- package/dist/src/consensus/RaftConsensus.js +0 -762
- package/dist/src/consensus/RaftConsensus.js.map +0 -1
- package/dist/src/controllers/HierarchicalMemory.d.ts +0 -197
- package/dist/src/controllers/HierarchicalMemory.d.ts.map +0 -1
- package/dist/src/controllers/HierarchicalMemory.js +0 -519
- package/dist/src/controllers/HierarchicalMemory.js.map +0 -1
- package/dist/src/controllers/MemoryConsolidation.d.ts +0 -142
- package/dist/src/controllers/MemoryConsolidation.d.ts.map +0 -1
- package/dist/src/controllers/MemoryConsolidation.js +0 -479
- package/dist/src/controllers/MemoryConsolidation.js.map +0 -1
- package/dist/src/controllers/QUICConnection.d.ts +0 -122
- package/dist/src/controllers/QUICConnection.d.ts.map +0 -1
- package/dist/src/controllers/QUICConnection.js +0 -329
- package/dist/src/controllers/QUICConnection.js.map +0 -1
- package/dist/src/controllers/QUICConnectionPool.d.ts +0 -83
- package/dist/src/controllers/QUICConnectionPool.d.ts.map +0 -1
- package/dist/src/controllers/QUICConnectionPool.js +0 -256
- package/dist/src/controllers/QUICConnectionPool.js.map +0 -1
- package/dist/src/controllers/QUICStreamManager.d.ts +0 -114
- package/dist/src/controllers/QUICStreamManager.d.ts.map +0 -1
- package/dist/src/controllers/QUICStreamManager.js +0 -267
- package/dist/src/controllers/QUICStreamManager.js.map +0 -1
- package/dist/src/controllers/StreamingEmbeddingService.d.ts +0 -82
- package/dist/src/controllers/StreamingEmbeddingService.d.ts.map +0 -1
- package/dist/src/controllers/StreamingEmbeddingService.js +0 -243
- package/dist/src/controllers/StreamingEmbeddingService.js.map +0 -1
- package/dist/src/controllers/index.cjs +0 -6
- package/dist/src/coordination/MultiDatabaseCoordinator.d.ts +0 -348
- package/dist/src/coordination/MultiDatabaseCoordinator.d.ts.map +0 -1
- package/dist/src/coordination/MultiDatabaseCoordinator.js +0 -803
- package/dist/src/coordination/MultiDatabaseCoordinator.js.map +0 -1
- package/dist/src/coordination/index.d.ts +0 -10
- package/dist/src/coordination/index.d.ts.map +0 -1
- package/dist/src/coordination/index.js +0 -10
- package/dist/src/coordination/index.js.map +0 -1
- package/dist/src/index.cjs +0 -6
- package/dist/src/optimizations/RVFOptimizer.d.ts +0 -226
- package/dist/src/optimizations/RVFOptimizer.d.ts.map +0 -1
- package/dist/src/optimizations/RVFOptimizer.js +0 -541
- package/dist/src/optimizations/RVFOptimizer.js.map +0 -1
- package/dist/src/security/AttestationLog.d.ts +0 -70
- package/dist/src/security/AttestationLog.d.ts.map +0 -1
- package/dist/src/security/AttestationLog.js +0 -174
- package/dist/src/security/AttestationLog.js.map +0 -1
- package/dist/src/security/MutationGuard.d.ts +0 -83
- package/dist/src/security/MutationGuard.d.ts.map +0 -1
- package/dist/src/security/MutationGuard.js +0 -364
- package/dist/src/security/MutationGuard.js.map +0 -1
- package/dist/src/security/index.cjs +0 -6
- package/dist/src/security/index.d.ts +0 -15
- package/dist/src/security/index.d.ts.map +0 -1
- package/dist/src/security/index.js +0 -18
- package/dist/src/security/index.js.map +0 -1
- package/dist/src/services/GNNService.d.ts +0 -173
- package/dist/src/services/GNNService.d.ts.map +0 -1
- package/dist/src/services/GNNService.js +0 -639
- package/dist/src/services/GNNService.js.map +0 -1
- package/dist/src/services/GraphTransformerService.d.ts +0 -80
- package/dist/src/services/GraphTransformerService.d.ts.map +0 -1
- package/dist/src/services/GraphTransformerService.js +0 -369
- package/dist/src/services/GraphTransformerService.js.map +0 -1
- package/dist/src/services/SemanticRouter.d.ts +0 -83
- package/dist/src/services/SemanticRouter.d.ts.map +0 -1
- package/dist/src/services/SemanticRouter.js +0 -160
- package/dist/src/services/SemanticRouter.js.map +0 -1
- package/dist/src/services/SonaTrajectoryService.d.ts +0 -224
- package/dist/src/services/SonaTrajectoryService.d.ts.map +0 -1
- package/dist/src/services/SonaTrajectoryService.js +0 -539
- package/dist/src/services/SonaTrajectoryService.js.map +0 -1
- package/dist/src/utils/LegacyAttentionAdapter.d.ts +0 -93
- package/dist/src/utils/LegacyAttentionAdapter.d.ts.map +0 -1
- package/dist/src/utils/LegacyAttentionAdapter.js +0 -241
- package/dist/src/utils/LegacyAttentionAdapter.js.map +0 -1
- package/dist/src/utils/vector-math.d.ts +0 -29
- package/dist/src/utils/vector-math.d.ts.map +0 -1
- package/dist/src/utils/vector-math.js +0 -66
- package/dist/src/utils/vector-math.js.map +0 -1
|
@@ -1,519 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HierarchicalMemory - 3-Tier Human-like Memory System
|
|
3
|
-
*
|
|
4
|
-
* Implements a biologically-inspired memory hierarchy with:
|
|
5
|
-
* - Working Memory: Active context (fast access, 1MB limit)
|
|
6
|
-
* - Episodic Memory: Recent experiences (hours-days)
|
|
7
|
-
* - Semantic Memory: Long-term knowledge (consolidated)
|
|
8
|
-
*
|
|
9
|
-
* Based on:
|
|
10
|
-
* - Atkinson-Shiffrin Multi-Store Model (1968)
|
|
11
|
-
* - Tulving's Episodic/Semantic Distinction (1972)
|
|
12
|
-
* - Baddeley's Working Memory Model (2000)
|
|
13
|
-
*
|
|
14
|
-
* Features:
|
|
15
|
-
* - Automatic tier promotion based on access frequency and importance
|
|
16
|
-
* - Forgetting curves (Ebbinghaus decay: R = e^(-t/S))
|
|
17
|
-
* - Spaced repetition for consolidation
|
|
18
|
-
* - Context-dependent recall
|
|
19
|
-
* - Memory replay for reinforcement
|
|
20
|
-
*
|
|
21
|
-
* ADR-066 Phase P2-3
|
|
22
|
-
*/
|
|
23
|
-
import { cosineSimilarity } from '../utils/vector-math.js';
|
|
24
|
-
export class HierarchicalMemory {
|
|
25
|
-
db;
|
|
26
|
-
embedder;
|
|
27
|
-
vectorBackend;
|
|
28
|
-
graphBackend;
|
|
29
|
-
config;
|
|
30
|
-
// In-memory caches for fast access
|
|
31
|
-
workingMemoryCache = new Map();
|
|
32
|
-
episodicMemoryIndex = new Map();
|
|
33
|
-
// Stats tracking
|
|
34
|
-
stats = {
|
|
35
|
-
totalAccesses: 0,
|
|
36
|
-
promotions: 0,
|
|
37
|
-
consolidations: 0,
|
|
38
|
-
forgotten: 0,
|
|
39
|
-
};
|
|
40
|
-
constructor(db, embedder, vectorBackend, graphBackend, config) {
|
|
41
|
-
this.db = db;
|
|
42
|
-
this.embedder = embedder;
|
|
43
|
-
this.vectorBackend = vectorBackend;
|
|
44
|
-
this.graphBackend = graphBackend;
|
|
45
|
-
this.config = {
|
|
46
|
-
workingMemoryLimit: 1024 * 1024, // 1MB
|
|
47
|
-
episodicWindow: 7 * 24 * 60 * 60 * 1000, // 7 days
|
|
48
|
-
forgetting: {
|
|
49
|
-
decayRate: 0.3,
|
|
50
|
-
minRetention: 0.1,
|
|
51
|
-
importanceMultiplier: 2.0,
|
|
52
|
-
rehearsalBoost: 1.5,
|
|
53
|
-
},
|
|
54
|
-
consolidation: {
|
|
55
|
-
minAccessCount: 3,
|
|
56
|
-
minImportance: 0.6,
|
|
57
|
-
minAge: 24 * 60 * 60 * 1000, // 24 hours
|
|
58
|
-
maxEpisodicSize: 1000,
|
|
59
|
-
},
|
|
60
|
-
autoConsolidate: true,
|
|
61
|
-
...config,
|
|
62
|
-
};
|
|
63
|
-
this.initializeDatabase();
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Initialize database tables for hierarchical memory
|
|
67
|
-
*/
|
|
68
|
-
initializeDatabase() {
|
|
69
|
-
this.db.exec(`
|
|
70
|
-
CREATE TABLE IF NOT EXISTS hierarchical_memory (
|
|
71
|
-
id TEXT PRIMARY KEY,
|
|
72
|
-
tier TEXT NOT NULL,
|
|
73
|
-
content TEXT NOT NULL,
|
|
74
|
-
importance REAL NOT NULL,
|
|
75
|
-
access_count INTEGER DEFAULT 0,
|
|
76
|
-
created_at INTEGER NOT NULL,
|
|
77
|
-
last_accessed_at INTEGER NOT NULL,
|
|
78
|
-
last_rehearsed_at INTEGER,
|
|
79
|
-
consolidated_at INTEGER,
|
|
80
|
-
tags TEXT,
|
|
81
|
-
context TEXT,
|
|
82
|
-
metadata TEXT
|
|
83
|
-
);
|
|
84
|
-
|
|
85
|
-
CREATE INDEX IF NOT EXISTS idx_hierarchical_tier ON hierarchical_memory(tier);
|
|
86
|
-
CREATE INDEX IF NOT EXISTS idx_hierarchical_importance ON hierarchical_memory(importance);
|
|
87
|
-
CREATE INDEX IF NOT EXISTS idx_hierarchical_access ON hierarchical_memory(access_count);
|
|
88
|
-
CREATE INDEX IF NOT EXISTS idx_hierarchical_created ON hierarchical_memory(created_at);
|
|
89
|
-
`);
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Store a new memory item
|
|
93
|
-
*/
|
|
94
|
-
async store(content, importance = 0.5, tier = 'working', options) {
|
|
95
|
-
const id = `mem-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
96
|
-
const now = Date.now();
|
|
97
|
-
// Generate embedding
|
|
98
|
-
const embedding = await this.embedder.embed(content);
|
|
99
|
-
const item = {
|
|
100
|
-
id,
|
|
101
|
-
tier,
|
|
102
|
-
content,
|
|
103
|
-
embedding,
|
|
104
|
-
importance,
|
|
105
|
-
accessCount: 0,
|
|
106
|
-
createdAt: now,
|
|
107
|
-
lastAccessedAt: now,
|
|
108
|
-
tags: options?.tags,
|
|
109
|
-
context: options?.context,
|
|
110
|
-
metadata: options?.metadata,
|
|
111
|
-
};
|
|
112
|
-
// Store in database
|
|
113
|
-
const stmt = this.db.prepare(`
|
|
114
|
-
INSERT INTO hierarchical_memory (
|
|
115
|
-
id, tier, content, importance, access_count,
|
|
116
|
-
created_at, last_accessed_at, tags, context, metadata
|
|
117
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
118
|
-
`);
|
|
119
|
-
stmt.run(id, tier, content, importance, 0, now, now, options?.tags ? JSON.stringify(options.tags) : null, options?.context ? JSON.stringify(options.context) : null, options?.metadata ? JSON.stringify(options.metadata) : null);
|
|
120
|
-
// Add to vector backend if available
|
|
121
|
-
if (this.vectorBackend) {
|
|
122
|
-
this.vectorBackend.insert(id, embedding, {
|
|
123
|
-
tier,
|
|
124
|
-
importance,
|
|
125
|
-
createdAt: now,
|
|
126
|
-
...options?.metadata,
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
// Cache in appropriate tier
|
|
130
|
-
if (tier === 'working') {
|
|
131
|
-
this.workingMemoryCache.set(id, item);
|
|
132
|
-
await this.enforceWorkingMemoryLimit();
|
|
133
|
-
}
|
|
134
|
-
else if (tier === 'episodic') {
|
|
135
|
-
this.episodicMemoryIndex.set(id, item);
|
|
136
|
-
}
|
|
137
|
-
// Trigger auto-consolidation if needed
|
|
138
|
-
if (this.config.autoConsolidate) {
|
|
139
|
-
await this.checkConsolidation();
|
|
140
|
-
}
|
|
141
|
-
return id;
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Retrieve memories matching the query
|
|
145
|
-
*/
|
|
146
|
-
async recall(query) {
|
|
147
|
-
this.stats.totalAccesses++;
|
|
148
|
-
// Generate embedding if not provided
|
|
149
|
-
const queryEmbedding = query.queryEmbedding || await this.embedder.embed(query.query);
|
|
150
|
-
// Determine which tiers to search
|
|
151
|
-
const tiers = Array.isArray(query.tier)
|
|
152
|
-
? query.tier
|
|
153
|
-
: query.tier
|
|
154
|
-
? [query.tier]
|
|
155
|
-
: ['working', 'episodic', 'semantic'];
|
|
156
|
-
const k = query.k || 10;
|
|
157
|
-
const threshold = query.threshold || 0.5;
|
|
158
|
-
let results = [];
|
|
159
|
-
// Search vector backend if available (faster)
|
|
160
|
-
if (this.vectorBackend) {
|
|
161
|
-
const searchResults = [];
|
|
162
|
-
for (const tier of tiers) {
|
|
163
|
-
const tierResults = await this.vectorBackend.search(queryEmbedding, k, {
|
|
164
|
-
threshold,
|
|
165
|
-
filter: { tier },
|
|
166
|
-
});
|
|
167
|
-
searchResults.push(...tierResults);
|
|
168
|
-
}
|
|
169
|
-
// Convert to MemoryItems
|
|
170
|
-
results = await Promise.all(searchResults.map(async (result) => {
|
|
171
|
-
const item = await this.getMemoryById(result.id);
|
|
172
|
-
if (item) {
|
|
173
|
-
item.metadata = { ...item.metadata, similarity: result.similarity };
|
|
174
|
-
}
|
|
175
|
-
return item;
|
|
176
|
-
})).then(items => items.filter((item) => item !== null));
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
// Fallback: manual search
|
|
180
|
-
results = await this.manualSearch(queryEmbedding, ['working', 'episodic', 'semantic'], k, threshold);
|
|
181
|
-
}
|
|
182
|
-
// Apply forgetting curve if not including decayed
|
|
183
|
-
if (!query.includeDecayed) {
|
|
184
|
-
results = results.filter(item => this.calculateRetention(item) >= this.config.forgetting.minRetention);
|
|
185
|
-
}
|
|
186
|
-
// Context-dependent recall
|
|
187
|
-
if (query.context) {
|
|
188
|
-
results = this.applyContextFilter(results, query.context);
|
|
189
|
-
}
|
|
190
|
-
// Update access tracking and promote if needed
|
|
191
|
-
await this.updateAccessTracking(results.map(r => r.id));
|
|
192
|
-
return results.slice(0, k);
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Promote memory to higher tier based on importance and access
|
|
196
|
-
*/
|
|
197
|
-
async promote(memoryId) {
|
|
198
|
-
const item = await this.getMemoryById(memoryId);
|
|
199
|
-
if (!item)
|
|
200
|
-
return false;
|
|
201
|
-
let newTier = null;
|
|
202
|
-
// Working → Episodic: After multiple accesses
|
|
203
|
-
if (item.tier === 'working' && item.accessCount >= 2) {
|
|
204
|
-
newTier = 'episodic';
|
|
205
|
-
}
|
|
206
|
-
// Episodic → Semantic: Based on consolidation criteria
|
|
207
|
-
if (item.tier === 'episodic') {
|
|
208
|
-
const age = Date.now() - item.createdAt;
|
|
209
|
-
if (item.accessCount >= this.config.consolidation.minAccessCount &&
|
|
210
|
-
item.importance >= this.config.consolidation.minImportance &&
|
|
211
|
-
age >= this.config.consolidation.minAge) {
|
|
212
|
-
newTier = 'semantic';
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
if (newTier) {
|
|
216
|
-
await this.updateTier(memoryId, newTier);
|
|
217
|
-
this.stats.promotions++;
|
|
218
|
-
return true;
|
|
219
|
-
}
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Rehearse a memory to strengthen retention
|
|
224
|
-
*/
|
|
225
|
-
async rehearse(memoryId) {
|
|
226
|
-
const now = Date.now();
|
|
227
|
-
const stmt = this.db.prepare(`
|
|
228
|
-
UPDATE hierarchical_memory
|
|
229
|
-
SET last_rehearsed_at = ?, access_count = access_count + 1
|
|
230
|
-
WHERE id = ?
|
|
231
|
-
`);
|
|
232
|
-
stmt.run(now, memoryId);
|
|
233
|
-
// Update cache
|
|
234
|
-
const item = this.workingMemoryCache.get(memoryId) || this.episodicMemoryIndex.get(memoryId);
|
|
235
|
-
if (item) {
|
|
236
|
-
item.lastRehearsedAt = now;
|
|
237
|
-
item.accessCount++;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Calculate retention score using Ebbinghaus forgetting curve
|
|
242
|
-
* R(t) = e^(-t/S)
|
|
243
|
-
* Where S = base_strength * importance_multiplier * rehearsal_boost
|
|
244
|
-
*/
|
|
245
|
-
calculateRetention(item) {
|
|
246
|
-
const now = Date.now();
|
|
247
|
-
const timeSinceCreation = (now - item.createdAt) / (24 * 60 * 60 * 1000); // days
|
|
248
|
-
const timeSinceRehearsal = item.lastRehearsedAt
|
|
249
|
-
? (now - item.lastRehearsedAt) / (24 * 60 * 60 * 1000)
|
|
250
|
-
: timeSinceCreation;
|
|
251
|
-
// Calculate strength (inverse of decay rate)
|
|
252
|
-
const baseStrength = 1 / this.config.forgetting.decayRate;
|
|
253
|
-
const importanceBoost = 1 + (item.importance * this.config.forgetting.importanceMultiplier);
|
|
254
|
-
const rehearsalBoost = item.lastRehearsedAt ? this.config.forgetting.rehearsalBoost : 1.0;
|
|
255
|
-
const strength = baseStrength * importanceBoost * rehearsalBoost;
|
|
256
|
-
// Ebbinghaus formula
|
|
257
|
-
const retention = Math.exp(-timeSinceRehearsal / strength);
|
|
258
|
-
return Math.max(retention, this.config.forgetting.minRetention);
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Get memory statistics
|
|
262
|
-
*/
|
|
263
|
-
async getStats() {
|
|
264
|
-
const workingStats = this.db.prepare(`
|
|
265
|
-
SELECT
|
|
266
|
-
COUNT(*) as count,
|
|
267
|
-
AVG(importance) as avgImportance,
|
|
268
|
-
AVG(access_count) as avgAccessCount,
|
|
269
|
-
SUM(LENGTH(content)) as sizeBytes
|
|
270
|
-
FROM hierarchical_memory WHERE tier = 'working'
|
|
271
|
-
`).get();
|
|
272
|
-
const episodicStats = this.db.prepare(`
|
|
273
|
-
SELECT
|
|
274
|
-
COUNT(*) as count,
|
|
275
|
-
AVG(importance) as avgImportance,
|
|
276
|
-
AVG(? - created_at) as avgAge,
|
|
277
|
-
SUM(LENGTH(content)) as sizeBytes
|
|
278
|
-
FROM hierarchical_memory WHERE tier = 'episodic'
|
|
279
|
-
`).get(Date.now());
|
|
280
|
-
const semanticStats = this.db.prepare(`
|
|
281
|
-
SELECT
|
|
282
|
-
COUNT(*) as count,
|
|
283
|
-
AVG(importance) as avgImportance,
|
|
284
|
-
COUNT(CASE WHEN consolidated_at IS NOT NULL THEN 1 END) as consolidated,
|
|
285
|
-
SUM(LENGTH(content)) as sizeBytes
|
|
286
|
-
FROM hierarchical_memory WHERE tier = 'semantic'
|
|
287
|
-
`).get();
|
|
288
|
-
const totalMemories = workingStats.count + episodicStats.count + semanticStats.count;
|
|
289
|
-
const promotionRate = totalMemories > 0 ? this.stats.promotions / totalMemories : 0;
|
|
290
|
-
return {
|
|
291
|
-
working: {
|
|
292
|
-
count: workingStats.count || 0,
|
|
293
|
-
sizeBytes: workingStats.sizeBytes || 0,
|
|
294
|
-
avgImportance: workingStats.avgImportance || 0,
|
|
295
|
-
avgAccessCount: workingStats.avgAccessCount || 0,
|
|
296
|
-
},
|
|
297
|
-
episodic: {
|
|
298
|
-
count: episodicStats.count || 0,
|
|
299
|
-
sizeBytes: episodicStats.sizeBytes || 0,
|
|
300
|
-
avgImportance: episodicStats.avgImportance || 0,
|
|
301
|
-
avgAge: episodicStats.avgAge || 0,
|
|
302
|
-
},
|
|
303
|
-
semantic: {
|
|
304
|
-
count: semanticStats.count || 0,
|
|
305
|
-
sizeBytes: semanticStats.sizeBytes || 0,
|
|
306
|
-
avgImportance: semanticStats.avgImportance || 0,
|
|
307
|
-
consolidationRate: semanticStats.count > 0
|
|
308
|
-
? (semanticStats.consolidated || 0) / semanticStats.count
|
|
309
|
-
: 0,
|
|
310
|
-
},
|
|
311
|
-
totalMemories,
|
|
312
|
-
forgottenCount: this.stats.forgotten,
|
|
313
|
-
promotionRate,
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Enforce working memory size limit by evicting least important items
|
|
318
|
-
*/
|
|
319
|
-
async enforceWorkingMemoryLimit() {
|
|
320
|
-
const currentSize = this.calculateWorkingMemorySize();
|
|
321
|
-
if (currentSize > this.config.workingMemoryLimit) {
|
|
322
|
-
// Get working memories sorted by importance * retention
|
|
323
|
-
const memories = Array.from(this.workingMemoryCache.values())
|
|
324
|
-
.map(item => ({
|
|
325
|
-
...item,
|
|
326
|
-
score: item.importance * this.calculateRetention(item),
|
|
327
|
-
}))
|
|
328
|
-
.sort((a, b) => a.score - b.score);
|
|
329
|
-
// Evict until under limit
|
|
330
|
-
let freedSize = 0;
|
|
331
|
-
for (const memory of memories) {
|
|
332
|
-
if (currentSize - freedSize <= this.config.workingMemoryLimit)
|
|
333
|
-
break;
|
|
334
|
-
// Promote to episodic or forget
|
|
335
|
-
if (memory.score > 0.3) {
|
|
336
|
-
await this.updateTier(memory.id, 'episodic');
|
|
337
|
-
}
|
|
338
|
-
else {
|
|
339
|
-
await this.forget(memory.id);
|
|
340
|
-
}
|
|
341
|
-
freedSize += new TextEncoder().encode(memory.content).length;
|
|
342
|
-
this.workingMemoryCache.delete(memory.id);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Calculate current working memory size in bytes
|
|
348
|
-
*/
|
|
349
|
-
calculateWorkingMemorySize() {
|
|
350
|
-
let size = 0;
|
|
351
|
-
for (const item of this.workingMemoryCache.values()) {
|
|
352
|
-
size += new TextEncoder().encode(item.content).length;
|
|
353
|
-
}
|
|
354
|
-
return size;
|
|
355
|
-
}
|
|
356
|
-
/**
|
|
357
|
-
* Update memory tier
|
|
358
|
-
*/
|
|
359
|
-
async updateTier(memoryId, newTier) {
|
|
360
|
-
const now = Date.now();
|
|
361
|
-
const stmt = this.db.prepare(`
|
|
362
|
-
UPDATE hierarchical_memory
|
|
363
|
-
SET tier = ?, consolidated_at = ?
|
|
364
|
-
WHERE id = ?
|
|
365
|
-
`);
|
|
366
|
-
stmt.run(newTier, newTier === 'semantic' ? now : null, memoryId);
|
|
367
|
-
// Update caches
|
|
368
|
-
const item = this.workingMemoryCache.get(memoryId) || this.episodicMemoryIndex.get(memoryId);
|
|
369
|
-
if (item) {
|
|
370
|
-
item.tier = newTier;
|
|
371
|
-
if (newTier === 'semantic') {
|
|
372
|
-
item.consolidatedAt = now;
|
|
373
|
-
}
|
|
374
|
-
// Move between caches
|
|
375
|
-
this.workingMemoryCache.delete(memoryId);
|
|
376
|
-
this.episodicMemoryIndex.delete(memoryId);
|
|
377
|
-
if (newTier === 'working') {
|
|
378
|
-
this.workingMemoryCache.set(memoryId, item);
|
|
379
|
-
}
|
|
380
|
-
else if (newTier === 'episodic') {
|
|
381
|
-
this.episodicMemoryIndex.set(memoryId, item);
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
// Update vector backend metadata
|
|
385
|
-
if (this.vectorBackend && item?.embedding) {
|
|
386
|
-
this.vectorBackend.insert(memoryId, item.embedding, {
|
|
387
|
-
tier: newTier,
|
|
388
|
-
consolidated: newTier === 'semantic',
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
/**
|
|
393
|
-
* Forget (delete) a memory
|
|
394
|
-
*/
|
|
395
|
-
async forget(memoryId) {
|
|
396
|
-
this.db.prepare('DELETE FROM hierarchical_memory WHERE id = ?').run(memoryId);
|
|
397
|
-
this.workingMemoryCache.delete(memoryId);
|
|
398
|
-
this.episodicMemoryIndex.delete(memoryId);
|
|
399
|
-
this.stats.forgotten++;
|
|
400
|
-
// Remove from vector backend
|
|
401
|
-
if (this.vectorBackend) {
|
|
402
|
-
this.vectorBackend.remove(memoryId);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Get memory item by ID
|
|
407
|
-
*/
|
|
408
|
-
async getMemoryById(id) {
|
|
409
|
-
// Check caches first
|
|
410
|
-
const cached = this.workingMemoryCache.get(id) || this.episodicMemoryIndex.get(id);
|
|
411
|
-
if (cached)
|
|
412
|
-
return cached;
|
|
413
|
-
// Fetch from database
|
|
414
|
-
const row = this.db.prepare(`
|
|
415
|
-
SELECT * FROM hierarchical_memory WHERE id = ?
|
|
416
|
-
`).get(id);
|
|
417
|
-
if (!row)
|
|
418
|
-
return null;
|
|
419
|
-
const item = {
|
|
420
|
-
id: row.id,
|
|
421
|
-
tier: row.tier,
|
|
422
|
-
content: row.content,
|
|
423
|
-
importance: row.importance,
|
|
424
|
-
accessCount: row.access_count,
|
|
425
|
-
createdAt: row.created_at,
|
|
426
|
-
lastAccessedAt: row.last_accessed_at,
|
|
427
|
-
lastRehearsedAt: row.last_rehearsed_at,
|
|
428
|
-
consolidatedAt: row.consolidated_at,
|
|
429
|
-
tags: row.tags ? JSON.parse(row.tags) : undefined,
|
|
430
|
-
context: row.context ? JSON.parse(row.context) : undefined,
|
|
431
|
-
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
432
|
-
};
|
|
433
|
-
return item;
|
|
434
|
-
}
|
|
435
|
-
/**
|
|
436
|
-
* Manual search without vector backend
|
|
437
|
-
*/
|
|
438
|
-
async manualSearch(queryEmbedding, tiers, k, threshold) {
|
|
439
|
-
const tierFilter = tiers.map(t => `'${t}'`).join(',');
|
|
440
|
-
const rows = this.db.prepare(`
|
|
441
|
-
SELECT * FROM hierarchical_memory
|
|
442
|
-
WHERE tier IN (${tierFilter})
|
|
443
|
-
ORDER BY importance DESC
|
|
444
|
-
LIMIT ?
|
|
445
|
-
`).all(k * 2); // Get more to account for filtering
|
|
446
|
-
const results = [];
|
|
447
|
-
for (const row of rows) {
|
|
448
|
-
const embedding = await this.embedder.embed(row.content);
|
|
449
|
-
const similarity = cosineSimilarity(queryEmbedding, embedding);
|
|
450
|
-
if (similarity >= threshold) {
|
|
451
|
-
results.push({
|
|
452
|
-
id: row.id,
|
|
453
|
-
tier: row.tier,
|
|
454
|
-
content: row.content,
|
|
455
|
-
embedding,
|
|
456
|
-
importance: row.importance,
|
|
457
|
-
accessCount: row.access_count,
|
|
458
|
-
createdAt: row.created_at,
|
|
459
|
-
lastAccessedAt: row.last_accessed_at,
|
|
460
|
-
lastRehearsedAt: row.last_rehearsed_at,
|
|
461
|
-
consolidatedAt: row.consolidated_at,
|
|
462
|
-
tags: row.tags ? JSON.parse(row.tags) : undefined,
|
|
463
|
-
context: row.context ? JSON.parse(row.context) : undefined,
|
|
464
|
-
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
465
|
-
similarity,
|
|
466
|
-
});
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
return results.sort((a, b) => b.similarity - a.similarity).slice(0, k);
|
|
470
|
-
}
|
|
471
|
-
/**
|
|
472
|
-
* Apply context filter to results
|
|
473
|
-
*/
|
|
474
|
-
applyContextFilter(results, context) {
|
|
475
|
-
return results.filter(item => {
|
|
476
|
-
if (!item.context)
|
|
477
|
-
return false;
|
|
478
|
-
// Check if at least 50% of context keys match
|
|
479
|
-
const keys = Object.keys(context);
|
|
480
|
-
const matches = keys.filter(key => item.context[key] === context[key]).length;
|
|
481
|
-
return matches / keys.length >= 0.5;
|
|
482
|
-
});
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* Update access tracking for retrieved memories
|
|
486
|
-
*/
|
|
487
|
-
async updateAccessTracking(ids) {
|
|
488
|
-
if (ids.length === 0)
|
|
489
|
-
return;
|
|
490
|
-
const now = Date.now();
|
|
491
|
-
const placeholders = ids.map(() => '?').join(',');
|
|
492
|
-
this.db.prepare(`
|
|
493
|
-
UPDATE hierarchical_memory
|
|
494
|
-
SET access_count = access_count + 1, last_accessed_at = ?
|
|
495
|
-
WHERE id IN (${placeholders})
|
|
496
|
-
`).run(now, ...ids);
|
|
497
|
-
// Update caches
|
|
498
|
-
for (const id of ids) {
|
|
499
|
-
const item = this.workingMemoryCache.get(id) || this.episodicMemoryIndex.get(id);
|
|
500
|
-
if (item) {
|
|
501
|
-
item.accessCount++;
|
|
502
|
-
item.lastAccessedAt = now;
|
|
503
|
-
// Check for promotion
|
|
504
|
-
await this.promote(id);
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
/**
|
|
509
|
-
* Check if consolidation is needed and trigger if necessary
|
|
510
|
-
*/
|
|
511
|
-
async checkConsolidation() {
|
|
512
|
-
const episodicCount = this.episodicMemoryIndex.size;
|
|
513
|
-
if (episodicCount >= this.config.consolidation.maxEpisodicSize) {
|
|
514
|
-
// Trigger consolidation (will be handled by MemoryConsolidation service)
|
|
515
|
-
console.log(`⚠️ Episodic memory full (${episodicCount} items). Consolidation recommended.`);
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
//# sourceMappingURL=HierarchicalMemory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HierarchicalMemory.js","sourceRoot":"","sources":["../../../src/controllers/HierarchicalMemory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MemoryConsolidation - Nightly Memory Processing
|
|
3
|
-
*
|
|
4
|
-
* Implements automatic memory consolidation from episodic to semantic memory
|
|
5
|
-
* using spaced repetition and importance scoring.
|
|
6
|
-
*
|
|
7
|
-
* Based on:
|
|
8
|
-
* - Complementary Learning Systems (McClelland et al., 1995)
|
|
9
|
-
* - Active Systems Consolidation (Diekelmann & Born, 2010)
|
|
10
|
-
* - Spaced Repetition (Ebbinghaus, 1885)
|
|
11
|
-
*
|
|
12
|
-
* Process:
|
|
13
|
-
* 1. Identify consolidation candidates (high importance + multiple accesses)
|
|
14
|
-
* 2. Cluster similar episodic memories
|
|
15
|
-
* 3. Extract semantic patterns (abstractions)
|
|
16
|
-
* 4. Promote to semantic memory
|
|
17
|
-
* 5. Apply forgetting to low-value episodic memories
|
|
18
|
-
* 6. Schedule spaced repetition for important memories
|
|
19
|
-
*
|
|
20
|
-
* ADR-066 Phase P2-3
|
|
21
|
-
*/
|
|
22
|
-
import type { VectorBackend } from '../backends/VectorBackend.js';
|
|
23
|
-
import type { GraphBackend } from '../backends/GraphBackend.js';
|
|
24
|
-
import { HierarchicalMemory } from './HierarchicalMemory.js';
|
|
25
|
-
import { EmbeddingService } from './EmbeddingService.js';
|
|
26
|
-
type Database = any;
|
|
27
|
-
/** Consolidation result report */
|
|
28
|
-
export interface ConsolidationReport {
|
|
29
|
-
timestamp: number;
|
|
30
|
-
executionTimeMs: number;
|
|
31
|
-
episodicProcessed: number;
|
|
32
|
-
semanticCreated: number;
|
|
33
|
-
memoriesForgotten: number;
|
|
34
|
-
clustersFormed: number;
|
|
35
|
-
avgImportance: number;
|
|
36
|
-
retentionRate: number;
|
|
37
|
-
recommendations: string[];
|
|
38
|
-
}
|
|
39
|
-
export interface ConsolidationConfig {
|
|
40
|
-
/** Minimum similarity for clustering (0-1) */
|
|
41
|
-
clusterThreshold: number;
|
|
42
|
-
/** Minimum cluster size for semantic extraction */
|
|
43
|
-
minClusterSize: number;
|
|
44
|
-
/** Maximum cluster size before splitting */
|
|
45
|
-
maxClusterSize: number;
|
|
46
|
-
/** Importance threshold for consolidation */
|
|
47
|
-
importanceThreshold: number;
|
|
48
|
-
/** Minimum access count for consolidation */
|
|
49
|
-
minAccessCount: number;
|
|
50
|
-
/** Enable spaced repetition */
|
|
51
|
-
enableSpacedRepetition: boolean;
|
|
52
|
-
/** Initial repetition interval (ms) */
|
|
53
|
-
initialInterval: number;
|
|
54
|
-
/** Interval multiplier for successful recall */
|
|
55
|
-
intervalMultiplier: number;
|
|
56
|
-
/** Forgetting threshold (retention below this = forget) */
|
|
57
|
-
forgettingThreshold: number;
|
|
58
|
-
}
|
|
59
|
-
export declare class MemoryConsolidation {
|
|
60
|
-
private db;
|
|
61
|
-
private hierarchicalMemory;
|
|
62
|
-
private embedder;
|
|
63
|
-
private vectorBackend?;
|
|
64
|
-
private graphBackend?;
|
|
65
|
-
private config;
|
|
66
|
-
private repetitionSchedules;
|
|
67
|
-
constructor(db: Database, hierarchicalMemory: HierarchicalMemory, embedder: EmbeddingService, vectorBackend?: VectorBackend, graphBackend?: GraphBackend, config?: Partial<ConsolidationConfig>);
|
|
68
|
-
/**
|
|
69
|
-
* Initialize database tables for consolidation tracking
|
|
70
|
-
*/
|
|
71
|
-
private initializeDatabase;
|
|
72
|
-
/**
|
|
73
|
-
* Run nightly consolidation process
|
|
74
|
-
*/
|
|
75
|
-
consolidate(): Promise<ConsolidationReport>;
|
|
76
|
-
/**
|
|
77
|
-
* Get episodic memories that are candidates for consolidation
|
|
78
|
-
*/
|
|
79
|
-
private getConsolidationCandidates;
|
|
80
|
-
/**
|
|
81
|
-
* Cluster similar memories using hierarchical clustering
|
|
82
|
-
*/
|
|
83
|
-
private clusterMemories;
|
|
84
|
-
/**
|
|
85
|
-
* Update cluster centroid (simple average)
|
|
86
|
-
*/
|
|
87
|
-
private updateCentroid;
|
|
88
|
-
/**
|
|
89
|
-
* Create semantic memory from cluster
|
|
90
|
-
*/
|
|
91
|
-
private createSemanticMemory;
|
|
92
|
-
/**
|
|
93
|
-
* Extract semantic pattern from cluster
|
|
94
|
-
*/
|
|
95
|
-
private extractSemanticPattern;
|
|
96
|
-
/**
|
|
97
|
-
* Extract common tags from cluster members
|
|
98
|
-
*/
|
|
99
|
-
private extractCommonTags;
|
|
100
|
-
/**
|
|
101
|
-
* Mark episodic memory as consolidated
|
|
102
|
-
*/
|
|
103
|
-
private markConsolidated;
|
|
104
|
-
/**
|
|
105
|
-
* Apply forgetting curve and delete low-value memories
|
|
106
|
-
*/
|
|
107
|
-
private applyForgettingCurve;
|
|
108
|
-
/**
|
|
109
|
-
* Calculate retention using Ebbinghaus forgetting curve
|
|
110
|
-
*/
|
|
111
|
-
private calculateRetention;
|
|
112
|
-
/**
|
|
113
|
-
* Schedule spaced repetition for memories
|
|
114
|
-
*/
|
|
115
|
-
private scheduleSpacedRepetition;
|
|
116
|
-
/**
|
|
117
|
-
* Update repetition schedule after review
|
|
118
|
-
*/
|
|
119
|
-
private updateRepetitionSchedule;
|
|
120
|
-
/**
|
|
121
|
-
* Save repetition schedule to database
|
|
122
|
-
*/
|
|
123
|
-
private saveRepetitionSchedule;
|
|
124
|
-
/**
|
|
125
|
-
* Load repetition schedules from database
|
|
126
|
-
*/
|
|
127
|
-
private loadRepetitionSchedules;
|
|
128
|
-
/**
|
|
129
|
-
* Generate recommendations based on consolidation report
|
|
130
|
-
*/
|
|
131
|
-
private generateRecommendations;
|
|
132
|
-
/**
|
|
133
|
-
* Log consolidation to database
|
|
134
|
-
*/
|
|
135
|
-
private logConsolidation;
|
|
136
|
-
/**
|
|
137
|
-
* Get consolidation history
|
|
138
|
-
*/
|
|
139
|
-
getConsolidationHistory(limit?: number): Promise<ConsolidationReport[]>;
|
|
140
|
-
}
|
|
141
|
-
export {};
|
|
142
|
-
//# sourceMappingURL=MemoryConsolidation.d.ts.map
|