agentic-flow 2.0.1-alpha.12 → 2.0.1-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.
@@ -0,0 +1,364 @@
1
+ /**
2
+ * IntelligenceStore - SQLite persistence for RuVector intelligence layer
3
+ *
4
+ * Cross-platform (Linux, macOS, Windows) persistent storage for:
5
+ * - Learning trajectories
6
+ * - Routing patterns
7
+ * - SONA adaptations
8
+ * - HNSW vectors
9
+ */
10
+ import Database from 'better-sqlite3';
11
+ import { existsSync, mkdirSync } from 'fs';
12
+ import { dirname, join } from 'path';
13
+ import { homedir } from 'os';
14
+ export class IntelligenceStore {
15
+ db;
16
+ static instance = null;
17
+ constructor(dbPath) {
18
+ // Ensure directory exists
19
+ const dir = dirname(dbPath);
20
+ if (!existsSync(dir)) {
21
+ mkdirSync(dir, { recursive: true });
22
+ }
23
+ this.db = new Database(dbPath);
24
+ this.db.pragma('journal_mode = WAL'); // Better concurrent access
25
+ this.db.pragma('synchronous = NORMAL'); // Good balance of speed/safety
26
+ this.initSchema();
27
+ }
28
+ /**
29
+ * Get singleton instance
30
+ */
31
+ static getInstance(dbPath) {
32
+ if (!IntelligenceStore.instance) {
33
+ const path = dbPath || IntelligenceStore.getDefaultPath();
34
+ IntelligenceStore.instance = new IntelligenceStore(path);
35
+ }
36
+ return IntelligenceStore.instance;
37
+ }
38
+ /**
39
+ * Get default database path (cross-platform)
40
+ */
41
+ static getDefaultPath() {
42
+ // Check for project-local .agentic-flow directory first
43
+ const localPath = join(process.cwd(), '.agentic-flow', 'intelligence.db');
44
+ const localDir = dirname(localPath);
45
+ if (existsSync(localDir)) {
46
+ return localPath;
47
+ }
48
+ // Fall back to home directory
49
+ const homeDir = homedir();
50
+ return join(homeDir, '.agentic-flow', 'intelligence.db');
51
+ }
52
+ /**
53
+ * Initialize database schema
54
+ */
55
+ initSchema() {
56
+ this.db.exec(`
57
+ -- Trajectories table
58
+ CREATE TABLE IF NOT EXISTS trajectories (
59
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
60
+ task_description TEXT NOT NULL,
61
+ agent TEXT NOT NULL,
62
+ steps INTEGER DEFAULT 0,
63
+ outcome TEXT DEFAULT 'partial',
64
+ start_time INTEGER NOT NULL,
65
+ end_time INTEGER,
66
+ metadata TEXT,
67
+ created_at INTEGER DEFAULT (strftime('%s', 'now'))
68
+ );
69
+
70
+ -- Patterns table (for ReasoningBank)
71
+ CREATE TABLE IF NOT EXISTS patterns (
72
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
73
+ task_type TEXT NOT NULL,
74
+ approach TEXT NOT NULL,
75
+ embedding BLOB,
76
+ similarity REAL DEFAULT 0,
77
+ usage_count INTEGER DEFAULT 0,
78
+ success_rate REAL DEFAULT 0,
79
+ created_at INTEGER DEFAULT (strftime('%s', 'now')),
80
+ updated_at INTEGER DEFAULT (strftime('%s', 'now'))
81
+ );
82
+
83
+ -- Routings table
84
+ CREATE TABLE IF NOT EXISTS routings (
85
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
86
+ task TEXT NOT NULL,
87
+ recommended_agent TEXT NOT NULL,
88
+ confidence REAL NOT NULL,
89
+ latency_ms INTEGER NOT NULL,
90
+ was_successful INTEGER DEFAULT 0,
91
+ timestamp INTEGER DEFAULT (strftime('%s', 'now'))
92
+ );
93
+
94
+ -- Stats table (single row)
95
+ CREATE TABLE IF NOT EXISTS stats (
96
+ id INTEGER PRIMARY KEY CHECK (id = 1),
97
+ total_trajectories INTEGER DEFAULT 0,
98
+ successful_trajectories INTEGER DEFAULT 0,
99
+ total_routings INTEGER DEFAULT 0,
100
+ successful_routings INTEGER DEFAULT 0,
101
+ total_patterns INTEGER DEFAULT 0,
102
+ sona_adaptations INTEGER DEFAULT 0,
103
+ hnsw_queries INTEGER DEFAULT 0,
104
+ last_updated INTEGER DEFAULT (strftime('%s', 'now'))
105
+ );
106
+
107
+ -- Initialize stats row if not exists
108
+ INSERT OR IGNORE INTO stats (id) VALUES (1);
109
+
110
+ -- Indexes for faster queries
111
+ CREATE INDEX IF NOT EXISTS idx_trajectories_agent ON trajectories(agent);
112
+ CREATE INDEX IF NOT EXISTS idx_trajectories_outcome ON trajectories(outcome);
113
+ CREATE INDEX IF NOT EXISTS idx_patterns_task_type ON patterns(task_type);
114
+ CREATE INDEX IF NOT EXISTS idx_routings_agent ON routings(recommended_agent);
115
+ CREATE INDEX IF NOT EXISTS idx_routings_timestamp ON routings(timestamp);
116
+ `);
117
+ }
118
+ // ============ Trajectory Methods ============
119
+ /**
120
+ * Start a new trajectory
121
+ */
122
+ startTrajectory(taskDescription, agent) {
123
+ const stmt = this.db.prepare(`
124
+ INSERT INTO trajectories (task_description, agent, start_time)
125
+ VALUES (?, ?, ?)
126
+ `);
127
+ const result = stmt.run(taskDescription, agent, Date.now());
128
+ this.incrementStat('total_trajectories');
129
+ return result.lastInsertRowid;
130
+ }
131
+ /**
132
+ * Add step to trajectory
133
+ */
134
+ addTrajectoryStep(trajectoryId) {
135
+ const stmt = this.db.prepare(`
136
+ UPDATE trajectories SET steps = steps + 1 WHERE id = ?
137
+ `);
138
+ stmt.run(trajectoryId);
139
+ }
140
+ /**
141
+ * End trajectory with outcome
142
+ */
143
+ endTrajectory(trajectoryId, outcome, metadata) {
144
+ const stmt = this.db.prepare(`
145
+ UPDATE trajectories
146
+ SET outcome = ?, end_time = ?, metadata = ?
147
+ WHERE id = ?
148
+ `);
149
+ stmt.run(outcome, Date.now(), metadata ? JSON.stringify(metadata) : null, trajectoryId);
150
+ if (outcome === 'success') {
151
+ this.incrementStat('successful_trajectories');
152
+ }
153
+ }
154
+ /**
155
+ * Get active trajectories (no end_time)
156
+ */
157
+ getActiveTrajectories() {
158
+ const stmt = this.db.prepare(`
159
+ SELECT * FROM trajectories WHERE end_time IS NULL
160
+ `);
161
+ return stmt.all();
162
+ }
163
+ /**
164
+ * Get recent trajectories
165
+ */
166
+ getRecentTrajectories(limit = 10) {
167
+ const stmt = this.db.prepare(`
168
+ SELECT * FROM trajectories ORDER BY start_time DESC LIMIT ?
169
+ `);
170
+ return stmt.all(limit);
171
+ }
172
+ // ============ Pattern Methods ============
173
+ /**
174
+ * Store a pattern
175
+ */
176
+ storePattern(taskType, approach, embedding) {
177
+ const stmt = this.db.prepare(`
178
+ INSERT INTO patterns (task_type, approach, embedding)
179
+ VALUES (?, ?, ?)
180
+ `);
181
+ const embeddingBuffer = embedding ? Buffer.from(embedding.buffer) : null;
182
+ const result = stmt.run(taskType, approach, embeddingBuffer);
183
+ this.incrementStat('total_patterns');
184
+ return result.lastInsertRowid;
185
+ }
186
+ /**
187
+ * Update pattern usage
188
+ */
189
+ updatePatternUsage(patternId, wasSuccessful) {
190
+ const stmt = this.db.prepare(`
191
+ UPDATE patterns
192
+ SET usage_count = usage_count + 1,
193
+ success_rate = (success_rate * usage_count + ?) / (usage_count + 1),
194
+ updated_at = strftime('%s', 'now')
195
+ WHERE id = ?
196
+ `);
197
+ stmt.run(wasSuccessful ? 1 : 0, patternId);
198
+ }
199
+ /**
200
+ * Find patterns by task type
201
+ */
202
+ findPatterns(taskType, limit = 5) {
203
+ const stmt = this.db.prepare(`
204
+ SELECT * FROM patterns
205
+ WHERE task_type LIKE ?
206
+ ORDER BY success_rate DESC, usage_count DESC
207
+ LIMIT ?
208
+ `);
209
+ return stmt.all(`%${taskType}%`, limit);
210
+ }
211
+ // ============ Routing Methods ============
212
+ /**
213
+ * Record a routing decision
214
+ */
215
+ recordRouting(task, recommendedAgent, confidence, latencyMs) {
216
+ const stmt = this.db.prepare(`
217
+ INSERT INTO routings (task, recommended_agent, confidence, latency_ms)
218
+ VALUES (?, ?, ?, ?)
219
+ `);
220
+ const result = stmt.run(task, recommendedAgent, confidence, latencyMs);
221
+ this.incrementStat('total_routings');
222
+ return result.lastInsertRowid;
223
+ }
224
+ /**
225
+ * Update routing outcome
226
+ */
227
+ updateRoutingOutcome(routingId, wasSuccessful) {
228
+ const stmt = this.db.prepare(`
229
+ UPDATE routings SET was_successful = ? WHERE id = ?
230
+ `);
231
+ stmt.run(wasSuccessful ? 1 : 0, routingId);
232
+ if (wasSuccessful) {
233
+ this.incrementStat('successful_routings');
234
+ }
235
+ }
236
+ /**
237
+ * Get routing accuracy for an agent
238
+ */
239
+ getAgentAccuracy(agent) {
240
+ const stmt = this.db.prepare(`
241
+ SELECT
242
+ COUNT(*) as total,
243
+ SUM(was_successful) as successful
244
+ FROM routings
245
+ WHERE recommended_agent = ?
246
+ `);
247
+ const result = stmt.get(agent);
248
+ return {
249
+ total: result.total || 0,
250
+ successful: result.successful || 0,
251
+ accuracy: result.total > 0 ? (result.successful || 0) / result.total : 0,
252
+ };
253
+ }
254
+ // ============ Stats Methods ============
255
+ /**
256
+ * Get all stats
257
+ */
258
+ getStats() {
259
+ const stmt = this.db.prepare(`SELECT * FROM stats WHERE id = 1`);
260
+ const row = stmt.get();
261
+ return {
262
+ totalTrajectories: row?.total_trajectories || 0,
263
+ successfulTrajectories: row?.successful_trajectories || 0,
264
+ totalRoutings: row?.total_routings || 0,
265
+ successfulRoutings: row?.successful_routings || 0,
266
+ totalPatterns: row?.total_patterns || 0,
267
+ sonaAdaptations: row?.sona_adaptations || 0,
268
+ hnswQueries: row?.hnsw_queries || 0,
269
+ lastUpdated: row?.last_updated || Date.now(),
270
+ };
271
+ }
272
+ /**
273
+ * Increment a stat counter
274
+ */
275
+ incrementStat(statName, amount = 1) {
276
+ const stmt = this.db.prepare(`
277
+ UPDATE stats SET ${statName} = ${statName} + ?, last_updated = strftime('%s', 'now')
278
+ WHERE id = 1
279
+ `);
280
+ stmt.run(amount);
281
+ }
282
+ /**
283
+ * Record SONA adaptation
284
+ */
285
+ recordSonaAdaptation() {
286
+ this.incrementStat('sona_adaptations');
287
+ }
288
+ /**
289
+ * Record HNSW query
290
+ */
291
+ recordHnswQuery() {
292
+ this.incrementStat('hnsw_queries');
293
+ }
294
+ // ============ Utility Methods ============
295
+ /**
296
+ * Get summary for display (simplified for UI)
297
+ */
298
+ getSummary() {
299
+ const stats = this.getStats();
300
+ return {
301
+ trajectories: stats.totalTrajectories,
302
+ routings: stats.totalRoutings,
303
+ patterns: stats.totalPatterns,
304
+ operations: stats.sonaAdaptations + stats.hnswQueries,
305
+ };
306
+ }
307
+ /**
308
+ * Get detailed summary for reports
309
+ */
310
+ getDetailedSummary() {
311
+ const stats = this.getStats();
312
+ const activeCount = this.getActiveTrajectories().length;
313
+ return {
314
+ trajectories: {
315
+ total: stats.totalTrajectories,
316
+ active: activeCount,
317
+ successful: stats.successfulTrajectories,
318
+ },
319
+ routings: {
320
+ total: stats.totalRoutings,
321
+ accuracy: stats.totalRoutings > 0
322
+ ? stats.successfulRoutings / stats.totalRoutings
323
+ : 0,
324
+ },
325
+ patterns: stats.totalPatterns,
326
+ operations: {
327
+ sona: stats.sonaAdaptations,
328
+ hnsw: stats.hnswQueries,
329
+ },
330
+ };
331
+ }
332
+ /**
333
+ * Close database connection
334
+ */
335
+ close() {
336
+ this.db.close();
337
+ IntelligenceStore.instance = null;
338
+ }
339
+ /**
340
+ * Reset all data (for testing)
341
+ */
342
+ reset() {
343
+ this.db.exec(`
344
+ DELETE FROM trajectories;
345
+ DELETE FROM patterns;
346
+ DELETE FROM routings;
347
+ UPDATE stats SET
348
+ total_trajectories = 0,
349
+ successful_trajectories = 0,
350
+ total_routings = 0,
351
+ successful_routings = 0,
352
+ total_patterns = 0,
353
+ sona_adaptations = 0,
354
+ hnsw_queries = 0,
355
+ last_updated = strftime('%s', 'now')
356
+ WHERE id = 1;
357
+ `);
358
+ }
359
+ }
360
+ // Export singleton getter
361
+ export function getIntelligenceStore(dbPath) {
362
+ return IntelligenceStore.getInstance(dbPath);
363
+ }
364
+ //# sourceMappingURL=IntelligenceStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntelligenceStore.js","sourceRoot":"","sources":["../../src/intelligence/IntelligenceStore.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * IntelligenceStore - SQLite persistence for RuVector intelligence layer\n *\n * Cross-platform (Linux, macOS, Windows) persistent storage for:\n * - Learning trajectories\n * - Routing patterns\n * - SONA adaptations\n * - HNSW vectors\n */\n\nimport Database from 'better-sqlite3';\nimport { existsSync, mkdirSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { homedir } from 'os';\n\nexport interface StoredTrajectory {\n id: number;\n taskDescription: string;\n agent: string;\n steps: number;\n outcome: 'success' | 'failure' | 'partial';\n startTime: number;\n endTime: number;\n metadata?: string; // JSON\n}\n\nexport interface StoredPattern {\n id: number;\n taskType: string;\n approach: string;\n embedding: Buffer; // Float32Array as Buffer\n similarity: number;\n usageCount: number;\n successRate: number;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface StoredRouting {\n id: number;\n task: string;\n recommendedAgent: string;\n confidence: number;\n latencyMs: number;\n wasSuccessful: boolean;\n timestamp: number;\n}\n\nexport interface LearningStats {\n totalTrajectories: number;\n successfulTrajectories: number;\n totalRoutings: number;\n successfulRoutings: number;\n totalPatterns: number;\n sonaAdaptations: number;\n hnswQueries: number;\n lastUpdated: number;\n}\n\nexport class IntelligenceStore {\n private db: Database.Database;\n private static instance: IntelligenceStore | null = null;\n\n private constructor(dbPath: string) {\n // Ensure directory exists\n const dir = dirname(dbPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n this.db = new Database(dbPath);\n this.db.pragma('journal_mode = WAL'); // Better concurrent access\n this.db.pragma('synchronous = NORMAL'); // Good balance of speed/safety\n\n this.initSchema();\n }\n\n /**\n * Get singleton instance\n */\n static getInstance(dbPath?: string): IntelligenceStore {\n if (!IntelligenceStore.instance) {\n const path = dbPath || IntelligenceStore.getDefaultPath();\n IntelligenceStore.instance = new IntelligenceStore(path);\n }\n return IntelligenceStore.instance;\n }\n\n /**\n * Get default database path (cross-platform)\n */\n static getDefaultPath(): string {\n // Check for project-local .agentic-flow directory first\n const localPath = join(process.cwd(), '.agentic-flow', 'intelligence.db');\n const localDir = dirname(localPath);\n\n if (existsSync(localDir)) {\n return localPath;\n }\n\n // Fall back to home directory\n const homeDir = homedir();\n return join(homeDir, '.agentic-flow', 'intelligence.db');\n }\n\n /**\n * Initialize database schema\n */\n private initSchema(): void {\n this.db.exec(`\n -- Trajectories table\n CREATE TABLE IF NOT EXISTS trajectories (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_description TEXT NOT NULL,\n agent TEXT NOT NULL,\n steps INTEGER DEFAULT 0,\n outcome TEXT DEFAULT 'partial',\n start_time INTEGER NOT NULL,\n end_time INTEGER,\n metadata TEXT,\n created_at INTEGER DEFAULT (strftime('%s', 'now'))\n );\n\n -- Patterns table (for ReasoningBank)\n CREATE TABLE IF NOT EXISTS patterns (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task_type TEXT NOT NULL,\n approach TEXT NOT NULL,\n embedding BLOB,\n similarity REAL DEFAULT 0,\n usage_count INTEGER DEFAULT 0,\n success_rate REAL DEFAULT 0,\n created_at INTEGER DEFAULT (strftime('%s', 'now')),\n updated_at INTEGER DEFAULT (strftime('%s', 'now'))\n );\n\n -- Routings table\n CREATE TABLE IF NOT EXISTS routings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n task TEXT NOT NULL,\n recommended_agent TEXT NOT NULL,\n confidence REAL NOT NULL,\n latency_ms INTEGER NOT NULL,\n was_successful INTEGER DEFAULT 0,\n timestamp INTEGER DEFAULT (strftime('%s', 'now'))\n );\n\n -- Stats table (single row)\n CREATE TABLE IF NOT EXISTS stats (\n id INTEGER PRIMARY KEY CHECK (id = 1),\n total_trajectories INTEGER DEFAULT 0,\n successful_trajectories INTEGER DEFAULT 0,\n total_routings INTEGER DEFAULT 0,\n successful_routings INTEGER DEFAULT 0,\n total_patterns INTEGER DEFAULT 0,\n sona_adaptations INTEGER DEFAULT 0,\n hnsw_queries INTEGER DEFAULT 0,\n last_updated INTEGER DEFAULT (strftime('%s', 'now'))\n );\n\n -- Initialize stats row if not exists\n INSERT OR IGNORE INTO stats (id) VALUES (1);\n\n -- Indexes for faster queries\n CREATE INDEX IF NOT EXISTS idx_trajectories_agent ON trajectories(agent);\n CREATE INDEX IF NOT EXISTS idx_trajectories_outcome ON trajectories(outcome);\n CREATE INDEX IF NOT EXISTS idx_patterns_task_type ON patterns(task_type);\n CREATE INDEX IF NOT EXISTS idx_routings_agent ON routings(recommended_agent);\n CREATE INDEX IF NOT EXISTS idx_routings_timestamp ON routings(timestamp);\n `);\n }\n\n // ============ Trajectory Methods ============\n\n /**\n * Start a new trajectory\n */\n startTrajectory(taskDescription: string, agent: string): number {\n const stmt = this.db.prepare(`\n INSERT INTO trajectories (task_description, agent, start_time)\n VALUES (?, ?, ?)\n `);\n const result = stmt.run(taskDescription, agent, Date.now());\n\n this.incrementStat('total_trajectories');\n\n return result.lastInsertRowid as number;\n }\n\n /**\n * Add step to trajectory\n */\n addTrajectoryStep(trajectoryId: number): void {\n const stmt = this.db.prepare(`\n UPDATE trajectories SET steps = steps + 1 WHERE id = ?\n `);\n stmt.run(trajectoryId);\n }\n\n /**\n * End trajectory with outcome\n */\n endTrajectory(trajectoryId: number, outcome: 'success' | 'failure' | 'partial', metadata?: Record<string, any>): void {\n const stmt = this.db.prepare(`\n UPDATE trajectories\n SET outcome = ?, end_time = ?, metadata = ?\n WHERE id = ?\n `);\n stmt.run(outcome, Date.now(), metadata ? JSON.stringify(metadata) : null, trajectoryId);\n\n if (outcome === 'success') {\n this.incrementStat('successful_trajectories');\n }\n }\n\n /**\n * Get active trajectories (no end_time)\n */\n getActiveTrajectories(): StoredTrajectory[] {\n const stmt = this.db.prepare(`\n SELECT * FROM trajectories WHERE end_time IS NULL\n `);\n return stmt.all() as StoredTrajectory[];\n }\n\n /**\n * Get recent trajectories\n */\n getRecentTrajectories(limit: number = 10): StoredTrajectory[] {\n const stmt = this.db.prepare(`\n SELECT * FROM trajectories ORDER BY start_time DESC LIMIT ?\n `);\n return stmt.all(limit) as StoredTrajectory[];\n }\n\n // ============ Pattern Methods ============\n\n /**\n * Store a pattern\n */\n storePattern(taskType: string, approach: string, embedding?: Float32Array): number {\n const stmt = this.db.prepare(`\n INSERT INTO patterns (task_type, approach, embedding)\n VALUES (?, ?, ?)\n `);\n const embeddingBuffer = embedding ? Buffer.from(embedding.buffer) : null;\n const result = stmt.run(taskType, approach, embeddingBuffer);\n\n this.incrementStat('total_patterns');\n\n return result.lastInsertRowid as number;\n }\n\n /**\n * Update pattern usage\n */\n updatePatternUsage(patternId: number, wasSuccessful: boolean): void {\n const stmt = this.db.prepare(`\n UPDATE patterns\n SET usage_count = usage_count + 1,\n success_rate = (success_rate * usage_count + ?) / (usage_count + 1),\n updated_at = strftime('%s', 'now')\n WHERE id = ?\n `);\n stmt.run(wasSuccessful ? 1 : 0, patternId);\n }\n\n /**\n * Find patterns by task type\n */\n findPatterns(taskType: string, limit: number = 5): StoredPattern[] {\n const stmt = this.db.prepare(`\n SELECT * FROM patterns\n WHERE task_type LIKE ?\n ORDER BY success_rate DESC, usage_count DESC\n LIMIT ?\n `);\n return stmt.all(`%${taskType}%`, limit) as StoredPattern[];\n }\n\n // ============ Routing Methods ============\n\n /**\n * Record a routing decision\n */\n recordRouting(task: string, recommendedAgent: string, confidence: number, latencyMs: number): number {\n const stmt = this.db.prepare(`\n INSERT INTO routings (task, recommended_agent, confidence, latency_ms)\n VALUES (?, ?, ?, ?)\n `);\n const result = stmt.run(task, recommendedAgent, confidence, latencyMs);\n\n this.incrementStat('total_routings');\n\n return result.lastInsertRowid as number;\n }\n\n /**\n * Update routing outcome\n */\n updateRoutingOutcome(routingId: number, wasSuccessful: boolean): void {\n const stmt = this.db.prepare(`\n UPDATE routings SET was_successful = ? WHERE id = ?\n `);\n stmt.run(wasSuccessful ? 1 : 0, routingId);\n\n if (wasSuccessful) {\n this.incrementStat('successful_routings');\n }\n }\n\n /**\n * Get routing accuracy for an agent\n */\n getAgentAccuracy(agent: string): { total: number; successful: number; accuracy: number } {\n const stmt = this.db.prepare(`\n SELECT\n COUNT(*) as total,\n SUM(was_successful) as successful\n FROM routings\n WHERE recommended_agent = ?\n `);\n const result = stmt.get(agent) as { total: number; successful: number };\n return {\n total: result.total || 0,\n successful: result.successful || 0,\n accuracy: result.total > 0 ? (result.successful || 0) / result.total : 0,\n };\n }\n\n // ============ Stats Methods ============\n\n /**\n * Get all stats\n */\n getStats(): LearningStats {\n const stmt = this.db.prepare(`SELECT * FROM stats WHERE id = 1`);\n const row = stmt.get() as any;\n\n return {\n totalTrajectories: row?.total_trajectories || 0,\n successfulTrajectories: row?.successful_trajectories || 0,\n totalRoutings: row?.total_routings || 0,\n successfulRoutings: row?.successful_routings || 0,\n totalPatterns: row?.total_patterns || 0,\n sonaAdaptations: row?.sona_adaptations || 0,\n hnswQueries: row?.hnsw_queries || 0,\n lastUpdated: row?.last_updated || Date.now(),\n };\n }\n\n /**\n * Increment a stat counter\n */\n incrementStat(statName: string, amount: number = 1): void {\n const stmt = this.db.prepare(`\n UPDATE stats SET ${statName} = ${statName} + ?, last_updated = strftime('%s', 'now')\n WHERE id = 1\n `);\n stmt.run(amount);\n }\n\n /**\n * Record SONA adaptation\n */\n recordSonaAdaptation(): void {\n this.incrementStat('sona_adaptations');\n }\n\n /**\n * Record HNSW query\n */\n recordHnswQuery(): void {\n this.incrementStat('hnsw_queries');\n }\n\n // ============ Utility Methods ============\n\n /**\n * Get summary for display (simplified for UI)\n */\n getSummary(): {\n trajectories: number;\n routings: number;\n patterns: number;\n operations: number;\n } {\n const stats = this.getStats();\n\n return {\n trajectories: stats.totalTrajectories,\n routings: stats.totalRoutings,\n patterns: stats.totalPatterns,\n operations: stats.sonaAdaptations + stats.hnswQueries,\n };\n }\n\n /**\n * Get detailed summary for reports\n */\n getDetailedSummary(): {\n trajectories: { total: number; active: number; successful: number };\n routings: { total: number; accuracy: number };\n patterns: number;\n operations: { sona: number; hnsw: number };\n } {\n const stats = this.getStats();\n const activeCount = this.getActiveTrajectories().length;\n\n return {\n trajectories: {\n total: stats.totalTrajectories,\n active: activeCount,\n successful: stats.successfulTrajectories,\n },\n routings: {\n total: stats.totalRoutings,\n accuracy: stats.totalRoutings > 0\n ? stats.successfulRoutings / stats.totalRoutings\n : 0,\n },\n patterns: stats.totalPatterns,\n operations: {\n sona: stats.sonaAdaptations,\n hnsw: stats.hnswQueries,\n },\n };\n }\n\n /**\n * Close database connection\n */\n close(): void {\n this.db.close();\n IntelligenceStore.instance = null;\n }\n\n /**\n * Reset all data (for testing)\n */\n reset(): void {\n this.db.exec(`\n DELETE FROM trajectories;\n DELETE FROM patterns;\n DELETE FROM routings;\n UPDATE stats SET\n total_trajectories = 0,\n successful_trajectories = 0,\n total_routings = 0,\n successful_routings = 0,\n total_patterns = 0,\n sona_adaptations = 0,\n hnsw_queries = 0,\n last_updated = strftime('%s', 'now')\n WHERE id = 1;\n `);\n }\n}\n\n// Export singleton getter\nexport function getIntelligenceStore(dbPath?: string): IntelligenceStore {\n return IntelligenceStore.getInstance(dbPath);\n}\n"]}
@@ -5,8 +5,15 @@
5
5
  * - @ruvector/sona: Micro-LoRA, EWC++, ReasoningBank, Trajectories
6
6
  * - @ruvector/attention: MoE, Flash, Hyperbolic, Graph attention
7
7
  * - ruvector core: HNSW indexing (150x faster search)
8
+ *
9
+ * Persistence: SQLite-based storage for cross-platform compatibility
8
10
  */
9
11
  import { RuVectorIntelligence, type AgentRoutingResult, type Trajectory, type LearningOutcome } from '../../../../intelligence/index.js';
12
+ import { type IntelligenceStore } from '../../../../intelligence/IntelligenceStore.js';
13
+ /**
14
+ * Get the SQLite store singleton
15
+ */
16
+ export declare function getStore(): IntelligenceStore;
10
17
  /**
11
18
  * Get or create the RuVectorIntelligence singleton
12
19
  */
@@ -78,6 +85,12 @@ export declare function getIntelligenceStats(): Promise<{
78
85
  trajectoryCount: number;
79
86
  activeTrajectories: number;
80
87
  learningEnabled: boolean;
88
+ persistedStats?: {
89
+ trajectories: number;
90
+ routings: number;
91
+ patterns: number;
92
+ operations: number;
93
+ };
81
94
  }>;
82
95
  /**
83
96
  * Force a learning cycle (useful for batch learning)
@@ -1 +1 @@
1
- {"version":3,"file":"intelligence-bridge.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/intelligence-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,oBAAoB,EAGpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,mCAAmC,CAAC;AAyC3C;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAWrE;AA6CD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,CAyCD;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BrE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GACA,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,MAAY,GACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAejC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAU,GACf,OAAO,CAAC,KAAK,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC,CAkBF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC;IACpD,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC,CAoBD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAG1D;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,YAAY,EAAE,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC,CAOnB;AAGD,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"intelligence-bridge.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/intelligence-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,oBAAoB,EAGpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAwB,KAAK,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAoB7G;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAK5C;AAyBD;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAWrE;AA6CD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,kBAAkB,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,CAkDD;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiCrE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GACA,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,MAAY,GACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAoBjC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAU,GACf,OAAO,CAAC,KAAK,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC,CAkBF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC;IACpD,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC,CAyBD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAG1D;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,YAAY,EAAE,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC,CAOnB;AAGD,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC"}
@@ -5,16 +5,29 @@
5
5
  * - @ruvector/sona: Micro-LoRA, EWC++, ReasoningBank, Trajectories
6
6
  * - @ruvector/attention: MoE, Flash, Hyperbolic, Graph attention
7
7
  * - ruvector core: HNSW indexing (150x faster search)
8
+ *
9
+ * Persistence: SQLite-based storage for cross-platform compatibility
8
10
  */
9
11
  import { createIntelligenceLayer, IntelligencePresets, } from '../../../../intelligence/index.js';
10
- // Singleton instance
12
+ import { getIntelligenceStore } from '../../../../intelligence/IntelligenceStore.js';
13
+ // Singleton instances
11
14
  let intelligenceInstance = null;
15
+ let storeInstance = null;
12
16
  let initPromise = null;
13
17
  // Consistent dimension for SONA (must match hiddenDim = embeddingDim)
14
18
  // Using 128 for ultra-fast performance (~0.05ms per operation)
15
19
  const INTELLIGENCE_DIM = 128;
16
- // Active trajectories (trajectoryId -> metadata)
20
+ // Active trajectories in memory (for fast access, backed by SQLite)
17
21
  const activeTrajectories = new Map();
22
+ /**
23
+ * Get the SQLite store singleton
24
+ */
25
+ export function getStore() {
26
+ if (!storeInstance) {
27
+ storeInstance = getIntelligenceStore();
28
+ }
29
+ return storeInstance;
30
+ }
18
31
  // Simple embedding function (hash-based for speed)
19
32
  function simpleEmbed(text, dim = INTELLIGENCE_DIM) {
20
33
  const embedding = new Array(dim).fill(0);
@@ -123,6 +136,9 @@ export async function routeTaskIntelligent(task, context) {
123
136
  usedSona: false,
124
137
  };
125
138
  const latencyMs = performance.now() - startTime;
139
+ // Record routing in SQLite for persistence
140
+ const store = getStore();
141
+ store.recordRouting(task, bestResult.agentId, Math.min(0.95, bestResult.confidence), Math.round(latencyMs));
126
142
  return {
127
143
  agent: bestResult.agentId,
128
144
  confidence: Math.min(0.95, bestResult.confidence),
@@ -142,6 +158,7 @@ export async function routeTaskIntelligent(task, context) {
142
158
  */
143
159
  export async function beginTaskTrajectory(task, agent) {
144
160
  const intelligence = await getIntelligence();
161
+ const store = getStore();
145
162
  // Get task embedding
146
163
  const embedding = simpleEmbed(task);
147
164
  // Start trajectory in SONA
@@ -154,12 +171,15 @@ export async function beginTaskTrajectory(task, agent) {
154
171
  };
155
172
  }
156
173
  const trajectoryId = result.value;
157
- // Track metadata
174
+ // Persist to SQLite
175
+ const dbId = store.startTrajectory(task, agent);
176
+ // Track metadata in memory (for fast access)
158
177
  activeTrajectories.set(trajectoryId, {
159
178
  taskDescription: task,
160
179
  startTime: Date.now(),
161
180
  agent,
162
181
  steps: 0,
182
+ dbId,
163
183
  });
164
184
  return { trajectoryId, success: true };
165
185
  }
@@ -168,9 +188,12 @@ export async function beginTaskTrajectory(task, agent) {
168
188
  */
169
189
  export async function recordTrajectoryStep(trajectoryId, action, reward, context) {
170
190
  const intelligence = await getIntelligence();
191
+ const store = getStore();
171
192
  const meta = activeTrajectories.get(trajectoryId);
172
193
  if (meta) {
173
194
  meta.steps++;
195
+ // Persist step to SQLite
196
+ store.addTrajectoryStep(meta.dbId);
174
197
  // Generate activations from context
175
198
  const activations = new Array(256).fill(0).map(() => Math.random() * 0.1);
176
199
  // Attention weights (8 heads)
@@ -183,10 +206,14 @@ export async function recordTrajectoryStep(trajectoryId, action, reward, context
183
206
  */
184
207
  export async function endTaskTrajectory(trajectoryId, success, quality = 0.8) {
185
208
  const intelligence = await getIntelligence();
209
+ const store = getStore();
186
210
  const meta = activeTrajectories.get(trajectoryId);
187
211
  if (!meta) {
188
212
  return null;
189
213
  }
214
+ // Persist to SQLite
215
+ const outcome_type = success ? 'success' : 'failure';
216
+ store.endTrajectory(meta.dbId, outcome_type, { quality, steps: meta.steps });
190
217
  // End trajectory and trigger learning
191
218
  const outcome = intelligence.endTrajectory(trajectoryId, success, quality);
192
219
  // Clean up
@@ -232,22 +259,26 @@ export async function findSimilarPatterns(task, topK = 5) {
232
259
  * Get intelligence stats for monitoring
233
260
  */
234
261
  export async function getIntelligenceStats() {
262
+ const store = getStore();
263
+ const persistedStats = store.getSummary();
235
264
  if (!intelligenceInstance) {
236
265
  return {
237
266
  initialized: false,
238
267
  features: [],
239
- trajectoryCount: 0,
268
+ trajectoryCount: persistedStats.trajectories,
240
269
  activeTrajectories: 0,
241
270
  learningEnabled: false,
271
+ persistedStats,
242
272
  };
243
273
  }
244
274
  const stats = intelligenceInstance.getStats();
245
275
  return {
246
276
  initialized: true,
247
277
  features: ['sona', 'micro-lora', 'hnsw', 'moe-attention'],
248
- trajectoryCount: stats.totalTrajectories || 0,
278
+ trajectoryCount: persistedStats.trajectories || stats.totalTrajectories || 0,
249
279
  activeTrajectories: activeTrajectories.size,
250
280
  learningEnabled: intelligenceInstance.isEnabled(),
281
+ persistedStats,
251
282
  };
252
283
  }
253
284
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"intelligence-bridge.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/intelligence-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Intelligence Bridge - Connects hooks to RuVectorIntelligence layer\n *\n * This bridges the gap between hook tools and the full RuVector ecosystem:\n * - @ruvector/sona: Micro-LoRA, EWC++, ReasoningBank, Trajectories\n * - @ruvector/attention: MoE, Flash, Hyperbolic, Graph attention\n * - ruvector core: HNSW indexing (150x faster search)\n */\n\nimport {\n RuVectorIntelligence,\n createIntelligenceLayer,\n IntelligencePresets,\n type AgentRoutingResult,\n type Trajectory,\n type LearningOutcome,\n} from '../../../../intelligence/index.js';\n\n// Singleton instance\nlet intelligenceInstance: RuVectorIntelligence | null = null;\nlet initPromise: Promise<void> | null = null;\n\n// Consistent dimension for SONA (must match hiddenDim = embeddingDim)\n// Using 128 for ultra-fast performance (~0.05ms per operation)\nconst INTELLIGENCE_DIM = 128;\n\n// Active trajectories (trajectoryId -> metadata)\nconst activeTrajectories = new Map<number, {\n taskDescription: string;\n startTime: number;\n agent: string;\n steps: number;\n}>();\n\n// Simple embedding function (hash-based for speed)\nfunction simpleEmbed(text: string, dim: number = INTELLIGENCE_DIM): number[] {\n const embedding = new Array(dim).fill(0);\n const words = text.toLowerCase().split(/\\s+/);\n\n for (const word of words) {\n for (let i = 0; i < word.length; i++) {\n const idx = (word.charCodeAt(i) * (i + 1)) % dim;\n embedding[idx] += 1;\n }\n }\n\n // Normalize\n const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));\n if (magnitude > 0) {\n for (let i = 0; i < embedding.length; i++) {\n embedding[i] /= magnitude;\n }\n }\n\n return embedding;\n}\n\n/**\n * Get or create the RuVectorIntelligence singleton\n */\nexport async function getIntelligence(): Promise<RuVectorIntelligence> {\n if (intelligenceInstance) {\n return intelligenceInstance;\n }\n\n if (!initPromise) {\n initPromise = initializeIntelligence();\n }\n\n await initPromise;\n return intelligenceInstance!;\n}\n\n/**\n * Initialize the intelligence layer with optimal settings\n */\nasync function initializeIntelligence(): Promise<void> {\n try {\n // Use fast preset with consistent dimensions\n // SONA requires embeddingDim == hiddenDim\n intelligenceInstance = createIntelligenceLayer({\n ...IntelligencePresets.fast,\n hiddenDim: INTELLIGENCE_DIM,\n embeddingDim: INTELLIGENCE_DIM, // Must match hiddenDim for SONA\n enableSona: true,\n enableTrajectories: true,\n enableHnsw: false, // Disable HNSW for now (API compatibility issue)\n });\n\n // Register common agent types with correct dimension\n const agents = [\n 'coder', 'researcher', 'analyst', 'optimizer', 'coordinator',\n 'typescript-developer', 'rust-developer', 'python-developer',\n 'test-engineer', 'documentation-specialist', 'security-specialist',\n 'frontend-developer', 'backend-developer', 'devops-engineer'\n ];\n\n for (const agent of agents) {\n const embedding = simpleEmbed(`agent ${agent} specialist expert`, INTELLIGENCE_DIM);\n await intelligenceInstance.registerAgent(agent, embedding);\n }\n\n console.log('[IntelligenceBridge] RuVector intelligence layer initialized');\n console.log('[IntelligenceBridge] Features: Micro-LoRA, MoE Attention');\n } catch (error) {\n console.warn('[IntelligenceBridge] Failed to initialize full intelligence, using fallback:', error);\n // Create with minimal config if packages aren't available\n intelligenceInstance = createIntelligenceLayer({\n hiddenDim: INTELLIGENCE_DIM,\n embeddingDim: INTELLIGENCE_DIM,\n enableSona: false,\n enableHnsw: false,\n });\n }\n}\n\n/**\n * Route a task using SONA + MoE Attention + HNSW\n *\n * This replaces the simple keyword-based routing with:\n * 1. HNSW for O(log n) candidate retrieval\n * 2. Micro-LoRA transformation (~0.05ms)\n * 3. MoE attention-based ranking\n */\nexport async function routeTaskIntelligent(\n task: string,\n context?: {\n file?: string;\n recentFiles?: string[];\n errorContext?: string;\n }\n): Promise<{\n agent: string;\n confidence: number;\n routingResults: AgentRoutingResult[];\n latencyMs: number;\n usedFeatures: string[];\n}> {\n const startTime = performance.now();\n const intelligence = await getIntelligence();\n const usedFeatures: string[] = [];\n\n // Build context string\n let contextString = task;\n if (context?.file) {\n contextString += ` [file: ${context.file}]`;\n }\n if (context?.errorContext) {\n contextString += ` [error: ${context.errorContext}]`;\n }\n\n // Get task embedding with consistent dimension\n const embedding = simpleEmbed(contextString, INTELLIGENCE_DIM);\n usedFeatures.push('sona-embedding');\n\n // Route using full intelligence stack\n const routingResults = await intelligence.routeTask(embedding);\n usedFeatures.push('hnsw-search', 'moe-attention');\n\n // Select best agent\n const bestResult = routingResults[0] || {\n agentId: 'coder',\n confidence: 0.5,\n attentionWeights: new Float32Array(0),\n latencyMs: 0,\n usedHnsw: false,\n usedSona: false,\n };\n\n const latencyMs = performance.now() - startTime;\n\n return {\n agent: bestResult.agentId,\n confidence: Math.min(0.95, bestResult.confidence),\n routingResults,\n latencyMs,\n usedFeatures,\n };\n}\n\n/**\n * Begin a trajectory for learning from task execution\n *\n * Trajectories track:\n * - Task context and embeddings\n * - Agent actions and decisions\n * - Attention patterns at each step\n * - Final outcomes for reinforcement\n */\nexport async function beginTaskTrajectory(\n task: string,\n agent: string\n): Promise<{ trajectoryId: number; success: boolean; error?: string }> {\n const intelligence = await getIntelligence();\n\n // Get task embedding\n const embedding = simpleEmbed(task);\n\n // Start trajectory in SONA\n const result = intelligence.beginTrajectory(task, embedding);\n\n if (!result.success || result.value === undefined) {\n return {\n trajectoryId: -1,\n success: false,\n error: result.error || 'Failed to begin trajectory',\n };\n }\n\n const trajectoryId = result.value;\n\n // Track metadata\n activeTrajectories.set(trajectoryId, {\n taskDescription: task,\n startTime: Date.now(),\n agent,\n steps: 0,\n });\n\n return { trajectoryId, success: true };\n}\n\n/**\n * Record a step in the trajectory\n */\nexport async function recordTrajectoryStep(\n trajectoryId: number,\n action: string,\n reward: number,\n context?: {\n file?: string;\n errorFixed?: boolean;\n testPassed?: boolean;\n }\n): Promise<void> {\n const intelligence = await getIntelligence();\n const meta = activeTrajectories.get(trajectoryId);\n\n if (meta) {\n meta.steps++;\n\n // Generate activations from context\n const activations = new Array(256).fill(0).map(() => Math.random() * 0.1);\n\n // Attention weights (8 heads)\n const attentionWeights = new Array(8).fill(0.125);\n\n intelligence.addTrajectoryStep(\n trajectoryId,\n action,\n reward,\n activations,\n attentionWeights\n );\n }\n}\n\n/**\n * End a trajectory and get learning outcome\n */\nexport async function endTaskTrajectory(\n trajectoryId: number,\n success: boolean,\n quality: number = 0.8\n): Promise<LearningOutcome | null> {\n const intelligence = await getIntelligence();\n const meta = activeTrajectories.get(trajectoryId);\n\n if (!meta) {\n return null;\n }\n\n // End trajectory and trigger learning\n const outcome = intelligence.endTrajectory(trajectoryId, success, quality);\n\n // Clean up\n activeTrajectories.delete(trajectoryId);\n\n return outcome;\n}\n\n/**\n * Store a pattern by registering it as an agent-like entity\n */\nexport async function storePattern(\n task: string,\n resolution: string,\n reward: number\n): Promise<void> {\n const intelligence = await getIntelligence();\n\n // Get embedding for the task\n const embedding = simpleEmbed(`${task} ${resolution}`);\n\n // Register as a pattern (using agent registration for storage)\n const patternId = `pattern-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n await intelligence.registerAgent(patternId, embedding, {\n task,\n resolution,\n reward,\n timestamp: new Date().toISOString(),\n });\n}\n\n/**\n * Find similar patterns using routing\n */\nexport async function findSimilarPatterns(\n task: string,\n topK: number = 5\n): Promise<Array<{\n task: string;\n resolution: string;\n reward: number;\n similarity: number;\n}>> {\n const intelligence = await getIntelligence();\n\n // Get query embedding\n const embedding = simpleEmbed(task);\n\n // Search using routing (which uses HNSW internally)\n const results = await intelligence.routeTask(embedding, undefined, topK);\n\n // Filter for pattern results (those with pattern- prefix)\n return results\n .filter(r => r.agentId.startsWith('pattern-'))\n .map(r => ({\n task: task,\n resolution: r.agentId,\n reward: r.confidence,\n similarity: r.confidence,\n }));\n}\n\n/**\n * Get intelligence stats for monitoring\n */\nexport async function getIntelligenceStats(): Promise<{\n initialized: boolean;\n features: string[];\n trajectoryCount: number;\n activeTrajectories: number;\n learningEnabled: boolean;\n}> {\n if (!intelligenceInstance) {\n return {\n initialized: false,\n features: [],\n trajectoryCount: 0,\n activeTrajectories: 0,\n learningEnabled: false,\n };\n }\n\n const stats = intelligenceInstance.getStats();\n\n return {\n initialized: true,\n features: ['sona', 'micro-lora', 'hnsw', 'moe-attention'],\n trajectoryCount: stats.totalTrajectories || 0,\n activeTrajectories: activeTrajectories.size,\n learningEnabled: intelligenceInstance.isEnabled(),\n };\n}\n\n/**\n * Force a learning cycle (useful for batch learning)\n */\nexport async function forceLearningCycle(): Promise<string> {\n const intelligence = await getIntelligence();\n return intelligence.forceLearning();\n}\n\n/**\n * Compute attention-weighted similarity for advanced routing\n */\nexport async function computeAttentionSimilarity(\n query: Float32Array,\n candidates: Float32Array[]\n): Promise<number[]> {\n const intelligence = await getIntelligence();\n\n // Use async attention for ranking\n const result = await intelligence.computeAttentionAsync(query, candidates, candidates);\n\n return Array.from(result);\n}\n\n// Export types\nexport type { AgentRoutingResult, Trajectory, LearningOutcome };\n"]}
1
+ {"version":3,"file":"intelligence-bridge.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/intelligence-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Intelligence Bridge - Connects hooks to RuVectorIntelligence layer\n *\n * This bridges the gap between hook tools and the full RuVector ecosystem:\n * - @ruvector/sona: Micro-LoRA, EWC++, ReasoningBank, Trajectories\n * - @ruvector/attention: MoE, Flash, Hyperbolic, Graph attention\n * - ruvector core: HNSW indexing (150x faster search)\n *\n * Persistence: SQLite-based storage for cross-platform compatibility\n */\n\nimport {\n RuVectorIntelligence,\n createIntelligenceLayer,\n IntelligencePresets,\n type AgentRoutingResult,\n type Trajectory,\n type LearningOutcome,\n} from '../../../../intelligence/index.js';\n\nimport { getIntelligenceStore, type IntelligenceStore } from '../../../../intelligence/IntelligenceStore.js';\n\n// Singleton instances\nlet intelligenceInstance: RuVectorIntelligence | null = null;\nlet storeInstance: IntelligenceStore | null = null;\nlet initPromise: Promise<void> | null = null;\n\n// Consistent dimension for SONA (must match hiddenDim = embeddingDim)\n// Using 128 for ultra-fast performance (~0.05ms per operation)\nconst INTELLIGENCE_DIM = 128;\n\n// Active trajectories in memory (for fast access, backed by SQLite)\nconst activeTrajectories = new Map<number, {\n taskDescription: string;\n startTime: number;\n agent: string;\n steps: number;\n dbId: number; // SQLite row ID\n}>();\n\n/**\n * Get the SQLite store singleton\n */\nexport function getStore(): IntelligenceStore {\n if (!storeInstance) {\n storeInstance = getIntelligenceStore();\n }\n return storeInstance;\n}\n\n// Simple embedding function (hash-based for speed)\nfunction simpleEmbed(text: string, dim: number = INTELLIGENCE_DIM): number[] {\n const embedding = new Array(dim).fill(0);\n const words = text.toLowerCase().split(/\\s+/);\n\n for (const word of words) {\n for (let i = 0; i < word.length; i++) {\n const idx = (word.charCodeAt(i) * (i + 1)) % dim;\n embedding[idx] += 1;\n }\n }\n\n // Normalize\n const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));\n if (magnitude > 0) {\n for (let i = 0; i < embedding.length; i++) {\n embedding[i] /= magnitude;\n }\n }\n\n return embedding;\n}\n\n/**\n * Get or create the RuVectorIntelligence singleton\n */\nexport async function getIntelligence(): Promise<RuVectorIntelligence> {\n if (intelligenceInstance) {\n return intelligenceInstance;\n }\n\n if (!initPromise) {\n initPromise = initializeIntelligence();\n }\n\n await initPromise;\n return intelligenceInstance!;\n}\n\n/**\n * Initialize the intelligence layer with optimal settings\n */\nasync function initializeIntelligence(): Promise<void> {\n try {\n // Use fast preset with consistent dimensions\n // SONA requires embeddingDim == hiddenDim\n intelligenceInstance = createIntelligenceLayer({\n ...IntelligencePresets.fast,\n hiddenDim: INTELLIGENCE_DIM,\n embeddingDim: INTELLIGENCE_DIM, // Must match hiddenDim for SONA\n enableSona: true,\n enableTrajectories: true,\n enableHnsw: false, // Disable HNSW for now (API compatibility issue)\n });\n\n // Register common agent types with correct dimension\n const agents = [\n 'coder', 'researcher', 'analyst', 'optimizer', 'coordinator',\n 'typescript-developer', 'rust-developer', 'python-developer',\n 'test-engineer', 'documentation-specialist', 'security-specialist',\n 'frontend-developer', 'backend-developer', 'devops-engineer'\n ];\n\n for (const agent of agents) {\n const embedding = simpleEmbed(`agent ${agent} specialist expert`, INTELLIGENCE_DIM);\n await intelligenceInstance.registerAgent(agent, embedding);\n }\n\n console.log('[IntelligenceBridge] RuVector intelligence layer initialized');\n console.log('[IntelligenceBridge] Features: Micro-LoRA, MoE Attention');\n } catch (error) {\n console.warn('[IntelligenceBridge] Failed to initialize full intelligence, using fallback:', error);\n // Create with minimal config if packages aren't available\n intelligenceInstance = createIntelligenceLayer({\n hiddenDim: INTELLIGENCE_DIM,\n embeddingDim: INTELLIGENCE_DIM,\n enableSona: false,\n enableHnsw: false,\n });\n }\n}\n\n/**\n * Route a task using SONA + MoE Attention + HNSW\n *\n * This replaces the simple keyword-based routing with:\n * 1. HNSW for O(log n) candidate retrieval\n * 2. Micro-LoRA transformation (~0.05ms)\n * 3. MoE attention-based ranking\n */\nexport async function routeTaskIntelligent(\n task: string,\n context?: {\n file?: string;\n recentFiles?: string[];\n errorContext?: string;\n }\n): Promise<{\n agent: string;\n confidence: number;\n routingResults: AgentRoutingResult[];\n latencyMs: number;\n usedFeatures: string[];\n}> {\n const startTime = performance.now();\n const intelligence = await getIntelligence();\n const usedFeatures: string[] = [];\n\n // Build context string\n let contextString = task;\n if (context?.file) {\n contextString += ` [file: ${context.file}]`;\n }\n if (context?.errorContext) {\n contextString += ` [error: ${context.errorContext}]`;\n }\n\n // Get task embedding with consistent dimension\n const embedding = simpleEmbed(contextString, INTELLIGENCE_DIM);\n usedFeatures.push('sona-embedding');\n\n // Route using full intelligence stack\n const routingResults = await intelligence.routeTask(embedding);\n usedFeatures.push('hnsw-search', 'moe-attention');\n\n // Select best agent\n const bestResult = routingResults[0] || {\n agentId: 'coder',\n confidence: 0.5,\n attentionWeights: new Float32Array(0),\n latencyMs: 0,\n usedHnsw: false,\n usedSona: false,\n };\n\n const latencyMs = performance.now() - startTime;\n\n // Record routing in SQLite for persistence\n const store = getStore();\n store.recordRouting(\n task,\n bestResult.agentId,\n Math.min(0.95, bestResult.confidence),\n Math.round(latencyMs)\n );\n\n return {\n agent: bestResult.agentId,\n confidence: Math.min(0.95, bestResult.confidence),\n routingResults,\n latencyMs,\n usedFeatures,\n };\n}\n\n/**\n * Begin a trajectory for learning from task execution\n *\n * Trajectories track:\n * - Task context and embeddings\n * - Agent actions and decisions\n * - Attention patterns at each step\n * - Final outcomes for reinforcement\n */\nexport async function beginTaskTrajectory(\n task: string,\n agent: string\n): Promise<{ trajectoryId: number; success: boolean; error?: string }> {\n const intelligence = await getIntelligence();\n const store = getStore();\n\n // Get task embedding\n const embedding = simpleEmbed(task);\n\n // Start trajectory in SONA\n const result = intelligence.beginTrajectory(task, embedding);\n\n if (!result.success || result.value === undefined) {\n return {\n trajectoryId: -1,\n success: false,\n error: result.error || 'Failed to begin trajectory',\n };\n }\n\n const trajectoryId = result.value;\n\n // Persist to SQLite\n const dbId = store.startTrajectory(task, agent);\n\n // Track metadata in memory (for fast access)\n activeTrajectories.set(trajectoryId, {\n taskDescription: task,\n startTime: Date.now(),\n agent,\n steps: 0,\n dbId,\n });\n\n return { trajectoryId, success: true };\n}\n\n/**\n * Record a step in the trajectory\n */\nexport async function recordTrajectoryStep(\n trajectoryId: number,\n action: string,\n reward: number,\n context?: {\n file?: string;\n errorFixed?: boolean;\n testPassed?: boolean;\n }\n): Promise<void> {\n const intelligence = await getIntelligence();\n const store = getStore();\n const meta = activeTrajectories.get(trajectoryId);\n\n if (meta) {\n meta.steps++;\n\n // Persist step to SQLite\n store.addTrajectoryStep(meta.dbId);\n\n // Generate activations from context\n const activations = new Array(256).fill(0).map(() => Math.random() * 0.1);\n\n // Attention weights (8 heads)\n const attentionWeights = new Array(8).fill(0.125);\n\n intelligence.addTrajectoryStep(\n trajectoryId,\n action,\n reward,\n activations,\n attentionWeights\n );\n }\n}\n\n/**\n * End a trajectory and get learning outcome\n */\nexport async function endTaskTrajectory(\n trajectoryId: number,\n success: boolean,\n quality: number = 0.8\n): Promise<LearningOutcome | null> {\n const intelligence = await getIntelligence();\n const store = getStore();\n const meta = activeTrajectories.get(trajectoryId);\n\n if (!meta) {\n return null;\n }\n\n // Persist to SQLite\n const outcome_type = success ? 'success' : 'failure';\n store.endTrajectory(meta.dbId, outcome_type, { quality, steps: meta.steps });\n\n // End trajectory and trigger learning\n const outcome = intelligence.endTrajectory(trajectoryId, success, quality);\n\n // Clean up\n activeTrajectories.delete(trajectoryId);\n\n return outcome;\n}\n\n/**\n * Store a pattern by registering it as an agent-like entity\n */\nexport async function storePattern(\n task: string,\n resolution: string,\n reward: number\n): Promise<void> {\n const intelligence = await getIntelligence();\n\n // Get embedding for the task\n const embedding = simpleEmbed(`${task} ${resolution}`);\n\n // Register as a pattern (using agent registration for storage)\n const patternId = `pattern-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n await intelligence.registerAgent(patternId, embedding, {\n task,\n resolution,\n reward,\n timestamp: new Date().toISOString(),\n });\n}\n\n/**\n * Find similar patterns using routing\n */\nexport async function findSimilarPatterns(\n task: string,\n topK: number = 5\n): Promise<Array<{\n task: string;\n resolution: string;\n reward: number;\n similarity: number;\n}>> {\n const intelligence = await getIntelligence();\n\n // Get query embedding\n const embedding = simpleEmbed(task);\n\n // Search using routing (which uses HNSW internally)\n const results = await intelligence.routeTask(embedding, undefined, topK);\n\n // Filter for pattern results (those with pattern- prefix)\n return results\n .filter(r => r.agentId.startsWith('pattern-'))\n .map(r => ({\n task: task,\n resolution: r.agentId,\n reward: r.confidence,\n similarity: r.confidence,\n }));\n}\n\n/**\n * Get intelligence stats for monitoring\n */\nexport async function getIntelligenceStats(): Promise<{\n initialized: boolean;\n features: string[];\n trajectoryCount: number;\n activeTrajectories: number;\n learningEnabled: boolean;\n persistedStats?: {\n trajectories: number;\n routings: number;\n patterns: number;\n operations: number;\n };\n}> {\n const store = getStore();\n const persistedStats = store.getSummary();\n\n if (!intelligenceInstance) {\n return {\n initialized: false,\n features: [],\n trajectoryCount: persistedStats.trajectories,\n activeTrajectories: 0,\n learningEnabled: false,\n persistedStats,\n };\n }\n\n const stats = intelligenceInstance.getStats();\n\n return {\n initialized: true,\n features: ['sona', 'micro-lora', 'hnsw', 'moe-attention'],\n trajectoryCount: persistedStats.trajectories || stats.totalTrajectories || 0,\n activeTrajectories: activeTrajectories.size,\n learningEnabled: intelligenceInstance.isEnabled(),\n persistedStats,\n };\n}\n\n/**\n * Force a learning cycle (useful for batch learning)\n */\nexport async function forceLearningCycle(): Promise<string> {\n const intelligence = await getIntelligence();\n return intelligence.forceLearning();\n}\n\n/**\n * Compute attention-weighted similarity for advanced routing\n */\nexport async function computeAttentionSimilarity(\n query: Float32Array,\n candidates: Float32Array[]\n): Promise<number[]> {\n const intelligence = await getIntelligence();\n\n // Use async attention for ranking\n const result = await intelligence.computeAttentionAsync(query, candidates, candidates);\n\n return Array.from(result);\n}\n\n// Export types\nexport type { AgentRoutingResult, Trajectory, LearningOutcome };\n"]}