agentic-flow 2.0.3 → 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 (322) hide show
  1. package/.claude/agents/test-neural.md +14 -0
  2. package/.claude/settings.json +9 -133
  3. package/README.md +624 -1776
  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/.claude/agents/.claude-flow/metrics/agent-metrics.json +0 -1
  129. package/.claude/agents/.claude-flow/metrics/performance.json +0 -87
  130. package/.claude/agents/.claude-flow/metrics/task-metrics.json +0 -10
  131. package/.claude/skills/.claude-flow/metrics/agent-metrics.json +0 -1
  132. package/.claude/skills/.claude-flow/metrics/performance.json +0 -87
  133. package/.claude/skills/.claude-flow/metrics/task-metrics.json +0 -10
  134. package/.claude/skills/agentic-flow-quickstart/skill.md +0 -69
  135. package/.claude/skills/hooks-automation/skill.md +0 -155
  136. package/.claude/skills/memory-patterns/skill.md +0 -110
  137. package/.claude/skills/skill-builder/.claude-flow/metrics/agent-metrics.json +0 -1
  138. package/.claude/skills/skill-builder/.claude-flow/metrics/performance.json +0 -87
  139. package/.claude/skills/skill-builder/.claude-flow/metrics/task-metrics.json +0 -10
  140. package/.claude/skills/sparc-methodology/skill.md +0 -137
  141. package/.claude/skills/swarm-coordination/skill.md +0 -94
  142. package/.claude/skills/worker-benchmarks/skill.md +0 -135
  143. package/.claude/skills/worker-integration/skill.md +0 -154
  144. package/.claude/statusline.mjs +0 -109
  145. package/.claude/statusline.sh +0 -71
  146. package/dist/agentdb/benchmarks/comprehensive-benchmark.js +0 -664
  147. package/dist/agentdb/benchmarks/frontier-benchmark.js +0 -419
  148. package/dist/agentdb/benchmarks/reflexion-benchmark.js +0 -370
  149. package/dist/agentdb/cli/agentdb-cli.js +0 -717
  150. package/dist/agentdb/controllers/CausalMemoryGraph.js +0 -322
  151. package/dist/agentdb/controllers/CausalRecall.js +0 -281
  152. package/dist/agentdb/controllers/EmbeddingService.d.ts +0 -37
  153. package/dist/agentdb/controllers/EmbeddingService.d.ts.map +0 -1
  154. package/dist/agentdb/controllers/EmbeddingService.js +0 -119
  155. package/dist/agentdb/controllers/EmbeddingService.js.map +0 -1
  156. package/dist/agentdb/controllers/ExplainableRecall.js +0 -387
  157. package/dist/agentdb/controllers/NightlyLearner.js +0 -382
  158. package/dist/agentdb/controllers/ReflexionMemory.js +0 -239
  159. package/dist/agentdb/controllers/SkillLibrary.js +0 -276
  160. package/dist/agentdb/controllers/frontier-index.js +0 -9
  161. package/dist/agentdb/controllers/index.js +0 -8
  162. package/dist/agentdb/optimizations/BatchOperations.js +0 -198
  163. package/dist/agentdb/optimizations/QueryOptimizer.js +0 -225
  164. package/dist/agentdb/optimizations/index.js +0 -7
  165. package/dist/agentdb/tests/frontier-features.test.js +0 -665
  166. package/dist/benchmarks/embeddings-benchmark.d.ts +0 -38
  167. package/dist/benchmarks/embeddings-benchmark.d.ts.map +0 -1
  168. package/dist/benchmarks/embeddings-benchmark.js +0 -282
  169. package/dist/benchmarks/embeddings-benchmark.js.map +0 -1
  170. package/dist/cli/commands/embeddings.d.ts +0 -12
  171. package/dist/cli/commands/embeddings.d.ts.map +0 -1
  172. package/dist/cli/commands/embeddings.js +0 -386
  173. package/dist/cli/commands/embeddings.js.map +0 -1
  174. package/dist/cli/commands/init.d.ts +0 -8
  175. package/dist/cli/commands/init.d.ts.map +0 -1
  176. package/dist/cli/commands/init.js +0 -514
  177. package/dist/cli/commands/init.js.map +0 -1
  178. package/dist/cli/commands/workers.d.ts +0 -9
  179. package/dist/cli/commands/workers.d.ts.map +0 -1
  180. package/dist/cli/commands/workers.js +0 -991
  181. package/dist/cli/commands/workers.js.map +0 -1
  182. package/dist/cli/skills-manager.js +0 -1297
  183. package/dist/cli/update-message.js +0 -175
  184. package/dist/embeddings/index.d.ts +0 -17
  185. package/dist/embeddings/index.d.ts.map +0 -1
  186. package/dist/embeddings/index.js +0 -17
  187. package/dist/embeddings/index.js.map +0 -1
  188. package/dist/embeddings/neural-substrate.d.ts +0 -206
  189. package/dist/embeddings/neural-substrate.d.ts.map +0 -1
  190. package/dist/embeddings/neural-substrate.js +0 -629
  191. package/dist/embeddings/neural-substrate.js.map +0 -1
  192. package/dist/embeddings/optimized-embedder.d.ts +0 -103
  193. package/dist/embeddings/optimized-embedder.d.ts.map +0 -1
  194. package/dist/embeddings/optimized-embedder.js +0 -730
  195. package/dist/embeddings/optimized-embedder.js.map +0 -1
  196. package/dist/examples/embedding-geometry.d.ts +0 -105
  197. package/dist/examples/embedding-geometry.d.ts.map +0 -1
  198. package/dist/examples/embedding-geometry.js +0 -528
  199. package/dist/examples/embedding-geometry.js.map +0 -1
  200. package/dist/memory/SharedMemoryPool.d.ts +0 -129
  201. package/dist/memory/SharedMemoryPool.d.ts.map +0 -1
  202. package/dist/memory/SharedMemoryPool.js +0 -243
  203. package/dist/memory/SharedMemoryPool.js.map +0 -1
  204. package/dist/memory/index.d.ts +0 -8
  205. package/dist/memory/index.d.ts.map +0 -1
  206. package/dist/memory/index.js +0 -7
  207. package/dist/memory/index.js.map +0 -1
  208. package/dist/proxy/http3-proxy-old.js +0 -331
  209. package/dist/proxy/proxy/anthropic-to-gemini.js +0 -439
  210. package/dist/proxy/utils/logger.js +0 -59
  211. package/dist/reasoningbank/agentdb-adapter.js +0 -125
  212. package/dist/reasoningbank/core/database.js +0 -250
  213. package/dist/reasoningbank/core/memory-engine.js +0 -335
  214. package/dist/swarm/ipfs-swarm.d.ts +0 -265
  215. package/dist/swarm/ipfs-swarm.d.ts.map +0 -1
  216. package/dist/swarm/ipfs-swarm.js +0 -508
  217. package/dist/swarm/ipfs-swarm.js.map +0 -1
  218. package/dist/swarm/p2p-free-swarm.d.ts +0 -344
  219. package/dist/swarm/p2p-free-swarm.d.ts.map +0 -1
  220. package/dist/swarm/p2p-free-swarm.js +0 -603
  221. package/dist/swarm/p2p-free-swarm.js.map +0 -1
  222. package/dist/swarm/real-p2p-swarm.d.ts +0 -183
  223. package/dist/swarm/real-p2p-swarm.d.ts.map +0 -1
  224. package/dist/swarm/real-p2p-swarm.js +0 -469
  225. package/dist/swarm/real-p2p-swarm.js.map +0 -1
  226. package/dist/utils/adaptive-pool-sizing.js +0 -414
  227. package/dist/utils/agentdbCommands.js +0 -175
  228. package/dist/utils/circular-rate-limiter.js +0 -391
  229. package/dist/utils/dynamic-compression.js +0 -298
  230. package/dist/utils/http2-multiplexing.js +0 -319
  231. package/dist/utils/index.d.ts +0 -6
  232. package/dist/utils/index.d.ts.map +0 -1
  233. package/dist/utils/index.js +0 -6
  234. package/dist/utils/index.js.map +0 -1
  235. package/dist/utils/lazy-auth.js +0 -311
  236. package/dist/utils/model-cache.d.ts +0 -61
  237. package/dist/utils/model-cache.d.ts.map +0 -1
  238. package/dist/utils/model-cache.js +0 -176
  239. package/dist/utils/model-cache.js.map +0 -1
  240. package/dist/utils/server-push.js +0 -251
  241. package/dist/utils/suppress-warnings.d.ts +0 -19
  242. package/dist/utils/suppress-warnings.d.ts.map +0 -1
  243. package/dist/utils/suppress-warnings.js +0 -59
  244. package/dist/utils/suppress-warnings.js.map +0 -1
  245. package/dist/utils/zero-copy-buffer.js +0 -286
  246. package/dist/workers/consolidated-phases.d.ts +0 -40
  247. package/dist/workers/consolidated-phases.d.ts.map +0 -1
  248. package/dist/workers/consolidated-phases.js +0 -497
  249. package/dist/workers/consolidated-phases.js.map +0 -1
  250. package/dist/workers/custom-worker-config.d.ts +0 -133
  251. package/dist/workers/custom-worker-config.d.ts.map +0 -1
  252. package/dist/workers/custom-worker-config.js +0 -215
  253. package/dist/workers/custom-worker-config.js.map +0 -1
  254. package/dist/workers/custom-worker-factory.d.ts +0 -89
  255. package/dist/workers/custom-worker-factory.d.ts.map +0 -1
  256. package/dist/workers/custom-worker-factory.js +0 -404
  257. package/dist/workers/custom-worker-factory.js.map +0 -1
  258. package/dist/workers/dispatch-service.d.ts +0 -123
  259. package/dist/workers/dispatch-service.d.ts.map +0 -1
  260. package/dist/workers/dispatch-service.js +0 -1024
  261. package/dist/workers/dispatch-service.js.map +0 -1
  262. package/dist/workers/hooks-integration.d.ts +0 -79
  263. package/dist/workers/hooks-integration.d.ts.map +0 -1
  264. package/dist/workers/hooks-integration.js +0 -286
  265. package/dist/workers/hooks-integration.js.map +0 -1
  266. package/dist/workers/index.d.ts +0 -42
  267. package/dist/workers/index.d.ts.map +0 -1
  268. package/dist/workers/index.js +0 -52
  269. package/dist/workers/index.js.map +0 -1
  270. package/dist/workers/mcp-tools.d.ts +0 -56
  271. package/dist/workers/mcp-tools.d.ts.map +0 -1
  272. package/dist/workers/mcp-tools.js +0 -359
  273. package/dist/workers/mcp-tools.js.map +0 -1
  274. package/dist/workers/phase-executors.d.ts +0 -22
  275. package/dist/workers/phase-executors.d.ts.map +0 -1
  276. package/dist/workers/phase-executors.js +0 -445
  277. package/dist/workers/phase-executors.js.map +0 -1
  278. package/dist/workers/resource-governor.d.ts +0 -75
  279. package/dist/workers/resource-governor.d.ts.map +0 -1
  280. package/dist/workers/resource-governor.js +0 -187
  281. package/dist/workers/resource-governor.js.map +0 -1
  282. package/dist/workers/ruvector-integration.d.ts +0 -163
  283. package/dist/workers/ruvector-integration.d.ts.map +0 -1
  284. package/dist/workers/ruvector-integration.js +0 -543
  285. package/dist/workers/ruvector-integration.js.map +0 -1
  286. package/dist/workers/ruvector-native-integration.d.ts +0 -91
  287. package/dist/workers/ruvector-native-integration.d.ts.map +0 -1
  288. package/dist/workers/ruvector-native-integration.js +0 -254
  289. package/dist/workers/ruvector-native-integration.js.map +0 -1
  290. package/dist/workers/trigger-detector.d.ts +0 -68
  291. package/dist/workers/trigger-detector.d.ts.map +0 -1
  292. package/dist/workers/trigger-detector.js +0 -281
  293. package/dist/workers/trigger-detector.js.map +0 -1
  294. package/dist/workers/types.d.ts +0 -145
  295. package/dist/workers/types.d.ts.map +0 -1
  296. package/dist/workers/types.js +0 -6
  297. package/dist/workers/types.js.map +0 -1
  298. package/dist/workers/worker-agent-integration.d.ts +0 -140
  299. package/dist/workers/worker-agent-integration.d.ts.map +0 -1
  300. package/dist/workers/worker-agent-integration.js +0 -471
  301. package/dist/workers/worker-agent-integration.js.map +0 -1
  302. package/dist/workers/worker-benchmarks.d.ts +0 -88
  303. package/dist/workers/worker-benchmarks.d.ts.map +0 -1
  304. package/dist/workers/worker-benchmarks.js +0 -452
  305. package/dist/workers/worker-benchmarks.js.map +0 -1
  306. package/dist/workers/worker-registry.d.ts +0 -85
  307. package/dist/workers/worker-registry.d.ts.map +0 -1
  308. package/dist/workers/worker-registry.js +0 -547
  309. package/dist/workers/worker-registry.js.map +0 -1
  310. package/docs/.claude-flow/metrics/agent-metrics.json +0 -1
  311. package/docs/.claude-flow/metrics/performance.json +0 -87
  312. package/docs/.claude-flow/metrics/task-metrics.json +0 -10
  313. package/docs/embeddings/EMBEDDING_GEOMETRY.md +0 -935
  314. /package/.claude/agents/analysis/{analyze-code-quality.md → code-review/analyze-code-quality.md} +0 -0
  315. /package/.claude/agents/architecture/{arch-system-design.md → system-design/arch-system-design.md} +0 -0
  316. /package/.claude/agents/data/{data-ml-model.md → ml/data-ml-model.md} +0 -0
  317. /package/.claude/agents/development/{dev-backend-api.md → backend/dev-backend-api.md} +0 -0
  318. /package/.claude/agents/devops/{ops-cicd-github.md → ci-cd/ops-cicd-github.md} +0 -0
  319. /package/.claude/agents/documentation/{docs-api-openapi.md → api-docs/docs-api-openapi.md} +0 -0
  320. /package/.claude/agents/specialized/{spec-mobile-react-native.md → mobile/spec-mobile-react-native.md} +0 -0
  321. /package/.claude/agents/testing/{tdd-london-swarm.md → unit/tdd-london-swarm.md} +0 -0
  322. /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":"AAAA;;;;;GAKG;AAsCH,MAAM,OAAO,sBAAsB;IACzB,aAAa,CAAgB;IACpB,SAAS,GAAG,oBAAoB,CAAC;IAElD,YAAY,aAA4B;QACtC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CACzB,eAAuB,EACvB,OAAqB,EACrB,OAAgB;QAEhB,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAExE,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;YACpC,SAAS;YACT,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;YACjG,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;YAC9C,OAAO;YACP,SAAS,EAAE,OAAO,CAAC,WAAW;YAC9B,UAAU,EAAE,CAAC,EAAE,oCAAoC;YACnD,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;SAClD,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,OAAqB,EAAE,OAAgB;QAC7D,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC;QAEzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,0BAA0B;QAE5C,sCAAsC;QACtC,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC;QAChB,CAAC;aAAM,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,CAAC;QAChB,CAAC;QAED,4BAA4B;QAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,CAAC;YAChB,CAAC;iBAAM,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;gBAClC,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,CAAC;YAChB,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QACvE,IAAI,YAAY,GAAG,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,OAAqB,EAAE,OAAgB;QAC9D,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,GAAG,EAAE,EAAE,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,WAAW,+BAA+B,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;YAC7C,SAAS,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,OAAO,oDAAoD,CAAC,CAAC;QAC1G,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;YAC3D,SAAS,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QAChG,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;gBAC9C,OAAO,sDAAsD,CAAC;YAChE,CAAC;YACD,OAAO,2CAA2C,CAAC;QACrD,CAAC;QAED,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,eAAuB,EACvB,cAAsD,EACtD,mBAA2B;QAE3B,6FAA6F;QAC7F,MAAM,eAAe,GAAG,MAAO,IAAI,CAAC,aAAqB,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE;YAC1F,CAAC,EAAE,EAAE;YACL,SAAS,EAAE,GAAG;YACd,aAAa,EAAE,IAAI;SACpB,CAAC,IAAI,EAAE,CAAC;QAET,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,uDAAuD;YACvD,OAAO,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAC5E,CAAC;QAED,iDAAiD;QACjD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAsE,CAAC;QAErG,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;gBAElC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5E,CAAC;gBAED,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;gBAC5C,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;gBACpC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;gBACjB,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC;YAC7C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,4BAA4B;gBAC5B,SAAS;YACX,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,IAAI,YAAY,GAAG,cAAc,CAAC;QAClC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,WAAW,GAAG,GAAG,CAAC;QACtB,MAAM,YAAY,GAAuE,EAAE,CAAC;QAE5F,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;YACxD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YAChD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;YAChD,MAAM,KAAK,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,iBAAiB;YAE3E,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;oBAClB,oCAAoC;oBACpC,YAAY,CAAC,IAAI,CAAC;wBAChB,QAAQ,EAAE,YAAY;wBACtB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG;wBAC7C,SAAS,EAAE,oBAAoB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,cAAc,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,KAAK,aAAa;qBACpH,CAAC,CAAC;gBACL,CAAC;gBACD,SAAS,GAAG,KAAK,CAAC;gBAClB,YAAY,GAAG,QAAQ,CAAC;gBACxB,WAAW,GAAG,UAAU,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,CAAC;oBAChB,QAAQ;oBACR,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG;oBACzC,SAAS,EAAE,oBAAoB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,aAAa;iBACtF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,6EAA6E;QAC7E,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,cAAc,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC;QAE9G,OAAO;YACL,mBAAmB,EAAE,YAAmB;YACxC,oBAAoB,EAAE,gBAAgB;YACtC,qBAAqB,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;YAChG,eAAe,EAAE,WAAW;YAC5B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG;YAC7C,SAAS,EAAE,YAAY,eAAe,CAAC,MAAM,kCAAkC;gBACrE,GAAG,YAAY,sBAAsB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;YACzF,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACnF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,wBAAwB,CAC9B,cAAsD,EACtD,mBAA2B;QAE3B,iEAAiE;QACjE,IAAI,QAAmD,CAAC;QACxD,IAAI,eAAuB,CAAC;QAC5B,IAAI,SAAiB,CAAC;QAEtB,IAAI,mBAAmB,IAAI,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,MAAM,CAAC;YAClB,eAAe,GAAG,GAAG,CAAC;YACtB,SAAS,GAAG,qFAAqF,CAAC;QACpG,CAAC;aAAM,IAAI,mBAAmB,IAAI,EAAE,EAAE,CAAC;YACrC,QAAQ,GAAG,cAAc,CAAC;YAC1B,eAAe,GAAG,GAAG,CAAC;YACtB,SAAS,GAAG,sFAAsF,CAAC;QACrG,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,cAAc,CAAC;YAC1B,eAAe,GAAG,GAAG,CAAC;YACtB,SAAS,GAAG,mGAAmG,CAAC;QAClH,CAAC;QAED,6BAA6B;QAC7B,IAAI,cAAc,KAAK,UAAU,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YAC/D,eAAe,IAAI,GAAG,CAAC,CAAC,uDAAuD;QACjF,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,cAAc,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAE1F,OAAO;YACL,mBAAmB,EAAE,QAAQ;YAC7B,oBAAoB,EAAE,SAAS;YAC/B,qBAAqB,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YAC5F,eAAe;YACf,UAAU,EAAE,GAAG,EAAE,4CAA4C;YAC7D,SAAS,EAAE,GAAG,SAAS,qDAAqD;YAC5E,YAAY,EAAE;gBACZ;oBACE,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM;oBACvD,UAAU,EAAE,GAAG;oBACf,SAAS,EAAE,uDAAuD;iBACnE;aACF;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,yBAAyB,CAC/B,cAAsD,EACtD,mBAA2B,EAC3B,eAAsB;QAEtB,kDAAkD;QAClD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,eAAe;iBAC/B,GAAG,CAAC,CAAC,CAAC,EAAE;gBACP,IAAI,CAAC;oBACH,MAAM,OAAO,GAAiB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBACnD,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC5D,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAiD,CAAC;YAE3E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,8CAA8C;gBAC9C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkD,CAAC;gBAC3E,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;oBAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC7B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;oBACxD,CAAC;oBACD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;oBACvC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC;oBAC5B,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;gBACnB,CAAC;gBAED,IAAI,aAAa,GAAG,CAAC,CAAC;gBACtB,IAAI,aAAa,GAAG,CAAC,CAAC;gBACtB,KAAK,MAAM,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;oBACrE,MAAM,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC;oBACtC,IAAI,SAAS,GAAG,aAAa,EAAE,CAAC;wBAC9B,aAAa,GAAG,SAAS,CAAC;wBAC1B,aAAa,GAAG,SAAS,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBAED,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,QAAQ,cAAc,EAAE,CAAC;YACvB,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC1C,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC1C,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC1C,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,QAAgB;QAC9C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,EAAE,CAAC,CAAC,0CAA0C;YACvD,KAAK,cAAc;gBACjB,OAAO,EAAE,CAAC,CAAC,8BAA8B;YAC3C,KAAK,MAAM;gBACT,OAAO,EAAE,CAAC,CAAC,wCAAwC;YACrD,KAAK,MAAM;gBACT,OAAO,EAAE,CAAC,CAAC,iCAAiC;YAC9C;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB;QAOxB,MAAM,WAAW,GAAG,MAAO,IAAI,CAAC,aAAqB,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;YACrF,CAAC,EAAE,IAAI;YACP,aAAa,EAAE,IAAI;SACpB,CAAC,IAAI,EAAE,CAAC;QAET,MAAM,KAAK,GAAG;YACZ,aAAa,EAAE,WAAW,CAAC,MAAM;YACjC,cAAc,EAAE,EAA4B;YAC5C,iBAAiB,EAAE,EAA8B;YACjD,YAAY,EAAE,EAAc;YAC5B,oBAAoB,EAAE,EAA4B;YAClD,cAAc,EAAE,CAAC;YACjB,sBAAsB,EAAE,cAAc;SACvC,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAEzD,uBAAuB;gBACvB,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAE3F,gBAAgB;gBAChB,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/C,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACjD,CAAC;gBACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClE,CAAC;gBAED,qBAAqB;gBACrB,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC3E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/F,CAAC;QACH,CAAC;QAED,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YAClD,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;YAC3E,CAAC,CAAC,CAAC,CAAC;QAEN,gCAAgC;QAChC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAChF,IAAI,UAAU,GAAG,WAAW,EAAE,CAAC;gBAC7B,WAAW,GAAG,UAAU,CAAC;gBACzB,KAAK,CAAC,sBAAsB,GAAG,QAAQ,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO;YACL,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;YAChD,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,GAAG,EAAE;YAC1D,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;SACrD,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,aAA4B,EAC5B,eAAuB,EACvB,UAGI,EAAE;IAEN,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,aAAa,CAAC,CAAC;IAE5D,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC;IAEpD,OAAO,MAAM,SAAS,CAAC,eAAe,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAClF,CAAC","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"]}