agentic-flow 2.0.0-alpha → 2.0.1-alpha

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.
Files changed (81) hide show
  1. package/README.md +320 -23
  2. package/agentic-flow/.claude/agents/base-template-generator.md +229 -3
  3. package/agentic-flow/.claude/agents/core/coder.md +212 -7
  4. package/agentic-flow/.claude/agents/core/planner.md +228 -7
  5. package/agentic-flow/.claude/agents/core/researcher.md +205 -10
  6. package/agentic-flow/.claude/agents/core/reviewer.md +216 -5
  7. package/agentic-flow/.claude/agents/core/tester.md +213 -3
  8. package/agentic-flow/.claude/agents/data/ml/data-ml-model.md +256 -5
  9. package/agentic-flow/.claude/agents/development/backend/dev-backend-api.md +209 -6
  10. package/agentic-flow/.claude/agents/documentation/api-docs/docs-api-openapi.md +185 -5
  11. package/agentic-flow/.claude/agents/github/code-review-swarm.md +307 -468
  12. package/agentic-flow/.claude/agents/github/issue-tracker.md +270 -13
  13. package/agentic-flow/.claude/agents/github/pr-manager.md +259 -12
  14. package/agentic-flow/.claude/agents/github/release-manager.md +253 -15
  15. package/agentic-flow/.claude/agents/github/workflow-automation.md +277 -9
  16. package/agentic-flow/.claude/agents/sona/sona-learning-optimizer.md +496 -0
  17. package/agentic-flow/.claude/agents/sparc/architecture.md +231 -4
  18. package/agentic-flow/.claude/agents/sparc/pseudocode.md +206 -4
  19. package/agentic-flow/.claude/agents/sparc/refinement.md +283 -6
  20. package/agentic-flow/.claude/agents/sparc/specification.md +205 -3
  21. package/agentic-flow/.claude/agents/swarm/adaptive-coordinator.md +731 -0
  22. package/agentic-flow/.claude/agents/swarm/hierarchical-coordinator.md +455 -1
  23. package/agentic-flow/.claude/agents/swarm/mesh-coordinator.md +571 -0
  24. package/agentic-flow/.claude/agents/templates/sparc-coordinator.md +336 -5
  25. package/agentic-flow/dist/cli/commands/sona-train.d.ts.map +1 -0
  26. package/agentic-flow/dist/cli/commands/sona-train.js +295 -0
  27. package/agentic-flow/dist/cli/commands/sona-train.js.map +1 -0
  28. package/agentic-flow/dist/cli/commands/sona.d.ts.map +1 -0
  29. package/agentic-flow/dist/cli/commands/sona.js +290 -0
  30. package/agentic-flow/dist/cli/commands/sona.js.map +1 -0
  31. package/agentic-flow/dist/core/agentdb-fast.d.ts.map +1 -0
  32. package/agentic-flow/dist/core/agentdb-fast.js +299 -0
  33. package/agentic-flow/dist/core/agentdb-fast.js.map +1 -0
  34. package/agentic-flow/dist/core/attention-fallbacks.d.ts.map +1 -0
  35. package/agentic-flow/dist/core/attention-fallbacks.js +321 -0
  36. package/agentic-flow/dist/core/attention-fallbacks.js.map +1 -0
  37. package/agentic-flow/dist/core/embedding-service.d.ts.map +1 -0
  38. package/agentic-flow/dist/core/embedding-service.js +370 -0
  39. package/agentic-flow/dist/core/embedding-service.js.map +1 -0
  40. package/agentic-flow/dist/core/gnn-wrapper.d.ts.map +1 -0
  41. package/agentic-flow/dist/core/gnn-wrapper.js +236 -0
  42. package/agentic-flow/dist/core/gnn-wrapper.js.map +1 -0
  43. package/agentic-flow/dist/core/index.d.ts.map +1 -1
  44. package/agentic-flow/dist/core/index.js +80 -3
  45. package/agentic-flow/dist/core/index.js.map +1 -1
  46. package/agentic-flow/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
  47. package/agentic-flow/dist/mcp/claudeFlowSdkServer.js +109 -0
  48. package/agentic-flow/dist/mcp/claudeFlowSdkServer.js.map +1 -1
  49. package/agentic-flow/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -0
  50. package/agentic-flow/dist/mcp/tools/agent-booster-tools.js +262 -0
  51. package/agentic-flow/dist/mcp/tools/agent-booster-tools.js.map +1 -0
  52. package/agentic-flow/dist/mcp/tools/sona-tools.d.ts.map +1 -0
  53. package/agentic-flow/dist/mcp/tools/sona-tools.js +560 -0
  54. package/agentic-flow/dist/mcp/tools/sona-tools.js.map +1 -0
  55. package/agentic-flow/dist/optimizations/agent-booster-migration.d.ts.map +1 -0
  56. package/agentic-flow/dist/optimizations/agent-booster-migration.js +323 -0
  57. package/agentic-flow/dist/optimizations/agent-booster-migration.js.map +1 -0
  58. package/agentic-flow/dist/optimizations/configuration-tuning.d.ts.map +1 -0
  59. package/agentic-flow/dist/optimizations/configuration-tuning.js +422 -0
  60. package/agentic-flow/dist/optimizations/configuration-tuning.js.map +1 -0
  61. package/agentic-flow/dist/optimizations/ruvector-backend.d.ts.map +1 -0
  62. package/agentic-flow/dist/optimizations/ruvector-backend.js +464 -0
  63. package/agentic-flow/dist/optimizations/ruvector-backend.js.map +1 -0
  64. package/agentic-flow/dist/services/embedding-service.d.ts.map +1 -0
  65. package/agentic-flow/dist/services/embedding-service.js +367 -0
  66. package/agentic-flow/dist/services/embedding-service.js.map +1 -0
  67. package/agentic-flow/dist/services/sona-agent-training.d.ts.map +1 -0
  68. package/agentic-flow/dist/services/sona-agent-training.js +382 -0
  69. package/agentic-flow/dist/services/sona-agent-training.js.map +1 -0
  70. package/agentic-flow/dist/services/sona-agentdb-integration.d.ts.map +1 -0
  71. package/agentic-flow/dist/services/sona-agentdb-integration.js +346 -0
  72. package/agentic-flow/dist/services/sona-agentdb-integration.js.map +1 -0
  73. package/agentic-flow/dist/services/sona-service.d.ts.map +1 -0
  74. package/agentic-flow/dist/services/sona-service.js +448 -0
  75. package/agentic-flow/dist/services/sona-service.js.map +1 -0
  76. package/agentic-flow/dist/services/sona-types.d.ts.map +1 -0
  77. package/agentic-flow/dist/services/sona-types.js +59 -0
  78. package/agentic-flow/dist/services/sona-types.js.map +1 -0
  79. package/docs/README.md +27 -2
  80. package/package.json +12 -2
  81. package/docs/AGENTIC_JUJUTSU_QUICKSTART.md +0 -491
@@ -0,0 +1,299 @@
1
+ /**
2
+ * AgentDB Fast API
3
+ *
4
+ * Provides programmatic access to AgentDB without CLI overhead
5
+ * Eliminates 2.3s overhead from process spawning and transformers.js init
6
+ */
7
+ import agentdb from 'agentdb';
8
+ import { EventEmitter } from 'events';
9
+ /**
10
+ * Fast AgentDB client that avoids CLI overhead
11
+ *
12
+ * Performance:
13
+ * - CLI: ~2,350ms per operation
14
+ * - Direct API: ~10-50ms per operation
15
+ * - Speedup: ~50-200x faster
16
+ */
17
+ export class AgentDBFast extends EventEmitter {
18
+ db = null;
19
+ config;
20
+ initialized = false;
21
+ embeddingCache = new Map();
22
+ constructor(config = {}) {
23
+ super();
24
+ this.config = {
25
+ path: config.path || '.agentdb-fast',
26
+ vectorDimensions: config.vectorDimensions || 384,
27
+ enableHNSW: config.enableHNSW !== false,
28
+ hnswM: config.hnswM || 16,
29
+ hnswEfConstruction: config.hnswEfConstruction || 200
30
+ };
31
+ }
32
+ /**
33
+ * Initialize database connection (lazy)
34
+ */
35
+ async initialize() {
36
+ if (this.initialized)
37
+ return;
38
+ // Use type assertion for now since agentdb may not have open method yet
39
+ const db = agentdb;
40
+ this.db = db.open ? await db.open({
41
+ path: this.config.path,
42
+ vectorDimensions: this.config.vectorDimensions,
43
+ enableHNSW: this.config.enableHNSW,
44
+ hnswM: this.config.hnswM,
45
+ hnswEfConstruction: this.config.hnswEfConstruction
46
+ }) : new db();
47
+ this.initialized = true;
48
+ this.emit('initialized');
49
+ }
50
+ /**
51
+ * Store an episode (fast, no CLI overhead)
52
+ */
53
+ async storeEpisode(episode) {
54
+ await this.initialize();
55
+ // Generate embedding if not provided
56
+ if (!episode.embedding) {
57
+ episode.embedding = await this.getEmbedding(episode.task);
58
+ }
59
+ const episodeId = episode.id || this.generateId('episode');
60
+ await this.db.insert({
61
+ id: episodeId,
62
+ vector: episode.embedding,
63
+ metadata: {
64
+ type: 'episode',
65
+ sessionId: episode.sessionId,
66
+ task: episode.task,
67
+ trajectory: JSON.stringify(episode.trajectory),
68
+ reward: episode.reward,
69
+ quality: episode.quality,
70
+ context: episode.context,
71
+ timestamp: episode.timestamp || Date.now()
72
+ }
73
+ });
74
+ this.emit('episode:stored', episodeId);
75
+ return episodeId;
76
+ }
77
+ /**
78
+ * Retrieve episodes by task similarity (fast)
79
+ */
80
+ async retrieveEpisodes(options) {
81
+ await this.initialize();
82
+ const dimensions = this.config.vectorDimensions ?? 384;
83
+ const queryEmbedding = options.task
84
+ ? await this.getEmbedding(options.task)
85
+ : Array(dimensions).fill(0);
86
+ const k = options.k || 5;
87
+ // Build filter
88
+ const filter = { type: 'episode' };
89
+ if (options.sessionId)
90
+ filter.sessionId = options.sessionId;
91
+ if (options.minReward !== undefined)
92
+ filter.reward = { $gte: options.minReward };
93
+ if (options.maxReward !== undefined) {
94
+ filter.reward = { ...(filter.reward || {}), $lte: options.maxReward };
95
+ }
96
+ const results = await this.db.search({
97
+ vector: queryEmbedding,
98
+ k,
99
+ filter: Object.keys(filter).length > 1 ? filter : undefined
100
+ });
101
+ return results.map((result) => ({
102
+ id: result.id,
103
+ sessionId: result.metadata.sessionId,
104
+ task: result.metadata.task,
105
+ trajectory: JSON.parse(result.metadata.trajectory || '[]'),
106
+ reward: result.metadata.reward,
107
+ quality: result.metadata.quality,
108
+ embedding: result.vector,
109
+ context: result.metadata.context,
110
+ timestamp: result.metadata.timestamp
111
+ }));
112
+ }
113
+ /**
114
+ * Store a pattern (for ReasoningBank)
115
+ */
116
+ async storePattern(pattern) {
117
+ await this.initialize();
118
+ if (!pattern.embedding) {
119
+ pattern.embedding = await this.getEmbedding(`${pattern.input} ${pattern.output}`);
120
+ }
121
+ const patternId = pattern.id || this.generateId('pattern');
122
+ await this.db.insert({
123
+ id: patternId,
124
+ vector: pattern.embedding,
125
+ metadata: {
126
+ type: 'pattern',
127
+ task: pattern.task,
128
+ input: pattern.input,
129
+ output: pattern.output,
130
+ quality: pattern.quality,
131
+ context: pattern.context,
132
+ timestamp: pattern.timestamp || Date.now()
133
+ }
134
+ });
135
+ this.emit('pattern:stored', patternId);
136
+ return patternId;
137
+ }
138
+ /**
139
+ * Search for similar patterns
140
+ */
141
+ async searchPatterns(query, k = 5, minQuality) {
142
+ await this.initialize();
143
+ const queryEmbedding = await this.getEmbedding(query);
144
+ const filter = { type: 'pattern' };
145
+ if (minQuality !== undefined) {
146
+ filter.quality = { $gte: minQuality };
147
+ }
148
+ const results = await this.db.search({
149
+ vector: queryEmbedding,
150
+ k,
151
+ filter: Object.keys(filter).length > 1 ? filter : undefined
152
+ });
153
+ return results.map((result) => ({
154
+ id: result.id,
155
+ task: result.metadata.task,
156
+ input: result.metadata.input,
157
+ output: result.metadata.output,
158
+ quality: result.metadata.quality,
159
+ embedding: result.vector,
160
+ context: result.metadata.context,
161
+ timestamp: result.metadata.timestamp
162
+ }));
163
+ }
164
+ /**
165
+ * Get database statistics
166
+ */
167
+ async getStats() {
168
+ await this.initialize();
169
+ const stats = await this.db.stats();
170
+ // Count by type
171
+ const allResults = await this.db.search({
172
+ vector: Array(this.config.vectorDimensions).fill(0),
173
+ k: 10000 // Get all
174
+ });
175
+ const episodes = allResults.filter((r) => r.metadata.type === 'episode');
176
+ const patterns = allResults.filter((r) => r.metadata.type === 'pattern');
177
+ const avgQuality = patterns.reduce((sum, p) => sum + (p.metadata.quality || 0), 0) /
178
+ (patterns.length || 1);
179
+ return {
180
+ totalVectors: stats.totalVectors || 0,
181
+ totalEpisodes: episodes.length,
182
+ totalPatterns: patterns.length,
183
+ avgQuality
184
+ };
185
+ }
186
+ /**
187
+ * Close database connection
188
+ */
189
+ async close() {
190
+ this.removeAllListeners();
191
+ this.embeddingCache.clear();
192
+ if (this.db) {
193
+ await this.db.close();
194
+ this.db = null;
195
+ }
196
+ this.initialized = false;
197
+ }
198
+ /**
199
+ * Generate embedding for text (with caching)
200
+ *
201
+ * Note: This is a simple mock. In production, replace with:
202
+ * - OpenAI embeddings API
203
+ * - Local transformer model
204
+ * - SentenceTransformers
205
+ */
206
+ async getEmbedding(text) {
207
+ // Check cache
208
+ if (this.embeddingCache.has(text)) {
209
+ return this.embeddingCache.get(text);
210
+ }
211
+ // Simple hash-based embedding (REPLACE IN PRODUCTION)
212
+ const embedding = this.simpleHashEmbedding(text);
213
+ // Cache it
214
+ this.embeddingCache.set(text, embedding);
215
+ if (this.embeddingCache.size > 1000) {
216
+ // LRU-style cleanup
217
+ const firstKey = this.embeddingCache.keys().next().value;
218
+ if (firstKey) {
219
+ this.embeddingCache.delete(firstKey);
220
+ }
221
+ }
222
+ return embedding;
223
+ }
224
+ /**
225
+ * Simple hash-based embedding (MOCK - REPLACE IN PRODUCTION)
226
+ *
227
+ * Production alternatives:
228
+ * 1. OpenAI: https://platform.openai.com/docs/guides/embeddings
229
+ * 2. Transformers.js: https://huggingface.co/docs/transformers.js
230
+ * 3. SBERT: https://www.sbert.net/
231
+ */
232
+ simpleHashEmbedding(text) {
233
+ const embedding = new Array(this.config.vectorDimensions);
234
+ // Seed with text hash
235
+ let hash = 0;
236
+ for (let i = 0; i < text.length; i++) {
237
+ hash = (hash << 5) - hash + text.charCodeAt(i);
238
+ hash = hash & hash;
239
+ }
240
+ // Generate pseudo-random embedding
241
+ for (let i = 0; i < this.config.vectorDimensions; i++) {
242
+ const seed = hash + i * 2654435761;
243
+ const x = Math.sin(seed) * 10000;
244
+ embedding[i] = x - Math.floor(x);
245
+ }
246
+ // Normalize
247
+ const norm = Math.sqrt(embedding.reduce((sum, v) => sum + v * v, 0));
248
+ return embedding.map(v => v / norm);
249
+ }
250
+ /**
251
+ * Generate unique ID
252
+ */
253
+ generateId(prefix) {
254
+ return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
255
+ }
256
+ }
257
+ /**
258
+ * Convenience function to create a fast AgentDB client
259
+ */
260
+ export function createFastAgentDB(config) {
261
+ return new AgentDBFast(config);
262
+ }
263
+ /**
264
+ * Performance comparison helper
265
+ */
266
+ export async function benchmarkAgentDB() {
267
+ const client = createFastAgentDB({ path: '.agentdb-benchmark' });
268
+ // API benchmark
269
+ const apiStoreStart = Date.now();
270
+ const episodeId = await client.storeEpisode({
271
+ sessionId: 'test-session',
272
+ task: 'test-task',
273
+ trajectory: ['step1', 'step2'],
274
+ reward: 0.8
275
+ });
276
+ const apiStoreTime = Date.now() - apiStoreStart;
277
+ const apiRetrieveStart = Date.now();
278
+ await client.retrieveEpisodes({ task: 'test-task', k: 5 });
279
+ const apiRetrieveTime = Date.now() - apiRetrieveStart;
280
+ await client.close();
281
+ // CLI times from benchmarks
282
+ const cliStoreTime = 2350;
283
+ const cliRetrieveTime = 2400;
284
+ return {
285
+ cli: {
286
+ store: cliStoreTime,
287
+ retrieve: cliRetrieveTime
288
+ },
289
+ api: {
290
+ store: apiStoreTime,
291
+ retrieve: apiRetrieveTime
292
+ },
293
+ speedup: {
294
+ store: cliStoreTime / apiStoreTime,
295
+ retrieve: cliRetrieveTime / apiRetrieveTime
296
+ }
297
+ };
298
+ }
299
+ //# sourceMappingURL=agentdb-fast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentdb-fast.js","sourceRoot":"","sources":["../../src/core/agentdb-fast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAkCtC;;;;;;;GAOG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IACnC,EAAE,GAAQ,IAAI,CAAC;IACf,MAAM,CAMZ;IACM,WAAW,GAAY,KAAK,CAAC;IAC7B,cAAc,GAA0B,IAAI,GAAG,EAAE,CAAC;IAE1D,YAAY,SAMR,EAAE;QACJ,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,MAAM,GAAG;YACZ,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,eAAe;YACpC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,GAAG;YAChD,UAAU,EAAE,MAAM,CAAC,UAAU,KAAK,KAAK;YACvC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YACzB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,GAAG;SACrD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,wEAAwE;QACxE,MAAM,EAAE,GAAQ,OAAO,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAC9C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB;SACnD,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAEd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAAgB;QACjC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,qCAAqC;QACrC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE3D,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;YACnB,EAAE,EAAE,SAAS;YACb,MAAM,EAAE,OAAO,CAAC,SAAS;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC9C,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;aAC3C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAA6B;QAClD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,GAAG,CAAC;QACvD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI;YACjC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;YACvC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE9B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;QAEzB,eAAe;QACf,MAAM,MAAM,GAAwB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxD,IAAI,OAAO,CAAC,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAC5D,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QACjF,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QACxE,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;YACnC,MAAM,EAAE,cAAc;YACtB,CAAC;YACD,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC5D,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,CAAC;YACnC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;YACpC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;YAC1B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC;YAC1D,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAC9B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YAChC,SAAS,EAAE,MAAM,CAAC,MAAM;YACxB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YAChC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;SACrC,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAAgB;QACjC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE3D,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;YACnB,EAAE,EAAE,SAAS;YACb,MAAM,EAAE,OAAO,CAAC,SAAS;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;aAC3C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,KAAa,EACb,IAAY,CAAC,EACb,UAAmB;QAEnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAwB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACxC,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;YACnC,MAAM,EAAE,cAAc;YACtB,CAAC;YACD,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC5D,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,CAAC;YACnC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;YAC1B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;YAC5B,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAC9B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YAChC,SAAS,EAAE,MAAM,CAAC,MAAM;YACxB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;YAChC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS;SACrC,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QAMZ,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAEpC,gBAAgB;QAChB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;YACtC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnD,CAAC,EAAE,KAAK,CAAC,UAAU;SACpB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAE9E,MAAM,UAAU,GACd,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,CAAM,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAEzB,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC;YACrC,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,UAAU;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,YAAY,CAAC,IAAY;QACrC,cAAc;QACd,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QACxC,CAAC;QAED,sDAAsD;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAEjD,WAAW;QACX,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;YACpC,oBAAoB;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAA2B,CAAC;YAC/E,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;OAOG;IACK,mBAAmB,CAAC,IAAY;QACtC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAE1D,sBAAsB;QACtB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,mCAAmC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACjC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,YAAY;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,MAAc;QAC/B,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC9E,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAIjC;IACC,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAKpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAEjE,gBAAgB;IAChB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;QAC1C,SAAS,EAAE,cAAc;QACzB,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;QAC9B,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;IAEhD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;IAEtD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,4BAA4B;IAC5B,MAAM,YAAY,GAAG,IAAI,CAAC;IAC1B,MAAM,eAAe,GAAG,IAAI,CAAC;IAE7B,OAAO;QACL,GAAG,EAAE;YACH,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,eAAe;SAC1B;QACD,GAAG,EAAE;YACH,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,eAAe;SAC1B;QACD,OAAO,EAAE;YACP,KAAK,EAAE,YAAY,GAAG,YAAY;YAClC,QAAQ,EAAE,eAAe,GAAG,eAAe;SAC5C;KACF,CAAC;AACJ,CAAC","sourcesContent":["/**\n * AgentDB Fast API\n *\n * Provides programmatic access to AgentDB without CLI overhead\n * Eliminates 2.3s overhead from process spawning and transformers.js init\n */\n\nimport agentdb from 'agentdb';\nimport { EventEmitter } from 'events';\n\nexport interface Episode {\n id?: string;\n sessionId: string;\n task: string;\n trajectory: string[];\n reward: number;\n quality?: number;\n embedding?: number[];\n context?: Record<string, any>;\n timestamp?: number;\n}\n\nexport interface EpisodeSearchOptions {\n task?: string;\n minReward?: number;\n maxReward?: number;\n sessionId?: string;\n k?: number;\n filter?: Record<string, any>;\n}\n\nexport interface Pattern {\n id?: string;\n task: string;\n input: string;\n output: string;\n quality: number;\n embedding?: number[];\n context?: Record<string, any>;\n timestamp?: number;\n}\n\n/**\n * Fast AgentDB client that avoids CLI overhead\n *\n * Performance:\n * - CLI: ~2,350ms per operation\n * - Direct API: ~10-50ms per operation\n * - Speedup: ~50-200x faster\n */\nexport class AgentDBFast extends EventEmitter {\n private db: any = null;\n private config: {\n path: string;\n vectorDimensions: number;\n enableHNSW: boolean;\n hnswM?: number;\n hnswEfConstruction?: number;\n };\n private initialized: boolean = false;\n private embeddingCache: Map<string, number[]> = new Map();\n\n constructor(config: {\n path?: string;\n vectorDimensions?: number;\n enableHNSW?: boolean;\n hnswM?: number;\n hnswEfConstruction?: number;\n } = {}) {\n super();\n\n this.config = {\n path: config.path || '.agentdb-fast',\n vectorDimensions: config.vectorDimensions || 384,\n enableHNSW: config.enableHNSW !== false,\n hnswM: config.hnswM || 16,\n hnswEfConstruction: config.hnswEfConstruction || 200\n };\n }\n\n /**\n * Initialize database connection (lazy)\n */\n async initialize(): Promise<void> {\n if (this.initialized) return;\n\n // Use type assertion for now since agentdb may not have open method yet\n const db: any = agentdb;\n this.db = db.open ? await db.open({\n path: this.config.path,\n vectorDimensions: this.config.vectorDimensions,\n enableHNSW: this.config.enableHNSW,\n hnswM: this.config.hnswM,\n hnswEfConstruction: this.config.hnswEfConstruction\n }) : new db();\n\n this.initialized = true;\n this.emit('initialized');\n }\n\n /**\n * Store an episode (fast, no CLI overhead)\n */\n async storeEpisode(episode: Episode): Promise<string> {\n await this.initialize();\n\n // Generate embedding if not provided\n if (!episode.embedding) {\n episode.embedding = await this.getEmbedding(episode.task);\n }\n\n const episodeId = episode.id || this.generateId('episode');\n\n await this.db.insert({\n id: episodeId,\n vector: episode.embedding,\n metadata: {\n type: 'episode',\n sessionId: episode.sessionId,\n task: episode.task,\n trajectory: JSON.stringify(episode.trajectory),\n reward: episode.reward,\n quality: episode.quality,\n context: episode.context,\n timestamp: episode.timestamp || Date.now()\n }\n });\n\n this.emit('episode:stored', episodeId);\n return episodeId;\n }\n\n /**\n * Retrieve episodes by task similarity (fast)\n */\n async retrieveEpisodes(options: EpisodeSearchOptions): Promise<Episode[]> {\n await this.initialize();\n\n const dimensions = this.config.vectorDimensions ?? 384;\n const queryEmbedding = options.task\n ? await this.getEmbedding(options.task)\n : Array(dimensions).fill(0);\n\n const k = options.k || 5;\n\n // Build filter\n const filter: Record<string, any> = { type: 'episode' };\n if (options.sessionId) filter.sessionId = options.sessionId;\n if (options.minReward !== undefined) filter.reward = { $gte: options.minReward };\n if (options.maxReward !== undefined) {\n filter.reward = { ...(filter.reward || {}), $lte: options.maxReward };\n }\n\n const results = await this.db.search({\n vector: queryEmbedding,\n k,\n filter: Object.keys(filter).length > 1 ? filter : undefined\n });\n\n return results.map((result: any) => ({\n id: result.id,\n sessionId: result.metadata.sessionId,\n task: result.metadata.task,\n trajectory: JSON.parse(result.metadata.trajectory || '[]'),\n reward: result.metadata.reward,\n quality: result.metadata.quality,\n embedding: result.vector,\n context: result.metadata.context,\n timestamp: result.metadata.timestamp\n }));\n }\n\n /**\n * Store a pattern (for ReasoningBank)\n */\n async storePattern(pattern: Pattern): Promise<string> {\n await this.initialize();\n\n if (!pattern.embedding) {\n pattern.embedding = await this.getEmbedding(`${pattern.input} ${pattern.output}`);\n }\n\n const patternId = pattern.id || this.generateId('pattern');\n\n await this.db.insert({\n id: patternId,\n vector: pattern.embedding,\n metadata: {\n type: 'pattern',\n task: pattern.task,\n input: pattern.input,\n output: pattern.output,\n quality: pattern.quality,\n context: pattern.context,\n timestamp: pattern.timestamp || Date.now()\n }\n });\n\n this.emit('pattern:stored', patternId);\n return patternId;\n }\n\n /**\n * Search for similar patterns\n */\n async searchPatterns(\n query: string,\n k: number = 5,\n minQuality?: number\n ): Promise<Pattern[]> {\n await this.initialize();\n\n const queryEmbedding = await this.getEmbedding(query);\n\n const filter: Record<string, any> = { type: 'pattern' };\n if (minQuality !== undefined) {\n filter.quality = { $gte: minQuality };\n }\n\n const results = await this.db.search({\n vector: queryEmbedding,\n k,\n filter: Object.keys(filter).length > 1 ? filter : undefined\n });\n\n return results.map((result: any) => ({\n id: result.id,\n task: result.metadata.task,\n input: result.metadata.input,\n output: result.metadata.output,\n quality: result.metadata.quality,\n embedding: result.vector,\n context: result.metadata.context,\n timestamp: result.metadata.timestamp\n }));\n }\n\n /**\n * Get database statistics\n */\n async getStats(): Promise<{\n totalVectors: number;\n totalEpisodes: number;\n totalPatterns: number;\n avgQuality: number;\n }> {\n await this.initialize();\n\n const stats = await this.db.stats();\n\n // Count by type\n const allResults = await this.db.search({\n vector: Array(this.config.vectorDimensions).fill(0),\n k: 10000 // Get all\n });\n\n const episodes = allResults.filter((r: any) => r.metadata.type === 'episode');\n const patterns = allResults.filter((r: any) => r.metadata.type === 'pattern');\n\n const avgQuality =\n patterns.reduce((sum: number, p: any) => sum + (p.metadata.quality || 0), 0) /\n (patterns.length || 1);\n\n return {\n totalVectors: stats.totalVectors || 0,\n totalEpisodes: episodes.length,\n totalPatterns: patterns.length,\n avgQuality\n };\n }\n\n /**\n * Close database connection\n */\n async close(): Promise<void> {\n this.removeAllListeners();\n this.embeddingCache.clear();\n\n if (this.db) {\n await this.db.close();\n this.db = null;\n }\n\n this.initialized = false;\n }\n\n /**\n * Generate embedding for text (with caching)\n *\n * Note: This is a simple mock. In production, replace with:\n * - OpenAI embeddings API\n * - Local transformer model\n * - SentenceTransformers\n */\n private async getEmbedding(text: string): Promise<number[]> {\n // Check cache\n if (this.embeddingCache.has(text)) {\n return this.embeddingCache.get(text)!;\n }\n\n // Simple hash-based embedding (REPLACE IN PRODUCTION)\n const embedding = this.simpleHashEmbedding(text);\n\n // Cache it\n this.embeddingCache.set(text, embedding);\n if (this.embeddingCache.size > 1000) {\n // LRU-style cleanup\n const firstKey = this.embeddingCache.keys().next().value as string | undefined;\n if (firstKey) {\n this.embeddingCache.delete(firstKey);\n }\n }\n\n return embedding;\n }\n\n /**\n * Simple hash-based embedding (MOCK - REPLACE IN PRODUCTION)\n *\n * Production alternatives:\n * 1. OpenAI: https://platform.openai.com/docs/guides/embeddings\n * 2. Transformers.js: https://huggingface.co/docs/transformers.js\n * 3. SBERT: https://www.sbert.net/\n */\n private simpleHashEmbedding(text: string): number[] {\n const embedding = new Array(this.config.vectorDimensions);\n\n // Seed with text hash\n let hash = 0;\n for (let i = 0; i < text.length; i++) {\n hash = (hash << 5) - hash + text.charCodeAt(i);\n hash = hash & hash;\n }\n\n // Generate pseudo-random embedding\n for (let i = 0; i < this.config.vectorDimensions; i++) {\n const seed = hash + i * 2654435761;\n const x = Math.sin(seed) * 10000;\n embedding[i] = x - Math.floor(x);\n }\n\n // Normalize\n const norm = Math.sqrt(embedding.reduce((sum, v) => sum + v * v, 0));\n return embedding.map(v => v / norm);\n }\n\n /**\n * Generate unique ID\n */\n private generateId(prefix: string): string {\n return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n\n/**\n * Convenience function to create a fast AgentDB client\n */\nexport function createFastAgentDB(config?: {\n path?: string;\n vectorDimensions?: number;\n enableHNSW?: boolean;\n}): AgentDBFast {\n return new AgentDBFast(config);\n}\n\n/**\n * Performance comparison helper\n */\nexport async function benchmarkAgentDB(): Promise<{\n cli: { store: number; retrieve: number };\n api: { store: number; retrieve: number };\n speedup: { store: number; retrieve: number };\n}> {\n const client = createFastAgentDB({ path: '.agentdb-benchmark' });\n\n // API benchmark\n const apiStoreStart = Date.now();\n const episodeId = await client.storeEpisode({\n sessionId: 'test-session',\n task: 'test-task',\n trajectory: ['step1', 'step2'],\n reward: 0.8\n });\n const apiStoreTime = Date.now() - apiStoreStart;\n\n const apiRetrieveStart = Date.now();\n await client.retrieveEpisodes({ task: 'test-task', k: 5 });\n const apiRetrieveTime = Date.now() - apiRetrieveStart;\n\n await client.close();\n\n // CLI times from benchmarks\n const cliStoreTime = 2350;\n const cliRetrieveTime = 2400;\n\n return {\n cli: {\n store: cliStoreTime,\n retrieve: cliRetrieveTime\n },\n api: {\n store: apiStoreTime,\n retrieve: apiRetrieveTime\n },\n speedup: {\n store: cliStoreTime / apiStoreTime,\n retrieve: cliRetrieveTime / apiRetrieveTime\n }\n };\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attention-fallbacks.d.ts","sourceRoot":"","sources":["../../src/core/attention-fallbacks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Attention Module Fallbacks
3
+ *
4
+ * Since @ruvector/attention is completely broken, provide JavaScript fallbacks
5
+ * Performance will be slower but functionality will work
6
+ */
7
+ /**
8
+ * Scaled Dot-Product Attention
9
+ * The core attention mechanism
10
+ */
11
+ export function scaledDotProductAttention(query, key, value, mask) {
12
+ const dk = query.length;
13
+ // Compute attention scores: Q · K^T / sqrt(dk)
14
+ let score = 0;
15
+ for (let i = 0; i < dk; i++) {
16
+ score += query[i] * key[i];
17
+ }
18
+ score /= Math.sqrt(dk);
19
+ // Apply mask if provided
20
+ if (mask && mask[0] === 0) {
21
+ score = -Infinity;
22
+ }
23
+ // Softmax (single score version)
24
+ const expScore = Math.exp(score);
25
+ const weight = expScore; // Simplified for single K,V pair
26
+ // Weighted value
27
+ const output = value.map(v => v * weight);
28
+ return { output, weights: [weight] };
29
+ }
30
+ /**
31
+ * Multi-Head Attention (JavaScript fallback)
32
+ *
33
+ * Replaces broken @ruvector/attention.multiHeadAttention
34
+ */
35
+ export class MultiHeadAttention {
36
+ numHeads;
37
+ hiddenDim;
38
+ headDim;
39
+ queryWeights;
40
+ keyWeights;
41
+ valueWeights;
42
+ outputWeights;
43
+ constructor(config) {
44
+ this.numHeads = config.numHeads || 8;
45
+ this.hiddenDim = config.hiddenDim;
46
+ this.headDim = Math.floor(this.hiddenDim / this.numHeads);
47
+ // Initialize weights (random)
48
+ this.queryWeights = this.initializeWeights();
49
+ this.keyWeights = this.initializeWeights();
50
+ this.valueWeights = this.initializeWeights();
51
+ this.outputWeights = this.initializeOutputWeights();
52
+ }
53
+ initializeWeights() {
54
+ const weights = [];
55
+ for (let h = 0; h < this.numHeads; h++) {
56
+ const headWeights = [];
57
+ for (let i = 0; i < this.headDim; i++) {
58
+ const row = [];
59
+ for (let j = 0; j < this.hiddenDim; j++) {
60
+ row.push((Math.random() - 0.5) * 0.1);
61
+ }
62
+ headWeights.push(row);
63
+ }
64
+ weights.push(headWeights);
65
+ }
66
+ return weights;
67
+ }
68
+ initializeOutputWeights() {
69
+ const weights = [];
70
+ for (let i = 0; i < this.hiddenDim; i++) {
71
+ const row = [];
72
+ for (let j = 0; j < this.hiddenDim; j++) {
73
+ row.push((Math.random() - 0.5) * 0.1);
74
+ }
75
+ weights.push(row);
76
+ }
77
+ return weights;
78
+ }
79
+ forward(query, key, value, mask) {
80
+ const headOutputs = [];
81
+ const allWeights = [];
82
+ // Process each head
83
+ for (let h = 0; h < this.numHeads; h++) {
84
+ // Project to head dimension
85
+ const q = this.project(query, this.queryWeights[h]);
86
+ const k = this.project(key, this.keyWeights[h]);
87
+ const v = this.project(value, this.valueWeights[h]);
88
+ // Attention for this head
89
+ const { output, weights } = scaledDotProductAttention(q, k, v, mask);
90
+ headOutputs.push(output);
91
+ allWeights.push(weights);
92
+ }
93
+ // Concatenate heads
94
+ const concatenated = headOutputs.flat();
95
+ // Output projection
96
+ const output = this.project(concatenated, this.outputWeights);
97
+ return { output, attentionWeights: allWeights };
98
+ }
99
+ project(input, weights) {
100
+ const output = [];
101
+ for (let i = 0; i < weights.length; i++) {
102
+ let sum = 0;
103
+ for (let j = 0; j < input.length; j++) {
104
+ sum += input[j] * weights[i][j];
105
+ }
106
+ output.push(sum);
107
+ }
108
+ return output;
109
+ }
110
+ }
111
+ /**
112
+ * Flash Attention (optimized fallback)
113
+ *
114
+ * Replaces broken @ruvector/attention.flashAttention
115
+ * Uses tiling/chunking for better memory efficiency
116
+ */
117
+ export class FlashAttention {
118
+ hiddenDim;
119
+ blockSize;
120
+ constructor(config) {
121
+ this.hiddenDim = config.hiddenDim;
122
+ this.blockSize = Math.min(64, this.hiddenDim); // Tile size
123
+ }
124
+ forward(query, key, value, numHeads = 8) {
125
+ const seqLen = query.length;
126
+ const headDim = this.hiddenDim / numHeads;
127
+ const output = [];
128
+ const attentionScores = [];
129
+ // Process in blocks for memory efficiency
130
+ for (let i = 0; i < seqLen; i += this.blockSize) {
131
+ const blockEnd = Math.min(i + this.blockSize, seqLen);
132
+ for (let qi = i; qi < blockEnd; qi++) {
133
+ const scores = [];
134
+ let maxScore = -Infinity;
135
+ // Compute attention scores for this query
136
+ for (let ki = 0; ki < seqLen; ki++) {
137
+ let score = 0;
138
+ for (let d = 0; d < query[qi].length; d++) {
139
+ score += query[qi][d] * key[ki][d];
140
+ }
141
+ score /= Math.sqrt(headDim);
142
+ scores.push(score);
143
+ maxScore = Math.max(maxScore, score);
144
+ }
145
+ // Numerically stable softmax
146
+ const expScores = scores.map(s => Math.exp(s - maxScore));
147
+ const sumExp = expScores.reduce((a, b) => a + b, 0);
148
+ const weights = expScores.map(e => e / sumExp);
149
+ // Weighted sum of values
150
+ const outputRow = new Array(value[0].length).fill(0);
151
+ for (let vi = 0; vi < seqLen; vi++) {
152
+ for (let d = 0; d < value[vi].length; d++) {
153
+ outputRow[d] += weights[vi] * value[vi][d];
154
+ }
155
+ }
156
+ output.push(outputRow);
157
+ attentionScores.push(weights);
158
+ }
159
+ }
160
+ return { output, attentionScores };
161
+ }
162
+ }
163
+ /**
164
+ * Linear Attention (fallback)
165
+ *
166
+ * O(n) complexity approximation of attention
167
+ */
168
+ export class LinearAttention {
169
+ hiddenDim;
170
+ featureMap;
171
+ constructor(config) {
172
+ this.hiddenDim = config.hiddenDim;
173
+ // ELU feature map
174
+ this.featureMap = (x) => (x > 0 ? x : Math.exp(x) - 1);
175
+ }
176
+ forward(query, key, value) {
177
+ const seqLen = query.length;
178
+ const dim = value[0].length;
179
+ // Apply feature map
180
+ const queryMapped = query.map(q => q.map(this.featureMap));
181
+ const keyMapped = key.map(k => k.map(this.featureMap));
182
+ // Compute K^T V (dimension: [dim, valueDim])
183
+ const ktv = Array.from({ length: this.hiddenDim }, () => Array(dim).fill(0));
184
+ for (let i = 0; i < seqLen; i++) {
185
+ for (let d1 = 0; d1 < this.hiddenDim; d1++) {
186
+ for (let d2 = 0; d2 < dim; d2++) {
187
+ ktv[d1][d2] += keyMapped[i][d1] * value[i][d2];
188
+ }
189
+ }
190
+ }
191
+ // Compute Q (K^T V)
192
+ const output = [];
193
+ for (let i = 0; i < seqLen; i++) {
194
+ const row = [];
195
+ for (let d2 = 0; d2 < dim; d2++) {
196
+ let sum = 0;
197
+ for (let d1 = 0; d1 < this.hiddenDim; d1++) {
198
+ sum += queryMapped[i][d1] * ktv[d1][d2];
199
+ }
200
+ row.push(sum);
201
+ }
202
+ // Normalize
203
+ const normSum = queryMapped[i].reduce((a, b) => a + b, 0);
204
+ output.push(row.map(v => v / (normSum + 1e-8)));
205
+ }
206
+ return { output };
207
+ }
208
+ }
209
+ /**
210
+ * Hyperbolic Attention (simplified fallback)
211
+ *
212
+ * Approximation using hyperbolic geometry
213
+ */
214
+ export class HyperbolicAttention {
215
+ hiddenDim;
216
+ curvature;
217
+ constructor(config) {
218
+ this.hiddenDim = config.hiddenDim;
219
+ this.curvature = -1.0; // Poincaré ball curvature
220
+ }
221
+ forward(query, key, value) {
222
+ // Hyperbolic distance (simplified)
223
+ const distance = this.hyperbolicDistance(query, key);
224
+ // Attention weight based on hyperbolic distance
225
+ const weight = Math.exp(-distance);
226
+ // Weighted value
227
+ const output = value.map(v => v * weight);
228
+ return { output, distance };
229
+ }
230
+ hyperbolicDistance(a, b) {
231
+ // Simplified hyperbolic distance in Poincaré ball
232
+ let normDiffSq = 0;
233
+ for (let i = 0; i < a.length; i++) {
234
+ const diff = a[i] - b[i];
235
+ normDiffSq += diff * diff;
236
+ }
237
+ const normASq = a.reduce((sum, v) => sum + v * v, 0);
238
+ const normBSq = b.reduce((sum, v) => sum + v * v, 0);
239
+ const numerator = normDiffSq;
240
+ const denominator = (1 - normASq) * (1 - normBSq);
241
+ return Math.acosh(1 + (2 * numerator) / denominator);
242
+ }
243
+ }
244
+ /**
245
+ * MoE (Mixture of Experts) Attention (fallback)
246
+ *
247
+ * Routes to different expert attention modules
248
+ */
249
+ export class MoEAttention {
250
+ experts;
251
+ numExperts;
252
+ gatingWeights;
253
+ constructor(config) {
254
+ this.numExperts = config.numExperts || 4;
255
+ this.experts = Array.from({ length: this.numExperts }, () => new MultiHeadAttention(config));
256
+ // Initialize gating network weights
257
+ this.gatingWeights = Array.from({ length: this.numExperts }, () => Array.from({ length: config.hiddenDim }, () => (Math.random() - 0.5) * 0.1));
258
+ }
259
+ forward(query, key, value, topK = 2) {
260
+ // Compute gating scores
261
+ const gatingScores = this.gatingWeights.map(weights => {
262
+ let score = 0;
263
+ for (let i = 0; i < query.length; i++) {
264
+ score += query[i] * weights[i];
265
+ }
266
+ return score;
267
+ });
268
+ // Softmax over top-K experts
269
+ const expScores = gatingScores.map(s => Math.exp(s));
270
+ const sumExp = expScores.reduce((a, b) => a + b, 0);
271
+ const expertWeights = expScores.map(e => e / sumExp);
272
+ // Get top-K experts
273
+ const expertIndices = expertWeights
274
+ .map((weight, idx) => ({ weight, idx }))
275
+ .sort((a, b) => b.weight - a.weight)
276
+ .slice(0, topK);
277
+ // Weighted combination of expert outputs
278
+ const output = new Array(query.length).fill(0);
279
+ for (const { weight, idx } of expertIndices) {
280
+ const expertOutput = this.experts[idx].forward(query, key, value).output;
281
+ for (let i = 0; i < output.length; i++) {
282
+ output[i] += weight * expertOutput[i];
283
+ }
284
+ }
285
+ return { output, expertWeights };
286
+ }
287
+ }
288
+ /**
289
+ * Check if native attention is available
290
+ */
291
+ export function isNativeAttentionAvailable() {
292
+ try {
293
+ const attention = require('@ruvector/attention');
294
+ // Try a simple operation
295
+ const result = attention.flashAttention(new Float32Array([1, 0]), new Float32Array([1, 0]), new Float32Array([1, 0]), 1);
296
+ return true;
297
+ }
298
+ catch {
299
+ return false;
300
+ }
301
+ }
302
+ /**
303
+ * Factory function to create appropriate attention module
304
+ */
305
+ export function createAttention(type, config) {
306
+ switch (type) {
307
+ case 'multi-head':
308
+ return new MultiHeadAttention(config);
309
+ case 'flash':
310
+ return new FlashAttention(config);
311
+ case 'linear':
312
+ return new LinearAttention(config);
313
+ case 'hyperbolic':
314
+ return new HyperbolicAttention(config);
315
+ case 'moe':
316
+ return new MoEAttention(config);
317
+ default:
318
+ return new MultiHeadAttention(config);
319
+ }
320
+ }
321
+ //# sourceMappingURL=attention-fallbacks.js.map