@monoes/memory 1.0.0 → 1.0.2
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/README.md +20 -24
- package/dist/agent-memory-scope.d.ts +1 -1
- package/dist/agent-memory-scope.js +2 -2
- package/dist/agent-memory-scope.js.map +1 -1
- package/dist/auto-memory-bridge.d.ts +12 -12
- package/dist/auto-memory-bridge.d.ts.map +1 -1
- package/dist/auto-memory-bridge.js +24 -18
- package/dist/auto-memory-bridge.js.map +1 -1
- package/dist/cache-manager.d.ts.map +1 -1
- package/dist/cache-manager.js +7 -3
- package/dist/cache-manager.js.map +1 -1
- package/dist/checkpointer.d.ts.map +1 -1
- package/dist/checkpointer.js +14 -4
- package/dist/checkpointer.js.map +1 -1
- package/dist/controller-registry.d.ts +14 -20
- package/dist/controller-registry.d.ts.map +1 -1
- package/dist/controller-registry.js +52 -423
- package/dist/controller-registry.js.map +1 -1
- package/dist/database-provider.d.ts.map +1 -1
- package/dist/database-provider.js +3 -15
- package/dist/database-provider.js.map +1 -1
- package/dist/diskann-backend.d.ts.map +1 -1
- package/dist/diskann-backend.js +16 -4
- package/dist/diskann-backend.js.map +1 -1
- package/dist/episodic-store.js +5 -5
- package/dist/episodic-store.js.map +1 -1
- package/dist/hnsw-index.d.ts +0 -1
- package/dist/hnsw-index.d.ts.map +1 -1
- package/dist/hnsw-index.js +2 -48
- package/dist/hnsw-index.js.map +1 -1
- package/dist/hnsw-lite.d.ts.map +1 -1
- package/dist/hnsw-lite.js +5 -1
- package/dist/hnsw-lite.js.map +1 -1
- package/dist/hybrid-backend.d.ts +29 -31
- package/dist/hybrid-backend.d.ts.map +1 -1
- package/dist/hybrid-backend.js +153 -152
- package/dist/hybrid-backend.js.map +1 -1
- package/dist/index.d.ts +19 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -61
- package/dist/index.js.map +1 -1
- package/dist/lancedb-backend.d.ts +68 -0
- package/dist/lancedb-backend.d.ts.map +1 -0
- package/dist/lancedb-backend.js +468 -0
- package/dist/lancedb-backend.js.map +1 -0
- package/dist/learning-bridge.d.ts +19 -1
- package/dist/learning-bridge.d.ts.map +1 -1
- package/dist/learning-bridge.js +96 -52
- package/dist/learning-bridge.js.map +1 -1
- package/dist/math-utils.d.ts +6 -0
- package/dist/math-utils.d.ts.map +1 -0
- package/dist/math-utils.js +34 -0
- package/dist/math-utils.js.map +1 -0
- package/dist/memory-graph.d.ts +2 -0
- package/dist/memory-graph.d.ts.map +1 -1
- package/dist/memory-graph.js +22 -5
- package/dist/memory-graph.js.map +1 -1
- package/dist/migration.d.ts +5 -5
- package/dist/migration.d.ts.map +1 -1
- package/dist/migration.js +1 -1
- package/dist/persistent-sona.d.ts +1 -1
- package/dist/persistent-sona.d.ts.map +1 -1
- package/dist/persistent-sona.js +3 -25
- package/dist/persistent-sona.js.map +1 -1
- package/dist/rvf-backend.d.ts +2 -0
- package/dist/rvf-backend.d.ts.map +1 -1
- package/dist/rvf-backend.js +70 -62
- package/dist/rvf-backend.js.map +1 -1
- package/dist/sqlite-backend.d.ts +10 -2
- package/dist/sqlite-backend.d.ts.map +1 -1
- package/dist/sqlite-backend.js +124 -56
- package/dist/sqlite-backend.js.map +1 -1
- package/dist/sqljs-backend.d.ts +0 -1
- package/dist/sqljs-backend.d.ts.map +1 -1
- package/dist/sqljs-backend.js +3 -14
- package/dist/sqljs-backend.js.map +1 -1
- package/dist/tier-manager.d.ts.map +1 -1
- package/dist/tier-manager.js +10 -6
- package/dist/tier-manager.js.map +1 -1
- package/dist/tiers/contextual.d.ts +2 -0
- package/dist/tiers/contextual.d.ts.map +1 -1
- package/dist/tiers/contextual.js +8 -1
- package/dist/tiers/contextual.js.map +1 -1
- package/dist/tiers/short-term.js +4 -3
- package/dist/tiers/short-term.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -4
- package/dist/agentdb-adapter.d.ts +0 -165
- package/dist/agentdb-adapter.d.ts.map +0 -1
- package/dist/agentdb-adapter.js +0 -836
- package/dist/agentdb-adapter.js.map +0 -1
- package/dist/agentdb-backend.d.ts +0 -218
- package/dist/agentdb-backend.d.ts.map +0 -1
- package/dist/agentdb-backend.js +0 -879
- package/dist/agentdb-backend.js.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ControllerRegistry - Central controller lifecycle management for
|
|
2
|
+
* ControllerRegistry - Central controller lifecycle management for memory backend
|
|
3
3
|
*
|
|
4
|
-
* Wraps the
|
|
4
|
+
* Wraps the LanceDB backend and adds CLI-specific controllers from @monomind/memory.
|
|
5
5
|
* Manages initialization (level-based ordering), health checks, and graceful shutdown.
|
|
6
6
|
*
|
|
7
7
|
* Per ADR-053: Replaces memory-initializer.js's raw sql.js usage with a unified
|
|
8
|
-
* controller ecosystem routing all memory operations through
|
|
8
|
+
* controller ecosystem routing all memory operations through LanceDB.
|
|
9
9
|
*
|
|
10
10
|
* @module @monomind/memory/controller-registry
|
|
11
11
|
*/
|
|
@@ -35,9 +35,11 @@ export const INIT_LEVELS = [
|
|
|
35
35
|
// Level 6: Session management
|
|
36
36
|
{ level: 6, controllers: ['federatedSession', 'graphAdapter'] },
|
|
37
37
|
];
|
|
38
|
+
/** Pre-computed reverse of INIT_LEVELS for shutdown ordering. */
|
|
39
|
+
const SHUTDOWN_LEVELS = [...INIT_LEVELS].reverse();
|
|
38
40
|
// ===== ControllerRegistry =====
|
|
39
41
|
/**
|
|
40
|
-
* Central registry for
|
|
42
|
+
* Central registry for memory backend controller lifecycle management.
|
|
41
43
|
*
|
|
42
44
|
* Handles:
|
|
43
45
|
* - Level-based initialization ordering (levels 0-6)
|
|
@@ -67,7 +69,6 @@ export const INIT_LEVELS = [
|
|
|
67
69
|
*/
|
|
68
70
|
export class ControllerRegistry extends EventEmitter {
|
|
69
71
|
controllers = new Map();
|
|
70
|
-
agentdb = null;
|
|
71
72
|
backend = null;
|
|
72
73
|
config = {};
|
|
73
74
|
initialized = false;
|
|
@@ -85,9 +86,7 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
85
86
|
this.initialized = true; // Set early to prevent concurrent re-entry
|
|
86
87
|
this.config = config;
|
|
87
88
|
const startTime = performance.now();
|
|
88
|
-
// Step 1:
|
|
89
|
-
await this.initAgentDB(config);
|
|
90
|
-
// Step 2: Set up the backend
|
|
89
|
+
// Step 1: Set up the backend
|
|
91
90
|
this.backend = config.backend || null;
|
|
92
91
|
// Step 3: Initialize controllers level by level
|
|
93
92
|
for (const level of INIT_LEVELS) {
|
|
@@ -129,9 +128,8 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
129
128
|
async shutdown() {
|
|
130
129
|
if (!this.initialized)
|
|
131
130
|
return;
|
|
132
|
-
// Shutdown in reverse level order
|
|
133
|
-
const
|
|
134
|
-
for (const level of reverseLevels) {
|
|
131
|
+
// Shutdown in reverse level order (SHUTDOWN_LEVELS is pre-computed at module load)
|
|
132
|
+
for (const level of SHUTDOWN_LEVELS) {
|
|
135
133
|
const controllersToShutdown = level.controllers
|
|
136
134
|
.filter((name) => {
|
|
137
135
|
const entry = this.controllers.get(name);
|
|
@@ -139,18 +137,6 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
139
137
|
});
|
|
140
138
|
await Promise.allSettled(controllersToShutdown.map((name) => this.shutdownController(name)));
|
|
141
139
|
}
|
|
142
|
-
// Shutdown AgentDB
|
|
143
|
-
if (this.agentdb) {
|
|
144
|
-
try {
|
|
145
|
-
if (typeof this.agentdb.close === 'function') {
|
|
146
|
-
await this.agentdb.close();
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
// Best-effort cleanup
|
|
151
|
-
}
|
|
152
|
-
this.agentdb = null;
|
|
153
|
-
}
|
|
154
140
|
this.controllers.clear();
|
|
155
141
|
this.initialized = false;
|
|
156
142
|
this.emit('shutdown');
|
|
@@ -160,41 +146,17 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
160
146
|
* Returns null if the controller is not initialized or unavailable.
|
|
161
147
|
*/
|
|
162
148
|
get(name) {
|
|
163
|
-
// First check CLI-layer controllers
|
|
164
149
|
const entry = this.controllers.get(name);
|
|
165
150
|
if (entry?.enabled && entry?.instance) {
|
|
166
151
|
return entry.instance;
|
|
167
152
|
}
|
|
168
|
-
// Fall back to AgentDB internal controllers
|
|
169
|
-
if (this.agentdb && typeof this.agentdb.getController === 'function') {
|
|
170
|
-
try {
|
|
171
|
-
const controller = this.agentdb.getController(name);
|
|
172
|
-
if (controller)
|
|
173
|
-
return controller;
|
|
174
|
-
}
|
|
175
|
-
catch {
|
|
176
|
-
// Controller not available in AgentDB
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
153
|
return null;
|
|
180
154
|
}
|
|
181
155
|
/**
|
|
182
156
|
* Check if a controller is enabled and initialized.
|
|
183
157
|
*/
|
|
184
158
|
isEnabled(name) {
|
|
185
|
-
|
|
186
|
-
if (entry?.enabled)
|
|
187
|
-
return true;
|
|
188
|
-
// Check AgentDB internal controllers
|
|
189
|
-
if (this.agentdb && typeof this.agentdb.getController === 'function') {
|
|
190
|
-
try {
|
|
191
|
-
return this.agentdb.getController(name) !== null;
|
|
192
|
-
}
|
|
193
|
-
catch {
|
|
194
|
-
return false;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
return false;
|
|
159
|
+
return this.controllers.get(name)?.enabled ?? false;
|
|
198
160
|
}
|
|
199
161
|
/**
|
|
200
162
|
* Aggregate health check across all controllers.
|
|
@@ -213,16 +175,7 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
213
175
|
error: entry.error,
|
|
214
176
|
});
|
|
215
177
|
}
|
|
216
|
-
|
|
217
|
-
let agentdbAvailable = false;
|
|
218
|
-
if (this.agentdb) {
|
|
219
|
-
try {
|
|
220
|
-
agentdbAvailable = typeof this.agentdb.getController === 'function';
|
|
221
|
-
}
|
|
222
|
-
catch {
|
|
223
|
-
agentdbAvailable = false;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
178
|
+
const lancedbAvailable = this.backend !== null;
|
|
226
179
|
const active = controllerHealth.filter((c) => c.status === 'healthy').length;
|
|
227
180
|
const unavailable = controllerHealth.filter((c) => c.status === 'unavailable').length;
|
|
228
181
|
let status = 'healthy';
|
|
@@ -235,7 +188,7 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
235
188
|
return {
|
|
236
189
|
status,
|
|
237
190
|
controllers: controllerHealth,
|
|
238
|
-
|
|
191
|
+
lancedbAvailable,
|
|
239
192
|
initTimeMs: this.initTimeMs,
|
|
240
193
|
timestamp: Date.now(),
|
|
241
194
|
activeControllers: active,
|
|
@@ -243,11 +196,8 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
243
196
|
};
|
|
244
197
|
}
|
|
245
198
|
/**
|
|
246
|
-
* Get the underlying
|
|
199
|
+
* Get the underlying memory backend instance.
|
|
247
200
|
*/
|
|
248
|
-
getAgentDB() {
|
|
249
|
-
return this.agentdb;
|
|
250
|
-
}
|
|
251
201
|
/**
|
|
252
202
|
* Get the memory backend.
|
|
253
203
|
*/
|
|
@@ -282,57 +232,6 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
282
232
|
}));
|
|
283
233
|
}
|
|
284
234
|
// ===== Private Methods =====
|
|
285
|
-
/**
|
|
286
|
-
* Initialize AgentDB instance with dynamic import and fallback chain.
|
|
287
|
-
*/
|
|
288
|
-
async initAgentDB(config) {
|
|
289
|
-
try {
|
|
290
|
-
// Validate dbPath to prevent path traversal
|
|
291
|
-
const dbPath = config.dbPath || ':memory:';
|
|
292
|
-
if (dbPath !== ':memory:') {
|
|
293
|
-
// Use dynamic import instead of require() — require() is not defined in ESM
|
|
294
|
-
// context and silently kills initAgentDB(), disabling all 15+ controllers (#1492).
|
|
295
|
-
const { resolve: resolvePath } = await import('node:path');
|
|
296
|
-
const resolved = resolvePath(dbPath);
|
|
297
|
-
if (resolved.includes('..')) {
|
|
298
|
-
this.emit('agentdb:unavailable', { reason: 'Invalid dbPath' });
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
const agentdbModule = await import('agentdb');
|
|
303
|
-
const AgentDBClass = agentdbModule.AgentDB || agentdbModule.default;
|
|
304
|
-
if (!AgentDBClass) {
|
|
305
|
-
this.emit('agentdb:unavailable', { reason: 'No AgentDB class found' });
|
|
306
|
-
return;
|
|
307
|
-
}
|
|
308
|
-
this.agentdb = new AgentDBClass({ dbPath });
|
|
309
|
-
// Suppress agentdb's noisy info-level output during init
|
|
310
|
-
// using stderr redirect instead of monkey-patching console.log
|
|
311
|
-
const origLog = console.log;
|
|
312
|
-
const suppressFilter = (args) => {
|
|
313
|
-
const msg = String(args[0] ?? '');
|
|
314
|
-
return msg.includes('Transformers.js') ||
|
|
315
|
-
msg.includes('better-sqlite3') ||
|
|
316
|
-
msg.includes('[AgentDB]');
|
|
317
|
-
};
|
|
318
|
-
console.log = (...args) => {
|
|
319
|
-
if (!suppressFilter(args))
|
|
320
|
-
origLog.apply(console, args);
|
|
321
|
-
};
|
|
322
|
-
try {
|
|
323
|
-
await this.agentdb.initialize();
|
|
324
|
-
}
|
|
325
|
-
finally {
|
|
326
|
-
console.log = origLog;
|
|
327
|
-
}
|
|
328
|
-
this.emit('agentdb:initialized');
|
|
329
|
-
}
|
|
330
|
-
catch (error) {
|
|
331
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
332
|
-
this.emit('agentdb:unavailable', { reason: msg.substring(0, 200) });
|
|
333
|
-
this.agentdb = null;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
235
|
/**
|
|
337
236
|
* Check whether a controller should be initialized based on config.
|
|
338
237
|
*/
|
|
@@ -354,13 +253,13 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
354
253
|
// Graph — enabled if backend available
|
|
355
254
|
case 'memoryGraph':
|
|
356
255
|
return !!(this.config.memory?.memoryGraph || this.backend);
|
|
357
|
-
// Security — enabled if
|
|
256
|
+
// Security — enabled if LanceDB available
|
|
358
257
|
case 'mutationGuard':
|
|
359
258
|
case 'attestationLog':
|
|
360
259
|
case 'vectorBackend':
|
|
361
260
|
case 'guardedVectorBackend':
|
|
362
|
-
return this.
|
|
363
|
-
//
|
|
261
|
+
return this.backend !== null;
|
|
262
|
+
// Memory-internal controllers — only if backend available
|
|
364
263
|
case 'skills':
|
|
365
264
|
case 'reflexion':
|
|
366
265
|
case 'causalGraph':
|
|
@@ -376,10 +275,10 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
376
275
|
case 'contextSynthesizer':
|
|
377
276
|
case 'rvfOptimizer':
|
|
378
277
|
case 'mmrDiversityRanker':
|
|
379
|
-
return this.
|
|
380
|
-
// SemanticRouter — auto-enable if
|
|
278
|
+
return this.backend !== null;
|
|
279
|
+
// SemanticRouter — auto-enable if backend available (exported since alpha.10)
|
|
381
280
|
case 'semanticRouter':
|
|
382
|
-
return this.
|
|
281
|
+
return this.backend !== null;
|
|
383
282
|
// Optional controllers
|
|
384
283
|
case 'hybridSearch':
|
|
385
284
|
case 'agentMemoryScope':
|
|
@@ -426,8 +325,8 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
426
325
|
}
|
|
427
326
|
/**
|
|
428
327
|
* Factory method to create a controller instance.
|
|
429
|
-
* Handles CLI-layer controllers;
|
|
430
|
-
* accessed via
|
|
328
|
+
* Handles CLI-layer controllers; internal controllers are
|
|
329
|
+
* accessed via backend.getController().
|
|
431
330
|
*/
|
|
432
331
|
async createController(name) {
|
|
433
332
|
switch (name) {
|
|
@@ -436,11 +335,16 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
436
335
|
if (!this.backend)
|
|
437
336
|
return null;
|
|
438
337
|
const config = this.config.memory?.learningBridge || {};
|
|
338
|
+
let embedder = config.embedder;
|
|
439
339
|
const bridge = new LearningBridge(this.backend, {
|
|
440
340
|
sonaMode: config.sonaMode || this.config.neural?.sonaMode || 'balanced',
|
|
441
341
|
confidenceDecayRate: config.confidenceDecayRate,
|
|
442
342
|
accessBoostAmount: config.accessBoostAmount,
|
|
443
343
|
consolidationThreshold: config.consolidationThreshold,
|
|
344
|
+
embedder,
|
|
345
|
+
// Thread the real vector dimension so SONA and the embedder agree
|
|
346
|
+
// (backend MiniLM produces 384-dim vectors, not SONA's 768 hidden width).
|
|
347
|
+
embeddingDim: this.config.dimension ?? config.embeddingDim,
|
|
444
348
|
enabled: true,
|
|
445
349
|
});
|
|
446
350
|
return bridge;
|
|
@@ -480,314 +384,39 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
480
384
|
case 'agentMemoryScope':
|
|
481
385
|
// Agent memory scope — placeholder, activated when explicitly enabled
|
|
482
386
|
return null;
|
|
483
|
-
case 'semanticRouter':
|
|
484
|
-
|
|
485
|
-
// Constructor: () — requires initialize() after construction
|
|
486
|
-
try {
|
|
487
|
-
const agentdbModule = await import('agentdb');
|
|
488
|
-
const SR = agentdbModule.SemanticRouter;
|
|
489
|
-
if (!SR)
|
|
490
|
-
return null;
|
|
491
|
-
const router = new SR();
|
|
492
|
-
await router.initialize();
|
|
493
|
-
return router;
|
|
494
|
-
}
|
|
495
|
-
catch {
|
|
496
|
-
return null;
|
|
497
|
-
}
|
|
498
|
-
}
|
|
387
|
+
case 'semanticRouter':
|
|
388
|
+
return null;
|
|
499
389
|
case 'sonaTrajectory':
|
|
500
|
-
// Delegate to AgentDB's SonaTrajectoryService if available
|
|
501
|
-
if (this.agentdb && typeof this.agentdb.getController === 'function') {
|
|
502
|
-
try {
|
|
503
|
-
return this.agentdb.getController('sonaTrajectory');
|
|
504
|
-
}
|
|
505
|
-
catch {
|
|
506
|
-
return null;
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
390
|
return null;
|
|
510
|
-
case 'hierarchicalMemory':
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
return this.createTieredMemoryStub();
|
|
515
|
-
try {
|
|
516
|
-
const agentdbModule = await import('agentdb');
|
|
517
|
-
const HM = agentdbModule.HierarchicalMemory;
|
|
518
|
-
if (!HM)
|
|
519
|
-
return this.createTieredMemoryStub();
|
|
520
|
-
const embedder = this.createEmbeddingService();
|
|
521
|
-
const hm = new HM(this.agentdb.database, embedder);
|
|
522
|
-
await hm.initializeDatabase();
|
|
523
|
-
return hm;
|
|
524
|
-
}
|
|
525
|
-
catch {
|
|
526
|
-
return this.createTieredMemoryStub();
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
case 'memoryConsolidation': {
|
|
530
|
-
// MemoryConsolidation exported from agentdb 3.0.0-alpha.10 (ADR-066 Phase P2-3)
|
|
531
|
-
// Constructor: (db, hierarchicalMemory, embedder, vectorBackend?, graphBackend?, config?)
|
|
532
|
-
if (!this.agentdb)
|
|
533
|
-
return this.createConsolidationStub();
|
|
534
|
-
try {
|
|
535
|
-
const agentdbModule = await import('agentdb');
|
|
536
|
-
const MC = agentdbModule.MemoryConsolidation;
|
|
537
|
-
if (!MC)
|
|
538
|
-
return this.createConsolidationStub();
|
|
539
|
-
// Get the HierarchicalMemory instance (must be initialized at level 1 before us at level 3)
|
|
540
|
-
const hm = this.get('hierarchicalMemory');
|
|
541
|
-
if (!hm || typeof hm.recall !== 'function' || typeof hm.store !== 'function') {
|
|
542
|
-
return this.createConsolidationStub();
|
|
543
|
-
}
|
|
544
|
-
const embedder = this.createEmbeddingService();
|
|
545
|
-
const mc = new MC(this.agentdb.database, hm, embedder);
|
|
546
|
-
await mc.initializeDatabase();
|
|
547
|
-
return mc;
|
|
548
|
-
}
|
|
549
|
-
catch {
|
|
550
|
-
return this.createConsolidationStub();
|
|
551
|
-
}
|
|
552
|
-
}
|
|
391
|
+
case 'hierarchicalMemory':
|
|
392
|
+
return this.createTieredMemoryStub();
|
|
393
|
+
case 'memoryConsolidation':
|
|
394
|
+
return this.createConsolidationStub();
|
|
553
395
|
case 'federatedSession':
|
|
554
396
|
// Federated session — placeholder for Phase 4
|
|
555
397
|
return null;
|
|
556
|
-
// -----
|
|
557
|
-
//
|
|
558
|
-
case 'reasoningBank':
|
|
559
|
-
// ReasoningBank is exported directly, not via getController
|
|
560
|
-
if (!this.agentdb)
|
|
561
|
-
return null;
|
|
562
|
-
try {
|
|
563
|
-
const agentdbModule = await import('agentdb');
|
|
564
|
-
const RB = agentdbModule.ReasoningBank;
|
|
565
|
-
if (!RB)
|
|
566
|
-
return null;
|
|
567
|
-
const embedder = this.createEmbeddingService();
|
|
568
|
-
return new RB(this.agentdb.database, embedder);
|
|
569
|
-
}
|
|
570
|
-
catch {
|
|
571
|
-
return null;
|
|
572
|
-
}
|
|
573
|
-
}
|
|
398
|
+
// ----- internal controllers (via getController) -----
|
|
399
|
+
// legacy backend.getController() only supports: reflexion/memory, skills, causalGraph/causal
|
|
400
|
+
case 'reasoningBank':
|
|
574
401
|
case 'skills':
|
|
575
402
|
case 'reflexion':
|
|
576
|
-
case 'causalGraph':
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
case '
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
const agentdbModule = await import('agentdb');
|
|
591
|
-
const CR = agentdbModule.CausalRecall;
|
|
592
|
-
if (!CR)
|
|
593
|
-
return null;
|
|
594
|
-
return new CR(this.agentdb.database);
|
|
595
|
-
}
|
|
596
|
-
catch {
|
|
597
|
-
return null;
|
|
598
|
-
}
|
|
599
|
-
}
|
|
600
|
-
case 'learningSystem': {
|
|
601
|
-
if (!this.agentdb)
|
|
602
|
-
return null;
|
|
603
|
-
try {
|
|
604
|
-
const agentdbModule = await import('agentdb');
|
|
605
|
-
const LS = agentdbModule.LearningSystem;
|
|
606
|
-
if (!LS)
|
|
607
|
-
return null;
|
|
608
|
-
return new LS(this.agentdb.database);
|
|
609
|
-
}
|
|
610
|
-
catch {
|
|
611
|
-
return null;
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
case 'explainableRecall': {
|
|
615
|
-
if (!this.agentdb)
|
|
616
|
-
return null;
|
|
617
|
-
try {
|
|
618
|
-
const agentdbModule = await import('agentdb');
|
|
619
|
-
const ER = agentdbModule.ExplainableRecall;
|
|
620
|
-
if (!ER)
|
|
621
|
-
return null;
|
|
622
|
-
return new ER(this.agentdb.database);
|
|
623
|
-
}
|
|
624
|
-
catch {
|
|
625
|
-
return null;
|
|
626
|
-
}
|
|
627
|
-
}
|
|
628
|
-
case 'nightlyLearner': {
|
|
629
|
-
if (!this.agentdb)
|
|
630
|
-
return null;
|
|
631
|
-
try {
|
|
632
|
-
const agentdbModule = await import('agentdb');
|
|
633
|
-
const NL = agentdbModule.NightlyLearner;
|
|
634
|
-
if (!NL)
|
|
635
|
-
return null;
|
|
636
|
-
return new NL(this.agentdb.database);
|
|
637
|
-
}
|
|
638
|
-
catch {
|
|
639
|
-
return null;
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
case 'graphTransformer': {
|
|
643
|
-
if (!this.agentdb)
|
|
644
|
-
return null;
|
|
645
|
-
try {
|
|
646
|
-
const agentdbModule = await import('agentdb');
|
|
647
|
-
const GT = agentdbModule.CausalMemoryGraph;
|
|
648
|
-
if (!GT)
|
|
649
|
-
return null;
|
|
650
|
-
return new GT(this.agentdb.database);
|
|
651
|
-
}
|
|
652
|
-
catch {
|
|
653
|
-
return null;
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
// ----- Direct-instantiation controllers -----
|
|
657
|
-
case 'batchOperations': {
|
|
658
|
-
if (!this.agentdb)
|
|
659
|
-
return null;
|
|
660
|
-
try {
|
|
661
|
-
const agentdbModule = await import('agentdb');
|
|
662
|
-
const BO = agentdbModule.BatchOperations;
|
|
663
|
-
if (!BO)
|
|
664
|
-
return null;
|
|
665
|
-
const embedder = this.config.embeddingGenerator || null;
|
|
666
|
-
return new BO(this.agentdb.database, embedder);
|
|
667
|
-
}
|
|
668
|
-
catch {
|
|
669
|
-
return null;
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
case 'contextSynthesizer': {
|
|
673
|
-
// ContextSynthesizer.synthesize is static — return the class itself
|
|
674
|
-
try {
|
|
675
|
-
const agentdbModule = await import('agentdb');
|
|
676
|
-
return agentdbModule.ContextSynthesizer ?? null;
|
|
677
|
-
}
|
|
678
|
-
catch {
|
|
679
|
-
return null;
|
|
680
|
-
}
|
|
681
|
-
}
|
|
682
|
-
case 'mmrDiversityRanker': {
|
|
683
|
-
try {
|
|
684
|
-
const agentdbModule = await import('agentdb');
|
|
685
|
-
const MMR = agentdbModule.MMRDiversityRanker;
|
|
686
|
-
if (!MMR)
|
|
687
|
-
return null;
|
|
688
|
-
return new MMR();
|
|
689
|
-
}
|
|
690
|
-
catch {
|
|
691
|
-
return null;
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
case 'mutationGuard': {
|
|
695
|
-
// MutationGuard exported from agentdb 3.0.0-alpha.10 (ADR-060)
|
|
696
|
-
// Constructor: (config?) where config.dimension, config.maxElements, config.enableWasmProofs
|
|
697
|
-
if (!this.agentdb)
|
|
698
|
-
return null;
|
|
699
|
-
try {
|
|
700
|
-
const agentdbModule = await import('agentdb');
|
|
701
|
-
const MG = agentdbModule.MutationGuard;
|
|
702
|
-
if (!MG)
|
|
703
|
-
return null;
|
|
704
|
-
return new MG({ dimension: this.config.dimension || 384 });
|
|
705
|
-
}
|
|
706
|
-
catch {
|
|
707
|
-
return null;
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
case 'attestationLog': {
|
|
711
|
-
// AttestationLog exported from agentdb 3.0.0-alpha.10 (ADR-060)
|
|
712
|
-
// Constructor: (db) — uses database for append-only audit log
|
|
713
|
-
if (!this.agentdb)
|
|
714
|
-
return null;
|
|
715
|
-
try {
|
|
716
|
-
const agentdbModule = await import('agentdb');
|
|
717
|
-
const AL = agentdbModule.AttestationLog;
|
|
718
|
-
if (!AL)
|
|
719
|
-
return null;
|
|
720
|
-
return new AL(this.agentdb.database);
|
|
721
|
-
}
|
|
722
|
-
catch {
|
|
723
|
-
return null;
|
|
724
|
-
}
|
|
725
|
-
}
|
|
726
|
-
case 'gnnService': {
|
|
727
|
-
// GNNService exported from agentdb 3.0.0-alpha.10 (ADR-062)
|
|
728
|
-
// Constructor: (config?) — requires initialize() after construction
|
|
729
|
-
try {
|
|
730
|
-
const agentdbModule = await import('agentdb');
|
|
731
|
-
const GNN = agentdbModule.GNNService;
|
|
732
|
-
if (!GNN)
|
|
733
|
-
return null;
|
|
734
|
-
const gnn = new GNN({ inputDim: this.config.dimension || 384 });
|
|
735
|
-
await gnn.initialize();
|
|
736
|
-
return gnn;
|
|
737
|
-
}
|
|
738
|
-
catch {
|
|
739
|
-
return null;
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
case 'rvfOptimizer': {
|
|
743
|
-
// RVFOptimizer exported from agentdb 3.0.0-alpha.10 (ADR-062/065)
|
|
744
|
-
// Constructor: (config?) — no-arg for defaults
|
|
745
|
-
try {
|
|
746
|
-
const agentdbModule = await import('agentdb');
|
|
747
|
-
const RVF = agentdbModule.RVFOptimizer;
|
|
748
|
-
if (!RVF)
|
|
749
|
-
return null;
|
|
750
|
-
return new RVF();
|
|
751
|
-
}
|
|
752
|
-
catch {
|
|
753
|
-
return null;
|
|
754
|
-
}
|
|
755
|
-
}
|
|
756
|
-
case 'guardedVectorBackend': {
|
|
757
|
-
// GuardedVectorBackend exported from agentdb 3.0.0-alpha.10 (ADR-060)
|
|
758
|
-
// Constructor: (innerBackend, mutationGuard, attestationLog?)
|
|
759
|
-
// Requires vectorBackend and mutationGuard to be initialized first (level 2)
|
|
760
|
-
if (!this.agentdb)
|
|
761
|
-
return null;
|
|
762
|
-
try {
|
|
763
|
-
const vb = this.get('vectorBackend');
|
|
764
|
-
const guard = this.get('mutationGuard');
|
|
765
|
-
if (!vb || !guard)
|
|
766
|
-
return null;
|
|
767
|
-
const agentdbModule = await import('agentdb');
|
|
768
|
-
const GVB = agentdbModule.GuardedVectorBackend;
|
|
769
|
-
if (!GVB)
|
|
770
|
-
return null;
|
|
771
|
-
const log = this.get('attestationLog');
|
|
772
|
-
return new GVB(vb, guard, log || undefined);
|
|
773
|
-
}
|
|
774
|
-
catch {
|
|
775
|
-
return null;
|
|
776
|
-
}
|
|
777
|
-
}
|
|
403
|
+
case 'causalGraph':
|
|
404
|
+
case 'causalRecall':
|
|
405
|
+
case 'learningSystem':
|
|
406
|
+
case 'explainableRecall':
|
|
407
|
+
case 'nightlyLearner':
|
|
408
|
+
case 'graphTransformer':
|
|
409
|
+
case 'batchOperations':
|
|
410
|
+
case 'contextSynthesizer':
|
|
411
|
+
case 'mmrDiversityRanker':
|
|
412
|
+
case 'mutationGuard':
|
|
413
|
+
case 'attestationLog':
|
|
414
|
+
case 'gnnService':
|
|
415
|
+
case 'rvfOptimizer':
|
|
416
|
+
case 'guardedVectorBackend':
|
|
778
417
|
case 'vectorBackend':
|
|
779
|
-
case 'graphAdapter':
|
|
780
|
-
// These are accessed via AgentDB internal state, not direct construction
|
|
781
|
-
if (!this.agentdb)
|
|
782
|
-
return null;
|
|
783
|
-
try {
|
|
784
|
-
if (typeof this.agentdb.getController === 'function') {
|
|
785
|
-
return this.agentdb.getController(name) ?? null;
|
|
786
|
-
}
|
|
787
|
-
}
|
|
788
|
-
catch { /* fallthrough */ }
|
|
418
|
+
case 'graphAdapter':
|
|
789
419
|
return null;
|
|
790
|
-
}
|
|
791
420
|
default:
|
|
792
421
|
return null;
|
|
793
422
|
}
|
|
@@ -840,7 +469,7 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
840
469
|
}
|
|
841
470
|
/**
|
|
842
471
|
* Lightweight in-memory tiered store (fallback when HierarchicalMemory
|
|
843
|
-
* cannot be initialized from
|
|
472
|
+
* cannot be initialized from legacy module).
|
|
844
473
|
* Enforces per-tier size limits to prevent unbounded memory growth.
|
|
845
474
|
*/
|
|
846
475
|
createTieredMemoryStub() {
|
|
@@ -883,7 +512,7 @@ export class ControllerRegistry extends EventEmitter {
|
|
|
883
512
|
}
|
|
884
513
|
/**
|
|
885
514
|
* No-op consolidation stub (fallback when MemoryConsolidation
|
|
886
|
-
* cannot be initialized from
|
|
515
|
+
* cannot be initialized from legacy module).
|
|
887
516
|
*/
|
|
888
517
|
createConsolidationStub() {
|
|
889
518
|
return {
|