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.
- package/.claude/agents/test-neural.md +14 -0
- package/.claude/settings.json +9 -133
- package/README.md +624 -1776
- package/dist/.tsbuildinfo +1 -1
- package/dist/billing/mcp/tools.js +0 -1
- package/dist/billing/mcp/tools.js.map +1 -1
- package/dist/cli/commands/hooks.d.ts.map +1 -1
- package/dist/cli/commands/hooks.js +4 -79
- package/dist/cli/commands/hooks.js.map +1 -1
- package/dist/cli-proxy.js +1 -89
- package/dist/cli-proxy.js.map +1 -1
- package/dist/core/agentdb-fast.js +3 -3
- package/dist/core/agentdb-fast.js.map +1 -1
- package/dist/core/agentdb-wrapper-enhanced.d.ts.map +1 -1
- package/dist/core/agentdb-wrapper-enhanced.js +4 -20
- package/dist/core/agentdb-wrapper-enhanced.js.map +1 -1
- package/dist/core/agentdb-wrapper.d.ts +2 -3
- package/dist/core/agentdb-wrapper.d.ts.map +1 -1
- package/dist/core/agentdb-wrapper.js +1 -15
- package/dist/core/agentdb-wrapper.js.map +1 -1
- package/dist/core/attention-native.d.ts +0 -4
- package/dist/core/attention-native.d.ts.map +1 -1
- package/dist/core/attention-native.js +2 -14
- package/dist/core/attention-native.js.map +1 -1
- package/dist/federation/SecurityManager.d.ts +2 -11
- package/dist/federation/SecurityManager.d.ts.map +1 -1
- package/dist/federation/SecurityManager.js +17 -50
- package/dist/federation/SecurityManager.js.map +1 -1
- package/dist/federation/integrations/supabase-adapter-debug.js +3 -3
- package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -1
- package/dist/hooks/swarm-learning-optimizer.js +5 -5
- package/dist/hooks/swarm-learning-optimizer.js.map +1 -1
- package/dist/intelligence/IntelligenceStore.d.ts +26 -35
- package/dist/intelligence/IntelligenceStore.d.ts.map +1 -1
- package/dist/intelligence/IntelligenceStore.js +123 -308
- package/dist/intelligence/IntelligenceStore.js.map +1 -1
- package/dist/intelligence/RuVectorIntelligence.d.ts +1 -26
- package/dist/intelligence/RuVectorIntelligence.d.ts.map +1 -1
- package/dist/intelligence/RuVectorIntelligence.js +10 -49
- package/dist/intelligence/RuVectorIntelligence.js.map +1 -1
- package/dist/intelligence/agent-booster-enhanced.d.ts +0 -1
- package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
- package/dist/intelligence/agent-booster-enhanced.js +3 -24
- package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
- package/dist/intelligence/index.d.ts +3 -29
- package/dist/intelligence/index.d.ts.map +1 -1
- package/dist/intelligence/index.js +3 -13
- package/dist/intelligence/index.js.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.js +3 -9
- package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +5 -5
- package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -1
- package/dist/mcp/fastmcp/tools/swarm/init.d.ts.map +1 -1
- package/dist/mcp/fastmcp/tools/swarm/init.js +7 -36
- package/dist/mcp/fastmcp/tools/swarm/init.js.map +1 -1
- package/dist/mcp/fastmcp/tools/swarm/spawn.d.ts.map +1 -1
- package/dist/mcp/fastmcp/tools/swarm/spawn.js +8 -47
- package/dist/mcp/fastmcp/tools/swarm/spawn.js.map +1 -1
- package/dist/mcp/tools/agent-booster-tools.d.ts +1 -1
- package/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -1
- package/dist/mcp/tools/agent-booster-tools.js +4 -10
- package/dist/mcp/tools/agent-booster-tools.js.map +1 -1
- package/dist/mcp/tools/sona-tools.d.ts.map +1 -1
- package/dist/mcp/tools/sona-tools.js +0 -6
- package/dist/mcp/tools/sona-tools.js.map +1 -1
- package/dist/optimizations/agent-booster-migration.d.ts.map +1 -1
- package/dist/optimizations/agent-booster-migration.js +2 -5
- package/dist/optimizations/agent-booster-migration.js.map +1 -1
- package/dist/proxy/anthropic-to-openrouter.js.map +1 -1
- package/dist/proxy/anthropic-to-requesty.js.map +1 -1
- package/dist/proxy/quic-proxy.d.ts +1 -0
- package/dist/proxy/quic-proxy.d.ts.map +1 -1
- package/dist/proxy/quic-proxy.js +2 -2
- package/dist/proxy/quic-proxy.js.map +1 -1
- package/dist/reasoningbank/AdvancedMemory.js +1 -1
- package/dist/reasoningbank/AdvancedMemory.js.map +1 -1
- package/dist/reasoningbank/HybridBackend.d.ts.map +1 -1
- package/dist/reasoningbank/HybridBackend.js +5 -2
- package/dist/reasoningbank/HybridBackend.js.map +1 -1
- package/dist/reasoningbank/backend-selector.d.ts +1 -11
- package/dist/reasoningbank/backend-selector.d.ts.map +1 -1
- package/dist/reasoningbank/backend-selector.js +5 -45
- package/dist/reasoningbank/backend-selector.js.map +1 -1
- package/dist/reasoningbank/core/consolidate.d.ts.map +1 -1
- package/dist/reasoningbank/core/consolidate.js +45 -113
- package/dist/reasoningbank/core/consolidate.js.map +1 -1
- package/dist/reasoningbank/index-new.d.ts +6 -1
- package/dist/reasoningbank/index-new.d.ts.map +1 -1
- package/dist/reasoningbank/index-new.js +6 -1
- package/dist/reasoningbank/index-new.js.map +1 -1
- package/dist/reasoningbank/index.d.ts +6 -2
- package/dist/reasoningbank/index.d.ts.map +1 -1
- package/dist/reasoningbank/index.js +6 -2
- package/dist/reasoningbank/index.js.map +1 -1
- package/dist/reasoningbank/utils/embeddings.d.ts +0 -1
- package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
- package/dist/reasoningbank/utils/embeddings.js +26 -53
- package/dist/reasoningbank/utils/embeddings.js.map +1 -1
- package/dist/router/index.d.ts +17 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +19 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/providers/onnx-local-optimized.d.ts +0 -2
- package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
- package/dist/router/providers/onnx-local-optimized.js +0 -10
- package/dist/router/providers/onnx-local-optimized.js.map +1 -1
- package/dist/router/providers/onnx-local.d.ts +0 -1
- package/dist/router/providers/onnx-local.d.ts.map +1 -1
- package/dist/router/providers/onnx-local.js +5 -22
- package/dist/router/providers/onnx-local.js.map +1 -1
- package/dist/services/embedding-service.js.map +1 -1
- package/dist/services/sona-agent-training.d.ts +0 -1
- package/dist/services/sona-agent-training.d.ts.map +1 -1
- package/dist/services/sona-agent-training.js.map +1 -1
- package/dist/services/sona-agentdb-integration.d.ts.map +1 -1
- package/dist/services/sona-agentdb-integration.js +6 -9
- package/dist/services/sona-agentdb-integration.js.map +1 -1
- package/dist/services/sona-service.d.ts.map +1 -1
- package/dist/services/sona-service.js +5 -6
- package/dist/services/sona-service.js.map +1 -1
- package/dist/utils/cli.d.ts +1 -1
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +0 -21
- package/dist/utils/cli.js.map +1 -1
- package/package.json +7 -19
- package/scripts/postinstall.js +4 -45
- package/.claude/agents/.claude-flow/metrics/agent-metrics.json +0 -1
- package/.claude/agents/.claude-flow/metrics/performance.json +0 -87
- package/.claude/agents/.claude-flow/metrics/task-metrics.json +0 -10
- package/.claude/skills/.claude-flow/metrics/agent-metrics.json +0 -1
- package/.claude/skills/.claude-flow/metrics/performance.json +0 -87
- package/.claude/skills/.claude-flow/metrics/task-metrics.json +0 -10
- package/.claude/skills/agentic-flow-quickstart/skill.md +0 -69
- package/.claude/skills/hooks-automation/skill.md +0 -155
- package/.claude/skills/memory-patterns/skill.md +0 -110
- package/.claude/skills/skill-builder/.claude-flow/metrics/agent-metrics.json +0 -1
- package/.claude/skills/skill-builder/.claude-flow/metrics/performance.json +0 -87
- package/.claude/skills/skill-builder/.claude-flow/metrics/task-metrics.json +0 -10
- package/.claude/skills/sparc-methodology/skill.md +0 -137
- package/.claude/skills/swarm-coordination/skill.md +0 -94
- package/.claude/skills/worker-benchmarks/skill.md +0 -135
- package/.claude/skills/worker-integration/skill.md +0 -154
- package/.claude/statusline.mjs +0 -109
- package/.claude/statusline.sh +0 -71
- package/dist/agentdb/benchmarks/comprehensive-benchmark.js +0 -664
- package/dist/agentdb/benchmarks/frontier-benchmark.js +0 -419
- package/dist/agentdb/benchmarks/reflexion-benchmark.js +0 -370
- package/dist/agentdb/cli/agentdb-cli.js +0 -717
- package/dist/agentdb/controllers/CausalMemoryGraph.js +0 -322
- package/dist/agentdb/controllers/CausalRecall.js +0 -281
- package/dist/agentdb/controllers/EmbeddingService.d.ts +0 -37
- package/dist/agentdb/controllers/EmbeddingService.d.ts.map +0 -1
- package/dist/agentdb/controllers/EmbeddingService.js +0 -119
- package/dist/agentdb/controllers/EmbeddingService.js.map +0 -1
- package/dist/agentdb/controllers/ExplainableRecall.js +0 -387
- package/dist/agentdb/controllers/NightlyLearner.js +0 -382
- package/dist/agentdb/controllers/ReflexionMemory.js +0 -239
- package/dist/agentdb/controllers/SkillLibrary.js +0 -276
- package/dist/agentdb/controllers/frontier-index.js +0 -9
- package/dist/agentdb/controllers/index.js +0 -8
- package/dist/agentdb/optimizations/BatchOperations.js +0 -198
- package/dist/agentdb/optimizations/QueryOptimizer.js +0 -225
- package/dist/agentdb/optimizations/index.js +0 -7
- package/dist/agentdb/tests/frontier-features.test.js +0 -665
- package/dist/benchmarks/embeddings-benchmark.d.ts +0 -38
- package/dist/benchmarks/embeddings-benchmark.d.ts.map +0 -1
- package/dist/benchmarks/embeddings-benchmark.js +0 -282
- package/dist/benchmarks/embeddings-benchmark.js.map +0 -1
- package/dist/cli/commands/embeddings.d.ts +0 -12
- package/dist/cli/commands/embeddings.d.ts.map +0 -1
- package/dist/cli/commands/embeddings.js +0 -386
- package/dist/cli/commands/embeddings.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -8
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -514
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/workers.d.ts +0 -9
- package/dist/cli/commands/workers.d.ts.map +0 -1
- package/dist/cli/commands/workers.js +0 -991
- package/dist/cli/commands/workers.js.map +0 -1
- package/dist/cli/skills-manager.js +0 -1297
- package/dist/cli/update-message.js +0 -175
- package/dist/embeddings/index.d.ts +0 -17
- package/dist/embeddings/index.d.ts.map +0 -1
- package/dist/embeddings/index.js +0 -17
- package/dist/embeddings/index.js.map +0 -1
- package/dist/embeddings/neural-substrate.d.ts +0 -206
- package/dist/embeddings/neural-substrate.d.ts.map +0 -1
- package/dist/embeddings/neural-substrate.js +0 -629
- package/dist/embeddings/neural-substrate.js.map +0 -1
- package/dist/embeddings/optimized-embedder.d.ts +0 -103
- package/dist/embeddings/optimized-embedder.d.ts.map +0 -1
- package/dist/embeddings/optimized-embedder.js +0 -730
- package/dist/embeddings/optimized-embedder.js.map +0 -1
- package/dist/examples/embedding-geometry.d.ts +0 -105
- package/dist/examples/embedding-geometry.d.ts.map +0 -1
- package/dist/examples/embedding-geometry.js +0 -528
- package/dist/examples/embedding-geometry.js.map +0 -1
- package/dist/memory/SharedMemoryPool.d.ts +0 -129
- package/dist/memory/SharedMemoryPool.d.ts.map +0 -1
- package/dist/memory/SharedMemoryPool.js +0 -243
- package/dist/memory/SharedMemoryPool.js.map +0 -1
- package/dist/memory/index.d.ts +0 -8
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/index.js +0 -7
- package/dist/memory/index.js.map +0 -1
- package/dist/proxy/http3-proxy-old.js +0 -331
- package/dist/proxy/proxy/anthropic-to-gemini.js +0 -439
- package/dist/proxy/utils/logger.js +0 -59
- package/dist/reasoningbank/agentdb-adapter.js +0 -125
- package/dist/reasoningbank/core/database.js +0 -250
- package/dist/reasoningbank/core/memory-engine.js +0 -335
- package/dist/swarm/ipfs-swarm.d.ts +0 -265
- package/dist/swarm/ipfs-swarm.d.ts.map +0 -1
- package/dist/swarm/ipfs-swarm.js +0 -508
- package/dist/swarm/ipfs-swarm.js.map +0 -1
- package/dist/swarm/p2p-free-swarm.d.ts +0 -344
- package/dist/swarm/p2p-free-swarm.d.ts.map +0 -1
- package/dist/swarm/p2p-free-swarm.js +0 -603
- package/dist/swarm/p2p-free-swarm.js.map +0 -1
- package/dist/swarm/real-p2p-swarm.d.ts +0 -183
- package/dist/swarm/real-p2p-swarm.d.ts.map +0 -1
- package/dist/swarm/real-p2p-swarm.js +0 -469
- package/dist/swarm/real-p2p-swarm.js.map +0 -1
- package/dist/utils/adaptive-pool-sizing.js +0 -414
- package/dist/utils/agentdbCommands.js +0 -175
- package/dist/utils/circular-rate-limiter.js +0 -391
- package/dist/utils/dynamic-compression.js +0 -298
- package/dist/utils/http2-multiplexing.js +0 -319
- package/dist/utils/index.d.ts +0 -6
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -6
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/lazy-auth.js +0 -311
- package/dist/utils/model-cache.d.ts +0 -61
- package/dist/utils/model-cache.d.ts.map +0 -1
- package/dist/utils/model-cache.js +0 -176
- package/dist/utils/model-cache.js.map +0 -1
- package/dist/utils/server-push.js +0 -251
- package/dist/utils/suppress-warnings.d.ts +0 -19
- package/dist/utils/suppress-warnings.d.ts.map +0 -1
- package/dist/utils/suppress-warnings.js +0 -59
- package/dist/utils/suppress-warnings.js.map +0 -1
- package/dist/utils/zero-copy-buffer.js +0 -286
- package/dist/workers/consolidated-phases.d.ts +0 -40
- package/dist/workers/consolidated-phases.d.ts.map +0 -1
- package/dist/workers/consolidated-phases.js +0 -497
- package/dist/workers/consolidated-phases.js.map +0 -1
- package/dist/workers/custom-worker-config.d.ts +0 -133
- package/dist/workers/custom-worker-config.d.ts.map +0 -1
- package/dist/workers/custom-worker-config.js +0 -215
- package/dist/workers/custom-worker-config.js.map +0 -1
- package/dist/workers/custom-worker-factory.d.ts +0 -89
- package/dist/workers/custom-worker-factory.d.ts.map +0 -1
- package/dist/workers/custom-worker-factory.js +0 -404
- package/dist/workers/custom-worker-factory.js.map +0 -1
- package/dist/workers/dispatch-service.d.ts +0 -123
- package/dist/workers/dispatch-service.d.ts.map +0 -1
- package/dist/workers/dispatch-service.js +0 -1024
- package/dist/workers/dispatch-service.js.map +0 -1
- package/dist/workers/hooks-integration.d.ts +0 -79
- package/dist/workers/hooks-integration.d.ts.map +0 -1
- package/dist/workers/hooks-integration.js +0 -286
- package/dist/workers/hooks-integration.js.map +0 -1
- package/dist/workers/index.d.ts +0 -42
- package/dist/workers/index.d.ts.map +0 -1
- package/dist/workers/index.js +0 -52
- package/dist/workers/index.js.map +0 -1
- package/dist/workers/mcp-tools.d.ts +0 -56
- package/dist/workers/mcp-tools.d.ts.map +0 -1
- package/dist/workers/mcp-tools.js +0 -359
- package/dist/workers/mcp-tools.js.map +0 -1
- package/dist/workers/phase-executors.d.ts +0 -22
- package/dist/workers/phase-executors.d.ts.map +0 -1
- package/dist/workers/phase-executors.js +0 -445
- package/dist/workers/phase-executors.js.map +0 -1
- package/dist/workers/resource-governor.d.ts +0 -75
- package/dist/workers/resource-governor.d.ts.map +0 -1
- package/dist/workers/resource-governor.js +0 -187
- package/dist/workers/resource-governor.js.map +0 -1
- package/dist/workers/ruvector-integration.d.ts +0 -163
- package/dist/workers/ruvector-integration.d.ts.map +0 -1
- package/dist/workers/ruvector-integration.js +0 -543
- package/dist/workers/ruvector-integration.js.map +0 -1
- package/dist/workers/ruvector-native-integration.d.ts +0 -91
- package/dist/workers/ruvector-native-integration.d.ts.map +0 -1
- package/dist/workers/ruvector-native-integration.js +0 -254
- package/dist/workers/ruvector-native-integration.js.map +0 -1
- package/dist/workers/trigger-detector.d.ts +0 -68
- package/dist/workers/trigger-detector.d.ts.map +0 -1
- package/dist/workers/trigger-detector.js +0 -281
- package/dist/workers/trigger-detector.js.map +0 -1
- package/dist/workers/types.d.ts +0 -145
- package/dist/workers/types.d.ts.map +0 -1
- package/dist/workers/types.js +0 -6
- package/dist/workers/types.js.map +0 -1
- package/dist/workers/worker-agent-integration.d.ts +0 -140
- package/dist/workers/worker-agent-integration.d.ts.map +0 -1
- package/dist/workers/worker-agent-integration.js +0 -471
- package/dist/workers/worker-agent-integration.js.map +0 -1
- package/dist/workers/worker-benchmarks.d.ts +0 -88
- package/dist/workers/worker-benchmarks.d.ts.map +0 -1
- package/dist/workers/worker-benchmarks.js +0 -452
- package/dist/workers/worker-benchmarks.js.map +0 -1
- package/dist/workers/worker-registry.d.ts +0 -85
- package/dist/workers/worker-registry.d.ts.map +0 -1
- package/dist/workers/worker-registry.js +0 -547
- package/dist/workers/worker-registry.js.map +0 -1
- package/docs/.claude-flow/metrics/agent-metrics.json +0 -1
- package/docs/.claude-flow/metrics/performance.json +0 -87
- package/docs/.claude-flow/metrics/task-metrics.json +0 -10
- package/docs/embeddings/EMBEDDING_GEOMETRY.md +0 -935
- /package/.claude/agents/analysis/{analyze-code-quality.md → code-review/analyze-code-quality.md} +0 -0
- /package/.claude/agents/architecture/{arch-system-design.md → system-design/arch-system-design.md} +0 -0
- /package/.claude/agents/data/{data-ml-model.md → ml/data-ml-model.md} +0 -0
- /package/.claude/agents/development/{dev-backend-api.md → backend/dev-backend-api.md} +0 -0
- /package/.claude/agents/devops/{ops-cicd-github.md → ci-cd/ops-cicd-github.md} +0 -0
- /package/.claude/agents/documentation/{docs-api-openapi.md → api-docs/docs-api-openapi.md} +0 -0
- /package/.claude/agents/specialized/{spec-mobile-react-native.md → mobile/spec-mobile-react-native.md} +0 -0
- /package/.claude/agents/testing/{tdd-london-swarm.md → unit/tdd-london-swarm.md} +0 -0
- /package/.claude/agents/testing/{production-validator.md → validation/production-validator.md} +0 -0
package/dist/swarm/ipfs-swarm.js
DELETED
|
@@ -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"]}
|