v3/implementation/adrs/ADR-053-agentdb-v3-controller-activation.md
Status: Implemented Date: 2026-02-25 Updated: 2026-02-25 Authors: RuvNet, Claude Flow Team Version: 1.3.0 Published: v3.1.0-alpha.51 Related: ADR-006 (Unified Memory), ADR-049 (Self-Learning Memory GNN), ADR-050 (Intelligence Loop), ADR-009 (Hybrid Memory Backend), ADR-060 (Proof-Gated Mutations)
Between issues #1207 and #1227, a systemic pattern has emerged: AgentDB v3 ships a rich controller ecosystem — 28 controllers (as of 3.0.0-alpha.7) covering self-learning, causal reasoning, episodic replay, explainable recall, proof-gated mutations, graph intelligence, skill promotion, and multi-armed bandit optimization — but the CLI runtime (@claude-flow/cli) instantiates none of them. The result is that powerful capabilities are available as dead exports while the runtime falls back to generic memory operations via memory-initializer.js.
AgentDB.ts (lines 114-152), 28 total exports (21 controllers + 7 security/services)better-sqlite3 (import crash from alpha.6 fixed)@claude-flow/memory upgraded from [email protected] to agentdb@^3.0.0-alpha.7The following capabilities are fully wired inside AgentDB and available to consumers via the AgentDB class:
1. Proof-Gated Mutations (ADR-060)
MutationGuard validates all inserts, searches, batch inserts, removes, saves, and loads@ruvector/graph-transformer (native NAPI-RS) → ruvector-graph-transformer-wasm → @ruvnet/ruvector-verified-wasm (legacy) → pure JS validationproveDimension() + createAttestation() when native availableAttestationLog: append-only SQLite audit table (mutation_attestations) with proof/denial tracking, pattern aggregation, and pruning2. GraphTransformerService (8 verified modules)
| Module | Purpose | Controller Integration |
|---|---|---|
sublinearAttention | O(n log n) attention | Replaces JS fallback in AttentionService |
verifiedStep | Verified SGD training | Extends LearningSystem |
causalAttention | Temporal-decay similarity | Extends CausalRecall |
grangerExtract | Time-series causal discovery | Edge detection for CausalMemoryGraph |
hamiltonianStep | Physics-informed trajectories | Agent trajectory optimization |
spikingAttention | Integrate-and-fire biological | Extends ReflexionMemory |
gameTheoreticAttention | Nash equilibrium routing | Multi-agent routing decisions |
productManifoldDistance | Weighted manifold distance | Extends ReasoningBank |
proveDimension(), createAttestation(), verifyAttestation()3. GuardedVectorBackend
RuVectorBackend (or HNSWLibBackend) with proof-gated access via MutationGuardcreateGuardedBackend('auto', config) factory auto-detects best available backendvectorBackend (set to null)4. Services Layer
| Service | Dependency | Fallback |
|---|---|---|
SemanticRouter | @ruvector/router | Keyword frequency matching |
SonaTrajectoryService | @ruvector/sona | In-memory trajectory storage + frequency-based prediction |
LLMRouter | API keys (OpenRouter/Gemini/Anthropic) | Local ONNX models or template-based |
GraphTransformerService | @ruvector/graph-transformer | JS math implementations |
5. AgentDB.ts Controller Wiring (lines 45-127)
initialize(): Dynamic import of better-sqlite3 with db-fallback.js sql.js fallbackschema.sql + frontier-schema.sql from dist/schemas/EmbeddingService: Xenova/all-MiniLM-L6-v2 (384-dim) auto-initializedGraphTransformerService: 8 modules auto-initializedcreateGuardedBackend('auto'): Proof-gated vector backend with MutationGuard + AttestationLogvectorBackend: ReflexionMemory, SkillLibrary, ReasoningBank, CausalMemoryGraph, CausalRecall, LearningSystem, ExplainableRecall, NightlyLearnerGraphDatabaseAdapter for persistent graph storagegetController(name) accessor with 14 named controller slotsMain entry (agentdb) — 42 exports:
| Category | Exports |
|---|---|
| Core class | AgentDB |
| Controllers (8) | ReasoningBank, SkillLibrary, ReflexionMemory, CausalMemoryGraph, CausalRecall, ExplainableRecall, NightlyLearner, LearningSystem |
| Embeddings (2) | EmbeddingService, EnhancedEmbeddingService |
| Vector (2) | WASMVectorSearch, HNSWIndex |
| Attention (1) | AttentionService |
| Search (3) | MMRDiversityRanker, MetadataFilter, ContextSynthesizer |
| Sync (3) | QUICServer, QUICClient, SyncCoordinator |
| Security (4) | MutationGuard, AttestationLog, GuardedVectorBackend, ProofDeniedError |
| Services (4) | SemanticRouter, SonaTrajectoryService, LLMRouter, GraphTransformerService |
| Optimizations (2) | BatchOperations, QueryOptimizer |
| Validation (4) | validateTableName, validateColumnName, validatePragmaCommand, ValidationError |
| SQL builders (2) | buildSafeWhereClause, buildSafeSetClause |
| Database (1) | createDatabase |
| Vector math (5) | cosineSimilarity, batchCosineSimilarity, distanceToSimilarity, serializeEmbedding, deserializeEmbedding |
| MCP (not exported) | agentdb-mcp-server, attention-mcp-integration, learning-tools-handlers, attention-tools-handlers |
| Coordination (not exported) | MultiDatabaseCoordinator |
Controllers barrel (agentdb/controllers) — 28 exports: All controllers + security + vector math (no AgentDB class, no services, no optimizations)
| Version | Key Change | Blocker Resolved |
|---|---|---|
| alpha.3 | Initial v3 release | ESM-only (CJS broken), empty default export, 4 controllers missing from barrel |
| alpha.4 | Native deps reintroduced | Regression: 33.4 MB, 22 deps |
| alpha.5 | Zero-native restored, proof-gated controllers | 3.5 MB, 4 deps, but 6 high-severity CVEs from sqlite3 in optionalDeps |
| alpha.6 | sqlite3 → peerDependencies | 0 CVEs, but import('agentdb') crashes without better-sqlite3 |
| alpha.7 | Dynamic import fallback, all 21 controllers activated | All clear: CJS+ESM, 0 CVEs, sql.js fallback, proof-gated mutations, 8 graph modules |
| Controller | AgentDB Export | CLI Instantiation | Gap Issue |
|---|---|---|---|
ReasoningBank | Yes | No | #1210 |
LearningBridge | Yes (via @claude-flow/memory) | No | #1213 |
MemoryGraph | Yes (via @claude-flow/memory) | No | #1214 |
SkillLibrary | Yes | No | #1215 |
ExplainableRecall | Yes | No | #1216 |
NightlyLearner | Yes | No | #1218 |
ReflexionMemory | Yes | No | #1221 |
CausalMemoryGraph | Yes | No | #1223 |
LearningSystem (9-RL) | Yes | No | #1224 |
TieredCacheManager | Yes (via @claude-flow/memory) | No | #1220 |
GuardedVectorBackend | Yes (since alpha.5) | No | — |
MutationGuard | Yes (since alpha.5) | No | — |
AttestationLog | Yes (since alpha.5) | No | — |
GraphTransformerService | Yes (since alpha.5) | No | — |
SemanticRouter | Yes (since alpha.5) | No | — |
SonaTrajectoryService | Yes (since alpha.5) | No | — |
AgentMemoryScope | Yes | No | #1227 |
Additionally, the HybridBackend facade (#1212) does not proxy new v3 methods (recordFeedback, verifyWitnessChain, getWitnessChain), and the hook handler (#1211) ignores stdin on Claude Code 2.x, making all hooks non-functional.
The v2→v3 migration was a package-level upgrade without a corresponding CLI integration pass. Each controller was implemented and exported in isolation, but no orchestration layer connects them to the MCP tools, hook handlers, or daemon workers that the CLI exposes.
Implement a phased controller activation plan organized by dependency order, with a central ControllerRegistry that manages lifecycle (init, health check, shutdown) for all AgentDB v3 controllers.
Priority: P0 — Blocks all other phases
| Work Item | Issues | Description |
|---|---|---|
| Eliminate dual memory system | — | Refactor CLI to use @claude-flow/memory → HybridBackend → AgentDB v3 instead of raw sql.js in memory-initializer.js. This is the single largest blocker. |
| Hook stdin fix | #1211 | Read JSON from stdin in hook-handler.cjs instead of environment variables. Without this, all hook-based wiring is non-functional. |
| Init hook config fix | #1230 | Remove invalid TaskCompleted/TeammateIdle keys from generated hook config that cause Claude Code settings warnings. |
| HybridBackend proxy | #1212 | Add recordFeedback(), verifyWitnessChain(), getWitnessChain() proxy methods to HybridBackend. |
| Config consumption | #1204 | Wire the 12 dead config.json keys into their respective runtime consumers. |
| Topology alignment | #1202, #1206 | Replace all 5 stale --topology hierarchical references with hierarchical-mesh. |
Priority: P1 — Enables the RETRIEVE→JUDGE→DISTILL→CONSOLIDATE pipeline
| Work Item | Issues | Description |
|---|---|---|
| ReasoningBank activation | #1210 | Instantiate in memory-initializer.js, route pattern-store/pattern-search hooks through it. |
| LearningBridge activation | #1213 | Instantiate with config keys (sonaMode, confidenceDecayRate, accessBoostAmount, consolidationThreshold). |
| SolverBandit integration | #1217 | Wire Thompson Sampling into hooks_route for adaptive agent selection. |
| HybridSearch (BM25) | #1219 | Replace hand-rolled String.includes() fallback with reciprocal rank fusion. |
| recordFeedback callers | #1209 | Add feedback recording to post-task hook on task success/failure. |
Priority: P2 — Rich memory features
| Work Item | Issues | Description |
|---|---|---|
| MemoryGraph activation | #1214 | Instantiate with PageRank, community detection, similarity edges. |
| ReflexionMemory | #1221 | Wire episodic replay into session start/end lifecycle. |
| CausalMemoryGraph | #1223 | Wire A/B experiment framework into post-task hooks. |
| NightlyLearner | #1218 | Wire into daemon consolidate worker for causal edge discovery. |
| WitnessChain callers | #1208 | Add verification calls to session-start and daemon health checks. |
Priority: P3 — Advanced agent capabilities
| Work Item | Issues | Description |
|---|---|---|
| SkillLibrary | #1215 | Instantiate Voyager-pattern skill promotion from high-reward trajectories. |
| ExplainableRecall | #1216 | Wire Merkle provenance certificates into search result metadata. |
| LearningSystem (9-RL) | #1224 | Instantiate and wire recommendAlgorithm() into route decisions. |
| FederatedSessionManager | #1222 | Wire LoRA cross-agent knowledge transfer into session lifecycle. |
| AgentMemoryScope | #1227 | Wire 3-scope isolation (project/local/user) into memory MCP handlers. |
| TieredCacheManager | #1220 | Wire 5-tier compression config into HybridBackend init. |
Priority: P3 — Cryptographic integrity & graph intelligence
All 6 controllers below are already activated inside AgentDB.ts (lines 102-152). The CLI work is exposing them through the ControllerRegistry and wiring them into hooks/MCP.
| Work Item | AgentDB Status | CLI Work Remaining |
|---|---|---|
| GuardedVectorBackend | Activated (wraps RuVectorBackend, SQL fallback) | Wire into HybridBackend as primary vector layer. |
| MutationGuard | Activated (4-tier: native→wasm→legacy-wasm→js) | Route all CLI memory mutations through guard. |
| AttestationLog | Activated (82-byte attestations when native available) | Expose attestation chain in session-start health checks. |
| GraphTransformerService | Activated (8 modules with JS fallbacks) | Wire into MemoryGraph for structural reasoning queries. |
| SemanticRouter | Activated | Replace hand-rolled routing in hooks_route. |
| SonaTrajectoryService | Activated | Replace LocalSonaCoordinator in intelligence.js. |
Priority: P3 — Explicit agent access
| Work Item | Issues | Description |
|---|---|---|
| Namespaced MCP tools | #1226 | Expose controller operations as agentdb_* MCP tools. |
| COW branching tool | #1225 | Expose RvfBackend.derive() as memory snapshot MCP tool. |
A central registry (replacing the current memory-initializer.js) that wraps the AgentDB class and adds CLI-specific controllers from @claude-flow/memory:
interface ControllerRegistry {
// Lifecycle
initialize(config: RuntimeConfig): Promise<void>;
shutdown(): Promise<void>;
healthCheck(): Promise<HealthReport>;
// Controller access
get<T>(name: ControllerName): T | null;
isEnabled(name: ControllerName): boolean;
// AgentDB instance (manages 14 internal controllers)
agentdb: AgentDB;
// CLI-layer controllers (from @claude-flow/memory, not in AgentDB)
controllers: Map<ControllerName, ControllerInstance>;
}
// Controllers accessible via AgentDB.getController()
type AgentDBControllerName =
| 'reasoningBank' | 'skills' | 'reflexion'
| 'causalGraph' | 'causalRecall'
| 'learningSystem' | 'explainableRecall' | 'nightlyLearner'
| 'graphTransformer' | 'mutationGuard' | 'attestationLog'
| 'vectorBackend' | 'graphAdapter';
// CLI-layer controllers (from @claude-flow/memory or new)
type CLIControllerName =
| 'learningBridge' | 'memoryGraph' | 'agentMemoryScope'
| 'tieredCache' | 'hybridSearch' | 'federatedSession'
| 'semanticRouter' | 'sonaTrajectory';
type ControllerName = AgentDBControllerName | CLIControllerName;
Controllers have dependencies that dictate initialization order:
Level 0: HybridBackend (already exists)
Level 1: ReasoningBank, LearningBridge, HybridSearch, TieredCache
Level 2: MemoryGraph, AgentMemoryScope, GuardedVectorBackend, MutationGuard
Level 3: SkillLibrary, ExplainableRecall, ReflexionMemory, AttestationLog
Level 4: CausalMemoryGraph, NightlyLearner, LearningSystem, SemanticRouter
Level 5: GraphTransformerService, SonaTrajectoryService (depend on graph + trajectories)
Level 6: FederatedSessionManager (depends on session lifecycle)
Each controller activation is wrapped in try/catch with fallback to the current behavior:
try {
const reasoningBank = new ReasoningBank(db, config);
registry.register('reasoningBank', reasoningBank);
} catch (err) {
logger.warn(`ReasoningBank unavailable: ${err.message}, using generic memory`);
}
This ensures that a failure in any single controller doesn't break the entire memory subsystem.
Each controller respects its config.json flags:
{
"memory": {
"enableHNSW": true,
"learningBridge": { "sonaMode": true, "confidenceDecayRate": 0.01 },
"memoryGraph": { "pageRankDamping": 0.85, "maxNodes": 10000 }
},
"neural": { "enabled": true, "modelPath": "./data/models" }
}
Controllers are only instantiated when their config section is present and enabled.
MutationGuard (4-tier fallback).AttestationLog provides append-only SQLite audit trail with denial pattern aggregation.GraphTransformerService modules for structural reasoning with JS fallbacks.SemanticRouter + gameTheoreticAttention for multi-agent decisions.SonaTrajectoryService replaces LocalSonaCoordinator with RL-backed prediction.init --wizard flow.^3.0.0-alpha.7 with verified test suite.This ADR acknowledges issue #1196 (beginner confusion from the paradox of choice). While the controller activation is internal plumbing, the UX problem is real. We recommend:
ruflo / claude-flow should auto-start MCP when needed.npx ruflo start "build me a todo app" command that handles everything.--advanced flags.This is tracked separately but noted here as the most valuable community feedback received.
Each phase gate requires:
The most critical integration gap is that the CLI (memory-initializer.js, 1929 lines) runs a self-contained SQLite memory system that duplicates what @claude-flow/memory + AgentDB already provides. Before wiring controllers, the CLI must be refactored to use @claude-flow/memory's HybridBackend as its storage layer instead of raw sql.js calls.
| Current (Broken) | Target |
|---|---|
CLI → memory-initializer.js → raw sql.js | CLI → @claude-flow/memory → HybridBackend → AgentDB v3 |
intelligence.js → local JSON files | intelligence.js → ReasoningBank + SonaTrajectoryService |
hooks-tools.js → storeEntry()/searchEntries() | hooks-tools.js → ControllerRegistry.get('reasoningBank') |
This consolidation eliminates ~1000 lines of duplicated SQLite/HNSW/embedding code from memory-initializer.js and routes all memory operations through the controller pipeline.
AgentDB class (recommended for full integration)The AgentDB class is the primary integration surface. It handles all initialization, fallback chains, schema loading, and controller wiring internally. The CLI's ControllerRegistry should wrap this class:
import { AgentDB } from 'agentdb';
const db = new AgentDB({ dbPath: './data/memory.db', dimension: 384 });
await db.initialize();
// Access controllers via getController()
const reasoning = db.getController('reasoningBank'); // ReasoningBank
const skills = db.getController('skills'); // SkillLibrary
const reflexion = db.getController('reflexion'); // ReflexionMemory
const causal = db.getController('causalGraph'); // CausalMemoryGraph
const learning = db.getController('learningSystem'); // LearningSystem
const explain = db.getController('explainableRecall');
const nightly = db.getController('nightlyLearner');
const graph = db.getController('graphTransformer');// GraphTransformerService
const guard = db.getController('mutationGuard'); // MutationGuard (or null)
const log = db.getController('attestationLog'); // AttestationLog (or null)
const vector = db.getController('vectorBackend'); // GuardedVectorBackend (or null)
await db.close();
// Controllers-only (lighter, no AgentDB class, no auto-init)
import { ReasoningBank, SkillLibrary } from 'agentdb/controllers';
// Services (not in controllers barrel — must use main entry)
import { SemanticRouter, SonaTrajectoryService, LLMRouter } from 'agentdb';
AgentDB.initialize()
→ try: import('better-sqlite3') // Native, fastest
→ catch: import('./db-fallback.js') // sql.js WASM, zero-native
createGuardedBackend('auto', config)
→ detectBackends()
→ try: import('ruvector') // Native + GNN + Graph
→ try: import('@ruvector/core') // Scoped native
→ try: import('hnswlib-node') // Node.js HNSW
→ throw: 'No vector backend available'
→ wrap with MutationGuard + AttestationLog
→ return GuardedVectorBackend
If the entire guarded backend creation fails, AgentDB.ts catches the error and sets vectorBackend = null. All 8 controllers still work without vector search — they degrade to SQL-only queries.
MutationGuard.initialize()
→ try: import('@ruvector/graph-transformer') // Native NAPI-RS (sub-ms proofs)
→ try: import('ruvector-graph-transformer-wasm') // Browser WASM
→ try: import('@ruvnet/ruvector-verified-wasm') // Legacy WASM
→ fallback: pure JS validation (no attestations, but validates dimensions/inputs)
The following modules exist in AgentDB but are not exported from the main entry or controllers barrel. They may be relevant for Phase 6 (MCP Surface):
| Module | Location | Purpose |
|---|---|---|
agentdb-mcp-server | mcp/ | MCP server exposing AgentDB tools |
attention-mcp-integration | mcp/ | Attention tools for MCP |
learning-tools-handlers | mcp/ | Learning tools for MCP |
attention-tools-handlers | mcp/ | Attention tools handlers |
MultiDatabaseCoordinator | coordination/ | Multi-DB coordination |
GraphDatabaseAdapter | backends/graph/ | Persistent graph storage (loaded dynamically in AgentDB.ts) |
The bridge pattern was implemented as memory-bridge.ts (858 lines) in @claude-flow/cli, routing CLI operations through ControllerRegistry → HybridBackend → AgentDB v3. This eliminates the dual memory system described in the "Prerequisite" section.
Files delivered:
| File | Lines | Purpose |
|---|---|---|
cli/src/memory/memory-bridge.ts | 858 | Bridge module: CRUD, embeddings, HNSW, controller access |
cli/src/memory/memory-initializer.ts | Modified | Bridge delegation (fallback to raw sql.js if bridge unavailable) |
cli/src/memory/intelligence.ts | Modified | Bridge embedder for recordStep/findSimilarPatterns |
memory/src/controller-registry.ts | 728 | ControllerRegistry with level-based init (0-6), graceful degradation |
memory/src/controller-registry.test.ts | New | Unit tests (352 passing) |
cli/src/commands/hooks.ts | Modified | Null-safety fix for intelligence stats SONA/MoE/HNSW display |
Verified capabilities (13 integration tests passing):
| Capability | Status | Details |
|---|---|---|
| ControllerRegistry init | OK | Singleton, cached across calls |
| AgentDB v3 instance | OK | alpha.7 loaded, 13 controllers |
| CRUD: Store | OK | Auto-generates 384d embedding on store |
| CRUD: Get | OK | Returns full entry with metadata |
| CRUD: Search | OK | Semantic cosine similarity + keyword fallback |
| CRUD: List | OK | Namespace-filtered listing |
| CRUD: Delete | OK | Checks changes > 0 (bug fix) |
| Embeddings | OK | 384d via Xenova/all-MiniLM-L6-v2 (AgentDB's EmbeddingService) |
| HNSW status | OK | Reports availability and dimensions |
| Controller access | OK | 7/7 named controllers accessible |
| Has controller | OK | Existence check via registry.get() |
| Bridge delegation | OK | memory-initializer falls through to bridge |
| Intelligence bridge | OK | intelligence.ts uses bridge embedder |
Regression check: 0 new failures. CLI: 445 passed (39 pre-existing failures). Memory: 352 passed (1 flaky benchmark).
| Phase | Status | Key Items |
|---|---|---|
| Phase 1 remainder | Not started | Hook stdin fix (#1211), HybridBackend proxy (#1212), config consumption (#1204), topology alignment (#1202, #1206) |
| Phase 2: Core Intelligence | Not started | ReasoningBank activation (#1210), LearningBridge (#1213), SolverBandit (#1217), BM25 HybridSearch (#1219), recordFeedback (#1209) |
| Phase 3: Graph & Episodic | Not started | MemoryGraph (#1214), ReflexionMemory (#1221), CausalMemoryGraph (#1223), NightlyLearner (#1218), WitnessChain (#1208) |
| Phase 4: Skill & Scope | Not started | SkillLibrary (#1215), ExplainableRecall (#1216), LearningSystem (#1224), FederatedSession (#1222), AgentMemoryScope (#1227), TieredCache (#1220) |
| Phase 5: Proof-Gated | Not started | GuardedVectorBackend, MutationGuard, AttestationLog, GraphTransformerService, SemanticRouter, SonaTrajectoryService wiring |
| Phase 6: MCP Surface | Not started | Namespaced agentdb_* MCP tools (#1226), COW branching (#1225) |
| Issue | Title | Status |
|---|---|---|
| #1207 | Dual memory system | Resolved — Bridge eliminates duplication, CLI routes through AgentDB v3 |
| #1210 | ReasoningBank not instantiated | Resolved — Instantiated and accessible via bridgeGetController('reasoningBank') |
| #1213 | LearningBridge not instantiated | Resolved — Accessible via ControllerRegistry |
| #1214 | MemoryGraph not instantiated | Resolved — Accessible via ControllerRegistry |
| #1215 | SkillLibrary not instantiated | Resolved — Accessible via bridgeGetController('skills') |
| #1216 | ExplainableRecall not instantiated | Resolved — Accessible via bridgeGetController('explainableRecall') |
| #1218 | NightlyLearner not instantiated | Resolved — Accessible via bridgeGetController('nightlyLearner') |
| #1221 | ReflexionMemory not instantiated | Resolved — Accessible via bridgeGetController('reflexion') |
| #1223 | CausalMemoryGraph not instantiated | Resolved — Accessible via bridgeGetController('causalGraph') |
| #1224 | LearningSystem not instantiated | Resolved — Accessible via bridgeGetController('learningSystem') |
| #1227 | AgentMemoryScope not wired | Resolved — Accessible via ControllerRegistry |
All 13 controllers are instantiated via AgentDB v3, registered in the ControllerRegistry, and accessible through the bridge. Embeddings are generated on every store operation. Semantic search uses cosine similarity over stored embeddings.
These are independent issues tracked separately:
| Issue | Title | Notes |
|---|---|---|
| #1211 | Hook stdin fix | Separate PR needed for hook-handler.cjs |
| #1212 | HybridBackend proxy methods | Future: add recordFeedback/verifyWitnessChain |
| #1204 | Config consumption | Future: wire 12 dead config keys |
Phases 2-6 describe deeper integration where specific CLI commands and hooks call controller-specific methods (e.g., post-task → reasoningBank.recordFeedback(), route → semanticRouter.route()). These are enhancements beyond the original "not instantiated" issues and are tracked as future work.
[email protected] (4 deps, 3.5MB, 0 CVEs, CJS+ESM, sql.js fallback)@claude-flow/memory: upgraded to agentdb@^3.0.0-alpha.7AgentDB.js, MutationGuard.js, AttestationLog.js, GuardedVectorBackend.js, factory.js, GraphTransformerService.js, SemanticRouter.js, SonaTrajectoryService.js, LLMRouter.js, index.js, controllers/index.js