@sparkleideas/mcp 3.0.0-alpha.9
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/analysis/analyze-code-quality.md +179 -0
- package/.claude/agents/analysis/code-analyzer.md +210 -0
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +179 -0
- package/.claude/agents/architecture/arch-system-design.md +157 -0
- package/.claude/agents/architecture/system-design/arch-system-design.md +155 -0
- package/.claude/agents/consensus/byzantine-coordinator.md +63 -0
- package/.claude/agents/consensus/crdt-synchronizer.md +997 -0
- package/.claude/agents/consensus/gossip-coordinator.md +63 -0
- package/.claude/agents/consensus/performance-benchmarker.md +851 -0
- package/.claude/agents/consensus/quorum-manager.md +823 -0
- package/.claude/agents/consensus/raft-manager.md +63 -0
- package/.claude/agents/consensus/security-manager.md +622 -0
- package/.claude/agents/core/coder.md +453 -0
- package/.claude/agents/core/planner.md +375 -0
- package/.claude/agents/core/researcher.md +369 -0
- package/.claude/agents/core/reviewer.md +520 -0
- package/.claude/agents/core/tester.md +512 -0
- package/.claude/agents/custom/test-long-runner.md +44 -0
- package/.claude/agents/data/data-ml-model.md +445 -0
- package/.claude/agents/data/ml/data-ml-model.md +193 -0
- package/.claude/agents/development/backend/dev-backend-api.md +142 -0
- package/.claude/agents/development/dev-backend-api.md +345 -0
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +164 -0
- package/.claude/agents/devops/ops-cicd-github.md +165 -0
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +174 -0
- package/.claude/agents/documentation/docs-api-openapi.md +355 -0
- package/.claude/agents/flow-nexus/app-store.md +88 -0
- package/.claude/agents/flow-nexus/authentication.md +69 -0
- package/.claude/agents/flow-nexus/challenges.md +81 -0
- package/.claude/agents/flow-nexus/neural-network.md +88 -0
- package/.claude/agents/flow-nexus/payments.md +83 -0
- package/.claude/agents/flow-nexus/sandbox.md +76 -0
- package/.claude/agents/flow-nexus/swarm.md +76 -0
- package/.claude/agents/flow-nexus/user-tools.md +96 -0
- package/.claude/agents/flow-nexus/workflow.md +84 -0
- package/.claude/agents/github/code-review-swarm.md +377 -0
- package/.claude/agents/github/github-modes.md +173 -0
- package/.claude/agents/github/issue-tracker.md +576 -0
- package/.claude/agents/github/multi-repo-swarm.md +553 -0
- package/.claude/agents/github/pr-manager.md +438 -0
- package/.claude/agents/github/project-board-sync.md +509 -0
- package/.claude/agents/github/release-manager.md +605 -0
- package/.claude/agents/github/release-swarm.md +583 -0
- package/.claude/agents/github/repo-architect.md +398 -0
- package/.claude/agents/github/swarm-issue.md +573 -0
- package/.claude/agents/github/swarm-pr.md +428 -0
- package/.claude/agents/github/sync-coordinator.md +452 -0
- package/.claude/agents/github/workflow-automation.md +903 -0
- package/.claude/agents/goal/agent.md +816 -0
- package/.claude/agents/goal/goal-planner.md +73 -0
- package/.claude/agents/optimization/benchmark-suite.md +665 -0
- package/.claude/agents/optimization/load-balancer.md +431 -0
- package/.claude/agents/optimization/performance-monitor.md +672 -0
- package/.claude/agents/optimization/resource-allocator.md +674 -0
- package/.claude/agents/optimization/topology-optimizer.md +808 -0
- package/.claude/agents/payments/agentic-payments.md +126 -0
- package/.claude/agents/sona/sona-learning-optimizer.md +74 -0
- package/.claude/agents/sparc/architecture.md +699 -0
- package/.claude/agents/sparc/pseudocode.md +520 -0
- package/.claude/agents/sparc/refinement.md +802 -0
- package/.claude/agents/sparc/specification.md +478 -0
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +225 -0
- package/.claude/agents/specialized/spec-mobile-react-native.md +227 -0
- package/.claude/agents/sublinear/consensus-coordinator.md +338 -0
- package/.claude/agents/sublinear/matrix-optimizer.md +185 -0
- package/.claude/agents/sublinear/pagerank-analyzer.md +299 -0
- package/.claude/agents/sublinear/performance-optimizer.md +368 -0
- package/.claude/agents/sublinear/trading-predictor.md +246 -0
- package/.claude/agents/swarm/adaptive-coordinator.md +1127 -0
- package/.claude/agents/swarm/hierarchical-coordinator.md +710 -0
- package/.claude/agents/swarm/mesh-coordinator.md +963 -0
- package/.claude/agents/templates/automation-smart-agent.md +205 -0
- package/.claude/agents/templates/base-template-generator.md +268 -0
- package/.claude/agents/templates/coordinator-swarm-init.md +90 -0
- package/.claude/agents/templates/github-pr-manager.md +177 -0
- package/.claude/agents/templates/implementer-sparc-coder.md +259 -0
- package/.claude/agents/templates/memory-coordinator.md +187 -0
- package/.claude/agents/templates/orchestrator-task.md +139 -0
- package/.claude/agents/templates/performance-analyzer.md +199 -0
- package/.claude/agents/templates/sparc-coordinator.md +514 -0
- package/.claude/agents/testing/production-validator.md +395 -0
- package/.claude/agents/testing/tdd-london-swarm.md +244 -0
- package/.claude/agents/v3/adr-architect.md +184 -0
- package/.claude/agents/v3/aidefence-guardian.md +282 -0
- package/.claude/agents/v3/claims-authorizer.md +208 -0
- package/.claude/agents/v3/collective-intelligence-coordinator.md +993 -0
- package/.claude/agents/v3/ddd-domain-expert.md +220 -0
- package/.claude/agents/v3/injection-analyst.md +236 -0
- package/.claude/agents/v3/memory-specialist.md +995 -0
- package/.claude/agents/v3/performance-engineer.md +1233 -0
- package/.claude/agents/v3/pii-detector.md +151 -0
- package/.claude/agents/v3/reasoningbank-learner.md +213 -0
- package/.claude/agents/v3/security-architect-aidefence.md +410 -0
- package/.claude/agents/v3/security-architect.md +867 -0
- package/.claude/agents/v3/security-auditor.md +771 -0
- package/.claude/agents/v3/sparc-orchestrator.md +182 -0
- package/.claude/agents/v3/swarm-memory-manager.md +157 -0
- package/.claude/agents/v3/v3-integration-architect.md +205 -0
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +54 -0
- package/.claude/commands/analysis/README.md +9 -0
- package/.claude/commands/analysis/bottleneck-detect.md +162 -0
- package/.claude/commands/analysis/performance-bottlenecks.md +59 -0
- package/.claude/commands/analysis/performance-report.md +25 -0
- package/.claude/commands/analysis/token-efficiency.md +45 -0
- package/.claude/commands/analysis/token-usage.md +25 -0
- package/.claude/commands/automation/README.md +9 -0
- package/.claude/commands/automation/auto-agent.md +122 -0
- package/.claude/commands/automation/self-healing.md +106 -0
- package/.claude/commands/automation/session-memory.md +90 -0
- package/.claude/commands/automation/smart-agents.md +73 -0
- package/.claude/commands/automation/smart-spawn.md +25 -0
- package/.claude/commands/automation/workflow-select.md +25 -0
- package/.claude/commands/claude-flow-help.md +103 -0
- package/.claude/commands/claude-flow-memory.md +107 -0
- package/.claude/commands/claude-flow-swarm.md +205 -0
- package/.claude/commands/github/README.md +11 -0
- package/.claude/commands/github/code-review-swarm.md +514 -0
- package/.claude/commands/github/code-review.md +25 -0
- package/.claude/commands/github/github-modes.md +147 -0
- package/.claude/commands/github/github-swarm.md +121 -0
- package/.claude/commands/github/issue-tracker.md +292 -0
- package/.claude/commands/github/issue-triage.md +25 -0
- package/.claude/commands/github/multi-repo-swarm.md +519 -0
- package/.claude/commands/github/pr-enhance.md +26 -0
- package/.claude/commands/github/pr-manager.md +170 -0
- package/.claude/commands/github/project-board-sync.md +471 -0
- package/.claude/commands/github/release-manager.md +338 -0
- package/.claude/commands/github/release-swarm.md +544 -0
- package/.claude/commands/github/repo-analyze.md +25 -0
- package/.claude/commands/github/repo-architect.md +367 -0
- package/.claude/commands/github/swarm-issue.md +482 -0
- package/.claude/commands/github/swarm-pr.md +285 -0
- package/.claude/commands/github/sync-coordinator.md +301 -0
- package/.claude/commands/github/workflow-automation.md +442 -0
- package/.claude/commands/hooks/README.md +11 -0
- package/.claude/commands/hooks/overview.md +58 -0
- package/.claude/commands/hooks/post-edit.md +117 -0
- package/.claude/commands/hooks/post-task.md +112 -0
- package/.claude/commands/hooks/pre-edit.md +113 -0
- package/.claude/commands/hooks/pre-task.md +111 -0
- package/.claude/commands/hooks/session-end.md +118 -0
- package/.claude/commands/hooks/setup.md +103 -0
- package/.claude/commands/monitoring/README.md +9 -0
- package/.claude/commands/monitoring/agent-metrics.md +25 -0
- package/.claude/commands/monitoring/agents.md +44 -0
- package/.claude/commands/monitoring/real-time-view.md +25 -0
- package/.claude/commands/monitoring/status.md +46 -0
- package/.claude/commands/monitoring/swarm-monitor.md +25 -0
- package/.claude/commands/optimization/README.md +9 -0
- package/.claude/commands/optimization/auto-topology.md +62 -0
- package/.claude/commands/optimization/cache-manage.md +25 -0
- package/.claude/commands/optimization/parallel-execute.md +25 -0
- package/.claude/commands/optimization/parallel-execution.md +50 -0
- package/.claude/commands/optimization/topology-optimize.md +25 -0
- package/.claude/commands/sparc/analyzer.md +52 -0
- package/.claude/commands/sparc/architect.md +53 -0
- package/.claude/commands/sparc/ask.md +97 -0
- package/.claude/commands/sparc/batch-executor.md +54 -0
- package/.claude/commands/sparc/code.md +89 -0
- package/.claude/commands/sparc/coder.md +54 -0
- package/.claude/commands/sparc/debug.md +83 -0
- package/.claude/commands/sparc/debugger.md +54 -0
- package/.claude/commands/sparc/designer.md +53 -0
- package/.claude/commands/sparc/devops.md +109 -0
- package/.claude/commands/sparc/docs-writer.md +80 -0
- package/.claude/commands/sparc/documenter.md +54 -0
- package/.claude/commands/sparc/innovator.md +54 -0
- package/.claude/commands/sparc/integration.md +83 -0
- package/.claude/commands/sparc/mcp.md +117 -0
- package/.claude/commands/sparc/memory-manager.md +54 -0
- package/.claude/commands/sparc/optimizer.md +54 -0
- package/.claude/commands/sparc/orchestrator.md +132 -0
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -0
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -0
- package/.claude/commands/sparc/researcher.md +54 -0
- package/.claude/commands/sparc/reviewer.md +54 -0
- package/.claude/commands/sparc/security-review.md +80 -0
- package/.claude/commands/sparc/sparc-modes.md +174 -0
- package/.claude/commands/sparc/sparc.md +111 -0
- package/.claude/commands/sparc/spec-pseudocode.md +80 -0
- package/.claude/commands/sparc/supabase-admin.md +348 -0
- package/.claude/commands/sparc/swarm-coordinator.md +54 -0
- package/.claude/commands/sparc/tdd.md +54 -0
- package/.claude/commands/sparc/tester.md +54 -0
- package/.claude/commands/sparc/tutorial.md +79 -0
- package/.claude/commands/sparc/workflow-manager.md +54 -0
- package/.claude/helpers/README.md +97 -0
- package/.claude/helpers/adr-compliance.sh +186 -0
- package/.claude/helpers/auto-commit.sh +178 -0
- package/.claude/helpers/checkpoint-manager.sh +251 -0
- package/.claude/helpers/daemon-manager.sh +252 -0
- package/.claude/helpers/ddd-tracker.sh +144 -0
- package/.claude/helpers/github-safe.js +106 -0
- package/.claude/helpers/github-setup.sh +28 -0
- package/.claude/helpers/guidance-hook.sh +13 -0
- package/.claude/helpers/guidance-hooks.sh +102 -0
- package/.claude/helpers/health-monitor.sh +108 -0
- package/.claude/helpers/learning-hooks.sh +329 -0
- package/.claude/helpers/learning-optimizer.sh +127 -0
- package/.claude/helpers/learning-service.mjs +1144 -0
- package/.claude/helpers/memory.js +83 -0
- package/.claude/helpers/metrics-db.mjs +488 -0
- package/.claude/helpers/pattern-consolidator.sh +86 -0
- package/.claude/helpers/perf-worker.sh +160 -0
- package/.claude/helpers/post-commit +16 -0
- package/.claude/helpers/pre-commit +26 -0
- package/.claude/helpers/quick-start.sh +19 -0
- package/.claude/helpers/router.js +66 -0
- package/.claude/helpers/security-scanner.sh +127 -0
- package/.claude/helpers/session.js +127 -0
- package/.claude/helpers/setup-mcp.sh +18 -0
- package/.claude/helpers/standard-checkpoint-hooks.sh +189 -0
- package/.claude/helpers/statusline-hook.sh +21 -0
- package/.claude/helpers/statusline.cjs +509 -0
- package/.claude/helpers/statusline.js +316 -0
- package/.claude/helpers/swarm-comms.sh +353 -0
- package/.claude/helpers/swarm-hooks.sh +761 -0
- package/.claude/helpers/swarm-monitor.sh +211 -0
- package/.claude/helpers/sync-v3-metrics.sh +245 -0
- package/.claude/helpers/update-v3-progress.sh +166 -0
- package/.claude/helpers/v3-quick-status.sh +58 -0
- package/.claude/helpers/v3.sh +111 -0
- package/.claude/helpers/validate-v3-config.sh +216 -0
- package/.claude/helpers/worker-manager.sh +170 -0
- package/.claude/settings.json +237 -0
- package/.claude/skills/agentdb-advanced/SKILL.md +550 -0
- package/.claude/skills/agentdb-learning/SKILL.md +545 -0
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -0
- package/.claude/skills/agentdb-optimization/SKILL.md +509 -0
- package/.claude/skills/agentdb-vector-search/SKILL.md +339 -0
- package/.claude/skills/github-code-review/SKILL.md +1140 -0
- package/.claude/skills/github-multi-repo/SKILL.md +874 -0
- package/.claude/skills/github-project-management/SKILL.md +1277 -0
- package/.claude/skills/github-release-management/SKILL.md +1081 -0
- package/.claude/skills/github-workflow-automation/SKILL.md +1065 -0
- package/.claude/skills/hooks-automation/SKILL.md +1201 -0
- package/.claude/skills/pair-programming/SKILL.md +1202 -0
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -0
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -0
- package/.claude/skills/skill-builder/SKILL.md +910 -0
- package/.claude/skills/sparc-methodology/SKILL.md +1115 -0
- package/.claude/skills/stream-chain/SKILL.md +563 -0
- package/.claude/skills/swarm-advanced/SKILL.md +973 -0
- package/.claude/skills/swarm-orchestration/SKILL.md +179 -0
- package/.claude/skills/v3-cli-modernization/SKILL.md +872 -0
- package/.claude/skills/v3-core-implementation/SKILL.md +797 -0
- package/.claude/skills/v3-ddd-architecture/SKILL.md +442 -0
- package/.claude/skills/v3-integration-deep/SKILL.md +241 -0
- package/.claude/skills/v3-mcp-optimization/SKILL.md +777 -0
- package/.claude/skills/v3-memory-unification/SKILL.md +174 -0
- package/.claude/skills/v3-performance-optimization/SKILL.md +390 -0
- package/.claude/skills/v3-security-overhaul/SKILL.md +82 -0
- package/.claude/skills/v3-swarm-coordination/SKILL.md +340 -0
- package/.claude/skills/verification-quality/SKILL.md +649 -0
- package/CLAUDE.md +711 -0
- package/README.md +428 -0
- package/__tests__/integration.test.ts +449 -0
- package/__tests__/mcp.test.ts +641 -0
- package/package.json +44 -0
- package/src/connection-pool.ts +344 -0
- package/src/index.ts +253 -0
- package/src/oauth.ts +447 -0
- package/src/prompt-registry.ts +296 -0
- package/src/rate-limiter.ts +266 -0
- package/src/resource-registry.ts +530 -0
- package/src/sampling.ts +363 -0
- package/src/schema-validator.ts +213 -0
- package/src/server.ts +1134 -0
- package/src/session-manager.ts +339 -0
- package/src/task-manager.ts +427 -0
- package/src/tool-registry.ts +475 -0
- package/src/transport/http.ts +532 -0
- package/src/transport/index.ts +233 -0
- package/src/transport/stdio.ts +252 -0
- package/src/transport/websocket.ts +396 -0
- package/src/types.ts +664 -0
- package/tmp.json +0 -0
- package/tsconfig.json +20 -0
- package/vitest.config.ts +13 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Claude Flow V3 Statusline Generator
|
|
4
|
+
* Displays real-time V3 implementation progress and system status
|
|
5
|
+
*
|
|
6
|
+
* Usage: node statusline.js [--json] [--compact]
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
const { execSync } = require('child_process');
|
|
12
|
+
|
|
13
|
+
// Configuration
|
|
14
|
+
const CONFIG = {
|
|
15
|
+
enabled: true,
|
|
16
|
+
showProgress: true,
|
|
17
|
+
showSecurity: true,
|
|
18
|
+
showSwarm: true,
|
|
19
|
+
showHooks: true,
|
|
20
|
+
showPerformance: true,
|
|
21
|
+
refreshInterval: 5000,
|
|
22
|
+
maxAgents: 15,
|
|
23
|
+
topology: 'hierarchical-mesh',
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// ANSI colors
|
|
27
|
+
const c = {
|
|
28
|
+
reset: '\x1b[0m',
|
|
29
|
+
bold: '\x1b[1m',
|
|
30
|
+
dim: '\x1b[2m',
|
|
31
|
+
red: '\x1b[0;31m',
|
|
32
|
+
green: '\x1b[0;32m',
|
|
33
|
+
yellow: '\x1b[0;33m',
|
|
34
|
+
blue: '\x1b[0;34m',
|
|
35
|
+
purple: '\x1b[0;35m',
|
|
36
|
+
cyan: '\x1b[0;36m',
|
|
37
|
+
brightRed: '\x1b[1;31m',
|
|
38
|
+
brightGreen: '\x1b[1;32m',
|
|
39
|
+
brightYellow: '\x1b[1;33m',
|
|
40
|
+
brightBlue: '\x1b[1;34m',
|
|
41
|
+
brightPurple: '\x1b[1;35m',
|
|
42
|
+
brightCyan: '\x1b[1;36m',
|
|
43
|
+
brightWhite: '\x1b[1;37m',
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// Get user info
|
|
47
|
+
function getUserInfo() {
|
|
48
|
+
let name = 'user';
|
|
49
|
+
let gitBranch = '';
|
|
50
|
+
let modelName = 'Opus 4.5';
|
|
51
|
+
|
|
52
|
+
try {
|
|
53
|
+
name = execSync('git config user.name 2>/dev/null || echo "user"', { encoding: 'utf-8' }).trim();
|
|
54
|
+
gitBranch = execSync('git branch --show-current 2>/dev/null || echo ""', { encoding: 'utf-8' }).trim();
|
|
55
|
+
} catch (e) {
|
|
56
|
+
// Ignore errors
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return { name, gitBranch, modelName };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Get learning stats from memory database
|
|
63
|
+
function getLearningStats() {
|
|
64
|
+
const memoryPaths = [
|
|
65
|
+
path.join(process.cwd(), '.swarm', 'memory.db'),
|
|
66
|
+
path.join(process.cwd(), '.claude', 'memory.db'),
|
|
67
|
+
path.join(process.cwd(), 'data', 'memory.db'),
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
let patterns = 0;
|
|
71
|
+
let sessions = 0;
|
|
72
|
+
let trajectories = 0;
|
|
73
|
+
|
|
74
|
+
// Try to read from sqlite database
|
|
75
|
+
for (const dbPath of memoryPaths) {
|
|
76
|
+
if (fs.existsSync(dbPath)) {
|
|
77
|
+
try {
|
|
78
|
+
// Count entries in memory file (rough estimate from file size)
|
|
79
|
+
const stats = fs.statSync(dbPath);
|
|
80
|
+
const sizeKB = stats.size / 1024;
|
|
81
|
+
// Estimate: ~2KB per pattern on average
|
|
82
|
+
patterns = Math.floor(sizeKB / 2);
|
|
83
|
+
sessions = Math.max(1, Math.floor(patterns / 10));
|
|
84
|
+
trajectories = Math.floor(patterns / 5);
|
|
85
|
+
break;
|
|
86
|
+
} catch (e) {
|
|
87
|
+
// Ignore
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Also check for session files
|
|
93
|
+
const sessionsPath = path.join(process.cwd(), '.claude', 'sessions');
|
|
94
|
+
if (fs.existsSync(sessionsPath)) {
|
|
95
|
+
try {
|
|
96
|
+
const sessionFiles = fs.readdirSync(sessionsPath).filter(f => f.endsWith('.json'));
|
|
97
|
+
sessions = Math.max(sessions, sessionFiles.length);
|
|
98
|
+
} catch (e) {
|
|
99
|
+
// Ignore
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return { patterns, sessions, trajectories };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Get V3 progress from learning state (grows as system learns)
|
|
107
|
+
function getV3Progress() {
|
|
108
|
+
const learning = getLearningStats();
|
|
109
|
+
|
|
110
|
+
// DDD progress based on actual learned patterns
|
|
111
|
+
// New install: 0 patterns = 0/5 domains, 0% DDD
|
|
112
|
+
// As patterns grow: 10+ patterns = 1 domain, 50+ = 2, 100+ = 3, 200+ = 4, 500+ = 5
|
|
113
|
+
let domainsCompleted = 0;
|
|
114
|
+
if (learning.patterns >= 500) domainsCompleted = 5;
|
|
115
|
+
else if (learning.patterns >= 200) domainsCompleted = 4;
|
|
116
|
+
else if (learning.patterns >= 100) domainsCompleted = 3;
|
|
117
|
+
else if (learning.patterns >= 50) domainsCompleted = 2;
|
|
118
|
+
else if (learning.patterns >= 10) domainsCompleted = 1;
|
|
119
|
+
|
|
120
|
+
const totalDomains = 5;
|
|
121
|
+
const dddProgress = Math.min(100, Math.floor((domainsCompleted / totalDomains) * 100));
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
domainsCompleted,
|
|
125
|
+
totalDomains,
|
|
126
|
+
dddProgress,
|
|
127
|
+
patternsLearned: learning.patterns,
|
|
128
|
+
sessionsCompleted: learning.sessions
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Get security status based on actual scans
|
|
133
|
+
function getSecurityStatus() {
|
|
134
|
+
// Check for security scan results in memory
|
|
135
|
+
const scanResultsPath = path.join(process.cwd(), '.claude', 'security-scans');
|
|
136
|
+
let cvesFixed = 0;
|
|
137
|
+
const totalCves = 3;
|
|
138
|
+
|
|
139
|
+
if (fs.existsSync(scanResultsPath)) {
|
|
140
|
+
try {
|
|
141
|
+
const scans = fs.readdirSync(scanResultsPath).filter(f => f.endsWith('.json'));
|
|
142
|
+
// Each successful scan file = 1 CVE addressed
|
|
143
|
+
cvesFixed = Math.min(totalCves, scans.length);
|
|
144
|
+
} catch (e) {
|
|
145
|
+
// Ignore
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Also check .swarm/security for audit results
|
|
150
|
+
const auditPath = path.join(process.cwd(), '.swarm', 'security');
|
|
151
|
+
if (fs.existsSync(auditPath)) {
|
|
152
|
+
try {
|
|
153
|
+
const audits = fs.readdirSync(auditPath).filter(f => f.includes('audit'));
|
|
154
|
+
cvesFixed = Math.min(totalCves, Math.max(cvesFixed, audits.length));
|
|
155
|
+
} catch (e) {
|
|
156
|
+
// Ignore
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const status = cvesFixed >= totalCves ? 'CLEAN' : cvesFixed > 0 ? 'IN_PROGRESS' : 'PENDING';
|
|
161
|
+
|
|
162
|
+
return {
|
|
163
|
+
status,
|
|
164
|
+
cvesFixed,
|
|
165
|
+
totalCves,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Get swarm status
|
|
170
|
+
function getSwarmStatus() {
|
|
171
|
+
let activeAgents = 0;
|
|
172
|
+
let coordinationActive = false;
|
|
173
|
+
|
|
174
|
+
try {
|
|
175
|
+
const ps = execSync('ps aux 2>/dev/null | grep -c @sparkleideas/agentic-flow || echo "0"', { encoding: 'utf-8' });
|
|
176
|
+
activeAgents = Math.max(0, parseInt(ps.trim()) - 1);
|
|
177
|
+
coordinationActive = activeAgents > 0;
|
|
178
|
+
} catch (e) {
|
|
179
|
+
// Ignore errors
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return {
|
|
183
|
+
activeAgents,
|
|
184
|
+
maxAgents: CONFIG.maxAgents,
|
|
185
|
+
coordinationActive,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Get system metrics (dynamic based on actual state)
|
|
190
|
+
function getSystemMetrics() {
|
|
191
|
+
let memoryMB = 0;
|
|
192
|
+
let subAgents = 0;
|
|
193
|
+
|
|
194
|
+
try {
|
|
195
|
+
const mem = execSync('ps aux | grep -E "(node|agentic|claude)" | grep -v grep | awk \'{sum += \$6} END {print int(sum/1024)}\'', { encoding: 'utf-8' });
|
|
196
|
+
memoryMB = parseInt(mem.trim()) || 0;
|
|
197
|
+
} catch (e) {
|
|
198
|
+
// Fallback
|
|
199
|
+
memoryMB = Math.floor(process.memoryUsage().heapUsed / 1024 / 1024);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Get learning stats for intelligence %
|
|
203
|
+
const learning = getLearningStats();
|
|
204
|
+
|
|
205
|
+
// Intelligence % based on learned patterns (0 patterns = 0%, 1000+ = 100%)
|
|
206
|
+
const intelligencePct = Math.min(100, Math.floor((learning.patterns / 10) * 1));
|
|
207
|
+
|
|
208
|
+
// Context % based on session history (0 sessions = 0%, grows with usage)
|
|
209
|
+
const contextPct = Math.min(100, Math.floor(learning.sessions * 5));
|
|
210
|
+
|
|
211
|
+
// Count active sub-agents from process list
|
|
212
|
+
try {
|
|
213
|
+
const agents = execSync('ps aux 2>/dev/null | grep -c "@sparkleideas/claude-flow.*agent" || echo "0"', { encoding: 'utf-8' });
|
|
214
|
+
subAgents = Math.max(0, parseInt(agents.trim()) - 1);
|
|
215
|
+
} catch (e) {
|
|
216
|
+
// Ignore
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return {
|
|
220
|
+
memoryMB,
|
|
221
|
+
contextPct,
|
|
222
|
+
intelligencePct,
|
|
223
|
+
subAgents,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Generate progress bar
|
|
228
|
+
function progressBar(current, total) {
|
|
229
|
+
const width = 5;
|
|
230
|
+
const filled = Math.round((current / total) * width);
|
|
231
|
+
const empty = width - filled;
|
|
232
|
+
return '[' + '\u25CF'.repeat(filled) + '\u25CB'.repeat(empty) + ']';
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Generate full statusline
|
|
236
|
+
function generateStatusline() {
|
|
237
|
+
const user = getUserInfo();
|
|
238
|
+
const progress = getV3Progress();
|
|
239
|
+
const security = getSecurityStatus();
|
|
240
|
+
const swarm = getSwarmStatus();
|
|
241
|
+
const system = getSystemMetrics();
|
|
242
|
+
const lines = [];
|
|
243
|
+
|
|
244
|
+
// Header Line
|
|
245
|
+
let header = `${c.bold}${c.brightPurple}▊ Claude Flow V3 ${c.reset}`;
|
|
246
|
+
header += `${swarm.coordinationActive ? c.brightCyan : c.dim}● ${c.brightCyan}${user.name}${c.reset}`;
|
|
247
|
+
if (user.gitBranch) {
|
|
248
|
+
header += ` ${c.dim}│${c.reset} ${c.brightBlue}⎇ ${user.gitBranch}${c.reset}`;
|
|
249
|
+
}
|
|
250
|
+
header += ` ${c.dim}│${c.reset} ${c.purple}${user.modelName}${c.reset}`;
|
|
251
|
+
lines.push(header);
|
|
252
|
+
|
|
253
|
+
// Separator
|
|
254
|
+
lines.push(`${c.dim}─────────────────────────────────────────────────────${c.reset}`);
|
|
255
|
+
|
|
256
|
+
// Line 1: DDD Domain Progress
|
|
257
|
+
const domainsColor = progress.domainsCompleted >= 3 ? c.brightGreen : progress.domainsCompleted > 0 ? c.yellow : c.red;
|
|
258
|
+
lines.push(
|
|
259
|
+
`${c.brightCyan}🏗️ DDD Domains${c.reset} ${progressBar(progress.domainsCompleted, progress.totalDomains)} ` +
|
|
260
|
+
`${domainsColor}${progress.domainsCompleted}${c.reset}/${c.brightWhite}${progress.totalDomains}${c.reset} ` +
|
|
261
|
+
`${c.brightYellow}⚡ 1.0x${c.reset} ${c.dim}→${c.reset} ${c.brightYellow}2.49x-7.47x${c.reset}`
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
// Line 2: Swarm + CVE + Memory + Context + Intelligence
|
|
265
|
+
const swarmIndicator = swarm.coordinationActive ? `${c.brightGreen}◉${c.reset}` : `${c.dim}○${c.reset}`;
|
|
266
|
+
const agentsColor = swarm.activeAgents > 0 ? c.brightGreen : c.red;
|
|
267
|
+
let securityIcon = security.status === 'CLEAN' ? '🟢' : security.status === 'IN_PROGRESS' ? '🟡' : '🔴';
|
|
268
|
+
let securityColor = security.status === 'CLEAN' ? c.brightGreen : security.status === 'IN_PROGRESS' ? c.brightYellow : c.brightRed;
|
|
269
|
+
|
|
270
|
+
lines.push(
|
|
271
|
+
`${c.brightYellow}🤖 Swarm${c.reset} ${swarmIndicator} [${agentsColor}${String(swarm.activeAgents).padStart(2)}${c.reset}/${c.brightWhite}${swarm.maxAgents}${c.reset}] ` +
|
|
272
|
+
`${c.brightPurple}👥 ${system.subAgents}${c.reset} ` +
|
|
273
|
+
`${securityIcon} ${securityColor}CVE ${security.cvesFixed}${c.reset}/${c.brightWhite}${security.totalCves}${c.reset} ` +
|
|
274
|
+
`${c.brightCyan}💾 ${system.memoryMB}MB${c.reset} ` +
|
|
275
|
+
`${c.brightGreen}📂 ${String(system.contextPct).padStart(3)}%${c.reset} ` +
|
|
276
|
+
`${c.dim}🧠 ${String(system.intelligencePct).padStart(3)}%${c.reset}`
|
|
277
|
+
);
|
|
278
|
+
|
|
279
|
+
// Line 3: Architecture status
|
|
280
|
+
const dddColor = progress.dddProgress >= 50 ? c.brightGreen : progress.dddProgress > 0 ? c.yellow : c.red;
|
|
281
|
+
lines.push(
|
|
282
|
+
`${c.brightPurple}🔧 Architecture${c.reset} ` +
|
|
283
|
+
`${c.cyan}DDD${c.reset} ${dddColor}●${String(progress.dddProgress).padStart(3)}%${c.reset} ${c.dim}│${c.reset} ` +
|
|
284
|
+
`${c.cyan}Security${c.reset} ${securityColor}●${security.status}${c.reset} ${c.dim}│${c.reset} ` +
|
|
285
|
+
`${c.cyan}Memory${c.reset} ${c.brightGreen}●AgentDB${c.reset} ${c.dim}│${c.reset} ` +
|
|
286
|
+
`${c.cyan}Integration${c.reset} ${swarm.coordinationActive ? c.brightCyan : c.dim}●${c.reset}`
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
return lines.join('\n');
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// Generate JSON data
|
|
293
|
+
function generateJSON() {
|
|
294
|
+
return {
|
|
295
|
+
user: getUserInfo(),
|
|
296
|
+
v3Progress: getV3Progress(),
|
|
297
|
+
security: getSecurityStatus(),
|
|
298
|
+
swarm: getSwarmStatus(),
|
|
299
|
+
system: getSystemMetrics(),
|
|
300
|
+
performance: {
|
|
301
|
+
flashAttentionTarget: '2.49x-7.47x',
|
|
302
|
+
searchImprovement: '150x-12,500x',
|
|
303
|
+
memoryReduction: '50-75%',
|
|
304
|
+
},
|
|
305
|
+
lastUpdated: new Date().toISOString(),
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Main
|
|
310
|
+
if (process.argv.includes('--json')) {
|
|
311
|
+
console.log(JSON.stringify(generateJSON(), null, 2));
|
|
312
|
+
} else if (process.argv.includes('--compact')) {
|
|
313
|
+
console.log(JSON.stringify(generateJSON()));
|
|
314
|
+
} else {
|
|
315
|
+
console.log(generateStatusline());
|
|
316
|
+
}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Claude Flow V3 - Optimized Swarm Communications
|
|
3
|
+
# Non-blocking, batched, priority-based inter-agent messaging
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
9
|
+
SWARM_DIR="$PROJECT_ROOT/.claude-flow/swarm"
|
|
10
|
+
QUEUE_DIR="$SWARM_DIR/queue"
|
|
11
|
+
BATCH_DIR="$SWARM_DIR/batch"
|
|
12
|
+
POOL_FILE="$SWARM_DIR/connection-pool.json"
|
|
13
|
+
|
|
14
|
+
mkdir -p "$QUEUE_DIR" "$BATCH_DIR"
|
|
15
|
+
|
|
16
|
+
# Priority levels
|
|
17
|
+
PRIORITY_CRITICAL=0
|
|
18
|
+
PRIORITY_HIGH=1
|
|
19
|
+
PRIORITY_NORMAL=2
|
|
20
|
+
PRIORITY_LOW=3
|
|
21
|
+
|
|
22
|
+
# Batch settings
|
|
23
|
+
BATCH_SIZE=10
|
|
24
|
+
BATCH_TIMEOUT_MS=100
|
|
25
|
+
|
|
26
|
+
# =============================================================================
|
|
27
|
+
# NON-BLOCKING MESSAGE QUEUE
|
|
28
|
+
# =============================================================================
|
|
29
|
+
|
|
30
|
+
# Enqueue message (instant return, async processing)
|
|
31
|
+
enqueue() {
|
|
32
|
+
local to="${1:-*}"
|
|
33
|
+
local content="${2:-}"
|
|
34
|
+
local priority="${3:-$PRIORITY_NORMAL}"
|
|
35
|
+
local msg_type="${4:-context}"
|
|
36
|
+
|
|
37
|
+
local msg_id="msg_$(date +%s%N)"
|
|
38
|
+
local timestamp=$(date +%s)
|
|
39
|
+
|
|
40
|
+
# Write to priority queue (non-blocking)
|
|
41
|
+
cat > "$QUEUE_DIR/${priority}_${msg_id}.json" << EOF
|
|
42
|
+
{"id":"$msg_id","to":"$to","content":"$content","type":"$msg_type","priority":$priority,"timestamp":$timestamp}
|
|
43
|
+
EOF
|
|
44
|
+
|
|
45
|
+
echo "$msg_id"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# Process queue in background
|
|
49
|
+
process_queue() {
|
|
50
|
+
local processed=0
|
|
51
|
+
|
|
52
|
+
# Process by priority (0=critical first)
|
|
53
|
+
for priority in 0 1 2 3; do
|
|
54
|
+
shopt -s nullglob
|
|
55
|
+
for msg_file in "$QUEUE_DIR"/${priority}_*.json; do
|
|
56
|
+
[ -f "$msg_file" ] || continue
|
|
57
|
+
|
|
58
|
+
# Process message
|
|
59
|
+
local msg=$(cat "$msg_file")
|
|
60
|
+
local to=$(echo "$msg" | jq -r '.to' 2>/dev/null)
|
|
61
|
+
|
|
62
|
+
# Route to agent mailbox
|
|
63
|
+
if [ "$to" != "*" ]; then
|
|
64
|
+
mkdir -p "$SWARM_DIR/mailbox/$to"
|
|
65
|
+
mv "$msg_file" "$SWARM_DIR/mailbox/$to/"
|
|
66
|
+
else
|
|
67
|
+
# Broadcast - copy to all agent mailboxes
|
|
68
|
+
for agent_dir in "$SWARM_DIR/mailbox"/*; do
|
|
69
|
+
[ -d "$agent_dir" ] && cp "$msg_file" "$agent_dir/"
|
|
70
|
+
done
|
|
71
|
+
rm "$msg_file"
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
processed=$((processed + 1))
|
|
75
|
+
done
|
|
76
|
+
done
|
|
77
|
+
|
|
78
|
+
echo "$processed"
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
# =============================================================================
|
|
82
|
+
# MESSAGE BATCHING
|
|
83
|
+
# =============================================================================
|
|
84
|
+
|
|
85
|
+
# Add to batch (collects messages, flushes when full or timeout)
|
|
86
|
+
batch_add() {
|
|
87
|
+
local agent_id="${1:-}"
|
|
88
|
+
local content="${2:-}"
|
|
89
|
+
local batch_file="$BATCH_DIR/${agent_id}.batch"
|
|
90
|
+
|
|
91
|
+
# Append to batch
|
|
92
|
+
echo "$content" >> "$batch_file"
|
|
93
|
+
|
|
94
|
+
# Check batch size
|
|
95
|
+
local count=$(wc -l < "$batch_file" 2>/dev/null || echo "0")
|
|
96
|
+
|
|
97
|
+
if [ "$count" -ge "$BATCH_SIZE" ]; then
|
|
98
|
+
batch_flush "$agent_id"
|
|
99
|
+
fi
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
# Flush batch (send all at once)
|
|
103
|
+
batch_flush() {
|
|
104
|
+
local agent_id="${1:-}"
|
|
105
|
+
local batch_file="$BATCH_DIR/${agent_id}.batch"
|
|
106
|
+
|
|
107
|
+
if [ -f "$batch_file" ]; then
|
|
108
|
+
local content=$(cat "$batch_file")
|
|
109
|
+
rm "$batch_file"
|
|
110
|
+
|
|
111
|
+
# Send as single batched message
|
|
112
|
+
enqueue "$agent_id" "$content" "$PRIORITY_NORMAL" "batch"
|
|
113
|
+
fi
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
# Flush all pending batches
|
|
117
|
+
batch_flush_all() {
|
|
118
|
+
shopt -s nullglob
|
|
119
|
+
for batch_file in "$BATCH_DIR"/*.batch; do
|
|
120
|
+
[ -f "$batch_file" ] || continue
|
|
121
|
+
local agent_id=$(basename "$batch_file" .batch)
|
|
122
|
+
batch_flush "$agent_id"
|
|
123
|
+
done
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
# =============================================================================
|
|
127
|
+
# CONNECTION POOLING
|
|
128
|
+
# =============================================================================
|
|
129
|
+
|
|
130
|
+
# Initialize connection pool
|
|
131
|
+
pool_init() {
|
|
132
|
+
cat > "$POOL_FILE" << EOF
|
|
133
|
+
{
|
|
134
|
+
"maxConnections": 10,
|
|
135
|
+
"activeConnections": 0,
|
|
136
|
+
"available": [],
|
|
137
|
+
"inUse": [],
|
|
138
|
+
"lastUpdated": "$(date -Iseconds)"
|
|
139
|
+
}
|
|
140
|
+
EOF
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
# Get connection from pool (or create new)
|
|
144
|
+
pool_acquire() {
|
|
145
|
+
local agent_id="${1:-}"
|
|
146
|
+
|
|
147
|
+
if [ ! -f "$POOL_FILE" ]; then
|
|
148
|
+
pool_init
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
# Check for available connection
|
|
152
|
+
local available=$(jq -r '.available[0] // ""' "$POOL_FILE" 2>/dev/null)
|
|
153
|
+
|
|
154
|
+
if [ -n "$available" ]; then
|
|
155
|
+
# Reuse existing connection
|
|
156
|
+
jq ".available = .available[1:] | .inUse += [\"$available\"]" "$POOL_FILE" > "$POOL_FILE.tmp" && mv "$POOL_FILE.tmp" "$POOL_FILE"
|
|
157
|
+
echo "$available"
|
|
158
|
+
else
|
|
159
|
+
# Create new connection ID
|
|
160
|
+
local conn_id="conn_$(date +%s%N | tail -c 8)"
|
|
161
|
+
jq ".inUse += [\"$conn_id\"] | .activeConnections += 1" "$POOL_FILE" > "$POOL_FILE.tmp" && mv "$POOL_FILE.tmp" "$POOL_FILE"
|
|
162
|
+
echo "$conn_id"
|
|
163
|
+
fi
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
# Release connection back to pool
|
|
167
|
+
pool_release() {
|
|
168
|
+
local conn_id="${1:-}"
|
|
169
|
+
|
|
170
|
+
if [ -f "$POOL_FILE" ]; then
|
|
171
|
+
jq ".inUse = (.inUse | map(select(. != \"$conn_id\"))) | .available += [\"$conn_id\"]" "$POOL_FILE" > "$POOL_FILE.tmp" && mv "$POOL_FILE.tmp" "$POOL_FILE"
|
|
172
|
+
fi
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
# =============================================================================
|
|
176
|
+
# ASYNC PATTERN BROADCAST
|
|
177
|
+
# =============================================================================
|
|
178
|
+
|
|
179
|
+
# Broadcast pattern to swarm (non-blocking)
|
|
180
|
+
broadcast_pattern_async() {
|
|
181
|
+
local strategy="${1:-}"
|
|
182
|
+
local domain="${2:-general}"
|
|
183
|
+
local quality="${3:-0.7}"
|
|
184
|
+
|
|
185
|
+
# Fire and forget
|
|
186
|
+
(
|
|
187
|
+
local broadcast_id="pattern_$(date +%s%N)"
|
|
188
|
+
|
|
189
|
+
# Write pattern broadcast
|
|
190
|
+
mkdir -p "$SWARM_DIR/patterns"
|
|
191
|
+
cat > "$SWARM_DIR/patterns/$broadcast_id.json" << EOF
|
|
192
|
+
{"id":"$broadcast_id","strategy":"$strategy","domain":"$domain","quality":$quality,"timestamp":$(date +%s),"status":"pending"}
|
|
193
|
+
EOF
|
|
194
|
+
|
|
195
|
+
# Notify all agents via queue
|
|
196
|
+
enqueue "*" "{\"type\":\"pattern_broadcast\",\"id\":\"$broadcast_id\"}" "$PRIORITY_HIGH" "event"
|
|
197
|
+
|
|
198
|
+
) &
|
|
199
|
+
|
|
200
|
+
echo "pattern_broadcast_queued"
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
# =============================================================================
|
|
204
|
+
# OPTIMIZED CONSENSUS
|
|
205
|
+
# =============================================================================
|
|
206
|
+
|
|
207
|
+
# Start consensus (non-blocking)
|
|
208
|
+
start_consensus_async() {
|
|
209
|
+
local question="${1:-}"
|
|
210
|
+
local options="${2:-}"
|
|
211
|
+
local timeout="${3:-30}"
|
|
212
|
+
|
|
213
|
+
(
|
|
214
|
+
local consensus_id="consensus_$(date +%s%N)"
|
|
215
|
+
mkdir -p "$SWARM_DIR/consensus"
|
|
216
|
+
|
|
217
|
+
cat > "$SWARM_DIR/consensus/$consensus_id.json" << EOF
|
|
218
|
+
{"id":"$consensus_id","question":"$question","options":"$options","votes":{},"timeout":$timeout,"created":$(date +%s),"status":"open"}
|
|
219
|
+
EOF
|
|
220
|
+
|
|
221
|
+
# Notify agents
|
|
222
|
+
enqueue "*" "{\"type\":\"consensus_request\",\"id\":\"$consensus_id\"}" "$PRIORITY_HIGH" "event"
|
|
223
|
+
|
|
224
|
+
# Auto-resolve after timeout (background)
|
|
225
|
+
(
|
|
226
|
+
sleep "$timeout"
|
|
227
|
+
if [ -f "$SWARM_DIR/consensus/$consensus_id.json" ]; then
|
|
228
|
+
jq '.status = "resolved"' "$SWARM_DIR/consensus/$consensus_id.json" > "$SWARM_DIR/consensus/$consensus_id.json.tmp" && mv "$SWARM_DIR/consensus/$consensus_id.json.tmp" "$SWARM_DIR/consensus/$consensus_id.json"
|
|
229
|
+
fi
|
|
230
|
+
) &
|
|
231
|
+
|
|
232
|
+
echo "$consensus_id"
|
|
233
|
+
) &
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
# Vote on consensus (non-blocking)
|
|
237
|
+
vote_async() {
|
|
238
|
+
local consensus_id="${1:-}"
|
|
239
|
+
local vote="${2:-}"
|
|
240
|
+
local agent_id="${AGENTIC_FLOW_AGENT_ID:-anonymous}"
|
|
241
|
+
|
|
242
|
+
(
|
|
243
|
+
local file="$SWARM_DIR/consensus/$consensus_id.json"
|
|
244
|
+
if [ -f "$file" ]; then
|
|
245
|
+
jq ".votes[\"$agent_id\"] = \"$vote\"" "$file" > "$file.tmp" && mv "$file.tmp" "$file"
|
|
246
|
+
fi
|
|
247
|
+
) &
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
# =============================================================================
|
|
251
|
+
# PERFORMANCE METRICS
|
|
252
|
+
# =============================================================================
|
|
253
|
+
|
|
254
|
+
get_comms_stats() {
|
|
255
|
+
local queued=$(ls "$QUEUE_DIR"/*.json 2>/dev/null | wc -l | tr -d '[:space:]')
|
|
256
|
+
queued=${queued:-0}
|
|
257
|
+
local batched=$(ls "$BATCH_DIR"/*.batch 2>/dev/null | wc -l | tr -d '[:space:]')
|
|
258
|
+
batched=${batched:-0}
|
|
259
|
+
local patterns=$(ls "$SWARM_DIR/patterns"/*.json 2>/dev/null | wc -l | tr -d '[:space:]')
|
|
260
|
+
patterns=${patterns:-0}
|
|
261
|
+
local consensus=$(ls "$SWARM_DIR/consensus"/*.json 2>/dev/null | wc -l | tr -d '[:space:]')
|
|
262
|
+
consensus=${consensus:-0}
|
|
263
|
+
|
|
264
|
+
local pool_active=0
|
|
265
|
+
if [ -f "$POOL_FILE" ]; then
|
|
266
|
+
pool_active=$(jq '.activeConnections // 0' "$POOL_FILE" 2>/dev/null | tr -d '[:space:]')
|
|
267
|
+
pool_active=${pool_active:-0}
|
|
268
|
+
fi
|
|
269
|
+
|
|
270
|
+
echo "{\"queue\":$queued,\"batch\":$batched,\"patterns\":$patterns,\"consensus\":$consensus,\"pool\":$pool_active}"
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
# =============================================================================
|
|
274
|
+
# MAIN DISPATCHER
|
|
275
|
+
# =============================================================================
|
|
276
|
+
|
|
277
|
+
case "${1:-help}" in
|
|
278
|
+
# Queue operations
|
|
279
|
+
"enqueue"|"send")
|
|
280
|
+
enqueue "${2:-*}" "${3:-}" "${4:-2}" "${5:-context}"
|
|
281
|
+
;;
|
|
282
|
+
"process")
|
|
283
|
+
process_queue
|
|
284
|
+
;;
|
|
285
|
+
|
|
286
|
+
# Batch operations
|
|
287
|
+
"batch")
|
|
288
|
+
batch_add "${2:-}" "${3:-}"
|
|
289
|
+
;;
|
|
290
|
+
"flush")
|
|
291
|
+
batch_flush_all
|
|
292
|
+
;;
|
|
293
|
+
|
|
294
|
+
# Pool operations
|
|
295
|
+
"acquire")
|
|
296
|
+
pool_acquire "${2:-}"
|
|
297
|
+
;;
|
|
298
|
+
"release")
|
|
299
|
+
pool_release "${2:-}"
|
|
300
|
+
;;
|
|
301
|
+
|
|
302
|
+
# Async operations
|
|
303
|
+
"broadcast-pattern")
|
|
304
|
+
broadcast_pattern_async "${2:-}" "${3:-general}" "${4:-0.7}"
|
|
305
|
+
;;
|
|
306
|
+
"consensus")
|
|
307
|
+
start_consensus_async "${2:-}" "${3:-}" "${4:-30}"
|
|
308
|
+
;;
|
|
309
|
+
"vote")
|
|
310
|
+
vote_async "${2:-}" "${3:-}"
|
|
311
|
+
;;
|
|
312
|
+
|
|
313
|
+
# Stats
|
|
314
|
+
"stats")
|
|
315
|
+
get_comms_stats
|
|
316
|
+
;;
|
|
317
|
+
|
|
318
|
+
"help"|*)
|
|
319
|
+
cat << 'EOF'
|
|
320
|
+
Claude Flow V3 - Optimized Swarm Communications
|
|
321
|
+
|
|
322
|
+
Non-blocking, batched, priority-based inter-agent messaging.
|
|
323
|
+
|
|
324
|
+
Usage: swarm-comms.sh <command> [args]
|
|
325
|
+
|
|
326
|
+
Queue (Non-blocking):
|
|
327
|
+
enqueue <to> <content> [priority] [type] Add to queue (instant return)
|
|
328
|
+
process Process pending queue
|
|
329
|
+
|
|
330
|
+
Batching:
|
|
331
|
+
batch <agent> <content> Add to batch
|
|
332
|
+
flush Flush all batches
|
|
333
|
+
|
|
334
|
+
Connection Pool:
|
|
335
|
+
acquire [agent] Get connection from pool
|
|
336
|
+
release <conn_id> Return connection to pool
|
|
337
|
+
|
|
338
|
+
Async Operations:
|
|
339
|
+
broadcast-pattern <strategy> [domain] [quality] Async pattern broadcast
|
|
340
|
+
consensus <question> <options> [timeout] Start async consensus
|
|
341
|
+
vote <consensus_id> <vote> Vote (non-blocking)
|
|
342
|
+
|
|
343
|
+
Stats:
|
|
344
|
+
stats Get communication stats
|
|
345
|
+
|
|
346
|
+
Priority Levels:
|
|
347
|
+
0 = Critical (processed first)
|
|
348
|
+
1 = High
|
|
349
|
+
2 = Normal (default)
|
|
350
|
+
3 = Low
|
|
351
|
+
EOF
|
|
352
|
+
;;
|
|
353
|
+
esac
|