agentic-flow 2.0.2 → 2.0.4

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 (324) hide show
  1. package/.claude/agents/test-neural.md +14 -0
  2. package/.claude/settings.json +9 -133
  3. package/README.md +622 -1862
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/billing/mcp/tools.js +0 -1
  6. package/dist/billing/mcp/tools.js.map +1 -1
  7. package/dist/cli/commands/hooks.d.ts.map +1 -1
  8. package/dist/cli/commands/hooks.js +4 -79
  9. package/dist/cli/commands/hooks.js.map +1 -1
  10. package/dist/cli-proxy.js +1 -89
  11. package/dist/cli-proxy.js.map +1 -1
  12. package/dist/core/agentdb-fast.js +3 -3
  13. package/dist/core/agentdb-fast.js.map +1 -1
  14. package/dist/core/agentdb-wrapper-enhanced.d.ts.map +1 -1
  15. package/dist/core/agentdb-wrapper-enhanced.js +4 -20
  16. package/dist/core/agentdb-wrapper-enhanced.js.map +1 -1
  17. package/dist/core/agentdb-wrapper.d.ts +2 -3
  18. package/dist/core/agentdb-wrapper.d.ts.map +1 -1
  19. package/dist/core/agentdb-wrapper.js +1 -15
  20. package/dist/core/agentdb-wrapper.js.map +1 -1
  21. package/dist/core/attention-native.d.ts +0 -4
  22. package/dist/core/attention-native.d.ts.map +1 -1
  23. package/dist/core/attention-native.js +2 -14
  24. package/dist/core/attention-native.js.map +1 -1
  25. package/dist/federation/SecurityManager.d.ts +2 -11
  26. package/dist/federation/SecurityManager.d.ts.map +1 -1
  27. package/dist/federation/SecurityManager.js +17 -50
  28. package/dist/federation/SecurityManager.js.map +1 -1
  29. package/dist/federation/integrations/supabase-adapter-debug.js +3 -3
  30. package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -1
  31. package/dist/hooks/swarm-learning-optimizer.js +5 -5
  32. package/dist/hooks/swarm-learning-optimizer.js.map +1 -1
  33. package/dist/intelligence/IntelligenceStore.d.ts +26 -35
  34. package/dist/intelligence/IntelligenceStore.d.ts.map +1 -1
  35. package/dist/intelligence/IntelligenceStore.js +123 -308
  36. package/dist/intelligence/IntelligenceStore.js.map +1 -1
  37. package/dist/intelligence/RuVectorIntelligence.d.ts +1 -26
  38. package/dist/intelligence/RuVectorIntelligence.d.ts.map +1 -1
  39. package/dist/intelligence/RuVectorIntelligence.js +10 -49
  40. package/dist/intelligence/RuVectorIntelligence.js.map +1 -1
  41. package/dist/intelligence/agent-booster-enhanced.d.ts +0 -1
  42. package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
  43. package/dist/intelligence/agent-booster-enhanced.js +3 -24
  44. package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
  45. package/dist/intelligence/index.d.ts +3 -29
  46. package/dist/intelligence/index.d.ts.map +1 -1
  47. package/dist/intelligence/index.js +3 -13
  48. package/dist/intelligence/index.js.map +1 -1
  49. package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
  50. package/dist/mcp/claudeFlowSdkServer.js +3 -9
  51. package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
  52. package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +5 -5
  53. package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -1
  54. package/dist/mcp/fastmcp/tools/swarm/init.d.ts.map +1 -1
  55. package/dist/mcp/fastmcp/tools/swarm/init.js +7 -36
  56. package/dist/mcp/fastmcp/tools/swarm/init.js.map +1 -1
  57. package/dist/mcp/fastmcp/tools/swarm/spawn.d.ts.map +1 -1
  58. package/dist/mcp/fastmcp/tools/swarm/spawn.js +8 -47
  59. package/dist/mcp/fastmcp/tools/swarm/spawn.js.map +1 -1
  60. package/dist/mcp/tools/agent-booster-tools.d.ts +1 -1
  61. package/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -1
  62. package/dist/mcp/tools/agent-booster-tools.js +4 -10
  63. package/dist/mcp/tools/agent-booster-tools.js.map +1 -1
  64. package/dist/mcp/tools/sona-tools.d.ts.map +1 -1
  65. package/dist/mcp/tools/sona-tools.js +0 -6
  66. package/dist/mcp/tools/sona-tools.js.map +1 -1
  67. package/dist/optimizations/agent-booster-migration.d.ts.map +1 -1
  68. package/dist/optimizations/agent-booster-migration.js +2 -5
  69. package/dist/optimizations/agent-booster-migration.js.map +1 -1
  70. package/dist/proxy/anthropic-to-openrouter.js.map +1 -1
  71. package/dist/proxy/anthropic-to-requesty.js.map +1 -1
  72. package/dist/proxy/quic-proxy.d.ts +1 -0
  73. package/dist/proxy/quic-proxy.d.ts.map +1 -1
  74. package/dist/proxy/quic-proxy.js +2 -2
  75. package/dist/proxy/quic-proxy.js.map +1 -1
  76. package/dist/reasoningbank/AdvancedMemory.js +1 -1
  77. package/dist/reasoningbank/AdvancedMemory.js.map +1 -1
  78. package/dist/reasoningbank/HybridBackend.d.ts.map +1 -1
  79. package/dist/reasoningbank/HybridBackend.js +5 -2
  80. package/dist/reasoningbank/HybridBackend.js.map +1 -1
  81. package/dist/reasoningbank/backend-selector.d.ts +1 -11
  82. package/dist/reasoningbank/backend-selector.d.ts.map +1 -1
  83. package/dist/reasoningbank/backend-selector.js +5 -45
  84. package/dist/reasoningbank/backend-selector.js.map +1 -1
  85. package/dist/reasoningbank/core/consolidate.d.ts.map +1 -1
  86. package/dist/reasoningbank/core/consolidate.js +45 -113
  87. package/dist/reasoningbank/core/consolidate.js.map +1 -1
  88. package/dist/reasoningbank/index-new.d.ts +6 -1
  89. package/dist/reasoningbank/index-new.d.ts.map +1 -1
  90. package/dist/reasoningbank/index-new.js +6 -1
  91. package/dist/reasoningbank/index-new.js.map +1 -1
  92. package/dist/reasoningbank/index.d.ts +6 -2
  93. package/dist/reasoningbank/index.d.ts.map +1 -1
  94. package/dist/reasoningbank/index.js +6 -2
  95. package/dist/reasoningbank/index.js.map +1 -1
  96. package/dist/reasoningbank/utils/embeddings.d.ts +0 -1
  97. package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
  98. package/dist/reasoningbank/utils/embeddings.js +26 -53
  99. package/dist/reasoningbank/utils/embeddings.js.map +1 -1
  100. package/dist/router/index.d.ts +17 -0
  101. package/dist/router/index.d.ts.map +1 -0
  102. package/dist/router/index.js +19 -0
  103. package/dist/router/index.js.map +1 -0
  104. package/dist/router/providers/onnx-local-optimized.d.ts +0 -2
  105. package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
  106. package/dist/router/providers/onnx-local-optimized.js +0 -10
  107. package/dist/router/providers/onnx-local-optimized.js.map +1 -1
  108. package/dist/router/providers/onnx-local.d.ts +0 -1
  109. package/dist/router/providers/onnx-local.d.ts.map +1 -1
  110. package/dist/router/providers/onnx-local.js +5 -22
  111. package/dist/router/providers/onnx-local.js.map +1 -1
  112. package/dist/services/embedding-service.js.map +1 -1
  113. package/dist/services/sona-agent-training.d.ts +0 -1
  114. package/dist/services/sona-agent-training.d.ts.map +1 -1
  115. package/dist/services/sona-agent-training.js.map +1 -1
  116. package/dist/services/sona-agentdb-integration.d.ts.map +1 -1
  117. package/dist/services/sona-agentdb-integration.js +6 -9
  118. package/dist/services/sona-agentdb-integration.js.map +1 -1
  119. package/dist/services/sona-service.d.ts.map +1 -1
  120. package/dist/services/sona-service.js +5 -6
  121. package/dist/services/sona-service.js.map +1 -1
  122. package/dist/utils/cli.d.ts +1 -1
  123. package/dist/utils/cli.d.ts.map +1 -1
  124. package/dist/utils/cli.js +0 -21
  125. package/dist/utils/cli.js.map +1 -1
  126. package/package.json +7 -19
  127. package/scripts/postinstall.js +4 -45
  128. package/wasm/reasoningbank/reasoningbank_wasm_bg.js +2 -2
  129. package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm +0 -0
  130. package/.claude/agents/.claude-flow/metrics/agent-metrics.json +0 -1
  131. package/.claude/agents/.claude-flow/metrics/performance.json +0 -87
  132. package/.claude/agents/.claude-flow/metrics/task-metrics.json +0 -10
  133. package/.claude/skills/.claude-flow/metrics/agent-metrics.json +0 -1
  134. package/.claude/skills/.claude-flow/metrics/performance.json +0 -87
  135. package/.claude/skills/.claude-flow/metrics/task-metrics.json +0 -10
  136. package/.claude/skills/agentic-flow-quickstart/skill.md +0 -69
  137. package/.claude/skills/hooks-automation/skill.md +0 -155
  138. package/.claude/skills/memory-patterns/skill.md +0 -110
  139. package/.claude/skills/skill-builder/.claude-flow/metrics/agent-metrics.json +0 -1
  140. package/.claude/skills/skill-builder/.claude-flow/metrics/performance.json +0 -87
  141. package/.claude/skills/skill-builder/.claude-flow/metrics/task-metrics.json +0 -10
  142. package/.claude/skills/sparc-methodology/skill.md +0 -137
  143. package/.claude/skills/swarm-coordination/skill.md +0 -94
  144. package/.claude/skills/worker-benchmarks/skill.md +0 -135
  145. package/.claude/skills/worker-integration/skill.md +0 -154
  146. package/.claude/statusline.mjs +0 -109
  147. package/.claude/statusline.sh +0 -71
  148. package/dist/agentdb/benchmarks/comprehensive-benchmark.js +0 -664
  149. package/dist/agentdb/benchmarks/frontier-benchmark.js +0 -419
  150. package/dist/agentdb/benchmarks/reflexion-benchmark.js +0 -370
  151. package/dist/agentdb/cli/agentdb-cli.js +0 -717
  152. package/dist/agentdb/controllers/CausalMemoryGraph.js +0 -322
  153. package/dist/agentdb/controllers/CausalRecall.js +0 -281
  154. package/dist/agentdb/controllers/EmbeddingService.d.ts +0 -37
  155. package/dist/agentdb/controllers/EmbeddingService.d.ts.map +0 -1
  156. package/dist/agentdb/controllers/EmbeddingService.js +0 -119
  157. package/dist/agentdb/controllers/EmbeddingService.js.map +0 -1
  158. package/dist/agentdb/controllers/ExplainableRecall.js +0 -387
  159. package/dist/agentdb/controllers/NightlyLearner.js +0 -382
  160. package/dist/agentdb/controllers/ReflexionMemory.js +0 -239
  161. package/dist/agentdb/controllers/SkillLibrary.js +0 -276
  162. package/dist/agentdb/controllers/frontier-index.js +0 -9
  163. package/dist/agentdb/controllers/index.js +0 -8
  164. package/dist/agentdb/optimizations/BatchOperations.js +0 -198
  165. package/dist/agentdb/optimizations/QueryOptimizer.js +0 -225
  166. package/dist/agentdb/optimizations/index.js +0 -7
  167. package/dist/agentdb/tests/frontier-features.test.js +0 -665
  168. package/dist/benchmarks/embeddings-benchmark.d.ts +0 -38
  169. package/dist/benchmarks/embeddings-benchmark.d.ts.map +0 -1
  170. package/dist/benchmarks/embeddings-benchmark.js +0 -282
  171. package/dist/benchmarks/embeddings-benchmark.js.map +0 -1
  172. package/dist/cli/commands/embeddings.d.ts +0 -12
  173. package/dist/cli/commands/embeddings.d.ts.map +0 -1
  174. package/dist/cli/commands/embeddings.js +0 -386
  175. package/dist/cli/commands/embeddings.js.map +0 -1
  176. package/dist/cli/commands/init.d.ts +0 -8
  177. package/dist/cli/commands/init.d.ts.map +0 -1
  178. package/dist/cli/commands/init.js +0 -514
  179. package/dist/cli/commands/init.js.map +0 -1
  180. package/dist/cli/commands/workers.d.ts +0 -9
  181. package/dist/cli/commands/workers.d.ts.map +0 -1
  182. package/dist/cli/commands/workers.js +0 -991
  183. package/dist/cli/commands/workers.js.map +0 -1
  184. package/dist/cli/skills-manager.js +0 -1297
  185. package/dist/cli/update-message.js +0 -175
  186. package/dist/embeddings/index.d.ts +0 -17
  187. package/dist/embeddings/index.d.ts.map +0 -1
  188. package/dist/embeddings/index.js +0 -17
  189. package/dist/embeddings/index.js.map +0 -1
  190. package/dist/embeddings/neural-substrate.d.ts +0 -206
  191. package/dist/embeddings/neural-substrate.d.ts.map +0 -1
  192. package/dist/embeddings/neural-substrate.js +0 -629
  193. package/dist/embeddings/neural-substrate.js.map +0 -1
  194. package/dist/embeddings/optimized-embedder.d.ts +0 -103
  195. package/dist/embeddings/optimized-embedder.d.ts.map +0 -1
  196. package/dist/embeddings/optimized-embedder.js +0 -730
  197. package/dist/embeddings/optimized-embedder.js.map +0 -1
  198. package/dist/examples/embedding-geometry.d.ts +0 -105
  199. package/dist/examples/embedding-geometry.d.ts.map +0 -1
  200. package/dist/examples/embedding-geometry.js +0 -528
  201. package/dist/examples/embedding-geometry.js.map +0 -1
  202. package/dist/memory/SharedMemoryPool.d.ts +0 -129
  203. package/dist/memory/SharedMemoryPool.d.ts.map +0 -1
  204. package/dist/memory/SharedMemoryPool.js +0 -243
  205. package/dist/memory/SharedMemoryPool.js.map +0 -1
  206. package/dist/memory/index.d.ts +0 -8
  207. package/dist/memory/index.d.ts.map +0 -1
  208. package/dist/memory/index.js +0 -7
  209. package/dist/memory/index.js.map +0 -1
  210. package/dist/proxy/http3-proxy-old.js +0 -331
  211. package/dist/proxy/proxy/anthropic-to-gemini.js +0 -439
  212. package/dist/proxy/utils/logger.js +0 -59
  213. package/dist/reasoningbank/agentdb-adapter.js +0 -125
  214. package/dist/reasoningbank/core/database.js +0 -250
  215. package/dist/reasoningbank/core/memory-engine.js +0 -335
  216. package/dist/swarm/ipfs-swarm.d.ts +0 -265
  217. package/dist/swarm/ipfs-swarm.d.ts.map +0 -1
  218. package/dist/swarm/ipfs-swarm.js +0 -508
  219. package/dist/swarm/ipfs-swarm.js.map +0 -1
  220. package/dist/swarm/p2p-free-swarm.d.ts +0 -344
  221. package/dist/swarm/p2p-free-swarm.d.ts.map +0 -1
  222. package/dist/swarm/p2p-free-swarm.js +0 -603
  223. package/dist/swarm/p2p-free-swarm.js.map +0 -1
  224. package/dist/swarm/real-p2p-swarm.d.ts +0 -183
  225. package/dist/swarm/real-p2p-swarm.d.ts.map +0 -1
  226. package/dist/swarm/real-p2p-swarm.js +0 -469
  227. package/dist/swarm/real-p2p-swarm.js.map +0 -1
  228. package/dist/utils/adaptive-pool-sizing.js +0 -414
  229. package/dist/utils/agentdbCommands.js +0 -175
  230. package/dist/utils/circular-rate-limiter.js +0 -391
  231. package/dist/utils/dynamic-compression.js +0 -298
  232. package/dist/utils/http2-multiplexing.js +0 -319
  233. package/dist/utils/index.d.ts +0 -6
  234. package/dist/utils/index.d.ts.map +0 -1
  235. package/dist/utils/index.js +0 -6
  236. package/dist/utils/index.js.map +0 -1
  237. package/dist/utils/lazy-auth.js +0 -311
  238. package/dist/utils/model-cache.d.ts +0 -61
  239. package/dist/utils/model-cache.d.ts.map +0 -1
  240. package/dist/utils/model-cache.js +0 -176
  241. package/dist/utils/model-cache.js.map +0 -1
  242. package/dist/utils/server-push.js +0 -251
  243. package/dist/utils/suppress-warnings.d.ts +0 -19
  244. package/dist/utils/suppress-warnings.d.ts.map +0 -1
  245. package/dist/utils/suppress-warnings.js +0 -59
  246. package/dist/utils/suppress-warnings.js.map +0 -1
  247. package/dist/utils/zero-copy-buffer.js +0 -286
  248. package/dist/workers/consolidated-phases.d.ts +0 -40
  249. package/dist/workers/consolidated-phases.d.ts.map +0 -1
  250. package/dist/workers/consolidated-phases.js +0 -497
  251. package/dist/workers/consolidated-phases.js.map +0 -1
  252. package/dist/workers/custom-worker-config.d.ts +0 -133
  253. package/dist/workers/custom-worker-config.d.ts.map +0 -1
  254. package/dist/workers/custom-worker-config.js +0 -215
  255. package/dist/workers/custom-worker-config.js.map +0 -1
  256. package/dist/workers/custom-worker-factory.d.ts +0 -89
  257. package/dist/workers/custom-worker-factory.d.ts.map +0 -1
  258. package/dist/workers/custom-worker-factory.js +0 -404
  259. package/dist/workers/custom-worker-factory.js.map +0 -1
  260. package/dist/workers/dispatch-service.d.ts +0 -123
  261. package/dist/workers/dispatch-service.d.ts.map +0 -1
  262. package/dist/workers/dispatch-service.js +0 -1024
  263. package/dist/workers/dispatch-service.js.map +0 -1
  264. package/dist/workers/hooks-integration.d.ts +0 -79
  265. package/dist/workers/hooks-integration.d.ts.map +0 -1
  266. package/dist/workers/hooks-integration.js +0 -286
  267. package/dist/workers/hooks-integration.js.map +0 -1
  268. package/dist/workers/index.d.ts +0 -42
  269. package/dist/workers/index.d.ts.map +0 -1
  270. package/dist/workers/index.js +0 -52
  271. package/dist/workers/index.js.map +0 -1
  272. package/dist/workers/mcp-tools.d.ts +0 -56
  273. package/dist/workers/mcp-tools.d.ts.map +0 -1
  274. package/dist/workers/mcp-tools.js +0 -359
  275. package/dist/workers/mcp-tools.js.map +0 -1
  276. package/dist/workers/phase-executors.d.ts +0 -22
  277. package/dist/workers/phase-executors.d.ts.map +0 -1
  278. package/dist/workers/phase-executors.js +0 -445
  279. package/dist/workers/phase-executors.js.map +0 -1
  280. package/dist/workers/resource-governor.d.ts +0 -75
  281. package/dist/workers/resource-governor.d.ts.map +0 -1
  282. package/dist/workers/resource-governor.js +0 -187
  283. package/dist/workers/resource-governor.js.map +0 -1
  284. package/dist/workers/ruvector-integration.d.ts +0 -163
  285. package/dist/workers/ruvector-integration.d.ts.map +0 -1
  286. package/dist/workers/ruvector-integration.js +0 -543
  287. package/dist/workers/ruvector-integration.js.map +0 -1
  288. package/dist/workers/ruvector-native-integration.d.ts +0 -91
  289. package/dist/workers/ruvector-native-integration.d.ts.map +0 -1
  290. package/dist/workers/ruvector-native-integration.js +0 -254
  291. package/dist/workers/ruvector-native-integration.js.map +0 -1
  292. package/dist/workers/trigger-detector.d.ts +0 -68
  293. package/dist/workers/trigger-detector.d.ts.map +0 -1
  294. package/dist/workers/trigger-detector.js +0 -281
  295. package/dist/workers/trigger-detector.js.map +0 -1
  296. package/dist/workers/types.d.ts +0 -145
  297. package/dist/workers/types.d.ts.map +0 -1
  298. package/dist/workers/types.js +0 -6
  299. package/dist/workers/types.js.map +0 -1
  300. package/dist/workers/worker-agent-integration.d.ts +0 -140
  301. package/dist/workers/worker-agent-integration.d.ts.map +0 -1
  302. package/dist/workers/worker-agent-integration.js +0 -471
  303. package/dist/workers/worker-agent-integration.js.map +0 -1
  304. package/dist/workers/worker-benchmarks.d.ts +0 -88
  305. package/dist/workers/worker-benchmarks.d.ts.map +0 -1
  306. package/dist/workers/worker-benchmarks.js +0 -452
  307. package/dist/workers/worker-benchmarks.js.map +0 -1
  308. package/dist/workers/worker-registry.d.ts +0 -85
  309. package/dist/workers/worker-registry.d.ts.map +0 -1
  310. package/dist/workers/worker-registry.js +0 -547
  311. package/dist/workers/worker-registry.js.map +0 -1
  312. package/docs/.claude-flow/metrics/agent-metrics.json +0 -1
  313. package/docs/.claude-flow/metrics/performance.json +0 -87
  314. package/docs/.claude-flow/metrics/task-metrics.json +0 -10
  315. package/docs/embeddings/EMBEDDING_GEOMETRY.md +0 -935
  316. /package/.claude/agents/analysis/{analyze-code-quality.md → code-review/analyze-code-quality.md} +0 -0
  317. /package/.claude/agents/architecture/{arch-system-design.md → system-design/arch-system-design.md} +0 -0
  318. /package/.claude/agents/data/{data-ml-model.md → ml/data-ml-model.md} +0 -0
  319. /package/.claude/agents/development/{dev-backend-api.md → backend/dev-backend-api.md} +0 -0
  320. /package/.claude/agents/devops/{ops-cicd-github.md → ci-cd/ops-cicd-github.md} +0 -0
  321. /package/.claude/agents/documentation/{docs-api-openapi.md → api-docs/docs-api-openapi.md} +0 -0
  322. /package/.claude/agents/specialized/{spec-mobile-react-native.md → mobile/spec-mobile-react-native.md} +0 -0
  323. /package/.claude/agents/testing/{tdd-london-swarm.md → unit/tdd-london-swarm.md} +0 -0
  324. /package/.claude/agents/testing/{production-validator.md → validation/production-validator.md} +0 -0
@@ -78,45 +78,29 @@ export class SecurityManager {
78
78
  return payload;
79
79
  }
80
80
  /**
81
- * Get or create encryption key for a tenant (key only, IV generated per operation)
82
- * SECURITY FIX: IV is now generated fresh for each encryption operation
81
+ * Get or create encryption keys for a tenant
83
82
  */
84
- async getEncryptionKey(tenantId) {
85
- // Check cache for encryption key only
86
- const cached = this.encryptionCache.get(tenantId);
87
- if (cached) {
88
- return cached.encryptionKey;
83
+ async getEncryptionKeys(tenantId) {
84
+ // Check cache
85
+ if (this.encryptionCache.has(tenantId)) {
86
+ return this.encryptionCache.get(tenantId);
89
87
  }
90
- // Generate new key for tenant
88
+ // Generate new keys for tenant
91
89
  // In production, these would be stored in a secure key management service
92
90
  const encryptionKey = crypto.randomBytes(32); // 256-bit key
93
- // Cache only the key (IV will be generated per-operation)
94
- // We store a dummy IV in the cache structure for backwards compatibility
95
- const keys = { encryptionKey, iv: Buffer.alloc(16) };
91
+ const iv = crypto.randomBytes(16); // 128-bit IV
92
+ const keys = { encryptionKey, iv };
93
+ // Cache keys
96
94
  this.encryptionCache.set(tenantId, keys);
97
- logger.info('Generated encryption key for tenant', { tenantId });
98
- return encryptionKey;
99
- }
100
- /**
101
- * Legacy method for backwards compatibility - prefer getEncryptionKey
102
- * @deprecated Use getEncryptionKey instead and generate IV per-operation
103
- */
104
- async getEncryptionKeys(tenantId) {
105
- const encryptionKey = await this.getEncryptionKey(tenantId);
106
- // SECURITY: Generate fresh IV for each call (not cached)
107
- const iv = crypto.randomBytes(16);
108
- return { encryptionKey, iv };
95
+ logger.info('Generated encryption keys for tenant', { tenantId });
96
+ return keys;
109
97
  }
110
98
  /**
111
99
  * Encrypt data with AES-256-GCM
112
- * SECURITY FIX: Now generates a fresh IV for each encryption and returns it
113
100
  */
114
101
  async encrypt(data, tenantId) {
115
- const encryptionKey = await this.getEncryptionKey(tenantId);
116
- // SECURITY: Generate fresh IV for EACH encryption operation
117
- // IV reuse with AES-GCM is catastrophic - this fix prevents that
118
- const iv = crypto.randomBytes(16);
119
- const cipher = crypto.createCipheriv(this.algorithm, encryptionKey, iv);
102
+ const keys = await this.getEncryptionKeys(tenantId);
103
+ const cipher = crypto.createCipheriv(this.algorithm, keys.encryptionKey, keys.iv);
120
104
  let encrypted = cipher.update(data, 'utf8', 'base64');
121
105
  encrypted += cipher.final('base64');
122
106
  const authTag = cipher.getAuthTag().toString('base64');
@@ -125,31 +109,14 @@ export class SecurityManager {
125
109
  originalLength: data.length,
126
110
  encryptedLength: encrypted.length
127
111
  });
128
- // SECURITY: Return IV with encrypted data so it can be used for decryption
129
- return { encrypted, authTag, iv: iv.toString('base64') };
112
+ return { encrypted, authTag };
130
113
  }
131
114
  /**
132
115
  * Decrypt data with AES-256-GCM
133
- * SECURITY FIX: Now accepts IV as parameter (required for proper decryption)
134
116
  */
135
- async decrypt(encrypted, authTag, tenantId, iv) {
136
- const encryptionKey = await this.getEncryptionKey(tenantId);
137
- // SECURITY: IV must be provided for proper decryption
138
- // For backwards compatibility, generate warning if not provided
139
- let ivBuffer;
140
- if (iv) {
141
- ivBuffer = Buffer.from(iv, 'base64');
142
- }
143
- else {
144
- // Legacy fallback - try to use cached IV (will fail for new encryptions)
145
- logger.warn('Decrypt called without IV - this may fail for newly encrypted data', { tenantId });
146
- const cached = this.encryptionCache.get(tenantId);
147
- if (!cached) {
148
- throw new Error('No IV provided and no cached keys available');
149
- }
150
- ivBuffer = cached.iv;
151
- }
152
- const decipher = crypto.createDecipheriv(this.algorithm, encryptionKey, ivBuffer);
117
+ async decrypt(encrypted, authTag, tenantId) {
118
+ const keys = await this.getEncryptionKeys(tenantId);
119
+ const decipher = crypto.createDecipheriv(this.algorithm, keys.encryptionKey, keys.iv);
153
120
  decipher.setAuthTag(Buffer.from(authTag, 'base64'));
154
121
  let decrypted = decipher.update(encrypted, 'base64', 'utf8');
155
122
  decrypted += decipher.final('utf8');
@@ -1 +1 @@
1
- {"version":3,"file":"SecurityManager.js","sourceRoot":"","sources":["../../src/federation/SecurityManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Security Manager - Authentication, encryption, and access control\n *\n * Features:\n * - JWT token generation and validation\n * - AES-256 encryption for data at rest\n * - Tenant isolation\n * - mTLS certificate management\n */\n\nimport crypto from 'crypto';\nimport { logger } from '../utils/logger.js';\n\nexport interface AgentTokenPayload {\n agentId: string;\n tenantId: string;\n expiresAt: number;\n}\n\nexport interface EncryptionKeys {\n encryptionKey: Buffer;\n iv: Buffer;\n}\n\nexport class SecurityManager {\n private readonly algorithm = 'aes-256-gcm';\n private readonly jwtSecret: string;\n private encryptionCache: Map<string, EncryptionKeys> = new Map();\n\n constructor() {\n // In production, load from secure vault (AWS Secrets Manager, HashiCorp Vault, etc.)\n this.jwtSecret = process.env.JWT_SECRET || crypto.randomBytes(32).toString('hex');\n }\n\n /**\n * Create JWT token for agent authentication\n */\n async createAgentToken(payload: AgentTokenPayload): Promise<string> {\n const header = {\n alg: 'HS256',\n typ: 'JWT'\n };\n\n const now = Date.now();\n const tokenPayload = {\n ...payload,\n iat: now,\n exp: payload.expiresAt,\n iss: 'agentic-flow-federation'\n };\n\n // Encode header and payload\n const encodedHeader = this.base64UrlEncode(JSON.stringify(header));\n const encodedPayload = this.base64UrlEncode(JSON.stringify(tokenPayload));\n\n // Create signature\n const signature = crypto\n .createHmac('sha256', this.jwtSecret)\n .update(`${encodedHeader}.${encodedPayload}`)\n .digest('base64url');\n\n const token = `${encodedHeader}.${encodedPayload}.${signature}`;\n\n logger.info('Created agent token', {\n agentId: payload.agentId,\n tenantId: payload.tenantId,\n expiresAt: new Date(payload.expiresAt).toISOString()\n });\n\n return token;\n }\n\n /**\n * Verify JWT token\n */\n async verifyAgentToken(token: string): Promise<AgentTokenPayload> {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error('Invalid token format');\n }\n\n const [encodedHeader, encodedPayload, signature] = parts;\n\n // Verify signature\n const expectedSignature = crypto\n .createHmac('sha256', this.jwtSecret)\n .update(`${encodedHeader}.${encodedPayload}`)\n .digest('base64url');\n\n if (signature !== expectedSignature) {\n throw new Error('Invalid token signature');\n }\n\n // Decode payload\n const payload = JSON.parse(this.base64UrlDecode(encodedPayload));\n\n // Check expiration\n if (Date.now() >= payload.exp) {\n throw new Error('Token expired');\n }\n\n logger.debug('Token verified', {\n agentId: payload.agentId,\n tenantId: payload.tenantId\n });\n\n return payload;\n }\n\n /**\n * Get or create encryption key for a tenant (key only, IV generated per operation)\n * SECURITY FIX: IV is now generated fresh for each encryption operation\n */\n async getEncryptionKey(tenantId: string): Promise<Buffer> {\n // Check cache for encryption key only\n const cached = this.encryptionCache.get(tenantId);\n if (cached) {\n return cached.encryptionKey;\n }\n\n // Generate new key for tenant\n // In production, these would be stored in a secure key management service\n const encryptionKey = crypto.randomBytes(32); // 256-bit key\n\n // Cache only the key (IV will be generated per-operation)\n // We store a dummy IV in the cache structure for backwards compatibility\n const keys: EncryptionKeys = { encryptionKey, iv: Buffer.alloc(16) };\n this.encryptionCache.set(tenantId, keys);\n\n logger.info('Generated encryption key for tenant', { tenantId });\n\n return encryptionKey;\n }\n\n /**\n * Legacy method for backwards compatibility - prefer getEncryptionKey\n * @deprecated Use getEncryptionKey instead and generate IV per-operation\n */\n async getEncryptionKeys(tenantId: string): Promise<EncryptionKeys> {\n const encryptionKey = await this.getEncryptionKey(tenantId);\n // SECURITY: Generate fresh IV for each call (not cached)\n const iv = crypto.randomBytes(16);\n return { encryptionKey, iv };\n }\n\n /**\n * Encrypt data with AES-256-GCM\n * SECURITY FIX: Now generates a fresh IV for each encryption and returns it\n */\n async encrypt(data: string, tenantId: string): Promise<{ encrypted: string; authTag: string; iv: string }> {\n const encryptionKey = await this.getEncryptionKey(tenantId);\n\n // SECURITY: Generate fresh IV for EACH encryption operation\n // IV reuse with AES-GCM is catastrophic - this fix prevents that\n const iv = crypto.randomBytes(16);\n\n const cipher = crypto.createCipheriv(this.algorithm, encryptionKey, iv);\n\n let encrypted = cipher.update(data, 'utf8', 'base64');\n encrypted += cipher.final('base64');\n\n const authTag = cipher.getAuthTag().toString('base64');\n\n logger.debug('Data encrypted', {\n tenantId,\n originalLength: data.length,\n encryptedLength: encrypted.length\n });\n\n // SECURITY: Return IV with encrypted data so it can be used for decryption\n return { encrypted, authTag, iv: iv.toString('base64') };\n }\n\n /**\n * Decrypt data with AES-256-GCM\n * SECURITY FIX: Now accepts IV as parameter (required for proper decryption)\n */\n async decrypt(\n encrypted: string,\n authTag: string,\n tenantId: string,\n iv?: string\n ): Promise<string> {\n const encryptionKey = await this.getEncryptionKey(tenantId);\n\n // SECURITY: IV must be provided for proper decryption\n // For backwards compatibility, generate warning if not provided\n let ivBuffer: Buffer;\n if (iv) {\n ivBuffer = Buffer.from(iv, 'base64');\n } else {\n // Legacy fallback - try to use cached IV (will fail for new encryptions)\n logger.warn('Decrypt called without IV - this may fail for newly encrypted data', { tenantId });\n const cached = this.encryptionCache.get(tenantId);\n if (!cached) {\n throw new Error('No IV provided and no cached keys available');\n }\n ivBuffer = cached.iv;\n }\n\n const decipher = crypto.createDecipheriv(this.algorithm, encryptionKey, ivBuffer);\n decipher.setAuthTag(Buffer.from(authTag, 'base64'));\n\n let decrypted = decipher.update(encrypted, 'base64', 'utf8');\n decrypted += decipher.final('utf8');\n\n logger.debug('Data decrypted', {\n tenantId,\n decryptedLength: decrypted.length\n });\n\n return decrypted;\n }\n\n /**\n * Generate mTLS certificates for agent-to-hub communication\n */\n async generateMTLSCertificates(agentId: string): Promise<{\n cert: string;\n key: string;\n ca: string;\n }> {\n // Placeholder: Actual implementation would use OpenSSL or similar\n // to generate X.509 certificates with proper CA chain\n\n logger.info('Generating mTLS certificates', { agentId });\n\n return {\n cert: 'PLACEHOLDER_CERT',\n key: 'PLACEHOLDER_KEY',\n ca: 'PLACEHOLDER_CA'\n };\n }\n\n /**\n * Validate tenant access to data\n */\n validateTenantAccess(requestTenantId: string, dataTenantId: string): boolean {\n if (requestTenantId !== dataTenantId) {\n logger.warn('Tenant access violation detected', {\n requestTenantId,\n dataTenantId\n });\n return false;\n }\n return true;\n }\n\n /**\n * Hash sensitive data for storage (one-way)\n */\n hashData(data: string): string {\n return crypto.createHash('sha256').update(data).digest('hex');\n }\n\n /**\n * Generate secure random ID\n */\n generateSecureId(): string {\n return crypto.randomBytes(16).toString('hex');\n }\n\n /**\n * Base64 URL-safe encoding\n */\n private base64UrlEncode(str: string): string {\n return Buffer.from(str)\n .toString('base64')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n }\n\n /**\n * Base64 URL-safe decoding\n */\n private base64UrlDecode(str: string): string {\n const base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n return Buffer.from(base64, 'base64').toString('utf8');\n }\n\n /**\n * Clear cached keys (for testing or security refresh)\n */\n clearCache(): void {\n this.encryptionCache.clear();\n logger.info('Encryption cache cleared');\n }\n}\n"]}
1
+ {"version":3,"file":"SecurityManager.js","sourceRoot":"","sources":["../../src/federation/SecurityManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Security Manager - Authentication, encryption, and access control\n *\n * Features:\n * - JWT token generation and validation\n * - AES-256 encryption for data at rest\n * - Tenant isolation\n * - mTLS certificate management\n */\n\nimport crypto from 'crypto';\nimport { logger } from '../utils/logger.js';\n\nexport interface AgentTokenPayload {\n agentId: string;\n tenantId: string;\n expiresAt: number;\n}\n\nexport interface EncryptionKeys {\n encryptionKey: Buffer;\n iv: Buffer;\n}\n\nexport class SecurityManager {\n private readonly algorithm = 'aes-256-gcm';\n private readonly jwtSecret: string;\n private encryptionCache: Map<string, EncryptionKeys> = new Map();\n\n constructor() {\n // In production, load from secure vault (AWS Secrets Manager, HashiCorp Vault, etc.)\n this.jwtSecret = process.env.JWT_SECRET || crypto.randomBytes(32).toString('hex');\n }\n\n /**\n * Create JWT token for agent authentication\n */\n async createAgentToken(payload: AgentTokenPayload): Promise<string> {\n const header = {\n alg: 'HS256',\n typ: 'JWT'\n };\n\n const now = Date.now();\n const tokenPayload = {\n ...payload,\n iat: now,\n exp: payload.expiresAt,\n iss: 'agentic-flow-federation'\n };\n\n // Encode header and payload\n const encodedHeader = this.base64UrlEncode(JSON.stringify(header));\n const encodedPayload = this.base64UrlEncode(JSON.stringify(tokenPayload));\n\n // Create signature\n const signature = crypto\n .createHmac('sha256', this.jwtSecret)\n .update(`${encodedHeader}.${encodedPayload}`)\n .digest('base64url');\n\n const token = `${encodedHeader}.${encodedPayload}.${signature}`;\n\n logger.info('Created agent token', {\n agentId: payload.agentId,\n tenantId: payload.tenantId,\n expiresAt: new Date(payload.expiresAt).toISOString()\n });\n\n return token;\n }\n\n /**\n * Verify JWT token\n */\n async verifyAgentToken(token: string): Promise<AgentTokenPayload> {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error('Invalid token format');\n }\n\n const [encodedHeader, encodedPayload, signature] = parts;\n\n // Verify signature\n const expectedSignature = crypto\n .createHmac('sha256', this.jwtSecret)\n .update(`${encodedHeader}.${encodedPayload}`)\n .digest('base64url');\n\n if (signature !== expectedSignature) {\n throw new Error('Invalid token signature');\n }\n\n // Decode payload\n const payload = JSON.parse(this.base64UrlDecode(encodedPayload));\n\n // Check expiration\n if (Date.now() >= payload.exp) {\n throw new Error('Token expired');\n }\n\n logger.debug('Token verified', {\n agentId: payload.agentId,\n tenantId: payload.tenantId\n });\n\n return payload;\n }\n\n /**\n * Get or create encryption keys for a tenant\n */\n async getEncryptionKeys(tenantId: string): Promise<EncryptionKeys> {\n // Check cache\n if (this.encryptionCache.has(tenantId)) {\n return this.encryptionCache.get(tenantId)!;\n }\n\n // Generate new keys for tenant\n // In production, these would be stored in a secure key management service\n const encryptionKey = crypto.randomBytes(32); // 256-bit key\n const iv = crypto.randomBytes(16); // 128-bit IV\n\n const keys: EncryptionKeys = { encryptionKey, iv };\n\n // Cache keys\n this.encryptionCache.set(tenantId, keys);\n\n logger.info('Generated encryption keys for tenant', { tenantId });\n\n return keys;\n }\n\n /**\n * Encrypt data with AES-256-GCM\n */\n async encrypt(data: string, tenantId: string): Promise<{ encrypted: string; authTag: string }> {\n const keys = await this.getEncryptionKeys(tenantId);\n\n const cipher = crypto.createCipheriv(this.algorithm, keys.encryptionKey, keys.iv);\n\n let encrypted = cipher.update(data, 'utf8', 'base64');\n encrypted += cipher.final('base64');\n\n const authTag = cipher.getAuthTag().toString('base64');\n\n logger.debug('Data encrypted', {\n tenantId,\n originalLength: data.length,\n encryptedLength: encrypted.length\n });\n\n return { encrypted, authTag };\n }\n\n /**\n * Decrypt data with AES-256-GCM\n */\n async decrypt(\n encrypted: string,\n authTag: string,\n tenantId: string\n ): Promise<string> {\n const keys = await this.getEncryptionKeys(tenantId);\n\n const decipher = crypto.createDecipheriv(this.algorithm, keys.encryptionKey, keys.iv);\n decipher.setAuthTag(Buffer.from(authTag, 'base64'));\n\n let decrypted = decipher.update(encrypted, 'base64', 'utf8');\n decrypted += decipher.final('utf8');\n\n logger.debug('Data decrypted', {\n tenantId,\n decryptedLength: decrypted.length\n });\n\n return decrypted;\n }\n\n /**\n * Generate mTLS certificates for agent-to-hub communication\n */\n async generateMTLSCertificates(agentId: string): Promise<{\n cert: string;\n key: string;\n ca: string;\n }> {\n // Placeholder: Actual implementation would use OpenSSL or similar\n // to generate X.509 certificates with proper CA chain\n\n logger.info('Generating mTLS certificates', { agentId });\n\n return {\n cert: 'PLACEHOLDER_CERT',\n key: 'PLACEHOLDER_KEY',\n ca: 'PLACEHOLDER_CA'\n };\n }\n\n /**\n * Validate tenant access to data\n */\n validateTenantAccess(requestTenantId: string, dataTenantId: string): boolean {\n if (requestTenantId !== dataTenantId) {\n logger.warn('Tenant access violation detected', {\n requestTenantId,\n dataTenantId\n });\n return false;\n }\n return true;\n }\n\n /**\n * Hash sensitive data for storage (one-way)\n */\n hashData(data: string): string {\n return crypto.createHash('sha256').update(data).digest('hex');\n }\n\n /**\n * Generate secure random ID\n */\n generateSecureId(): string {\n return crypto.randomBytes(16).toString('hex');\n }\n\n /**\n * Base64 URL-safe encoding\n */\n private base64UrlEncode(str: string): string {\n return Buffer.from(str)\n .toString('base64')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n }\n\n /**\n * Base64 URL-safe decoding\n */\n private base64UrlDecode(str: string): string {\n const base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n return Buffer.from(base64, 'base64').toString('utf8');\n }\n\n /**\n * Clear cached keys (for testing or security refresh)\n */\n clearCache(): void {\n this.encryptionCache.clear();\n logger.info('Encryption cache cleared');\n }\n}\n"]}
@@ -46,11 +46,11 @@ export class SupabaseFederationAdapterDebug {
46
46
  await this.ensureVectorExtension();
47
47
  }
48
48
  const duration = Date.now() - startTime;
49
- this.debug.logConnection('initialize_complete', { duration });
49
+ this.debug.logConnection('initialize_complete', { duration }, duration);
50
50
  }
51
51
  catch (error) {
52
52
  const duration = Date.now() - startTime;
53
- this.debug.logConnection('initialize_error', { duration, error: String(error) });
53
+ this.debug.logConnection('initialize_error', { duration }, duration, error);
54
54
  throw error;
55
55
  }
56
56
  }
@@ -369,7 +369,7 @@ export class SupabaseFederationAdapterDebug {
369
369
  this.debug.logConnection('close_start');
370
370
  this.debug.close();
371
371
  const duration = Date.now() - startTime;
372
- this.debug.logConnection('close_complete', { duration });
372
+ this.debug.logConnection('close_complete', {}, duration);
373
373
  }
374
374
  }
375
375
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"supabase-adapter-debug.js","sourceRoot":"","sources":["../../../src/federation/integrations/supabase-adapter-debug.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Supabase Database Adapter with Debug Streaming\n *\n * Enhanced version of SupabaseFederationAdapter with comprehensive\n * debug logging and performance tracking.\n */\n\nimport { createClient, SupabaseClient } from '@supabase/supabase-js';\nimport { DebugStream, DebugLevel, createDebugStream } from '../debug/debug-stream.js';\n\nexport interface SupabaseConfigDebug {\n url: string;\n anonKey: string;\n serviceRoleKey?: string;\n vectorBackend?: 'pgvector' | 'agentdb' | 'hybrid';\n syncInterval?: number;\n debug?: {\n enabled?: boolean;\n level?: DebugLevel;\n output?: 'console' | 'file' | 'both';\n format?: 'human' | 'json' | 'compact';\n outputFile?: string;\n };\n}\n\nexport interface AgentMemory {\n id: string;\n tenant_id: string;\n agent_id: string;\n session_id: string;\n content: string;\n embedding?: number[];\n metadata?: Record<string, any>;\n created_at?: string;\n expires_at?: string;\n}\n\nexport class SupabaseFederationAdapterDebug {\n private client: SupabaseClient;\n private config: SupabaseConfigDebug;\n private debug: DebugStream;\n\n constructor(config: SupabaseConfigDebug) {\n this.config = config;\n\n // Initialize debug stream\n this.debug = createDebugStream({\n level: config.debug?.level ?? DebugLevel.BASIC,\n output: config.debug?.output ?? 'console',\n format: config.debug?.format ?? 'human',\n outputFile: config.debug?.outputFile,\n });\n\n const startTime = Date.now();\n\n // Use service role key for server-side operations\n const key = config.serviceRoleKey || config.anonKey;\n this.client = createClient(config.url, key);\n\n this.debug.logConnection('client_created', {\n url: config.url,\n hasServiceRole: !!config.serviceRoleKey,\n vectorBackend: config.vectorBackend,\n });\n\n const duration = Date.now() - startTime;\n this.debug.logTrace('constructor_complete', { duration });\n }\n\n /**\n * Initialize Supabase schema for federation\n */\n async initialize(): Promise<void> {\n const startTime = Date.now();\n this.debug.logConnection('initialize_start', {\n vectorBackend: this.config.vectorBackend,\n });\n\n try {\n // Check if tables exist\n await this.ensureTables();\n\n if (this.config.vectorBackend === 'pgvector') {\n await this.ensureVectorExtension();\n }\n\n const duration = Date.now() - startTime;\n this.debug.logConnection('initialize_complete', { duration });\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logConnection('initialize_error', { duration, error: String(error) });\n throw error;\n }\n }\n\n /**\n * Ensure required tables exist\n */\n private async ensureTables(): Promise<void> {\n const startTime = Date.now();\n this.debug.logTrace('checking_tables');\n\n const tables = ['agent_sessions', 'agent_memories', 'agent_tasks', 'agent_events'];\n const results: Record<string, boolean> = {};\n\n for (const table of tables) {\n const tableStart = Date.now();\n\n try {\n const { data, error } = await this.client\n .from(table)\n .select('id')\n .limit(1);\n\n const exists = !error || error.code !== 'PGRST116';\n results[table] = exists;\n\n const tableDuration = Date.now() - tableStart;\n this.debug.logDatabase('table_check', {\n table,\n exists,\n }, tableDuration);\n\n if (!exists) {\n this.debug.logDatabase('table_missing', { table });\n }\n } catch (error) {\n const tableDuration = Date.now() - tableStart;\n this.debug.logDatabase('table_check_error', { table }, tableDuration, error as Error);\n }\n }\n\n const duration = Date.now() - startTime;\n this.debug.logDatabase('tables_checked', { results }, duration);\n }\n\n /**\n * Ensure pgvector extension is enabled\n */\n private async ensureVectorExtension(): Promise<void> {\n const startTime = Date.now();\n this.debug.logTrace('checking_pgvector');\n\n try {\n const { error } = await this.client.rpc('exec_sql', {\n sql: 'CREATE EXTENSION IF NOT EXISTS vector;'\n });\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logDatabase('pgvector_check_failed', {\n message: error.message,\n }, duration, error as any);\n } else {\n this.debug.logDatabase('pgvector_ready', {}, duration);\n }\n } catch (err) {\n const duration = Date.now() - startTime;\n this.debug.logDatabase('pgvector_error', {}, duration, err as Error);\n }\n }\n\n /**\n * Store agent memory in Supabase\n */\n async storeMemory(memory: AgentMemory): Promise<void> {\n const startTime = Date.now();\n\n this.debug.logMemory('store_start', memory.agent_id, memory.tenant_id, {\n id: memory.id,\n content_length: memory.content.length,\n has_embedding: !!memory.embedding,\n embedding_dims: memory.embedding?.length,\n });\n\n try {\n const { error } = await this.client\n .from('agent_memories')\n .insert({\n id: memory.id,\n tenant_id: memory.tenant_id,\n agent_id: memory.agent_id,\n session_id: memory.session_id,\n content: memory.content,\n embedding: memory.embedding,\n metadata: memory.metadata,\n created_at: memory.created_at || new Date().toISOString(),\n expires_at: memory.expires_at,\n });\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logMemory('store_error', memory.agent_id, memory.tenant_id, {\n error: error.message,\n }, duration);\n throw new Error(`Failed to store memory: ${error.message}`);\n }\n\n this.debug.logMemory('store_complete', memory.agent_id, memory.tenant_id, {\n id: memory.id,\n }, duration);\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logMemory('store_failed', memory.agent_id, memory.tenant_id, {}, duration);\n throw error;\n }\n }\n\n /**\n * Query memories by tenant and agent\n */\n async queryMemories(\n tenantId: string,\n agentId?: string,\n limit: number = 100\n ): Promise<AgentMemory[]> {\n const startTime = Date.now();\n\n this.debug.logMemory('query_start', agentId, tenantId, {\n limit,\n hasAgentFilter: !!agentId,\n });\n\n try {\n let query = this.client\n .from('agent_memories')\n .select('*')\n .eq('tenant_id', tenantId)\n .order('created_at', { ascending: false })\n .limit(limit);\n\n if (agentId) {\n query = query.eq('agent_id', agentId);\n }\n\n const { data, error } = await query;\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logMemory('query_error', agentId, tenantId, {\n error: error.message,\n }, duration);\n throw new Error(`Failed to query memories: ${error.message}`);\n }\n\n this.debug.logMemory('query_complete', agentId, tenantId, {\n count: data?.length || 0,\n }, duration);\n\n return data as AgentMemory[];\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logMemory('query_failed', agentId, tenantId, {}, duration);\n throw error;\n }\n }\n\n /**\n * Semantic search using pgvector\n */\n async semanticSearch(\n embedding: number[],\n tenantId: string,\n limit: number = 10\n ): Promise<AgentMemory[]> {\n const startTime = Date.now();\n\n this.debug.logMemory('semantic_search_start', undefined, tenantId, {\n embedding_dims: embedding.length,\n limit,\n });\n\n if (this.config.vectorBackend !== 'pgvector') {\n this.debug.logMemory('semantic_search_disabled', undefined, tenantId, {\n backend: this.config.vectorBackend,\n });\n throw new Error('pgvector backend not enabled');\n }\n\n try {\n const { data, error} = await this.client.rpc('search_memories', {\n query_embedding: embedding,\n query_tenant_id: tenantId,\n match_count: limit,\n });\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logMemory('semantic_search_error', undefined, tenantId, {\n error: error.message,\n }, duration);\n throw new Error(`Semantic search failed: ${error.message}`);\n }\n\n this.debug.logMemory('semantic_search_complete', undefined, tenantId, {\n results: data?.length || 0,\n }, duration);\n\n return data as AgentMemory[];\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logMemory('semantic_search_failed', undefined, tenantId, {}, duration);\n throw error;\n }\n }\n\n /**\n * Register agent session\n */\n async registerSession(\n sessionId: string,\n tenantId: string,\n agentId: string,\n metadata?: Record<string, any>\n ): Promise<void> {\n const startTime = Date.now();\n\n this.debug.logDatabase('register_session_start', {\n sessionId,\n tenantId,\n agentId,\n });\n\n try {\n const { error } = await this.client\n .from('agent_sessions')\n .insert({\n session_id: sessionId,\n tenant_id: tenantId,\n agent_id: agentId,\n metadata,\n started_at: new Date().toISOString(),\n status: 'active',\n });\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logDatabase('register_session_error', {\n sessionId,\n error: error.message,\n }, duration, error as any);\n throw new Error(`Failed to register session: ${error.message}`);\n }\n\n this.debug.logDatabase('register_session_complete', {\n sessionId,\n }, duration);\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logDatabase('register_session_failed', { sessionId }, duration);\n throw error;\n }\n }\n\n /**\n * Update session status\n */\n async updateSessionStatus(\n sessionId: string,\n status: 'active' | 'completed' | 'failed'\n ): Promise<void> {\n const startTime = Date.now();\n\n this.debug.logDatabase('update_session_start', {\n sessionId,\n status,\n });\n\n try {\n const updates: any = { status };\n\n if (status !== 'active') {\n updates.ended_at = new Date().toISOString();\n }\n\n const { error } = await this.client\n .from('agent_sessions')\n .update(updates)\n .eq('session_id', sessionId);\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logDatabase('update_session_error', {\n sessionId,\n error: error.message,\n }, duration, error as any);\n throw new Error(`Failed to update session: ${error.message}`);\n }\n\n this.debug.logDatabase('update_session_complete', {\n sessionId,\n status,\n }, duration);\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logDatabase('update_session_failed', { sessionId }, duration);\n throw error;\n }\n }\n\n /**\n * Get hub statistics\n */\n async getStats(tenantId?: string): Promise<any> {\n const startTime = Date.now();\n\n this.debug.logDatabase('get_stats_start', { tenantId });\n\n try {\n // Total memories\n let memoriesQuery = this.client\n .from('agent_memories')\n .select('id', { count: 'exact', head: true });\n\n if (tenantId) {\n memoriesQuery = memoriesQuery.eq('tenant_id', tenantId);\n }\n\n const { count: totalMemories } = await memoriesQuery;\n\n // Active sessions\n let sessionsQuery = this.client\n .from('agent_sessions')\n .select('session_id', { count: 'exact', head: true })\n .eq('status', 'active');\n\n if (tenantId) {\n sessionsQuery = sessionsQuery.eq('tenant_id', tenantId);\n }\n\n const { count: activeSessions } = await sessionsQuery;\n\n const duration = Date.now() - startTime;\n\n const stats = {\n total_memories: totalMemories || 0,\n active_sessions: activeSessions || 0,\n backend: 'supabase',\n vector_backend: this.config.vectorBackend,\n timestamp: new Date().toISOString(),\n };\n\n this.debug.logDatabase('get_stats_complete', stats, duration);\n\n return stats;\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logDatabase('get_stats_error', {}, duration, error as Error);\n throw error;\n }\n }\n\n /**\n * Get debug stream for external use\n */\n getDebugStream(): DebugStream {\n return this.debug;\n }\n\n /**\n * Print performance metrics\n */\n printMetrics(): void {\n this.debug.printMetrics();\n }\n\n /**\n * Close connection\n */\n async close(): Promise<void> {\n const startTime = Date.now();\n this.debug.logConnection('close_start');\n\n this.debug.close();\n\n const duration = Date.now() - startTime;\n this.debug.logConnection('close_complete', { duration });\n }\n}\n\n/**\n * Create Supabase adapter from environment variables with debug support\n */\nexport function createSupabaseAdapterDebug(): SupabaseFederationAdapterDebug {\n const url = process.env.SUPABASE_URL;\n const anonKey = process.env.SUPABASE_ANON_KEY;\n const serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY;\n\n if (!url || !anonKey) {\n throw new Error(\n 'Missing Supabase credentials. Set SUPABASE_URL and SUPABASE_ANON_KEY'\n );\n }\n\n const debugLevel = process.env.DEBUG_LEVEL?.toUpperCase() as keyof typeof DebugLevel || 'BASIC';\n\n return new SupabaseFederationAdapterDebug({\n url,\n anonKey,\n serviceRoleKey,\n vectorBackend: (process.env.FEDERATION_VECTOR_BACKEND as any) || 'hybrid',\n syncInterval: parseInt(process.env.FEDERATION_SYNC_INTERVAL || '60000'),\n debug: {\n enabled: process.env.DEBUG_ENABLED !== 'false',\n level: DebugLevel[debugLevel] || DebugLevel.BASIC,\n output: (process.env.DEBUG_OUTPUT as any) || 'console',\n format: (process.env.DEBUG_FORMAT as any) || 'human',\n outputFile: process.env.DEBUG_OUTPUT_FILE,\n },\n });\n}\n"]}
1
+ {"version":3,"file":"supabase-adapter-debug.js","sourceRoot":"","sources":["../../../src/federation/integrations/supabase-adapter-debug.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Supabase Database Adapter with Debug Streaming\n *\n * Enhanced version of SupabaseFederationAdapter with comprehensive\n * debug logging and performance tracking.\n */\n\nimport { createClient, SupabaseClient } from '@supabase/supabase-js';\nimport { DebugStream, DebugLevel, createDebugStream } from '../debug/debug-stream.js';\n\nexport interface SupabaseConfigDebug {\n url: string;\n anonKey: string;\n serviceRoleKey?: string;\n vectorBackend?: 'pgvector' | 'agentdb' | 'hybrid';\n syncInterval?: number;\n debug?: {\n enabled?: boolean;\n level?: DebugLevel;\n output?: 'console' | 'file' | 'both';\n format?: 'human' | 'json' | 'compact';\n outputFile?: string;\n };\n}\n\nexport interface AgentMemory {\n id: string;\n tenant_id: string;\n agent_id: string;\n session_id: string;\n content: string;\n embedding?: number[];\n metadata?: Record<string, any>;\n created_at?: string;\n expires_at?: string;\n}\n\nexport class SupabaseFederationAdapterDebug {\n private client: SupabaseClient;\n private config: SupabaseConfigDebug;\n private debug: DebugStream;\n\n constructor(config: SupabaseConfigDebug) {\n this.config = config;\n\n // Initialize debug stream\n this.debug = createDebugStream({\n level: config.debug?.level ?? DebugLevel.BASIC,\n output: config.debug?.output ?? 'console',\n format: config.debug?.format ?? 'human',\n outputFile: config.debug?.outputFile,\n });\n\n const startTime = Date.now();\n\n // Use service role key for server-side operations\n const key = config.serviceRoleKey || config.anonKey;\n this.client = createClient(config.url, key);\n\n this.debug.logConnection('client_created', {\n url: config.url,\n hasServiceRole: !!config.serviceRoleKey,\n vectorBackend: config.vectorBackend,\n });\n\n const duration = Date.now() - startTime;\n this.debug.logTrace('constructor_complete', { duration });\n }\n\n /**\n * Initialize Supabase schema for federation\n */\n async initialize(): Promise<void> {\n const startTime = Date.now();\n this.debug.logConnection('initialize_start', {\n vectorBackend: this.config.vectorBackend,\n });\n\n try {\n // Check if tables exist\n await this.ensureTables();\n\n if (this.config.vectorBackend === 'pgvector') {\n await this.ensureVectorExtension();\n }\n\n const duration = Date.now() - startTime;\n this.debug.logConnection('initialize_complete', { duration }, duration);\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logConnection('initialize_error', { duration }, duration, error as Error);\n throw error;\n }\n }\n\n /**\n * Ensure required tables exist\n */\n private async ensureTables(): Promise<void> {\n const startTime = Date.now();\n this.debug.logTrace('checking_tables');\n\n const tables = ['agent_sessions', 'agent_memories', 'agent_tasks', 'agent_events'];\n const results: Record<string, boolean> = {};\n\n for (const table of tables) {\n const tableStart = Date.now();\n\n try {\n const { data, error } = await this.client\n .from(table)\n .select('id')\n .limit(1);\n\n const exists = !error || error.code !== 'PGRST116';\n results[table] = exists;\n\n const tableDuration = Date.now() - tableStart;\n this.debug.logDatabase('table_check', {\n table,\n exists,\n }, tableDuration);\n\n if (!exists) {\n this.debug.logDatabase('table_missing', { table });\n }\n } catch (error) {\n const tableDuration = Date.now() - tableStart;\n this.debug.logDatabase('table_check_error', { table }, tableDuration, error as Error);\n }\n }\n\n const duration = Date.now() - startTime;\n this.debug.logDatabase('tables_checked', { results }, duration);\n }\n\n /**\n * Ensure pgvector extension is enabled\n */\n private async ensureVectorExtension(): Promise<void> {\n const startTime = Date.now();\n this.debug.logTrace('checking_pgvector');\n\n try {\n const { error } = await this.client.rpc('exec_sql', {\n sql: 'CREATE EXTENSION IF NOT EXISTS vector;'\n });\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logDatabase('pgvector_check_failed', {\n message: error.message,\n }, duration, error as any);\n } else {\n this.debug.logDatabase('pgvector_ready', {}, duration);\n }\n } catch (err) {\n const duration = Date.now() - startTime;\n this.debug.logDatabase('pgvector_error', {}, duration, err as Error);\n }\n }\n\n /**\n * Store agent memory in Supabase\n */\n async storeMemory(memory: AgentMemory): Promise<void> {\n const startTime = Date.now();\n\n this.debug.logMemory('store_start', memory.agent_id, memory.tenant_id, {\n id: memory.id,\n content_length: memory.content.length,\n has_embedding: !!memory.embedding,\n embedding_dims: memory.embedding?.length,\n });\n\n try {\n const { error } = await this.client\n .from('agent_memories')\n .insert({\n id: memory.id,\n tenant_id: memory.tenant_id,\n agent_id: memory.agent_id,\n session_id: memory.session_id,\n content: memory.content,\n embedding: memory.embedding,\n metadata: memory.metadata,\n created_at: memory.created_at || new Date().toISOString(),\n expires_at: memory.expires_at,\n });\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logMemory('store_error', memory.agent_id, memory.tenant_id, {\n error: error.message,\n }, duration);\n throw new Error(`Failed to store memory: ${error.message}`);\n }\n\n this.debug.logMemory('store_complete', memory.agent_id, memory.tenant_id, {\n id: memory.id,\n }, duration);\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logMemory('store_failed', memory.agent_id, memory.tenant_id, {}, duration);\n throw error;\n }\n }\n\n /**\n * Query memories by tenant and agent\n */\n async queryMemories(\n tenantId: string,\n agentId?: string,\n limit: number = 100\n ): Promise<AgentMemory[]> {\n const startTime = Date.now();\n\n this.debug.logMemory('query_start', agentId, tenantId, {\n limit,\n hasAgentFilter: !!agentId,\n });\n\n try {\n let query = this.client\n .from('agent_memories')\n .select('*')\n .eq('tenant_id', tenantId)\n .order('created_at', { ascending: false })\n .limit(limit);\n\n if (agentId) {\n query = query.eq('agent_id', agentId);\n }\n\n const { data, error } = await query;\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logMemory('query_error', agentId, tenantId, {\n error: error.message,\n }, duration);\n throw new Error(`Failed to query memories: ${error.message}`);\n }\n\n this.debug.logMemory('query_complete', agentId, tenantId, {\n count: data?.length || 0,\n }, duration);\n\n return data as AgentMemory[];\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logMemory('query_failed', agentId, tenantId, {}, duration);\n throw error;\n }\n }\n\n /**\n * Semantic search using pgvector\n */\n async semanticSearch(\n embedding: number[],\n tenantId: string,\n limit: number = 10\n ): Promise<AgentMemory[]> {\n const startTime = Date.now();\n\n this.debug.logMemory('semantic_search_start', undefined, tenantId, {\n embedding_dims: embedding.length,\n limit,\n });\n\n if (this.config.vectorBackend !== 'pgvector') {\n this.debug.logMemory('semantic_search_disabled', undefined, tenantId, {\n backend: this.config.vectorBackend,\n });\n throw new Error('pgvector backend not enabled');\n }\n\n try {\n const { data, error} = await this.client.rpc('search_memories', {\n query_embedding: embedding,\n query_tenant_id: tenantId,\n match_count: limit,\n });\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logMemory('semantic_search_error', undefined, tenantId, {\n error: error.message,\n }, duration);\n throw new Error(`Semantic search failed: ${error.message}`);\n }\n\n this.debug.logMemory('semantic_search_complete', undefined, tenantId, {\n results: data?.length || 0,\n }, duration);\n\n return data as AgentMemory[];\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logMemory('semantic_search_failed', undefined, tenantId, {}, duration);\n throw error;\n }\n }\n\n /**\n * Register agent session\n */\n async registerSession(\n sessionId: string,\n tenantId: string,\n agentId: string,\n metadata?: Record<string, any>\n ): Promise<void> {\n const startTime = Date.now();\n\n this.debug.logDatabase('register_session_start', {\n sessionId,\n tenantId,\n agentId,\n });\n\n try {\n const { error } = await this.client\n .from('agent_sessions')\n .insert({\n session_id: sessionId,\n tenant_id: tenantId,\n agent_id: agentId,\n metadata,\n started_at: new Date().toISOString(),\n status: 'active',\n });\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logDatabase('register_session_error', {\n sessionId,\n error: error.message,\n }, duration, error as any);\n throw new Error(`Failed to register session: ${error.message}`);\n }\n\n this.debug.logDatabase('register_session_complete', {\n sessionId,\n }, duration);\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logDatabase('register_session_failed', { sessionId }, duration);\n throw error;\n }\n }\n\n /**\n * Update session status\n */\n async updateSessionStatus(\n sessionId: string,\n status: 'active' | 'completed' | 'failed'\n ): Promise<void> {\n const startTime = Date.now();\n\n this.debug.logDatabase('update_session_start', {\n sessionId,\n status,\n });\n\n try {\n const updates: any = { status };\n\n if (status !== 'active') {\n updates.ended_at = new Date().toISOString();\n }\n\n const { error } = await this.client\n .from('agent_sessions')\n .update(updates)\n .eq('session_id', sessionId);\n\n const duration = Date.now() - startTime;\n\n if (error) {\n this.debug.logDatabase('update_session_error', {\n sessionId,\n error: error.message,\n }, duration, error as any);\n throw new Error(`Failed to update session: ${error.message}`);\n }\n\n this.debug.logDatabase('update_session_complete', {\n sessionId,\n status,\n }, duration);\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logDatabase('update_session_failed', { sessionId }, duration);\n throw error;\n }\n }\n\n /**\n * Get hub statistics\n */\n async getStats(tenantId?: string): Promise<any> {\n const startTime = Date.now();\n\n this.debug.logDatabase('get_stats_start', { tenantId });\n\n try {\n // Total memories\n let memoriesQuery = this.client\n .from('agent_memories')\n .select('id', { count: 'exact', head: true });\n\n if (tenantId) {\n memoriesQuery = memoriesQuery.eq('tenant_id', tenantId);\n }\n\n const { count: totalMemories } = await memoriesQuery;\n\n // Active sessions\n let sessionsQuery = this.client\n .from('agent_sessions')\n .select('session_id', { count: 'exact', head: true })\n .eq('status', 'active');\n\n if (tenantId) {\n sessionsQuery = sessionsQuery.eq('tenant_id', tenantId);\n }\n\n const { count: activeSessions } = await sessionsQuery;\n\n const duration = Date.now() - startTime;\n\n const stats = {\n total_memories: totalMemories || 0,\n active_sessions: activeSessions || 0,\n backend: 'supabase',\n vector_backend: this.config.vectorBackend,\n timestamp: new Date().toISOString(),\n };\n\n this.debug.logDatabase('get_stats_complete', stats, duration);\n\n return stats;\n } catch (error) {\n const duration = Date.now() - startTime;\n this.debug.logDatabase('get_stats_error', {}, duration, error as Error);\n throw error;\n }\n }\n\n /**\n * Get debug stream for external use\n */\n getDebugStream(): DebugStream {\n return this.debug;\n }\n\n /**\n * Print performance metrics\n */\n printMetrics(): void {\n this.debug.printMetrics();\n }\n\n /**\n * Close connection\n */\n async close(): Promise<void> {\n const startTime = Date.now();\n this.debug.logConnection('close_start');\n\n this.debug.close();\n\n const duration = Date.now() - startTime;\n this.debug.logConnection('close_complete', {}, duration);\n }\n}\n\n/**\n * Create Supabase adapter from environment variables with debug support\n */\nexport function createSupabaseAdapterDebug(): SupabaseFederationAdapterDebug {\n const url = process.env.SUPABASE_URL;\n const anonKey = process.env.SUPABASE_ANON_KEY;\n const serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY;\n\n if (!url || !anonKey) {\n throw new Error(\n 'Missing Supabase credentials. Set SUPABASE_URL and SUPABASE_ANON_KEY'\n );\n }\n\n const debugLevel = process.env.DEBUG_LEVEL?.toUpperCase() as keyof typeof DebugLevel || 'BASIC';\n\n return new SupabaseFederationAdapterDebug({\n url,\n anonKey,\n serviceRoleKey,\n vectorBackend: (process.env.FEDERATION_VECTOR_BACKEND as any) || 'hybrid',\n syncInterval: parseInt(process.env.FEDERATION_SYNC_INTERVAL || '60000'),\n debug: {\n enabled: process.env.DEBUG_ENABLED !== 'false',\n level: DebugLevel[debugLevel] || DebugLevel.BASIC,\n output: (process.env.DEBUG_OUTPUT as any) || 'console',\n format: (process.env.DEBUG_FORMAT as any) || 'human',\n outputFile: process.env.DEBUG_OUTPUT_FILE,\n },\n });\n}\n"]}
@@ -92,12 +92,12 @@ export class SwarmLearningOptimizer {
92
92
  * Get optimization recommendations based on learned patterns
93
93
  */
94
94
  async getOptimization(taskDescription, taskComplexity, estimatedAgentCount) {
95
- // Search for similar successful patterns - use search method with any cast for compatibility
96
- const similarPatterns = await this.reasoningBank.searchPatterns?.(taskDescription, {
95
+ // Search for similar successful patterns
96
+ const similarPatterns = await this.reasoningBank.searchPatterns(taskDescription, {
97
97
  k: 10,
98
98
  minReward: 0.7,
99
99
  onlySuccesses: true
100
- }) ?? [];
100
+ });
101
101
  if (similarPatterns.length === 0) {
102
102
  // No learned patterns - return default recommendations
103
103
  return this.getDefaultRecommendation(taskComplexity, estimatedAgentCount);
@@ -281,10 +281,10 @@ export class SwarmLearningOptimizer {
281
281
  * Generate statistics report on learned patterns
282
282
  */
283
283
  async getOptimizationStats() {
284
- const allPatterns = await this.reasoningBank.searchPatterns?.(this.NAMESPACE, {
284
+ const allPatterns = await this.reasoningBank.searchPatterns(this.NAMESPACE, {
285
285
  k: 1000,
286
286
  onlySuccesses: true
287
- }) ?? [];
287
+ });
288
288
  const stats = {
289
289
  totalPatterns: allPatterns.length,
290
290
  topologiesUsed: {},
@@ -1 +1 @@
1
- {"version":3,"file":"swarm-learning-optimizer.js","sourceRoot":"","sources":["../../src/hooks/swarm-learning-optimizer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Swarm Learning Optimizer\n *\n * Enhances parallel execution with adaptive learning, pattern recognition,\n * and automated topology selection using ReasoningBank intelligence.\n */\n\nimport { ReasoningBank } from '../reasoningbank';\n\nexport interface SwarmMetrics {\n topology: 'mesh' | 'hierarchical' | 'ring' | 'star';\n agentCount: number;\n batchSize: number;\n totalTimeMs: number;\n successRate: number;\n speedup?: number;\n taskComplexity: 'low' | 'medium' | 'high' | 'critical';\n operations: number;\n}\n\nexport interface LearningPattern {\n taskType: string;\n optimalTopology: string;\n optimalBatchSize: number;\n expectedSpeedup: number;\n successRate: number;\n timestamp: string;\n}\n\nexport interface OptimizationRecommendation {\n recommendedTopology: 'mesh' | 'hierarchical' | 'ring' | 'star';\n recommendedBatchSize: number;\n recommendedAgentCount: number;\n expectedSpeedup: number;\n confidence: number;\n reasoning: string;\n alternatives: Array<{\n topology: string;\n confidence: number;\n reasoning: string;\n }>;\n}\n\nexport class SwarmLearningOptimizer {\n private reasoningBank: ReasoningBank;\n private readonly NAMESPACE = 'swarm/optimization';\n\n constructor(reasoningBank: ReasoningBank) {\n this.reasoningBank = reasoningBank;\n }\n\n /**\n * Store swarm execution metrics for learning\n */\n async storeExecutionPattern(\n taskDescription: string,\n metrics: SwarmMetrics,\n success: boolean\n ): Promise<void> {\n const sessionId = `${this.NAMESPACE}/${metrics.topology}/${Date.now()}`;\n\n await this.reasoningBank.storePattern({\n sessionId,\n task: taskDescription,\n input: JSON.stringify({ taskComplexity: metrics.taskComplexity, agentCount: metrics.agentCount }),\n output: JSON.stringify(metrics),\n reward: this.calculateReward(metrics, success),\n success,\n latencyMs: metrics.totalTimeMs,\n tokensUsed: 0, // Not tracking tokens for swarm ops\n critique: this.generateCritique(metrics, success)\n });\n }\n\n /**\n * Calculate reward score for swarm execution (0-1)\n */\n private calculateReward(metrics: SwarmMetrics, success: boolean): number {\n if (!success) return 0.0;\n\n let reward = 0.5; // Base reward for success\n\n // Reward for high success rate (+0.2)\n if (metrics.successRate >= 90) {\n reward += 0.2;\n } else if (metrics.successRate >= 75) {\n reward += 0.1;\n }\n\n // Reward for speedup (+0.2)\n if (metrics.speedup) {\n if (metrics.speedup >= 3.0) {\n reward += 0.2;\n } else if (metrics.speedup >= 2.0) {\n reward += 0.15;\n } else if (metrics.speedup >= 1.5) {\n reward += 0.1;\n }\n }\n\n // Reward for efficiency (operations/time) (+0.1)\n const opsPerSecond = (metrics.operations / metrics.totalTimeMs) * 1000;\n if (opsPerSecond > 0.1) {\n reward += 0.1;\n }\n\n return Math.min(1.0, reward);\n }\n\n /**\n * Generate critique for learning\n */\n private generateCritique(metrics: SwarmMetrics, success: boolean): string {\n const critiques: string[] = [];\n\n if (!success) {\n critiques.push('Swarm execution failed - investigate error handling');\n }\n\n if (metrics.successRate < 80) {\n critiques.push(`Low success rate (${metrics.successRate}%) - review agent reliability`);\n }\n\n if (metrics.speedup && metrics.speedup < 1.2) {\n critiques.push(`Minimal speedup (${metrics.speedup}x) - consider different topology or larger batches`);\n }\n\n if (metrics.batchSize < 3) {\n critiques.push('Small batch size - may not fully utilize parallel capabilities');\n }\n\n if (metrics.topology === 'mesh' && metrics.agentCount > 10) {\n critiques.push('Mesh topology with many agents (O(n²) coordination) - consider hierarchical');\n }\n\n if (critiques.length === 0) {\n if (metrics.speedup && metrics.speedup >= 3.0) {\n return 'Excellent parallel execution - pattern worth reusing';\n }\n return 'Good swarm execution - successful pattern';\n }\n\n return critiques.join('. ');\n }\n\n /**\n * Get optimization recommendations based on learned patterns\n */\n async getOptimization(\n taskDescription: string,\n taskComplexity: 'low' | 'medium' | 'high' | 'critical',\n estimatedAgentCount: number\n ): Promise<OptimizationRecommendation> {\n // Search for similar successful patterns - use search method with any cast for compatibility\n const similarPatterns = await (this.reasoningBank as any).searchPatterns?.(taskDescription, {\n k: 10,\n minReward: 0.7,\n onlySuccesses: true\n }) ?? [];\n\n if (similarPatterns.length === 0) {\n // No learned patterns - return default recommendations\n return this.getDefaultRecommendation(taskComplexity, estimatedAgentCount);\n }\n\n // Analyze patterns to find optimal configuration\n const topologyScores = new Map<string, { totalReward: number; count: number; avgSpeedup: number }>();\n\n for (const pattern of similarPatterns) {\n try {\n const metrics: SwarmMetrics = JSON.parse(pattern.output);\n const topology = metrics.topology;\n\n if (!topologyScores.has(topology)) {\n topologyScores.set(topology, { totalReward: 0, count: 0, avgSpeedup: 0 });\n }\n\n const score = topologyScores.get(topology)!;\n score.totalReward += pattern.reward;\n score.count += 1;\n score.avgSpeedup += metrics.speedup || 1.0;\n } catch (e) {\n // Skip invalid pattern data\n continue;\n }\n }\n\n // Find best topology based on average reward and speedup\n let bestTopology = 'hierarchical';\n let bestScore = 0;\n let bestSpeedup = 1.0;\n const alternatives: Array<{ topology: string; confidence: number; reasoning: string }> = [];\n\n for (const [topology, data] of topologyScores.entries()) {\n const avgReward = data.totalReward / data.count;\n const avgSpeedup = data.avgSpeedup / data.count;\n const score = avgReward * 0.6 + (avgSpeedup / 5.0) * 0.4; // Weighted score\n\n if (score > bestScore) {\n if (bestScore > 0) {\n // Previous best becomes alternative\n alternatives.push({\n topology: bestTopology,\n confidence: Math.round(bestScore * 100) / 100,\n reasoning: `Average speedup: ${bestSpeedup.toFixed(2)}x from ${topologyScores.get(bestTopology)!.count} executions`\n });\n }\n bestScore = score;\n bestTopology = topology;\n bestSpeedup = avgSpeedup;\n } else {\n alternatives.push({\n topology,\n confidence: Math.round(score * 100) / 100,\n reasoning: `Average speedup: ${avgSpeedup.toFixed(2)}x from ${data.count} executions`\n });\n }\n }\n\n // Determine optimal batch size based on task complexity and learned patterns\n const optimalBatchSize = this.determineOptimalBatchSize(taskComplexity, estimatedAgentCount, similarPatterns);\n\n return {\n recommendedTopology: bestTopology as any,\n recommendedBatchSize: optimalBatchSize,\n recommendedAgentCount: Math.min(estimatedAgentCount, this.getMaxAgentsForTopology(bestTopology)),\n expectedSpeedup: bestSpeedup,\n confidence: Math.round(bestScore * 100) / 100,\n reasoning: `Based on ${similarPatterns.length} similar successful executions. ` +\n `${bestTopology} topology achieved ${bestSpeedup.toFixed(2)}x average speedup.`,\n alternatives: alternatives.sort((a, b) => b.confidence - a.confidence).slice(0, 2)\n };\n }\n\n /**\n * Get default recommendations when no learned patterns exist\n */\n private getDefaultRecommendation(\n taskComplexity: 'low' | 'medium' | 'high' | 'critical',\n estimatedAgentCount: number\n ): OptimizationRecommendation {\n // Default topology selection based on agent count and complexity\n let topology: 'mesh' | 'hierarchical' | 'ring' | 'star';\n let expectedSpeedup: number;\n let reasoning: string;\n\n if (estimatedAgentCount <= 5) {\n topology = 'mesh';\n expectedSpeedup = 2.5;\n reasoning = 'Mesh topology optimal for small swarms (≤5 agents) - full peer-to-peer coordination';\n } else if (estimatedAgentCount <= 10) {\n topology = 'hierarchical';\n expectedSpeedup = 3.5;\n reasoning = 'Hierarchical topology optimal for medium swarms (6-10 agents) - efficient delegation';\n } else {\n topology = 'hierarchical';\n expectedSpeedup = 4.0;\n reasoning = 'Hierarchical topology required for large swarms (>10 agents) - avoids O(n²) coordination overhead';\n }\n\n // Adjust for task complexity\n if (taskComplexity === 'critical' || taskComplexity === 'high') {\n expectedSpeedup *= 1.2; // Higher complexity benefits more from parallelization\n }\n\n const batchSize = this.determineOptimalBatchSize(taskComplexity, estimatedAgentCount, []);\n\n return {\n recommendedTopology: topology,\n recommendedBatchSize: batchSize,\n recommendedAgentCount: Math.min(estimatedAgentCount, this.getMaxAgentsForTopology(topology)),\n expectedSpeedup,\n confidence: 0.6, // Lower confidence without learned patterns\n reasoning: `${reasoning} (default recommendation - no learned patterns yet)`,\n alternatives: [\n {\n topology: topology === 'mesh' ? 'hierarchical' : 'mesh',\n confidence: 0.5,\n reasoning: 'Alternative topology if default does not perform well'\n }\n ]\n };\n }\n\n /**\n * Determine optimal batch size based on complexity and learned patterns\n */\n private determineOptimalBatchSize(\n taskComplexity: 'low' | 'medium' | 'high' | 'critical',\n estimatedAgentCount: number,\n learnedPatterns: any[]\n ): number {\n // Analyze learned patterns for optimal batch size\n if (learnedPatterns.length > 0) {\n const batchSizes = learnedPatterns\n .map(p => {\n try {\n const metrics: SwarmMetrics = JSON.parse(p.output);\n return { batchSize: metrics.batchSize, reward: p.reward };\n } catch (e) {\n return null;\n }\n })\n .filter(x => x !== null) as Array<{ batchSize: number; reward: number }>;\n\n if (batchSizes.length > 0) {\n // Find batch size with highest average reward\n const batchMap = new Map<number, { totalReward: number; count: number }>();\n for (const { batchSize, reward } of batchSizes) {\n if (!batchMap.has(batchSize)) {\n batchMap.set(batchSize, { totalReward: 0, count: 0 });\n }\n const entry = batchMap.get(batchSize)!;\n entry.totalReward += reward;\n entry.count += 1;\n }\n\n let bestBatchSize = 3;\n let bestAvgReward = 0;\n for (const [batchSize, { totalReward, count }] of batchMap.entries()) {\n const avgReward = totalReward / count;\n if (avgReward > bestAvgReward) {\n bestAvgReward = avgReward;\n bestBatchSize = batchSize;\n }\n }\n\n return bestBatchSize;\n }\n }\n\n // Default batch size based on complexity\n switch (taskComplexity) {\n case 'low':\n return Math.min(3, estimatedAgentCount);\n case 'medium':\n return Math.min(5, estimatedAgentCount);\n case 'high':\n return Math.min(7, estimatedAgentCount);\n case 'critical':\n return Math.min(10, estimatedAgentCount);\n }\n }\n\n /**\n * Get maximum agents for topology (to avoid coordination overhead)\n */\n private getMaxAgentsForTopology(topology: string): number {\n switch (topology) {\n case 'mesh':\n return 10; // O(n²) coordination overhead beyond this\n case 'hierarchical':\n return 50; // Scales well with delegation\n case 'ring':\n return 20; // Sequential token passing limits scale\n case 'star':\n return 30; // Central coordinator bottleneck\n default:\n return 10;\n }\n }\n\n /**\n * Generate statistics report on learned patterns\n */\n async getOptimizationStats(): Promise<{\n totalPatterns: number;\n topologiesUsed: Record<string, number>;\n avgSpeedupByTopology: Record<string, number>;\n avgSuccessRate: number;\n bestPerformingTopology: string;\n }> {\n const allPatterns = await (this.reasoningBank as any).searchPatterns?.(this.NAMESPACE, {\n k: 1000,\n onlySuccesses: true\n }) ?? [];\n\n const stats = {\n totalPatterns: allPatterns.length,\n topologiesUsed: {} as Record<string, number>,\n speedupByTopology: {} as Record<string, number[]>,\n successRates: [] as number[],\n avgSpeedupByTopology: {} as Record<string, number>,\n avgSuccessRate: 0,\n bestPerformingTopology: 'hierarchical'\n };\n\n for (const pattern of allPatterns) {\n try {\n const metrics: SwarmMetrics = JSON.parse(pattern.output);\n\n // Count topology usage\n stats.topologiesUsed[metrics.topology] = (stats.topologiesUsed[metrics.topology] || 0) + 1;\n\n // Track speedup\n if (!stats.speedupByTopology[metrics.topology]) {\n stats.speedupByTopology[metrics.topology] = [];\n }\n if (metrics.speedup) {\n stats.speedupByTopology[metrics.topology].push(metrics.speedup);\n }\n\n // Track success rate\n stats.successRates.push(metrics.successRate);\n } catch (e) {\n continue;\n }\n }\n\n // Calculate averages\n for (const [topology, speedups] of Object.entries(stats.speedupByTopology)) {\n if (speedups.length > 0) {\n stats.avgSpeedupByTopology[topology] = speedups.reduce((a, b) => a + b, 0) / speedups.length;\n }\n }\n\n stats.avgSuccessRate = stats.successRates.length > 0\n ? stats.successRates.reduce((a, b) => a + b, 0) / stats.successRates.length\n : 0;\n\n // Find best performing topology\n let bestSpeedup = 0;\n for (const [topology, avgSpeedup] of Object.entries(stats.avgSpeedupByTopology)) {\n if (avgSpeedup > bestSpeedup) {\n bestSpeedup = avgSpeedup;\n stats.bestPerformingTopology = topology;\n }\n }\n\n return {\n totalPatterns: stats.totalPatterns,\n topologiesUsed: stats.topologiesUsed,\n avgSpeedupByTopology: stats.avgSpeedupByTopology,\n avgSuccessRate: Math.round(stats.avgSuccessRate * 10) / 10,\n bestPerformingTopology: stats.bestPerformingTopology\n };\n }\n}\n\n/**\n * Auto-select optimal swarm configuration\n */\nexport async function autoSelectSwarmConfig(\n reasoningBank: ReasoningBank,\n taskDescription: string,\n options: {\n taskComplexity?: 'low' | 'medium' | 'high' | 'critical';\n estimatedAgentCount?: number;\n } = {}\n): Promise<OptimizationRecommendation> {\n const optimizer = new SwarmLearningOptimizer(reasoningBank);\n\n const complexity = options.taskComplexity || 'medium';\n const agentCount = options.estimatedAgentCount || 5;\n\n return await optimizer.getOptimization(taskDescription, complexity, agentCount);\n}\n"]}
1
+ {"version":3,"file":"swarm-learning-optimizer.js","sourceRoot":"","sources":["../../src/hooks/swarm-learning-optimizer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Swarm Learning Optimizer\n *\n * Enhances parallel execution with adaptive learning, pattern recognition,\n * and automated topology selection using ReasoningBank intelligence.\n */\n\nimport { ReasoningBank } from '../reasoningbank';\n\nexport interface SwarmMetrics {\n topology: 'mesh' | 'hierarchical' | 'ring' | 'star';\n agentCount: number;\n batchSize: number;\n totalTimeMs: number;\n successRate: number;\n speedup?: number;\n taskComplexity: 'low' | 'medium' | 'high' | 'critical';\n operations: number;\n}\n\nexport interface LearningPattern {\n taskType: string;\n optimalTopology: string;\n optimalBatchSize: number;\n expectedSpeedup: number;\n successRate: number;\n timestamp: string;\n}\n\nexport interface OptimizationRecommendation {\n recommendedTopology: 'mesh' | 'hierarchical' | 'ring' | 'star';\n recommendedBatchSize: number;\n recommendedAgentCount: number;\n expectedSpeedup: number;\n confidence: number;\n reasoning: string;\n alternatives: Array<{\n topology: string;\n confidence: number;\n reasoning: string;\n }>;\n}\n\nexport class SwarmLearningOptimizer {\n private reasoningBank: ReasoningBank;\n private readonly NAMESPACE = 'swarm/optimization';\n\n constructor(reasoningBank: ReasoningBank) {\n this.reasoningBank = reasoningBank;\n }\n\n /**\n * Store swarm execution metrics for learning\n */\n async storeExecutionPattern(\n taskDescription: string,\n metrics: SwarmMetrics,\n success: boolean\n ): Promise<void> {\n const sessionId = `${this.NAMESPACE}/${metrics.topology}/${Date.now()}`;\n\n await this.reasoningBank.storePattern({\n sessionId,\n task: taskDescription,\n input: JSON.stringify({ taskComplexity: metrics.taskComplexity, agentCount: metrics.agentCount }),\n output: JSON.stringify(metrics),\n reward: this.calculateReward(metrics, success),\n success,\n latencyMs: metrics.totalTimeMs,\n tokensUsed: 0, // Not tracking tokens for swarm ops\n critique: this.generateCritique(metrics, success)\n });\n }\n\n /**\n * Calculate reward score for swarm execution (0-1)\n */\n private calculateReward(metrics: SwarmMetrics, success: boolean): number {\n if (!success) return 0.0;\n\n let reward = 0.5; // Base reward for success\n\n // Reward for high success rate (+0.2)\n if (metrics.successRate >= 90) {\n reward += 0.2;\n } else if (metrics.successRate >= 75) {\n reward += 0.1;\n }\n\n // Reward for speedup (+0.2)\n if (metrics.speedup) {\n if (metrics.speedup >= 3.0) {\n reward += 0.2;\n } else if (metrics.speedup >= 2.0) {\n reward += 0.15;\n } else if (metrics.speedup >= 1.5) {\n reward += 0.1;\n }\n }\n\n // Reward for efficiency (operations/time) (+0.1)\n const opsPerSecond = (metrics.operations / metrics.totalTimeMs) * 1000;\n if (opsPerSecond > 0.1) {\n reward += 0.1;\n }\n\n return Math.min(1.0, reward);\n }\n\n /**\n * Generate critique for learning\n */\n private generateCritique(metrics: SwarmMetrics, success: boolean): string {\n const critiques: string[] = [];\n\n if (!success) {\n critiques.push('Swarm execution failed - investigate error handling');\n }\n\n if (metrics.successRate < 80) {\n critiques.push(`Low success rate (${metrics.successRate}%) - review agent reliability`);\n }\n\n if (metrics.speedup && metrics.speedup < 1.2) {\n critiques.push(`Minimal speedup (${metrics.speedup}x) - consider different topology or larger batches`);\n }\n\n if (metrics.batchSize < 3) {\n critiques.push('Small batch size - may not fully utilize parallel capabilities');\n }\n\n if (metrics.topology === 'mesh' && metrics.agentCount > 10) {\n critiques.push('Mesh topology with many agents (O(n²) coordination) - consider hierarchical');\n }\n\n if (critiques.length === 0) {\n if (metrics.speedup && metrics.speedup >= 3.0) {\n return 'Excellent parallel execution - pattern worth reusing';\n }\n return 'Good swarm execution - successful pattern';\n }\n\n return critiques.join('. ');\n }\n\n /**\n * Get optimization recommendations based on learned patterns\n */\n async getOptimization(\n taskDescription: string,\n taskComplexity: 'low' | 'medium' | 'high' | 'critical',\n estimatedAgentCount: number\n ): Promise<OptimizationRecommendation> {\n // Search for similar successful patterns\n const similarPatterns = await this.reasoningBank.searchPatterns(taskDescription, {\n k: 10,\n minReward: 0.7,\n onlySuccesses: true\n });\n\n if (similarPatterns.length === 0) {\n // No learned patterns - return default recommendations\n return this.getDefaultRecommendation(taskComplexity, estimatedAgentCount);\n }\n\n // Analyze patterns to find optimal configuration\n const topologyScores = new Map<string, { totalReward: number; count: number; avgSpeedup: number }>();\n\n for (const pattern of similarPatterns) {\n try {\n const metrics: SwarmMetrics = JSON.parse(pattern.output);\n const topology = metrics.topology;\n\n if (!topologyScores.has(topology)) {\n topologyScores.set(topology, { totalReward: 0, count: 0, avgSpeedup: 0 });\n }\n\n const score = topologyScores.get(topology)!;\n score.totalReward += pattern.reward;\n score.count += 1;\n score.avgSpeedup += metrics.speedup || 1.0;\n } catch (e) {\n // Skip invalid pattern data\n continue;\n }\n }\n\n // Find best topology based on average reward and speedup\n let bestTopology = 'hierarchical';\n let bestScore = 0;\n let bestSpeedup = 1.0;\n const alternatives: Array<{ topology: string; confidence: number; reasoning: string }> = [];\n\n for (const [topology, data] of topologyScores.entries()) {\n const avgReward = data.totalReward / data.count;\n const avgSpeedup = data.avgSpeedup / data.count;\n const score = avgReward * 0.6 + (avgSpeedup / 5.0) * 0.4; // Weighted score\n\n if (score > bestScore) {\n if (bestScore > 0) {\n // Previous best becomes alternative\n alternatives.push({\n topology: bestTopology,\n confidence: Math.round(bestScore * 100) / 100,\n reasoning: `Average speedup: ${bestSpeedup.toFixed(2)}x from ${topologyScores.get(bestTopology)!.count} executions`\n });\n }\n bestScore = score;\n bestTopology = topology;\n bestSpeedup = avgSpeedup;\n } else {\n alternatives.push({\n topology,\n confidence: Math.round(score * 100) / 100,\n reasoning: `Average speedup: ${avgSpeedup.toFixed(2)}x from ${data.count} executions`\n });\n }\n }\n\n // Determine optimal batch size based on task complexity and learned patterns\n const optimalBatchSize = this.determineOptimalBatchSize(taskComplexity, estimatedAgentCount, similarPatterns);\n\n return {\n recommendedTopology: bestTopology as any,\n recommendedBatchSize: optimalBatchSize,\n recommendedAgentCount: Math.min(estimatedAgentCount, this.getMaxAgentsForTopology(bestTopology)),\n expectedSpeedup: bestSpeedup,\n confidence: Math.round(bestScore * 100) / 100,\n reasoning: `Based on ${similarPatterns.length} similar successful executions. ` +\n `${bestTopology} topology achieved ${bestSpeedup.toFixed(2)}x average speedup.`,\n alternatives: alternatives.sort((a, b) => b.confidence - a.confidence).slice(0, 2)\n };\n }\n\n /**\n * Get default recommendations when no learned patterns exist\n */\n private getDefaultRecommendation(\n taskComplexity: 'low' | 'medium' | 'high' | 'critical',\n estimatedAgentCount: number\n ): OptimizationRecommendation {\n // Default topology selection based on agent count and complexity\n let topology: 'mesh' | 'hierarchical' | 'ring' | 'star';\n let expectedSpeedup: number;\n let reasoning: string;\n\n if (estimatedAgentCount <= 5) {\n topology = 'mesh';\n expectedSpeedup = 2.5;\n reasoning = 'Mesh topology optimal for small swarms (≤5 agents) - full peer-to-peer coordination';\n } else if (estimatedAgentCount <= 10) {\n topology = 'hierarchical';\n expectedSpeedup = 3.5;\n reasoning = 'Hierarchical topology optimal for medium swarms (6-10 agents) - efficient delegation';\n } else {\n topology = 'hierarchical';\n expectedSpeedup = 4.0;\n reasoning = 'Hierarchical topology required for large swarms (>10 agents) - avoids O(n²) coordination overhead';\n }\n\n // Adjust for task complexity\n if (taskComplexity === 'critical' || taskComplexity === 'high') {\n expectedSpeedup *= 1.2; // Higher complexity benefits more from parallelization\n }\n\n const batchSize = this.determineOptimalBatchSize(taskComplexity, estimatedAgentCount, []);\n\n return {\n recommendedTopology: topology,\n recommendedBatchSize: batchSize,\n recommendedAgentCount: Math.min(estimatedAgentCount, this.getMaxAgentsForTopology(topology)),\n expectedSpeedup,\n confidence: 0.6, // Lower confidence without learned patterns\n reasoning: `${reasoning} (default recommendation - no learned patterns yet)`,\n alternatives: [\n {\n topology: topology === 'mesh' ? 'hierarchical' : 'mesh',\n confidence: 0.5,\n reasoning: 'Alternative topology if default does not perform well'\n }\n ]\n };\n }\n\n /**\n * Determine optimal batch size based on complexity and learned patterns\n */\n private determineOptimalBatchSize(\n taskComplexity: 'low' | 'medium' | 'high' | 'critical',\n estimatedAgentCount: number,\n learnedPatterns: any[]\n ): number {\n // Analyze learned patterns for optimal batch size\n if (learnedPatterns.length > 0) {\n const batchSizes = learnedPatterns\n .map(p => {\n try {\n const metrics: SwarmMetrics = JSON.parse(p.output);\n return { batchSize: metrics.batchSize, reward: p.reward };\n } catch (e) {\n return null;\n }\n })\n .filter(x => x !== null) as Array<{ batchSize: number; reward: number }>;\n\n if (batchSizes.length > 0) {\n // Find batch size with highest average reward\n const batchMap = new Map<number, { totalReward: number; count: number }>();\n for (const { batchSize, reward } of batchSizes) {\n if (!batchMap.has(batchSize)) {\n batchMap.set(batchSize, { totalReward: 0, count: 0 });\n }\n const entry = batchMap.get(batchSize)!;\n entry.totalReward += reward;\n entry.count += 1;\n }\n\n let bestBatchSize = 3;\n let bestAvgReward = 0;\n for (const [batchSize, { totalReward, count }] of batchMap.entries()) {\n const avgReward = totalReward / count;\n if (avgReward > bestAvgReward) {\n bestAvgReward = avgReward;\n bestBatchSize = batchSize;\n }\n }\n\n return bestBatchSize;\n }\n }\n\n // Default batch size based on complexity\n switch (taskComplexity) {\n case 'low':\n return Math.min(3, estimatedAgentCount);\n case 'medium':\n return Math.min(5, estimatedAgentCount);\n case 'high':\n return Math.min(7, estimatedAgentCount);\n case 'critical':\n return Math.min(10, estimatedAgentCount);\n }\n }\n\n /**\n * Get maximum agents for topology (to avoid coordination overhead)\n */\n private getMaxAgentsForTopology(topology: string): number {\n switch (topology) {\n case 'mesh':\n return 10; // O(n²) coordination overhead beyond this\n case 'hierarchical':\n return 50; // Scales well with delegation\n case 'ring':\n return 20; // Sequential token passing limits scale\n case 'star':\n return 30; // Central coordinator bottleneck\n default:\n return 10;\n }\n }\n\n /**\n * Generate statistics report on learned patterns\n */\n async getOptimizationStats(): Promise<{\n totalPatterns: number;\n topologiesUsed: Record<string, number>;\n avgSpeedupByTopology: Record<string, number>;\n avgSuccessRate: number;\n bestPerformingTopology: string;\n }> {\n const allPatterns = await this.reasoningBank.searchPatterns(this.NAMESPACE, {\n k: 1000,\n onlySuccesses: true\n });\n\n const stats = {\n totalPatterns: allPatterns.length,\n topologiesUsed: {} as Record<string, number>,\n speedupByTopology: {} as Record<string, number[]>,\n successRates: [] as number[],\n avgSpeedupByTopology: {} as Record<string, number>,\n avgSuccessRate: 0,\n bestPerformingTopology: 'hierarchical'\n };\n\n for (const pattern of allPatterns) {\n try {\n const metrics: SwarmMetrics = JSON.parse(pattern.output);\n\n // Count topology usage\n stats.topologiesUsed[metrics.topology] = (stats.topologiesUsed[metrics.topology] || 0) + 1;\n\n // Track speedup\n if (!stats.speedupByTopology[metrics.topology]) {\n stats.speedupByTopology[metrics.topology] = [];\n }\n if (metrics.speedup) {\n stats.speedupByTopology[metrics.topology].push(metrics.speedup);\n }\n\n // Track success rate\n stats.successRates.push(metrics.successRate);\n } catch (e) {\n continue;\n }\n }\n\n // Calculate averages\n for (const [topology, speedups] of Object.entries(stats.speedupByTopology)) {\n if (speedups.length > 0) {\n stats.avgSpeedupByTopology[topology] = speedups.reduce((a, b) => a + b, 0) / speedups.length;\n }\n }\n\n stats.avgSuccessRate = stats.successRates.length > 0\n ? stats.successRates.reduce((a, b) => a + b, 0) / stats.successRates.length\n : 0;\n\n // Find best performing topology\n let bestSpeedup = 0;\n for (const [topology, avgSpeedup] of Object.entries(stats.avgSpeedupByTopology)) {\n if (avgSpeedup > bestSpeedup) {\n bestSpeedup = avgSpeedup;\n stats.bestPerformingTopology = topology;\n }\n }\n\n return {\n totalPatterns: stats.totalPatterns,\n topologiesUsed: stats.topologiesUsed,\n avgSpeedupByTopology: stats.avgSpeedupByTopology,\n avgSuccessRate: Math.round(stats.avgSuccessRate * 10) / 10,\n bestPerformingTopology: stats.bestPerformingTopology\n };\n }\n}\n\n/**\n * Auto-select optimal swarm configuration\n */\nexport async function autoSelectSwarmConfig(\n reasoningBank: ReasoningBank,\n taskDescription: string,\n options: {\n taskComplexity?: 'low' | 'medium' | 'high' | 'critical';\n estimatedAgentCount?: number;\n } = {}\n): Promise<OptimizationRecommendation> {\n const optimizer = new SwarmLearningOptimizer(reasoningBank);\n\n const complexity = options.taskComplexity || 'medium';\n const agentCount = options.estimatedAgentCount || 5;\n\n return await optimizer.getOptimization(taskDescription, complexity, agentCount);\n}\n"]}