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
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Real P2P Swarm Coordination
|
|
3
|
-
*
|
|
4
|
-
* IMPROVED VERSION with actual P2P connections:
|
|
5
|
-
* - Real GunDB relay connections
|
|
6
|
-
* - Actual WebRTC via PeerJS
|
|
7
|
-
* - Persistent learning storage
|
|
8
|
-
* - Better error handling
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Encryption utilities
|
|
12
|
-
*/
|
|
13
|
-
declare class SwarmCrypto {
|
|
14
|
-
private algorithm;
|
|
15
|
-
generateKey(): string;
|
|
16
|
-
encrypt(data: string, keyBase64: string): {
|
|
17
|
-
ciphertext: string;
|
|
18
|
-
iv: string;
|
|
19
|
-
tag: string;
|
|
20
|
-
};
|
|
21
|
-
decrypt(ciphertext: string, keyBase64: string, ivBase64: string, tagBase64: string): string;
|
|
22
|
-
hash(data: string): string;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Real GunDB Swarm (connects to actual relays)
|
|
26
|
-
*/
|
|
27
|
-
export declare class RealGunDBSwarm {
|
|
28
|
-
private gun;
|
|
29
|
-
private swarmNode;
|
|
30
|
-
private crypto;
|
|
31
|
-
private swarmKey;
|
|
32
|
-
private swarmId;
|
|
33
|
-
private connected;
|
|
34
|
-
static readonly FREE_RELAYS: string[];
|
|
35
|
-
constructor(swarmKey?: string, relays?: string[]);
|
|
36
|
-
/**
|
|
37
|
-
* Connect to GunDB relays
|
|
38
|
-
*/
|
|
39
|
-
connect(relays?: string[]): Promise<boolean>;
|
|
40
|
-
/**
|
|
41
|
-
* Register agent with swarm
|
|
42
|
-
*/
|
|
43
|
-
registerAgent(agentId: string, capabilities: string[]): Promise<void>;
|
|
44
|
-
/**
|
|
45
|
-
* Publish message to swarm (real-time sync)
|
|
46
|
-
*/
|
|
47
|
-
publish(topic: string, data: any): Promise<string>;
|
|
48
|
-
/**
|
|
49
|
-
* Subscribe to topic
|
|
50
|
-
*/
|
|
51
|
-
subscribe(topic: string, callback: (data: any) => void): void;
|
|
52
|
-
/**
|
|
53
|
-
* Sync Q-table to swarm
|
|
54
|
-
*/
|
|
55
|
-
syncQTable(agentId: string, qTable: number[][]): Promise<string>;
|
|
56
|
-
/**
|
|
57
|
-
* Sync memory vectors
|
|
58
|
-
*/
|
|
59
|
-
syncMemory(agentId: string, vectors: number[][], namespace: string): Promise<string>;
|
|
60
|
-
/**
|
|
61
|
-
* Get connection status
|
|
62
|
-
*/
|
|
63
|
-
isConnected(): boolean;
|
|
64
|
-
/**
|
|
65
|
-
* Get swarm key (for sharing)
|
|
66
|
-
*/
|
|
67
|
-
getSwarmKey(): string;
|
|
68
|
-
/**
|
|
69
|
-
* Get swarm ID
|
|
70
|
-
*/
|
|
71
|
-
getSwarmId(): string;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Real WebRTC Swarm (using PeerJS)
|
|
75
|
-
*/
|
|
76
|
-
export declare class RealWebRTCSwarm {
|
|
77
|
-
private peer;
|
|
78
|
-
private connections;
|
|
79
|
-
private crypto;
|
|
80
|
-
private swarmKey;
|
|
81
|
-
private swarmId;
|
|
82
|
-
private peerId;
|
|
83
|
-
constructor(swarmKey?: string);
|
|
84
|
-
/**
|
|
85
|
-
* Initialize PeerJS connection
|
|
86
|
-
*/
|
|
87
|
-
initialize(agentId: string): Promise<string | null>;
|
|
88
|
-
/**
|
|
89
|
-
* Handle incoming connection
|
|
90
|
-
*/
|
|
91
|
-
private handleConnection;
|
|
92
|
-
/**
|
|
93
|
-
* Handle decrypted message
|
|
94
|
-
*/
|
|
95
|
-
private handleMessage;
|
|
96
|
-
/**
|
|
97
|
-
* Connect to another peer
|
|
98
|
-
*/
|
|
99
|
-
connectToPeer(peerId: string): Promise<boolean>;
|
|
100
|
-
/**
|
|
101
|
-
* Send encrypted message to peer
|
|
102
|
-
*/
|
|
103
|
-
sendToPeer(peerId: string, data: any): Promise<boolean>;
|
|
104
|
-
/**
|
|
105
|
-
* Broadcast to all connected peers
|
|
106
|
-
*/
|
|
107
|
-
broadcast(data: any): Promise<number>;
|
|
108
|
-
/**
|
|
109
|
-
* Get connected peer count
|
|
110
|
-
*/
|
|
111
|
-
getConnectedPeers(): number;
|
|
112
|
-
/**
|
|
113
|
-
* Get peer ID
|
|
114
|
-
*/
|
|
115
|
-
getPeerId(): string | null;
|
|
116
|
-
/**
|
|
117
|
-
* Disconnect
|
|
118
|
-
*/
|
|
119
|
-
disconnect(): void;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Combined Real P2P Swarm Coordinator
|
|
123
|
-
*/
|
|
124
|
-
export declare class RealP2PSwarmCoordinator {
|
|
125
|
-
private gundb;
|
|
126
|
-
private webrtc;
|
|
127
|
-
private swarmKey;
|
|
128
|
-
private initialized;
|
|
129
|
-
constructor(swarmKey?: string);
|
|
130
|
-
/**
|
|
131
|
-
* Initialize all P2P connections
|
|
132
|
-
*/
|
|
133
|
-
initialize(agentId: string): Promise<{
|
|
134
|
-
gundb: boolean;
|
|
135
|
-
webrtc: boolean;
|
|
136
|
-
swarmId: string;
|
|
137
|
-
}>;
|
|
138
|
-
/**
|
|
139
|
-
* Publish via GunDB (real-time)
|
|
140
|
-
*/
|
|
141
|
-
publish(topic: string, data: any): Promise<string>;
|
|
142
|
-
/**
|
|
143
|
-
* Subscribe via GunDB
|
|
144
|
-
*/
|
|
145
|
-
subscribe(topic: string, callback: (data: any) => void): void;
|
|
146
|
-
/**
|
|
147
|
-
* Send direct P2P message
|
|
148
|
-
*/
|
|
149
|
-
sendDirect(peerId: string, data: any): Promise<boolean>;
|
|
150
|
-
/**
|
|
151
|
-
* Broadcast via WebRTC
|
|
152
|
-
*/
|
|
153
|
-
broadcastDirect(data: any): Promise<number>;
|
|
154
|
-
/**
|
|
155
|
-
* Sync learning state
|
|
156
|
-
*/
|
|
157
|
-
syncLearning(agentId: string, qTable: number[][], vectors?: number[][]): Promise<{
|
|
158
|
-
qTableId: string;
|
|
159
|
-
memoryId?: string;
|
|
160
|
-
}>;
|
|
161
|
-
/**
|
|
162
|
-
* Get status
|
|
163
|
-
*/
|
|
164
|
-
getStatus(): {
|
|
165
|
-
gundb: boolean;
|
|
166
|
-
webrtc: {
|
|
167
|
-
connected: boolean;
|
|
168
|
-
peers: number;
|
|
169
|
-
};
|
|
170
|
-
swarmId: string;
|
|
171
|
-
swarmKey: string;
|
|
172
|
-
};
|
|
173
|
-
/**
|
|
174
|
-
* Cleanup
|
|
175
|
-
*/
|
|
176
|
-
disconnect(): void;
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Quick start helper
|
|
180
|
-
*/
|
|
181
|
-
export declare function createRealP2PSwarm(agentId: string, swarmKey?: string): Promise<RealP2PSwarmCoordinator>;
|
|
182
|
-
export { SwarmCrypto };
|
|
183
|
-
//# sourceMappingURL=real-p2p-swarm.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"real-p2p-swarm.d.ts","sourceRoot":"","sources":["../../src/swarm/real-p2p-swarm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,469 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Real P2P Swarm Coordination
|
|
3
|
-
*
|
|
4
|
-
* IMPROVED VERSION with actual P2P connections:
|
|
5
|
-
* - Real GunDB relay connections
|
|
6
|
-
* - Actual WebRTC via PeerJS
|
|
7
|
-
* - Persistent learning storage
|
|
8
|
-
* - Better error handling
|
|
9
|
-
*/
|
|
10
|
-
import crypto from 'crypto';
|
|
11
|
-
import { logger } from '../utils/logger.js';
|
|
12
|
-
// Lazy-load P2P modules
|
|
13
|
-
let Gun = null;
|
|
14
|
-
let Peer = null;
|
|
15
|
-
/**
|
|
16
|
-
* Load GunDB (lazy)
|
|
17
|
-
*/
|
|
18
|
-
async function getGun() {
|
|
19
|
-
if (!Gun) {
|
|
20
|
-
try {
|
|
21
|
-
Gun = (await import('gun')).default;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
logger.warn('GunDB not installed. Run: npm install gun');
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return Gun;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Load PeerJS (lazy)
|
|
32
|
-
*/
|
|
33
|
-
async function getPeer() {
|
|
34
|
-
if (!Peer) {
|
|
35
|
-
try {
|
|
36
|
-
const peerjs = await import('peerjs');
|
|
37
|
-
Peer = peerjs.Peer || peerjs.default;
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
logger.warn('PeerJS not installed. Run: npm install peerjs');
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return Peer;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Encryption utilities
|
|
48
|
-
*/
|
|
49
|
-
class SwarmCrypto {
|
|
50
|
-
algorithm = 'aes-256-gcm';
|
|
51
|
-
generateKey() {
|
|
52
|
-
return crypto.randomBytes(32).toString('base64');
|
|
53
|
-
}
|
|
54
|
-
encrypt(data, keyBase64) {
|
|
55
|
-
const key = Buffer.from(keyBase64, 'base64');
|
|
56
|
-
const iv = crypto.randomBytes(16);
|
|
57
|
-
const cipher = crypto.createCipheriv(this.algorithm, key, iv);
|
|
58
|
-
let ciphertext = cipher.update(data, 'utf8', 'base64');
|
|
59
|
-
ciphertext += cipher.final('base64');
|
|
60
|
-
return {
|
|
61
|
-
ciphertext,
|
|
62
|
-
iv: iv.toString('base64'),
|
|
63
|
-
tag: cipher.getAuthTag().toString('base64'),
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
decrypt(ciphertext, keyBase64, ivBase64, tagBase64) {
|
|
67
|
-
const key = Buffer.from(keyBase64, 'base64');
|
|
68
|
-
const iv = Buffer.from(ivBase64, 'base64');
|
|
69
|
-
const tag = Buffer.from(tagBase64, 'base64');
|
|
70
|
-
const decipher = crypto.createDecipheriv(this.algorithm, key, iv);
|
|
71
|
-
decipher.setAuthTag(tag);
|
|
72
|
-
let plaintext = decipher.update(ciphertext, 'base64', 'utf8');
|
|
73
|
-
plaintext += decipher.final('utf8');
|
|
74
|
-
return plaintext;
|
|
75
|
-
}
|
|
76
|
-
hash(data) {
|
|
77
|
-
return crypto.createHash('sha256').update(data).digest('hex');
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Real GunDB Swarm (connects to actual relays)
|
|
82
|
-
*/
|
|
83
|
-
export class RealGunDBSwarm {
|
|
84
|
-
gun = null;
|
|
85
|
-
swarmNode = null;
|
|
86
|
-
crypto;
|
|
87
|
-
swarmKey;
|
|
88
|
-
swarmId;
|
|
89
|
-
connected = false;
|
|
90
|
-
static FREE_RELAYS = [
|
|
91
|
-
'https://gun-manhattan.herokuapp.com/gun',
|
|
92
|
-
'https://gun-us.herokuapp.com/gun',
|
|
93
|
-
'https://gun-eu.herokuapp.com/gun',
|
|
94
|
-
];
|
|
95
|
-
constructor(swarmKey, relays) {
|
|
96
|
-
this.crypto = new SwarmCrypto();
|
|
97
|
-
this.swarmKey = swarmKey || this.crypto.generateKey();
|
|
98
|
-
this.swarmId = this.crypto.hash(this.swarmKey).slice(0, 16);
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Connect to GunDB relays
|
|
102
|
-
*/
|
|
103
|
-
async connect(relays) {
|
|
104
|
-
const GunDB = await getGun();
|
|
105
|
-
if (!GunDB) {
|
|
106
|
-
logger.warn('GunDB not available, using simulation mode');
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
try {
|
|
110
|
-
this.gun = GunDB(relays || RealGunDBSwarm.FREE_RELAYS);
|
|
111
|
-
this.swarmNode = this.gun.get(`agentic-flow-swarm-${this.swarmId}`);
|
|
112
|
-
this.connected = true;
|
|
113
|
-
logger.info('Connected to GunDB relays', {
|
|
114
|
-
swarmId: this.swarmId,
|
|
115
|
-
relays: relays?.length || RealGunDBSwarm.FREE_RELAYS.length,
|
|
116
|
-
});
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
logger.error('Failed to connect to GunDB', { error });
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Register agent with swarm
|
|
126
|
-
*/
|
|
127
|
-
async registerAgent(agentId, capabilities) {
|
|
128
|
-
if (!this.connected || !this.swarmNode) {
|
|
129
|
-
logger.warn('Not connected to GunDB');
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
const agentData = {
|
|
133
|
-
id: agentId,
|
|
134
|
-
capabilities: capabilities.join(','),
|
|
135
|
-
joinedAt: Date.now(),
|
|
136
|
-
status: 'active',
|
|
137
|
-
};
|
|
138
|
-
// Encrypt sensitive data
|
|
139
|
-
const encrypted = this.crypto.encrypt(JSON.stringify(agentData), this.swarmKey);
|
|
140
|
-
this.swarmNode.get('agents').get(agentId).put({
|
|
141
|
-
...encrypted,
|
|
142
|
-
agentId, // Keep ID visible for routing
|
|
143
|
-
});
|
|
144
|
-
logger.debug('Agent registered to GunDB', { agentId });
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Publish message to swarm (real-time sync)
|
|
148
|
-
*/
|
|
149
|
-
async publish(topic, data) {
|
|
150
|
-
const messageId = this.crypto.hash(JSON.stringify(data) + Date.now()).slice(0, 16);
|
|
151
|
-
const message = {
|
|
152
|
-
id: messageId,
|
|
153
|
-
topic,
|
|
154
|
-
timestamp: Date.now(),
|
|
155
|
-
};
|
|
156
|
-
// Encrypt payload
|
|
157
|
-
const encrypted = this.crypto.encrypt(JSON.stringify(data), this.swarmKey);
|
|
158
|
-
if (this.connected && this.swarmNode) {
|
|
159
|
-
this.swarmNode.get('messages').get(topic).get(messageId).put({
|
|
160
|
-
...message,
|
|
161
|
-
...encrypted,
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
return messageId;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Subscribe to topic
|
|
168
|
-
*/
|
|
169
|
-
subscribe(topic, callback) {
|
|
170
|
-
if (!this.connected || !this.swarmNode) {
|
|
171
|
-
logger.warn('Not connected to GunDB');
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
this.swarmNode.get('messages').get(topic).map().on((msg, id) => {
|
|
175
|
-
if (msg && msg.ciphertext) {
|
|
176
|
-
try {
|
|
177
|
-
const decrypted = this.crypto.decrypt(msg.ciphertext, this.swarmKey, msg.iv, msg.tag);
|
|
178
|
-
callback(JSON.parse(decrypted));
|
|
179
|
-
}
|
|
180
|
-
catch (error) {
|
|
181
|
-
// Ignore decryption errors (wrong key)
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Sync Q-table to swarm
|
|
188
|
-
*/
|
|
189
|
-
async syncQTable(agentId, qTable) {
|
|
190
|
-
return this.publish('q_table_sync', {
|
|
191
|
-
agentId,
|
|
192
|
-
qTable,
|
|
193
|
-
dimensions: `${qTable.length}x${qTable[0]?.length || 0}`,
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Sync memory vectors
|
|
198
|
-
*/
|
|
199
|
-
async syncMemory(agentId, vectors, namespace) {
|
|
200
|
-
return this.publish('memory_sync', {
|
|
201
|
-
agentId,
|
|
202
|
-
vectorCount: vectors.length,
|
|
203
|
-
dimensions: vectors[0]?.length || 0,
|
|
204
|
-
namespace,
|
|
205
|
-
checksum: this.crypto.hash(JSON.stringify(vectors)).slice(0, 8),
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Get connection status
|
|
210
|
-
*/
|
|
211
|
-
isConnected() {
|
|
212
|
-
return this.connected;
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Get swarm key (for sharing)
|
|
216
|
-
*/
|
|
217
|
-
getSwarmKey() {
|
|
218
|
-
return this.swarmKey;
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Get swarm ID
|
|
222
|
-
*/
|
|
223
|
-
getSwarmId() {
|
|
224
|
-
return this.swarmId;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Real WebRTC Swarm (using PeerJS)
|
|
229
|
-
*/
|
|
230
|
-
export class RealWebRTCSwarm {
|
|
231
|
-
peer = null;
|
|
232
|
-
connections = new Map();
|
|
233
|
-
crypto;
|
|
234
|
-
swarmKey;
|
|
235
|
-
swarmId;
|
|
236
|
-
peerId = null;
|
|
237
|
-
constructor(swarmKey) {
|
|
238
|
-
this.crypto = new SwarmCrypto();
|
|
239
|
-
this.swarmKey = swarmKey || this.crypto.generateKey();
|
|
240
|
-
this.swarmId = this.crypto.hash(this.swarmKey).slice(0, 16);
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Initialize PeerJS connection
|
|
244
|
-
*/
|
|
245
|
-
async initialize(agentId) {
|
|
246
|
-
const PeerClass = await getPeer();
|
|
247
|
-
if (!PeerClass) {
|
|
248
|
-
logger.warn('PeerJS not available');
|
|
249
|
-
return null;
|
|
250
|
-
}
|
|
251
|
-
return new Promise((resolve) => {
|
|
252
|
-
try {
|
|
253
|
-
this.peerId = `swarm-${this.swarmId}-${agentId}`;
|
|
254
|
-
this.peer = new PeerClass(this.peerId);
|
|
255
|
-
this.peer.on('open', (id) => {
|
|
256
|
-
logger.info('WebRTC peer connected', { peerId: id });
|
|
257
|
-
resolve(id);
|
|
258
|
-
});
|
|
259
|
-
this.peer.on('connection', (conn) => {
|
|
260
|
-
this.handleConnection(conn);
|
|
261
|
-
});
|
|
262
|
-
this.peer.on('error', (err) => {
|
|
263
|
-
logger.error('PeerJS error', { error: err.message });
|
|
264
|
-
resolve(null);
|
|
265
|
-
});
|
|
266
|
-
// Timeout after 10 seconds
|
|
267
|
-
setTimeout(() => resolve(null), 10000);
|
|
268
|
-
}
|
|
269
|
-
catch (error) {
|
|
270
|
-
logger.error('Failed to initialize PeerJS', { error });
|
|
271
|
-
resolve(null);
|
|
272
|
-
}
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Handle incoming connection
|
|
277
|
-
*/
|
|
278
|
-
handleConnection(conn) {
|
|
279
|
-
conn.on('open', () => {
|
|
280
|
-
this.connections.set(conn.peer, conn);
|
|
281
|
-
logger.debug('Peer connected', { peer: conn.peer });
|
|
282
|
-
});
|
|
283
|
-
conn.on('data', (data) => {
|
|
284
|
-
if (data.encrypted) {
|
|
285
|
-
try {
|
|
286
|
-
const decrypted = this.crypto.decrypt(data.ciphertext, this.swarmKey, data.iv, data.tag);
|
|
287
|
-
this.handleMessage(JSON.parse(decrypted), conn.peer);
|
|
288
|
-
}
|
|
289
|
-
catch {
|
|
290
|
-
// Ignore decryption errors
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
});
|
|
294
|
-
conn.on('close', () => {
|
|
295
|
-
this.connections.delete(conn.peer);
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
/**
|
|
299
|
-
* Handle decrypted message
|
|
300
|
-
*/
|
|
301
|
-
handleMessage(message, from) {
|
|
302
|
-
logger.debug('Received P2P message', { from, type: message.type });
|
|
303
|
-
// Override in subclass or add event emitter
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Connect to another peer
|
|
307
|
-
*/
|
|
308
|
-
async connectToPeer(peerId) {
|
|
309
|
-
if (!this.peer) {
|
|
310
|
-
return false;
|
|
311
|
-
}
|
|
312
|
-
return new Promise((resolve) => {
|
|
313
|
-
const conn = this.peer.connect(peerId);
|
|
314
|
-
conn.on('open', () => {
|
|
315
|
-
this.connections.set(peerId, conn);
|
|
316
|
-
resolve(true);
|
|
317
|
-
});
|
|
318
|
-
conn.on('error', () => {
|
|
319
|
-
resolve(false);
|
|
320
|
-
});
|
|
321
|
-
setTimeout(() => resolve(false), 5000);
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Send encrypted message to peer
|
|
326
|
-
*/
|
|
327
|
-
async sendToPeer(peerId, data) {
|
|
328
|
-
const conn = this.connections.get(peerId);
|
|
329
|
-
if (!conn) {
|
|
330
|
-
return false;
|
|
331
|
-
}
|
|
332
|
-
const encrypted = this.crypto.encrypt(JSON.stringify(data), this.swarmKey);
|
|
333
|
-
conn.send({
|
|
334
|
-
encrypted: true,
|
|
335
|
-
...encrypted,
|
|
336
|
-
});
|
|
337
|
-
return true;
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* Broadcast to all connected peers
|
|
341
|
-
*/
|
|
342
|
-
async broadcast(data) {
|
|
343
|
-
let sent = 0;
|
|
344
|
-
for (const [peerId] of this.connections) {
|
|
345
|
-
if (await this.sendToPeer(peerId, data)) {
|
|
346
|
-
sent++;
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
return sent;
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Get connected peer count
|
|
353
|
-
*/
|
|
354
|
-
getConnectedPeers() {
|
|
355
|
-
return this.connections.size;
|
|
356
|
-
}
|
|
357
|
-
/**
|
|
358
|
-
* Get peer ID
|
|
359
|
-
*/
|
|
360
|
-
getPeerId() {
|
|
361
|
-
return this.peerId;
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Disconnect
|
|
365
|
-
*/
|
|
366
|
-
disconnect() {
|
|
367
|
-
if (this.peer) {
|
|
368
|
-
this.peer.destroy();
|
|
369
|
-
this.peer = null;
|
|
370
|
-
}
|
|
371
|
-
this.connections.clear();
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* Combined Real P2P Swarm Coordinator
|
|
376
|
-
*/
|
|
377
|
-
export class RealP2PSwarmCoordinator {
|
|
378
|
-
gundb;
|
|
379
|
-
webrtc;
|
|
380
|
-
swarmKey;
|
|
381
|
-
initialized = false;
|
|
382
|
-
constructor(swarmKey) {
|
|
383
|
-
const crypto = new SwarmCrypto();
|
|
384
|
-
this.swarmKey = swarmKey || crypto.generateKey();
|
|
385
|
-
this.gundb = new RealGunDBSwarm(this.swarmKey);
|
|
386
|
-
this.webrtc = new RealWebRTCSwarm(this.swarmKey);
|
|
387
|
-
}
|
|
388
|
-
/**
|
|
389
|
-
* Initialize all P2P connections
|
|
390
|
-
*/
|
|
391
|
-
async initialize(agentId) {
|
|
392
|
-
const gundbConnected = await this.gundb.connect();
|
|
393
|
-
const webrtcPeerId = await this.webrtc.initialize(agentId);
|
|
394
|
-
if (gundbConnected) {
|
|
395
|
-
await this.gundb.registerAgent(agentId, ['coordinator']);
|
|
396
|
-
}
|
|
397
|
-
this.initialized = true;
|
|
398
|
-
return {
|
|
399
|
-
gundb: gundbConnected,
|
|
400
|
-
webrtc: webrtcPeerId !== null,
|
|
401
|
-
swarmId: this.gundb.getSwarmId(),
|
|
402
|
-
};
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* Publish via GunDB (real-time)
|
|
406
|
-
*/
|
|
407
|
-
async publish(topic, data) {
|
|
408
|
-
return this.gundb.publish(topic, data);
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* Subscribe via GunDB
|
|
412
|
-
*/
|
|
413
|
-
subscribe(topic, callback) {
|
|
414
|
-
this.gundb.subscribe(topic, callback);
|
|
415
|
-
}
|
|
416
|
-
/**
|
|
417
|
-
* Send direct P2P message
|
|
418
|
-
*/
|
|
419
|
-
async sendDirect(peerId, data) {
|
|
420
|
-
return this.webrtc.sendToPeer(peerId, data);
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Broadcast via WebRTC
|
|
424
|
-
*/
|
|
425
|
-
async broadcastDirect(data) {
|
|
426
|
-
return this.webrtc.broadcast(data);
|
|
427
|
-
}
|
|
428
|
-
/**
|
|
429
|
-
* Sync learning state
|
|
430
|
-
*/
|
|
431
|
-
async syncLearning(agentId, qTable, vectors) {
|
|
432
|
-
const qTableId = await this.gundb.syncQTable(agentId, qTable);
|
|
433
|
-
let memoryId;
|
|
434
|
-
if (vectors && vectors.length > 0) {
|
|
435
|
-
memoryId = await this.gundb.syncMemory(agentId, vectors, 'default');
|
|
436
|
-
}
|
|
437
|
-
return { qTableId, memoryId };
|
|
438
|
-
}
|
|
439
|
-
/**
|
|
440
|
-
* Get status
|
|
441
|
-
*/
|
|
442
|
-
getStatus() {
|
|
443
|
-
return {
|
|
444
|
-
gundb: this.gundb.isConnected(),
|
|
445
|
-
webrtc: {
|
|
446
|
-
connected: this.webrtc.getPeerId() !== null,
|
|
447
|
-
peers: this.webrtc.getConnectedPeers(),
|
|
448
|
-
},
|
|
449
|
-
swarmId: this.gundb.getSwarmId(),
|
|
450
|
-
swarmKey: this.swarmKey,
|
|
451
|
-
};
|
|
452
|
-
}
|
|
453
|
-
/**
|
|
454
|
-
* Cleanup
|
|
455
|
-
*/
|
|
456
|
-
disconnect() {
|
|
457
|
-
this.webrtc.disconnect();
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
/**
|
|
461
|
-
* Quick start helper
|
|
462
|
-
*/
|
|
463
|
-
export async function createRealP2PSwarm(agentId, swarmKey) {
|
|
464
|
-
const swarm = new RealP2PSwarmCoordinator(swarmKey);
|
|
465
|
-
await swarm.initialize(agentId);
|
|
466
|
-
return swarm;
|
|
467
|
-
}
|
|
468
|
-
export { SwarmCrypto };
|
|
469
|
-
//# sourceMappingURL=real-p2p-swarm.js.map
|