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
@@ -1,508 +0,0 @@
1
- /**
2
- * IPFS-based Encrypted Swarm Coordination
3
- *
4
- * Uses free IPFS services for decentralized swarm coordination:
5
- * - web3.storage (free tier)
6
- * - Pinata (1GB free)
7
- * - Public IPFS gateways
8
- * - nft.storage (unlimited for NFT data)
9
- *
10
- * Features:
11
- * - Encrypted swarm state synchronization
12
- * - Content-addressed learning patterns
13
- * - P2P agent coordination via IPNS
14
- * - Distributed memory persistence
15
- */
16
- import crypto from 'crypto';
17
- import { logger } from '../utils/logger.js';
18
- /**
19
- * Free IPFS Gateway URLs
20
- */
21
- const FREE_IPFS_GATEWAYS = [
22
- 'https://ipfs.io/ipfs/',
23
- 'https://dweb.link/ipfs/',
24
- 'https://cloudflare-ipfs.com/ipfs/',
25
- 'https://gateway.pinata.cloud/ipfs/',
26
- 'https://w3s.link/ipfs/',
27
- 'https://4everland.io/ipfs/',
28
- ];
29
- /**
30
- * Swarm message types
31
- */
32
- export var SwarmMessageType;
33
- (function (SwarmMessageType) {
34
- SwarmMessageType["JOIN"] = "join";
35
- SwarmMessageType["LEAVE"] = "leave";
36
- SwarmMessageType["SYNC_MEMORY"] = "sync_memory";
37
- SwarmMessageType["SYNC_LEARNING"] = "sync_learning";
38
- SwarmMessageType["CONSENSUS_VOTE"] = "consensus_vote";
39
- SwarmMessageType["TASK_DISPATCH"] = "task_dispatch";
40
- SwarmMessageType["HEARTBEAT"] = "heartbeat";
41
- SwarmMessageType["GOSSIP"] = "gossip";
42
- })(SwarmMessageType || (SwarmMessageType = {}));
43
- /**
44
- * Encryption utilities for swarm communication
45
- */
46
- class SwarmEncryption {
47
- algorithm = 'aes-256-gcm';
48
- /**
49
- * Generate a new encryption key
50
- */
51
- generateKey() {
52
- return crypto.randomBytes(32);
53
- }
54
- /**
55
- * Derive shared key from agent keys (simplified ECDH)
56
- */
57
- deriveSharedKey(privateKey, publicKey) {
58
- // In production, use proper ECDH
59
- const combined = Buffer.concat([privateKey, publicKey]);
60
- return crypto.createHash('sha256').update(combined).digest();
61
- }
62
- /**
63
- * Encrypt data with AES-256-GCM
64
- */
65
- encrypt(data, key) {
66
- const iv = crypto.randomBytes(16);
67
- const cipher = crypto.createCipheriv(this.algorithm, key, iv);
68
- let encrypted = cipher.update(data, 'utf8', 'base64');
69
- encrypted += cipher.final('base64');
70
- return {
71
- encrypted,
72
- iv: iv.toString('base64'),
73
- authTag: cipher.getAuthTag().toString('base64'),
74
- };
75
- }
76
- /**
77
- * Decrypt data with AES-256-GCM
78
- */
79
- decrypt(encrypted, key, iv, authTag) {
80
- const decipher = crypto.createDecipheriv(this.algorithm, key, Buffer.from(iv, 'base64'));
81
- decipher.setAuthTag(Buffer.from(authTag, 'base64'));
82
- let decrypted = decipher.update(encrypted, 'base64', 'utf8');
83
- decrypted += decipher.final('utf8');
84
- return decrypted;
85
- }
86
- /**
87
- * Generate key pair for agent
88
- */
89
- generateKeyPair() {
90
- const { publicKey, privateKey } = crypto.generateKeyPairSync('ed25519', {
91
- publicKeyEncoding: { type: 'spki', format: 'pem' },
92
- privateKeyEncoding: { type: 'pkcs8', format: 'pem' },
93
- });
94
- return { publicKey, privateKey };
95
- }
96
- /**
97
- * Sign data
98
- */
99
- sign(data, privateKey) {
100
- const sign = crypto.createSign('SHA256');
101
- sign.update(data);
102
- return sign.sign(privateKey, 'base64');
103
- }
104
- /**
105
- * Verify signature
106
- */
107
- verify(data, signature, publicKey) {
108
- const verify = crypto.createVerify('SHA256');
109
- verify.update(data);
110
- return verify.verify(publicKey, signature, 'base64');
111
- }
112
- }
113
- /**
114
- * IPFS Client for free providers
115
- */
116
- class IPFSClient {
117
- gateway;
118
- apiEndpoint;
119
- apiKey;
120
- apiSecret;
121
- constructor(config) {
122
- this.gateway = config.gateway || FREE_IPFS_GATEWAYS[0];
123
- this.apiKey = config.apiKey;
124
- this.apiSecret = config.apiSecret;
125
- // Set API endpoint based on provider
126
- switch (config.provider) {
127
- case 'pinata':
128
- this.apiEndpoint = 'https://api.pinata.cloud';
129
- break;
130
- case 'web3storage':
131
- this.apiEndpoint = 'https://api.web3.storage';
132
- break;
133
- case 'infura':
134
- this.apiEndpoint = 'https://ipfs.infura.io:5001/api/v0';
135
- break;
136
- case 'filebase':
137
- this.apiEndpoint = 'https://api.filebase.io/v1/ipfs';
138
- break;
139
- default:
140
- this.apiEndpoint = undefined;
141
- }
142
- }
143
- /**
144
- * Add data to IPFS (simulated for demo, real impl would use actual API)
145
- */
146
- async add(data) {
147
- // Generate CID (content-addressed hash)
148
- const hash = crypto.createHash('sha256')
149
- .update(typeof data === 'string' ? data : data.toString())
150
- .digest('hex');
151
- // Simulated CID (real impl would pin to IPFS)
152
- const cid = `Qm${hash.slice(0, 44)}`;
153
- logger.debug('IPFS add', { cid, size: data.length });
154
- return cid;
155
- }
156
- /**
157
- * Get data from IPFS via gateway
158
- */
159
- async get(cid) {
160
- const url = `${this.gateway}${cid}`;
161
- try {
162
- const response = await fetch(url, {
163
- headers: this.apiKey ? { 'Authorization': `Bearer ${this.apiKey}` } : {},
164
- });
165
- if (!response.ok) {
166
- throw new Error(`IPFS fetch failed: ${response.status}`);
167
- }
168
- return await response.text();
169
- }
170
- catch (error) {
171
- // Try alternate gateways
172
- for (const gateway of FREE_IPFS_GATEWAYS) {
173
- if (gateway === this.gateway)
174
- continue;
175
- try {
176
- const resp = await fetch(`${gateway}${cid}`);
177
- if (resp.ok)
178
- return await resp.text();
179
- }
180
- catch {
181
- continue;
182
- }
183
- }
184
- throw error;
185
- }
186
- }
187
- /**
188
- * Pin data to IPFS (persistent storage)
189
- */
190
- async pin(cid) {
191
- if (!this.apiEndpoint || !this.apiKey) {
192
- logger.warn('IPFS pin requires API key');
193
- return false;
194
- }
195
- // Pinata pinning
196
- if (this.apiEndpoint.includes('pinata')) {
197
- try {
198
- const response = await fetch(`${this.apiEndpoint}/pinning/pinByHash`, {
199
- method: 'POST',
200
- headers: {
201
- 'Content-Type': 'application/json',
202
- 'pinata_api_key': this.apiKey,
203
- 'pinata_secret_api_key': this.apiSecret || '',
204
- },
205
- body: JSON.stringify({ hashToPin: cid }),
206
- });
207
- return response.ok;
208
- }
209
- catch {
210
- return false;
211
- }
212
- }
213
- return true;
214
- }
215
- /**
216
- * Get gateway URL
217
- */
218
- getGatewayUrl(cid) {
219
- return `${this.gateway}${cid}`;
220
- }
221
- }
222
- /**
223
- * IPFS-based Encrypted Swarm Coordinator
224
- */
225
- export class IPFSSwarmCoordinator {
226
- ipfs;
227
- encryption;
228
- swarmKey;
229
- agents;
230
- learningPatterns;
231
- messageLog;
232
- swarmId;
233
- constructor(config, swarmKey) {
234
- this.ipfs = new IPFSClient(config);
235
- this.encryption = new SwarmEncryption();
236
- this.swarmKey = swarmKey || this.encryption.generateKey();
237
- this.agents = new Map();
238
- this.learningPatterns = new Map();
239
- this.messageLog = [];
240
- this.swarmId = crypto.randomUUID();
241
- }
242
- /**
243
- * Initialize swarm and publish initial state to IPFS
244
- */
245
- async initialize() {
246
- const initialState = {
247
- swarmId: this.swarmId,
248
- created: Date.now(),
249
- version: '1.0.0',
250
- };
251
- const cid = await this.ipfs.add(JSON.stringify(initialState));
252
- logger.info('IPFS Swarm initialized', { swarmId: this.swarmId, cid });
253
- return cid;
254
- }
255
- /**
256
- * Register agent with encrypted credentials
257
- */
258
- async registerAgent(agentId, capabilities) {
259
- const keyPair = this.encryption.generateKeyPair();
260
- const agentInfo = {
261
- id: agentId,
262
- publicKey: keyPair.publicKey,
263
- capabilities,
264
- lastSeen: Date.now(),
265
- status: 'active',
266
- };
267
- this.agents.set(agentId, agentInfo);
268
- // Publish join message to IPFS
269
- await this.publishMessage({
270
- type: SwarmMessageType.JOIN,
271
- agentId,
272
- capabilities,
273
- });
274
- logger.info('Agent registered', { agentId, capabilities });
275
- return keyPair;
276
- }
277
- /**
278
- * Publish encrypted message to IPFS
279
- */
280
- async publishMessage(payload, messageType = SwarmMessageType.GOSSIP) {
281
- const data = JSON.stringify(payload);
282
- const { encrypted, iv, authTag } = this.encryption.encrypt(data, this.swarmKey);
283
- // Store encrypted message on IPFS
284
- const cid = await this.ipfs.add(encrypted);
285
- const message = {
286
- cid,
287
- encryptedPayload: encrypted,
288
- iv,
289
- authTag,
290
- timestamp: Date.now(),
291
- sender: payload.agentId || 'coordinator',
292
- messageType,
293
- };
294
- this.messageLog.push(message);
295
- return message;
296
- }
297
- /**
298
- * Retrieve and decrypt message from IPFS
299
- */
300
- async retrieveMessage(message) {
301
- try {
302
- const decrypted = this.encryption.decrypt(message.encryptedPayload, this.swarmKey, message.iv, message.authTag);
303
- return JSON.parse(decrypted);
304
- }
305
- catch (error) {
306
- logger.error('Failed to decrypt message', { cid: message.cid, error });
307
- throw error;
308
- }
309
- }
310
- /**
311
- * Store learning pattern on IPFS
312
- */
313
- async storeLearningPattern(agentId, patternType, embedding, metadata = {}) {
314
- const pattern = {
315
- patternType,
316
- embedding,
317
- metadata,
318
- timestamp: Date.now(),
319
- agentId,
320
- };
321
- // Encrypt before storing
322
- const encrypted = this.encryption.encrypt(JSON.stringify(pattern), this.swarmKey);
323
- const cid = await this.ipfs.add(JSON.stringify(encrypted));
324
- const storedPattern = {
325
- cid,
326
- ...pattern,
327
- };
328
- this.learningPatterns.set(cid, storedPattern);
329
- logger.debug('Learning pattern stored', { cid, patternType, agentId });
330
- return storedPattern;
331
- }
332
- /**
333
- * Retrieve learning pattern from IPFS
334
- */
335
- async retrieveLearningPattern(cid) {
336
- // Check local cache first
337
- if (this.learningPatterns.has(cid)) {
338
- return this.learningPatterns.get(cid);
339
- }
340
- try {
341
- const data = await this.ipfs.get(cid);
342
- const encrypted = JSON.parse(data);
343
- const decrypted = this.encryption.decrypt(encrypted.encrypted, this.swarmKey, encrypted.iv, encrypted.authTag);
344
- const pattern = JSON.parse(decrypted);
345
- return { cid, ...pattern };
346
- }
347
- catch (error) {
348
- logger.error('Failed to retrieve pattern', { cid, error });
349
- return null;
350
- }
351
- }
352
- /**
353
- * Sync memory vectors across swarm via IPFS
354
- */
355
- async syncMemory(agentId, vectors, namespace) {
356
- const memoryData = {
357
- agentId,
358
- vectors,
359
- namespace,
360
- timestamp: Date.now(),
361
- vectorCount: vectors.length,
362
- dimensions: vectors[0]?.length || 0,
363
- };
364
- const message = await this.publishMessage(memoryData, SwarmMessageType.SYNC_MEMORY);
365
- // Pin for persistence
366
- await this.ipfs.pin(message.cid);
367
- return message.cid;
368
- }
369
- /**
370
- * Sync learning state across swarm
371
- */
372
- async syncLearning(agentId, qTable, policyWeights) {
373
- const learningData = {
374
- agentId,
375
- qTable,
376
- policyWeights,
377
- timestamp: Date.now(),
378
- };
379
- const message = await this.publishMessage(learningData, SwarmMessageType.SYNC_LEARNING);
380
- return message.cid;
381
- }
382
- /**
383
- * Run consensus vote via IPFS
384
- */
385
- async submitConsensusVote(agentId, proposalId, vote, privateKey) {
386
- const voteData = { proposalId, vote, timestamp: Date.now() };
387
- const signature = this.encryption.sign(JSON.stringify(voteData), privateKey);
388
- const message = await this.publishMessage({ agentId, ...voteData, signature }, SwarmMessageType.CONSENSUS_VOTE);
389
- return message.cid;
390
- }
391
- /**
392
- * Gossip propagation via IPFS
393
- */
394
- async gossip(origin, payload, ttl = 5) {
395
- const cids = [];
396
- const gossipData = {
397
- origin,
398
- payload,
399
- ttl,
400
- hop: 0,
401
- timestamp: Date.now(),
402
- };
403
- const message = await this.publishMessage(gossipData, SwarmMessageType.GOSSIP);
404
- cids.push(message.cid);
405
- // Simulate gossip propagation to connected agents
406
- for (const [agentId, agent] of this.agents) {
407
- if (agentId !== origin && agent.status === 'active') {
408
- const hopMessage = await this.publishMessage({ ...gossipData, hop: 1, receiver: agentId }, SwarmMessageType.GOSSIP);
409
- cids.push(hopMessage.cid);
410
- }
411
- }
412
- return cids;
413
- }
414
- /**
415
- * Get swarm statistics
416
- */
417
- getStats() {
418
- const activeAgents = Array.from(this.agents.values())
419
- .filter(a => a.status === 'active').length;
420
- return {
421
- swarmId: this.swarmId,
422
- activeAgents,
423
- totalAgents: this.agents.size,
424
- learningPatterns: this.learningPatterns.size,
425
- messageCount: this.messageLog.length,
426
- lastActivity: this.messageLog.length > 0
427
- ? this.messageLog[this.messageLog.length - 1].timestamp
428
- : Date.now(),
429
- };
430
- }
431
- /**
432
- * Export swarm state to IPFS (for backup/recovery)
433
- */
434
- async exportState() {
435
- const state = {
436
- swarmId: this.swarmId,
437
- agents: Array.from(this.agents.entries()),
438
- learningPatternCids: Array.from(this.learningPatterns.keys()),
439
- messageCount: this.messageLog.length,
440
- exportedAt: Date.now(),
441
- };
442
- const encrypted = this.encryption.encrypt(JSON.stringify(state), this.swarmKey);
443
- const cid = await this.ipfs.add(JSON.stringify(encrypted));
444
- await this.ipfs.pin(cid);
445
- logger.info('Swarm state exported', { cid });
446
- return cid;
447
- }
448
- /**
449
- * Get swarm key (for sharing with authorized agents)
450
- */
451
- getSwarmKey() {
452
- return this.swarmKey.toString('base64');
453
- }
454
- /**
455
- * Get all message CIDs (for IPFS-based message history)
456
- */
457
- getMessageHistory() {
458
- return [...this.messageLog];
459
- }
460
- }
461
- /**
462
- * Free IPFS provider presets
463
- */
464
- export const FREE_IPFS_PROVIDERS = {
465
- /**
466
- * web3.storage - 5GB free
467
- * Sign up: https://web3.storage
468
- */
469
- web3storage: (apiKey) => ({
470
- provider: 'web3storage',
471
- apiKey,
472
- gateway: 'https://w3s.link/ipfs/',
473
- }),
474
- /**
475
- * Pinata - 1GB free
476
- * Sign up: https://pinata.cloud
477
- */
478
- pinata: (apiKey, apiSecret) => ({
479
- provider: 'pinata',
480
- apiKey,
481
- apiSecret,
482
- gateway: 'https://gateway.pinata.cloud/ipfs/',
483
- }),
484
- /**
485
- * Public gateway (no API key needed, read-only)
486
- */
487
- public: () => ({
488
- provider: 'local',
489
- gateway: 'https://ipfs.io/ipfs/',
490
- }),
491
- /**
492
- * Cloudflare IPFS (free, fast)
493
- */
494
- cloudflare: () => ({
495
- provider: 'local',
496
- gateway: 'https://cloudflare-ipfs.com/ipfs/',
497
- }),
498
- /**
499
- * 4everland (free tier)
500
- */
501
- foureverland: (apiKey) => ({
502
- provider: 'local',
503
- apiKey,
504
- gateway: 'https://4everland.io/ipfs/',
505
- }),
506
- };
507
- export { SwarmEncryption, IPFSClient };
508
- //# sourceMappingURL=ipfs-swarm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ipfs-swarm.js","sourceRoot":"","sources":["../../src/swarm/ipfs-swarm.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * IPFS-based Encrypted Swarm Coordination\n *\n * Uses free IPFS services for decentralized swarm coordination:\n * - web3.storage (free tier)\n * - Pinata (1GB free)\n * - Public IPFS gateways\n * - nft.storage (unlimited for NFT data)\n *\n * Features:\n * - Encrypted swarm state synchronization\n * - Content-addressed learning patterns\n * - P2P agent coordination via IPNS\n * - Distributed memory persistence\n */\n\nimport crypto from 'crypto';\nimport { logger } from '../utils/logger.js';\n\n/**\n * Free IPFS Gateway URLs\n */\nconst FREE_IPFS_GATEWAYS = [\n 'https://ipfs.io/ipfs/',\n 'https://dweb.link/ipfs/',\n 'https://cloudflare-ipfs.com/ipfs/',\n 'https://gateway.pinata.cloud/ipfs/',\n 'https://w3s.link/ipfs/',\n 'https://4everland.io/ipfs/',\n];\n\n/**\n * IPFS Provider configuration\n */\nexport interface IPFSProviderConfig {\n provider: 'web3storage' | 'pinata' | 'infura' | 'filebase' | 'local';\n apiKey?: string;\n apiSecret?: string;\n gateway?: string;\n}\n\n/**\n * Encrypted swarm message\n */\nexport interface EncryptedSwarmMessage {\n cid: string;\n encryptedPayload: string;\n iv: string;\n authTag: string;\n timestamp: number;\n sender: string;\n messageType: SwarmMessageType;\n}\n\n/**\n * Swarm message types\n */\nexport enum SwarmMessageType {\n JOIN = 'join',\n LEAVE = 'leave',\n SYNC_MEMORY = 'sync_memory',\n SYNC_LEARNING = 'sync_learning',\n CONSENSUS_VOTE = 'consensus_vote',\n TASK_DISPATCH = 'task_dispatch',\n HEARTBEAT = 'heartbeat',\n GOSSIP = 'gossip',\n}\n\n/**\n * Learning pattern stored on IPFS\n */\nexport interface IPFSLearningPattern {\n cid: string;\n patternType: string;\n embedding: number[];\n metadata: Record<string, any>;\n timestamp: number;\n agentId: string;\n}\n\n/**\n * Swarm state stored on IPFS\n */\nexport interface IPFSSwarmState {\n swarmId: string;\n agents: Map<string, IPFSAgentInfo>;\n learningPatterns: string[]; // CIDs\n consensusState: ConsensusState;\n lastUpdated: number;\n}\n\n/**\n * Agent info for IPFS swarm\n */\nexport interface IPFSAgentInfo {\n id: string;\n publicKey: string;\n capabilities: string[];\n ipnsKey?: string;\n lastSeen: number;\n status: 'active' | 'idle' | 'disconnected';\n}\n\n/**\n * Consensus state\n */\nexport interface ConsensusState {\n proposalId: string;\n votes: Map<string, boolean>;\n threshold: number;\n deadline: number;\n}\n\n/**\n * Encryption utilities for swarm communication\n */\nclass SwarmEncryption {\n private algorithm = 'aes-256-gcm';\n\n /**\n * Generate a new encryption key\n */\n generateKey(): Buffer {\n return crypto.randomBytes(32);\n }\n\n /**\n * Derive shared key from agent keys (simplified ECDH)\n */\n deriveSharedKey(privateKey: Buffer, publicKey: Buffer): Buffer {\n // In production, use proper ECDH\n const combined = Buffer.concat([privateKey, publicKey]);\n return crypto.createHash('sha256').update(combined).digest();\n }\n\n /**\n * Encrypt data with AES-256-GCM\n */\n encrypt(data: string, key: Buffer): { encrypted: string; iv: string; authTag: string } {\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv(this.algorithm, key, iv);\n\n let encrypted = cipher.update(data, 'utf8', 'base64');\n encrypted += cipher.final('base64');\n\n return {\n encrypted,\n iv: iv.toString('base64'),\n authTag: cipher.getAuthTag().toString('base64'),\n };\n }\n\n /**\n * Decrypt data with AES-256-GCM\n */\n decrypt(encrypted: string, key: Buffer, iv: string, authTag: string): string {\n const decipher = crypto.createDecipheriv(\n this.algorithm,\n key,\n Buffer.from(iv, 'base64')\n );\n decipher.setAuthTag(Buffer.from(authTag, 'base64'));\n\n let decrypted = decipher.update(encrypted, 'base64', 'utf8');\n decrypted += decipher.final('utf8');\n\n return decrypted;\n }\n\n /**\n * Generate key pair for agent\n */\n generateKeyPair(): { publicKey: string; privateKey: string } {\n const { publicKey, privateKey } = crypto.generateKeyPairSync('ed25519', {\n publicKeyEncoding: { type: 'spki', format: 'pem' },\n privateKeyEncoding: { type: 'pkcs8', format: 'pem' },\n });\n return { publicKey, privateKey };\n }\n\n /**\n * Sign data\n */\n sign(data: string, privateKey: string): string {\n const sign = crypto.createSign('SHA256');\n sign.update(data);\n return sign.sign(privateKey, 'base64');\n }\n\n /**\n * Verify signature\n */\n verify(data: string, signature: string, publicKey: string): boolean {\n const verify = crypto.createVerify('SHA256');\n verify.update(data);\n return verify.verify(publicKey, signature, 'base64');\n }\n}\n\n/**\n * IPFS Client for free providers\n */\nclass IPFSClient {\n private gateway: string;\n private apiEndpoint?: string;\n private apiKey?: string;\n private apiSecret?: string;\n\n constructor(config: IPFSProviderConfig) {\n this.gateway = config.gateway || FREE_IPFS_GATEWAYS[0];\n this.apiKey = config.apiKey;\n this.apiSecret = config.apiSecret;\n\n // Set API endpoint based on provider\n switch (config.provider) {\n case 'pinata':\n this.apiEndpoint = 'https://api.pinata.cloud';\n break;\n case 'web3storage':\n this.apiEndpoint = 'https://api.web3.storage';\n break;\n case 'infura':\n this.apiEndpoint = 'https://ipfs.infura.io:5001/api/v0';\n break;\n case 'filebase':\n this.apiEndpoint = 'https://api.filebase.io/v1/ipfs';\n break;\n default:\n this.apiEndpoint = undefined;\n }\n }\n\n /**\n * Add data to IPFS (simulated for demo, real impl would use actual API)\n */\n async add(data: string | Buffer): Promise<string> {\n // Generate CID (content-addressed hash)\n const hash = crypto.createHash('sha256')\n .update(typeof data === 'string' ? data : data.toString())\n .digest('hex');\n\n // Simulated CID (real impl would pin to IPFS)\n const cid = `Qm${hash.slice(0, 44)}`;\n\n logger.debug('IPFS add', { cid, size: data.length });\n return cid;\n }\n\n /**\n * Get data from IPFS via gateway\n */\n async get(cid: string): Promise<string> {\n const url = `${this.gateway}${cid}`;\n\n try {\n const response = await fetch(url, {\n headers: this.apiKey ? { 'Authorization': `Bearer ${this.apiKey}` } : {},\n });\n\n if (!response.ok) {\n throw new Error(`IPFS fetch failed: ${response.status}`);\n }\n\n return await response.text();\n } catch (error) {\n // Try alternate gateways\n for (const gateway of FREE_IPFS_GATEWAYS) {\n if (gateway === this.gateway) continue;\n\n try {\n const resp = await fetch(`${gateway}${cid}`);\n if (resp.ok) return await resp.text();\n } catch {\n continue;\n }\n }\n\n throw error;\n }\n }\n\n /**\n * Pin data to IPFS (persistent storage)\n */\n async pin(cid: string): Promise<boolean> {\n if (!this.apiEndpoint || !this.apiKey) {\n logger.warn('IPFS pin requires API key');\n return false;\n }\n\n // Pinata pinning\n if (this.apiEndpoint.includes('pinata')) {\n try {\n const response = await fetch(`${this.apiEndpoint}/pinning/pinByHash`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'pinata_api_key': this.apiKey,\n 'pinata_secret_api_key': this.apiSecret || '',\n },\n body: JSON.stringify({ hashToPin: cid }),\n });\n\n return response.ok;\n } catch {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get gateway URL\n */\n getGatewayUrl(cid: string): string {\n return `${this.gateway}${cid}`;\n }\n}\n\n/**\n * IPFS-based Encrypted Swarm Coordinator\n */\nexport class IPFSSwarmCoordinator {\n private ipfs: IPFSClient;\n private encryption: SwarmEncryption;\n private swarmKey: Buffer;\n private agents: Map<string, IPFSAgentInfo>;\n private learningPatterns: Map<string, IPFSLearningPattern>;\n private messageLog: EncryptedSwarmMessage[];\n private swarmId: string;\n\n constructor(config: IPFSProviderConfig, swarmKey?: Buffer) {\n this.ipfs = new IPFSClient(config);\n this.encryption = new SwarmEncryption();\n this.swarmKey = swarmKey || this.encryption.generateKey();\n this.agents = new Map();\n this.learningPatterns = new Map();\n this.messageLog = [];\n this.swarmId = crypto.randomUUID();\n }\n\n /**\n * Initialize swarm and publish initial state to IPFS\n */\n async initialize(): Promise<string> {\n const initialState = {\n swarmId: this.swarmId,\n created: Date.now(),\n version: '1.0.0',\n };\n\n const cid = await this.ipfs.add(JSON.stringify(initialState));\n logger.info('IPFS Swarm initialized', { swarmId: this.swarmId, cid });\n\n return cid;\n }\n\n /**\n * Register agent with encrypted credentials\n */\n async registerAgent(\n agentId: string,\n capabilities: string[]\n ): Promise<{ publicKey: string; privateKey: string }> {\n const keyPair = this.encryption.generateKeyPair();\n\n const agentInfo: IPFSAgentInfo = {\n id: agentId,\n publicKey: keyPair.publicKey,\n capabilities,\n lastSeen: Date.now(),\n status: 'active',\n };\n\n this.agents.set(agentId, agentInfo);\n\n // Publish join message to IPFS\n await this.publishMessage({\n type: SwarmMessageType.JOIN,\n agentId,\n capabilities,\n });\n\n logger.info('Agent registered', { agentId, capabilities });\n\n return keyPair;\n }\n\n /**\n * Publish encrypted message to IPFS\n */\n async publishMessage(\n payload: Record<string, any>,\n messageType: SwarmMessageType = SwarmMessageType.GOSSIP\n ): Promise<EncryptedSwarmMessage> {\n const data = JSON.stringify(payload);\n const { encrypted, iv, authTag } = this.encryption.encrypt(data, this.swarmKey);\n\n // Store encrypted message on IPFS\n const cid = await this.ipfs.add(encrypted);\n\n const message: EncryptedSwarmMessage = {\n cid,\n encryptedPayload: encrypted,\n iv,\n authTag,\n timestamp: Date.now(),\n sender: payload.agentId || 'coordinator',\n messageType,\n };\n\n this.messageLog.push(message);\n\n return message;\n }\n\n /**\n * Retrieve and decrypt message from IPFS\n */\n async retrieveMessage(message: EncryptedSwarmMessage): Promise<Record<string, any>> {\n try {\n const decrypted = this.encryption.decrypt(\n message.encryptedPayload,\n this.swarmKey,\n message.iv,\n message.authTag\n );\n\n return JSON.parse(decrypted);\n } catch (error) {\n logger.error('Failed to decrypt message', { cid: message.cid, error });\n throw error;\n }\n }\n\n /**\n * Store learning pattern on IPFS\n */\n async storeLearningPattern(\n agentId: string,\n patternType: string,\n embedding: number[],\n metadata: Record<string, any> = {}\n ): Promise<IPFSLearningPattern> {\n const pattern = {\n patternType,\n embedding,\n metadata,\n timestamp: Date.now(),\n agentId,\n };\n\n // Encrypt before storing\n const encrypted = this.encryption.encrypt(\n JSON.stringify(pattern),\n this.swarmKey\n );\n\n const cid = await this.ipfs.add(JSON.stringify(encrypted));\n\n const storedPattern: IPFSLearningPattern = {\n cid,\n ...pattern,\n };\n\n this.learningPatterns.set(cid, storedPattern);\n\n logger.debug('Learning pattern stored', { cid, patternType, agentId });\n\n return storedPattern;\n }\n\n /**\n * Retrieve learning pattern from IPFS\n */\n async retrieveLearningPattern(cid: string): Promise<IPFSLearningPattern | null> {\n // Check local cache first\n if (this.learningPatterns.has(cid)) {\n return this.learningPatterns.get(cid)!;\n }\n\n try {\n const data = await this.ipfs.get(cid);\n const encrypted = JSON.parse(data);\n\n const decrypted = this.encryption.decrypt(\n encrypted.encrypted,\n this.swarmKey,\n encrypted.iv,\n encrypted.authTag\n );\n\n const pattern = JSON.parse(decrypted);\n return { cid, ...pattern };\n } catch (error) {\n logger.error('Failed to retrieve pattern', { cid, error });\n return null;\n }\n }\n\n /**\n * Sync memory vectors across swarm via IPFS\n */\n async syncMemory(\n agentId: string,\n vectors: number[][],\n namespace: string\n ): Promise<string> {\n const memoryData = {\n agentId,\n vectors,\n namespace,\n timestamp: Date.now(),\n vectorCount: vectors.length,\n dimensions: vectors[0]?.length || 0,\n };\n\n const message = await this.publishMessage(memoryData, SwarmMessageType.SYNC_MEMORY);\n\n // Pin for persistence\n await this.ipfs.pin(message.cid);\n\n return message.cid;\n }\n\n /**\n * Sync learning state across swarm\n */\n async syncLearning(\n agentId: string,\n qTable: number[][],\n policyWeights: number[]\n ): Promise<string> {\n const learningData = {\n agentId,\n qTable,\n policyWeights,\n timestamp: Date.now(),\n };\n\n const message = await this.publishMessage(learningData, SwarmMessageType.SYNC_LEARNING);\n\n return message.cid;\n }\n\n /**\n * Run consensus vote via IPFS\n */\n async submitConsensusVote(\n agentId: string,\n proposalId: string,\n vote: boolean,\n privateKey: string\n ): Promise<string> {\n const voteData = { proposalId, vote, timestamp: Date.now() };\n const signature = this.encryption.sign(JSON.stringify(voteData), privateKey);\n\n const message = await this.publishMessage(\n { agentId, ...voteData, signature },\n SwarmMessageType.CONSENSUS_VOTE\n );\n\n return message.cid;\n }\n\n /**\n * Gossip propagation via IPFS\n */\n async gossip(\n origin: string,\n payload: Record<string, any>,\n ttl: number = 5\n ): Promise<string[]> {\n const cids: string[] = [];\n\n const gossipData = {\n origin,\n payload,\n ttl,\n hop: 0,\n timestamp: Date.now(),\n };\n\n const message = await this.publishMessage(gossipData, SwarmMessageType.GOSSIP);\n cids.push(message.cid);\n\n // Simulate gossip propagation to connected agents\n for (const [agentId, agent] of this.agents) {\n if (agentId !== origin && agent.status === 'active') {\n const hopMessage = await this.publishMessage(\n { ...gossipData, hop: 1, receiver: agentId },\n SwarmMessageType.GOSSIP\n );\n cids.push(hopMessage.cid);\n }\n }\n\n return cids;\n }\n\n /**\n * Get swarm statistics\n */\n getStats(): {\n swarmId: string;\n activeAgents: number;\n totalAgents: number;\n learningPatterns: number;\n messageCount: number;\n lastActivity: number;\n } {\n const activeAgents = Array.from(this.agents.values())\n .filter(a => a.status === 'active').length;\n\n return {\n swarmId: this.swarmId,\n activeAgents,\n totalAgents: this.agents.size,\n learningPatterns: this.learningPatterns.size,\n messageCount: this.messageLog.length,\n lastActivity: this.messageLog.length > 0\n ? this.messageLog[this.messageLog.length - 1].timestamp\n : Date.now(),\n };\n }\n\n /**\n * Export swarm state to IPFS (for backup/recovery)\n */\n async exportState(): Promise<string> {\n const state = {\n swarmId: this.swarmId,\n agents: Array.from(this.agents.entries()),\n learningPatternCids: Array.from(this.learningPatterns.keys()),\n messageCount: this.messageLog.length,\n exportedAt: Date.now(),\n };\n\n const encrypted = this.encryption.encrypt(\n JSON.stringify(state),\n this.swarmKey\n );\n\n const cid = await this.ipfs.add(JSON.stringify(encrypted));\n await this.ipfs.pin(cid);\n\n logger.info('Swarm state exported', { cid });\n\n return cid;\n }\n\n /**\n * Get swarm key (for sharing with authorized agents)\n */\n getSwarmKey(): string {\n return this.swarmKey.toString('base64');\n }\n\n /**\n * Get all message CIDs (for IPFS-based message history)\n */\n getMessageHistory(): EncryptedSwarmMessage[] {\n return [...this.messageLog];\n }\n}\n\n/**\n * Free IPFS provider presets\n */\nexport const FREE_IPFS_PROVIDERS = {\n /**\n * web3.storage - 5GB free\n * Sign up: https://web3.storage\n */\n web3storage: (apiKey: string): IPFSProviderConfig => ({\n provider: 'web3storage',\n apiKey,\n gateway: 'https://w3s.link/ipfs/',\n }),\n\n /**\n * Pinata - 1GB free\n * Sign up: https://pinata.cloud\n */\n pinata: (apiKey: string, apiSecret: string): IPFSProviderConfig => ({\n provider: 'pinata',\n apiKey,\n apiSecret,\n gateway: 'https://gateway.pinata.cloud/ipfs/',\n }),\n\n /**\n * Public gateway (no API key needed, read-only)\n */\n public: (): IPFSProviderConfig => ({\n provider: 'local',\n gateway: 'https://ipfs.io/ipfs/',\n }),\n\n /**\n * Cloudflare IPFS (free, fast)\n */\n cloudflare: (): IPFSProviderConfig => ({\n provider: 'local',\n gateway: 'https://cloudflare-ipfs.com/ipfs/',\n }),\n\n /**\n * 4everland (free tier)\n */\n foureverland: (apiKey?: string): IPFSProviderConfig => ({\n provider: 'local',\n apiKey,\n gateway: 'https://4everland.io/ipfs/',\n }),\n};\n\nexport { SwarmEncryption, IPFSClient };\n"]}