agentic-flow 1.0.0
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/MIGRATION_SUMMARY.md +222 -0
- package/.claude/agents/README.md +89 -0
- package/.claude/agents/analysis/code-analyzer.md +209 -0
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +180 -0
- package/.claude/agents/architecture/system-design/arch-system-design.md +156 -0
- package/.claude/agents/base-template-generator.md +42 -0
- package/.claude/agents/consensus/README.md +253 -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 +211 -0
- package/.claude/agents/core/planner.md +116 -0
- package/.claude/agents/core/researcher.md +136 -0
- package/.claude/agents/core/reviewer.md +272 -0
- package/.claude/agents/core/tester.md +266 -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/devops/ci-cd/ops-cicd-github.md +164 -0
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +174 -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 +538 -0
- package/.claude/agents/github/github-modes.md +173 -0
- package/.claude/agents/github/issue-tracker.md +319 -0
- package/.claude/agents/github/multi-repo-swarm.md +553 -0
- package/.claude/agents/github/pr-manager.md +191 -0
- package/.claude/agents/github/project-board-sync.md +509 -0
- package/.claude/agents/github/release-manager.md +367 -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 +635 -0
- package/.claude/agents/goal/agent.md +816 -0
- package/.claude/agents/goal/goal-planner.md +73 -0
- package/.claude/agents/optimization/README.md +250 -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/sparc/architecture.md +472 -0
- package/.claude/agents/sparc/pseudocode.md +318 -0
- package/.claude/agents/sparc/refinement.md +525 -0
- package/.claude/agents/sparc/specification.md +276 -0
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +226 -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/README.md +190 -0
- package/.claude/agents/swarm/adaptive-coordinator.md +396 -0
- package/.claude/agents/swarm/hierarchical-coordinator.md +256 -0
- package/.claude/agents/swarm/mesh-coordinator.md +392 -0
- package/.claude/agents/templates/automation-smart-agent.md +205 -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/migration-plan.md +746 -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 +183 -0
- package/.claude/agents/test-neural.md +14 -0
- package/.claude/agents/testing/unit/tdd-london-swarm.md +244 -0
- package/.claude/agents/testing/validation/production-validator.md +395 -0
- package/.claude/commands/agents/README.md +10 -0
- package/.claude/commands/agents/agent-capabilities.md +21 -0
- package/.claude/commands/agents/agent-coordination.md +28 -0
- package/.claude/commands/agents/agent-spawning.md +28 -0
- package/.claude/commands/agents/agent-types.md +26 -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/coordination/README.md +9 -0
- package/.claude/commands/coordination/agent-spawn.md +25 -0
- package/.claude/commands/coordination/init.md +44 -0
- package/.claude/commands/coordination/orchestrate.md +43 -0
- package/.claude/commands/coordination/spawn.md +45 -0
- package/.claude/commands/coordination/swarm-init.md +85 -0
- package/.claude/commands/coordination/task-orchestrate.md +25 -0
- package/.claude/commands/flow-nexus/app-store.md +124 -0
- package/.claude/commands/flow-nexus/challenges.md +120 -0
- package/.claude/commands/flow-nexus/login-registration.md +65 -0
- package/.claude/commands/flow-nexus/neural-network.md +134 -0
- package/.claude/commands/flow-nexus/payments.md +116 -0
- package/.claude/commands/flow-nexus/sandbox.md +83 -0
- package/.claude/commands/flow-nexus/swarm.md +87 -0
- package/.claude/commands/flow-nexus/user-tools.md +152 -0
- package/.claude/commands/flow-nexus/workflow.md +115 -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/hive-mind/README.md +17 -0
- package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-init.md +18 -0
- package/.claude/commands/hive-mind/hive-mind-memory.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-resume.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -0
- package/.claude/commands/hive-mind/hive-mind-status.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-stop.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -0
- package/.claude/commands/hive-mind/hive-mind.md +27 -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/memory/README.md +9 -0
- package/.claude/commands/memory/memory-persist.md +25 -0
- package/.claude/commands/memory/memory-search.md +25 -0
- package/.claude/commands/memory/memory-usage.md +25 -0
- package/.claude/commands/memory/neural.md +47 -0
- package/.claude/commands/memory/usage.md +46 -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/pair/README.md +261 -0
- package/.claude/commands/pair/commands.md +546 -0
- package/.claude/commands/pair/config.md +510 -0
- package/.claude/commands/pair/examples.md +512 -0
- package/.claude/commands/pair/modes.md +348 -0
- package/.claude/commands/pair/session.md +407 -0
- package/.claude/commands/pair/start.md +209 -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/commands/sparc.md +166 -0
- package/.claude/commands/stream-chain/pipeline.md +121 -0
- package/.claude/commands/stream-chain/run.md +70 -0
- package/.claude/commands/swarm/README.md +15 -0
- package/.claude/commands/swarm/analysis.md +95 -0
- package/.claude/commands/swarm/development.md +96 -0
- package/.claude/commands/swarm/examples.md +168 -0
- package/.claude/commands/swarm/maintenance.md +102 -0
- package/.claude/commands/swarm/optimization.md +117 -0
- package/.claude/commands/swarm/research.md +136 -0
- package/.claude/commands/swarm/swarm-analysis.md +8 -0
- package/.claude/commands/swarm/swarm-background.md +8 -0
- package/.claude/commands/swarm/swarm-init.md +19 -0
- package/.claude/commands/swarm/swarm-modes.md +8 -0
- package/.claude/commands/swarm/swarm-monitor.md +8 -0
- package/.claude/commands/swarm/swarm-spawn.md +19 -0
- package/.claude/commands/swarm/swarm-status.md +8 -0
- package/.claude/commands/swarm/swarm-strategies.md +8 -0
- package/.claude/commands/swarm/swarm.md +27 -0
- package/.claude/commands/swarm/testing.md +131 -0
- package/.claude/commands/training/README.md +9 -0
- package/.claude/commands/training/model-update.md +25 -0
- package/.claude/commands/training/neural-patterns.md +74 -0
- package/.claude/commands/training/neural-train.md +25 -0
- package/.claude/commands/training/pattern-learn.md +25 -0
- package/.claude/commands/training/specialization.md +63 -0
- package/.claude/commands/truth/start.md +143 -0
- package/.claude/commands/verify/check.md +50 -0
- package/.claude/commands/verify/start.md +128 -0
- package/.claude/commands/workflows/README.md +9 -0
- package/.claude/commands/workflows/development.md +78 -0
- package/.claude/commands/workflows/research.md +63 -0
- package/.claude/commands/workflows/workflow-create.md +25 -0
- package/.claude/commands/workflows/workflow-execute.md +25 -0
- package/.claude/commands/workflows/workflow-export.md +25 -0
- package/.claude/helpers/checkpoint-manager.sh +251 -0
- package/.claude/helpers/github-safe.js +106 -0
- package/.claude/helpers/github-setup.sh +28 -0
- package/.claude/helpers/quick-start.sh +19 -0
- package/.claude/helpers/setup-mcp.sh +18 -0
- package/.claude/helpers/standard-checkpoint-hooks.sh +179 -0
- package/.claude/mcp.json +13 -0
- package/.claude/settings-backup.json +130 -0
- package/.claude/settings-optimized.json +116 -0
- package/.claude/settings-simple.json +78 -0
- package/.claude/settings.json +114 -0
- package/.claude/settings.local.json +14 -0
- package/README.md +1280 -0
- package/dist/agents/claudeAgent.js +73 -0
- package/dist/agents/claudeFlowAgent.js +115 -0
- package/dist/agents/codeReviewAgent.js +34 -0
- package/dist/agents/dataAgent.js +34 -0
- package/dist/agents/directApiAgent.js +260 -0
- package/dist/agents/webResearchAgent.js +35 -0
- package/dist/cli/mcp.js +135 -0
- package/dist/cli-proxy.js +246 -0
- package/dist/cli.js +158 -0
- package/dist/config/claudeFlow.js +67 -0
- package/dist/config/tools.js +33 -0
- package/dist/coordination/parallelSwarm.js +226 -0
- package/dist/examples/multi-agent-orchestration.js +45 -0
- package/dist/examples/parallel-swarm-deployment.js +171 -0
- package/dist/examples/use-goal-planner.js +52 -0
- package/dist/health.js +46 -0
- package/dist/index-with-proxy.js +101 -0
- package/dist/index.js +167 -0
- package/dist/mcp/claudeFlowSdkServer.js +202 -0
- package/dist/mcp/fastmcp/servers/claude-flow-sdk.js +198 -0
- package/dist/mcp/fastmcp/servers/http-streaming-updated.js +421 -0
- package/dist/mcp/fastmcp/servers/poc-stdio.js +82 -0
- package/dist/mcp/fastmcp/servers/stdio-full.js +421 -0
- package/dist/mcp/fastmcp/tools/agent/add-agent.js +107 -0
- package/dist/mcp/fastmcp/tools/agent/add-command.js +117 -0
- package/dist/mcp/fastmcp/tools/agent/execute.js +56 -0
- package/dist/mcp/fastmcp/tools/agent/list.js +82 -0
- package/dist/mcp/fastmcp/tools/agent/parallel.js +63 -0
- package/dist/mcp/fastmcp/tools/memory/retrieve.js +38 -0
- package/dist/mcp/fastmcp/tools/memory/search.js +41 -0
- package/dist/mcp/fastmcp/tools/memory/store.js +56 -0
- package/dist/mcp/fastmcp/tools/swarm/init.js +41 -0
- package/dist/mcp/fastmcp/tools/swarm/orchestrate.js +47 -0
- package/dist/mcp/fastmcp/tools/swarm/spawn.js +40 -0
- package/dist/mcp/fastmcp/types/index.js +2 -0
- package/dist/proxy/anthropic-to-openrouter.js +246 -0
- package/dist/router/providers/anthropic.js +89 -0
- package/dist/router/providers/onnx-local-optimized.js +167 -0
- package/dist/router/providers/onnx-local.js +294 -0
- package/dist/router/providers/onnx-phi4.js +190 -0
- package/dist/router/providers/onnx.js +242 -0
- package/dist/router/providers/openrouter.js +242 -0
- package/dist/router/router.js +283 -0
- package/dist/router/test-integration.js +140 -0
- package/dist/router/test-onnx-benchmark.js +145 -0
- package/dist/router/test-onnx-integration.js +128 -0
- package/dist/router/test-onnx-local.js +37 -0
- package/dist/router/test-onnx.js +148 -0
- package/dist/router/test-openrouter.js +121 -0
- package/dist/router/test-phi4.js +137 -0
- package/dist/router/types.js +2 -0
- package/dist/utils/agentLoader.js +106 -0
- package/dist/utils/cli.js +128 -0
- package/dist/utils/logger.js +41 -0
- package/dist/utils/mcpCommands.js +214 -0
- package/dist/utils/model-downloader.js +182 -0
- package/dist/utils/retry.js +54 -0
- package/docs/.claude-flow/metrics/agent-metrics.json +1 -0
- package/docs/.claude-flow/metrics/performance.json +9 -0
- package/docs/.claude-flow/metrics/task-metrics.json +10 -0
- package/docs/CHANGELOG.md +155 -0
- package/docs/CLAUDE.md +352 -0
- package/docs/COMPLETE_VALIDATION_SUMMARY.md +405 -0
- package/docs/INDEX.md +183 -0
- package/docs/LICENSE +21 -0
- package/docs/ONNX_CLI_USAGE.md +344 -0
- package/docs/ONNX_ENV_VARS.md +564 -0
- package/docs/ONNX_INTEGRATION.md +422 -0
- package/docs/ONNX_OPTIMIZATION_GUIDE.md +665 -0
- package/docs/ONNX_OPTIMIZATION_SUMMARY.md +374 -0
- package/docs/ONNX_VS_CLAUDE_QUALITY.md +442 -0
- package/docs/OPENROUTER_DEPLOYMENT.md +495 -0
- package/docs/architecture/EXECUTIVE_SUMMARY.md +310 -0
- package/docs/architecture/IMPROVEMENT_PLAN.md +11 -0
- package/docs/architecture/INTEGRATION-STATUS.md +290 -0
- package/docs/architecture/MULTI_MODEL_ROUTER_PLAN.md +620 -0
- package/docs/architecture/QUICK_WINS.md +333 -0
- package/docs/architecture/README.md +15 -0
- package/docs/architecture/RESEARCH_SUMMARY.md +652 -0
- package/docs/archived/FASTMCP_COMPLETE.md +428 -0
- package/docs/archived/FASTMCP_INTEGRATION_STATUS.md +288 -0
- package/docs/archived/FLOW-NEXUS-COMPLETE.md +269 -0
- package/docs/archived/INTEGRATION_CONFIRMED.md +351 -0
- package/docs/archived/ONNX_FINAL_REPORT.md +312 -0
- package/docs/archived/ONNX_IMPLEMENTATION_COMPLETE.md +215 -0
- package/docs/archived/ONNX_IMPLEMENTATION_SUMMARY.md +197 -0
- package/docs/archived/ONNX_SUCCESS_REPORT.md +271 -0
- package/docs/archived/OPENROUTER_PROXY_COMPLETE.md +494 -0
- package/docs/archived/PACKAGE-COMPLETE.md +138 -0
- package/docs/archived/README.md +27 -0
- package/docs/archived/RESEARCH_COMPLETE.txt +335 -0
- package/docs/archived/SDK-SETUP-COMPLETE.md +252 -0
- package/docs/guides/ALTERNATIVE_LLM_MODELS.md +524 -0
- package/docs/guides/DOCKER_AGENT_USAGE.md +352 -0
- package/docs/guides/IMPLEMENTATION_EXAMPLES.md +960 -0
- package/docs/guides/NPM-PUBLISH.md +218 -0
- package/docs/guides/README.md +17 -0
- package/docs/guides/agent-sdk.md +234 -0
- package/docs/integrations/CLAUDE_AGENTS_INTEGRATION.md +356 -0
- package/docs/integrations/CLAUDE_FLOW_INTEGRATION.md +535 -0
- package/docs/integrations/FASTMCP_CLI_INTEGRATION.md +503 -0
- package/docs/integrations/FLOW-NEXUS-INTEGRATION.md +319 -0
- package/docs/integrations/README.md +18 -0
- package/docs/integrations/fastmcp-implementation-plan.md +2516 -0
- package/docs/integrations/fastmcp-poc-integration.md +198 -0
- package/docs/router/ONNX_PHI4_RESEARCH.md +220 -0
- package/docs/router/ONNX_RUNTIME_INTEGRATION_PLAN.md +866 -0
- package/docs/router/PHI4_HYPEROPTIMIZATION_PLAN.md +2488 -0
- package/docs/router/README.md +552 -0
- package/docs/router/ROUTER_CONFIG_REFERENCE.md +577 -0
- package/docs/router/ROUTER_USER_GUIDE.md +865 -0
- package/docs/validation/DOCKER_MCP_VALIDATION.md +358 -0
- package/docs/validation/DOCKER_OPENROUTER_VALIDATION.md +443 -0
- package/docs/validation/FINAL_SYSTEM_VALIDATION.md +458 -0
- package/docs/validation/FINAL_VALIDATION_SUMMARY.md +409 -0
- package/docs/validation/MCP_CLI_TOOLS_VALIDATION.md +266 -0
- package/docs/validation/MODEL_VALIDATION_REPORT.md +386 -0
- package/docs/validation/OPENROUTER_VALIDATION_COMPLETE.md +382 -0
- package/docs/validation/README.md +20 -0
- package/docs/validation/ROUTER_VALIDATION.md +311 -0
- package/package.json +140 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
// Parallel swarm deployment and coordination
|
|
2
|
+
import { logger } from '../utils/logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Deploy swarm with all agents spawning concurrently
|
|
5
|
+
* Uses Promise.all for true parallel execution
|
|
6
|
+
*/
|
|
7
|
+
export async function deploySwarmConcurrently(config) {
|
|
8
|
+
const startTime = Date.now();
|
|
9
|
+
logger.info('Deploying swarm concurrently', {
|
|
10
|
+
topology: config.topology,
|
|
11
|
+
agentCount: config.agents.length,
|
|
12
|
+
strategy: config.strategy
|
|
13
|
+
});
|
|
14
|
+
// Step 1: Initialize swarm (single operation)
|
|
15
|
+
const swarmInit = {
|
|
16
|
+
topology: config.topology,
|
|
17
|
+
maxAgents: config.maxAgents,
|
|
18
|
+
strategy: config.strategy
|
|
19
|
+
};
|
|
20
|
+
logger.debug('Initializing swarm', swarmInit);
|
|
21
|
+
// Step 2: Spawn ALL agents concurrently with Promise.all
|
|
22
|
+
const agentPromises = config.agents.map(async (agent, index) => {
|
|
23
|
+
const agentId = `${agent.type}-${index}-${Date.now()}`;
|
|
24
|
+
logger.debug('Spawning agent', {
|
|
25
|
+
agentId,
|
|
26
|
+
type: agent.type,
|
|
27
|
+
capabilities: agent.capabilities
|
|
28
|
+
});
|
|
29
|
+
// Simulate agent spawn (in real implementation, this calls MCP tools)
|
|
30
|
+
return {
|
|
31
|
+
id: agentId,
|
|
32
|
+
type: agent.type,
|
|
33
|
+
name: agent.name || agentId,
|
|
34
|
+
capabilities: agent.capabilities || [],
|
|
35
|
+
status: 'ready'
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
// CRITICAL: Promise.all ensures all agents spawn in parallel
|
|
39
|
+
const spawnedAgents = await Promise.all(agentPromises);
|
|
40
|
+
const deploymentTime = Date.now() - startTime;
|
|
41
|
+
logger.info('Swarm deployed successfully', {
|
|
42
|
+
swarmId: 'swarm-' + Date.now(),
|
|
43
|
+
agentCount: spawnedAgents.length,
|
|
44
|
+
deploymentTime,
|
|
45
|
+
avgTimePerAgent: deploymentTime / spawnedAgents.length
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
swarmId: 'swarm-' + Date.now(),
|
|
49
|
+
agents: spawnedAgents.map(a => ({
|
|
50
|
+
id: a.id,
|
|
51
|
+
type: a.type,
|
|
52
|
+
status: a.status
|
|
53
|
+
})),
|
|
54
|
+
deploymentTime
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Execute tasks concurrently across swarm
|
|
59
|
+
* Uses Promise.all for parallel task execution
|
|
60
|
+
*/
|
|
61
|
+
export async function executeTasksConcurrently(config) {
|
|
62
|
+
const startTime = Date.now();
|
|
63
|
+
const maxConcurrency = config.maxConcurrency || config.tasks.length;
|
|
64
|
+
logger.info('Executing tasks concurrently', {
|
|
65
|
+
taskCount: config.tasks.length,
|
|
66
|
+
strategy: config.strategy,
|
|
67
|
+
maxConcurrency
|
|
68
|
+
});
|
|
69
|
+
if (config.strategy === 'sequential') {
|
|
70
|
+
// Sequential execution (one at a time)
|
|
71
|
+
const results = [];
|
|
72
|
+
for (const task of config.tasks) {
|
|
73
|
+
const taskStart = Date.now();
|
|
74
|
+
logger.debug('Executing task sequentially', { task: task.description });
|
|
75
|
+
// Execute task
|
|
76
|
+
await new Promise(resolve => setTimeout(resolve, 100)); // Simulate work
|
|
77
|
+
results.push({
|
|
78
|
+
task: task.description,
|
|
79
|
+
status: 'completed',
|
|
80
|
+
duration: Date.now() - taskStart
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
results,
|
|
85
|
+
totalTime: Date.now() - startTime,
|
|
86
|
+
concurrencyLevel: 1
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// Parallel or adaptive execution
|
|
90
|
+
const batches = [];
|
|
91
|
+
for (let i = 0; i < config.tasks.length; i += maxConcurrency) {
|
|
92
|
+
batches.push(config.tasks.slice(i, i + maxConcurrency));
|
|
93
|
+
}
|
|
94
|
+
const allResults = [];
|
|
95
|
+
for (const batch of batches) {
|
|
96
|
+
// CRITICAL: Promise.all for concurrent execution within batch
|
|
97
|
+
const batchPromises = batch.map(async (task) => {
|
|
98
|
+
const taskStart = Date.now();
|
|
99
|
+
logger.debug('Executing task in parallel', {
|
|
100
|
+
task: task.description,
|
|
101
|
+
agentType: task.agentType,
|
|
102
|
+
priority: task.priority
|
|
103
|
+
});
|
|
104
|
+
// Execute task (in real implementation, this calls agent)
|
|
105
|
+
await new Promise(resolve => setTimeout(resolve, 100)); // Simulate work
|
|
106
|
+
return {
|
|
107
|
+
task: task.description,
|
|
108
|
+
status: 'completed',
|
|
109
|
+
duration: Date.now() - taskStart
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
const batchResults = await Promise.all(batchPromises);
|
|
113
|
+
allResults.push(...batchResults);
|
|
114
|
+
}
|
|
115
|
+
const totalTime = Date.now() - startTime;
|
|
116
|
+
logger.info('Tasks completed concurrently', {
|
|
117
|
+
taskCount: allResults.length,
|
|
118
|
+
totalTime,
|
|
119
|
+
avgTimePerTask: totalTime / allResults.length,
|
|
120
|
+
concurrencyLevel: maxConcurrency
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
results: allResults,
|
|
124
|
+
totalTime,
|
|
125
|
+
concurrencyLevel: maxConcurrency
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Deploy and execute in single operation
|
|
130
|
+
* Spawns agents AND starts tasks in parallel
|
|
131
|
+
*/
|
|
132
|
+
export async function deployAndExecuteConcurrently(swarmConfig, taskConfig) {
|
|
133
|
+
const startTime = Date.now();
|
|
134
|
+
logger.info('Deploying swarm and executing tasks concurrently');
|
|
135
|
+
// CRITICAL: Use Promise.all to deploy swarm AND start tasks in parallel
|
|
136
|
+
const [swarm, execution] = await Promise.all([
|
|
137
|
+
deploySwarmConcurrently(swarmConfig),
|
|
138
|
+
executeTasksConcurrently(taskConfig)
|
|
139
|
+
]);
|
|
140
|
+
const totalTime = Date.now() - startTime;
|
|
141
|
+
logger.info('Concurrent deployment and execution complete', {
|
|
142
|
+
totalTime,
|
|
143
|
+
swarmDeploymentTime: swarm.deploymentTime,
|
|
144
|
+
taskExecutionTime: execution.totalTime,
|
|
145
|
+
parallelSpeedup: (swarm.deploymentTime + execution.totalTime) / totalTime
|
|
146
|
+
});
|
|
147
|
+
return { swarm, execution, totalTime };
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Batch spawn multiple agent types concurrently
|
|
151
|
+
*/
|
|
152
|
+
export async function batchSpawnAgents(agentConfigs) {
|
|
153
|
+
const startTime = Date.now();
|
|
154
|
+
logger.info('Batch spawning agents', {
|
|
155
|
+
types: agentConfigs.map(c => `${c.type}(${c.count})`).join(', ')
|
|
156
|
+
});
|
|
157
|
+
// Flatten to individual agents
|
|
158
|
+
const allAgents = agentConfigs.flatMap(config => Array.from({ length: config.count }, (_, i) => ({
|
|
159
|
+
type: config.type,
|
|
160
|
+
capabilities: config.capabilities,
|
|
161
|
+
index: i
|
|
162
|
+
})));
|
|
163
|
+
// CRITICAL: Spawn ALL agents concurrently with Promise.all
|
|
164
|
+
const spawnPromises = allAgents.map(async (agent) => {
|
|
165
|
+
const agentId = `${agent.type}-${agent.index}-${Date.now()}`;
|
|
166
|
+
logger.debug('Spawning agent in batch', {
|
|
167
|
+
agentId,
|
|
168
|
+
type: agent.type
|
|
169
|
+
});
|
|
170
|
+
// Simulate spawn
|
|
171
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
172
|
+
return { id: agentId, type: agent.type };
|
|
173
|
+
});
|
|
174
|
+
const spawnedAgents = await Promise.all(spawnPromises);
|
|
175
|
+
const duration = Date.now() - startTime;
|
|
176
|
+
logger.info('Batch spawn complete', {
|
|
177
|
+
totalAgents: spawnedAgents.length,
|
|
178
|
+
duration,
|
|
179
|
+
avgSpawnTime: duration / spawnedAgents.length
|
|
180
|
+
});
|
|
181
|
+
return spawnedAgents;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Scale swarm up/down with concurrent operations
|
|
185
|
+
*/
|
|
186
|
+
export async function scaleSwarmConcurrently(currentAgentCount, targetAgentCount, agentType = 'worker') {
|
|
187
|
+
const startTime = Date.now();
|
|
188
|
+
const diff = targetAgentCount - currentAgentCount;
|
|
189
|
+
if (diff === 0) {
|
|
190
|
+
return { action: 'no-change', agentsChanged: 0, duration: 0 };
|
|
191
|
+
}
|
|
192
|
+
const action = diff > 0 ? 'scale-up' : 'scale-down';
|
|
193
|
+
const agentsChanged = Math.abs(diff);
|
|
194
|
+
logger.info(`Scaling swarm ${action}`, {
|
|
195
|
+
from: currentAgentCount,
|
|
196
|
+
to: targetAgentCount,
|
|
197
|
+
change: agentsChanged
|
|
198
|
+
});
|
|
199
|
+
if (diff > 0) {
|
|
200
|
+
// Scale up: spawn new agents concurrently
|
|
201
|
+
const spawnPromises = Array.from({ length: diff }, async (_, i) => {
|
|
202
|
+
const agentId = `${agentType}-scale-${i}-${Date.now()}`;
|
|
203
|
+
logger.debug('Spawning agent for scale-up', { agentId });
|
|
204
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
205
|
+
return agentId;
|
|
206
|
+
});
|
|
207
|
+
await Promise.all(spawnPromises);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// Scale down: terminate agents concurrently
|
|
211
|
+
const terminatePromises = Array.from({ length: -diff }, async (_, i) => {
|
|
212
|
+
const agentId = `${agentType}-${i}`;
|
|
213
|
+
logger.debug('Terminating agent for scale-down', { agentId });
|
|
214
|
+
await new Promise(resolve => setTimeout(resolve, 30));
|
|
215
|
+
return agentId;
|
|
216
|
+
});
|
|
217
|
+
await Promise.all(terminatePromises);
|
|
218
|
+
}
|
|
219
|
+
const duration = Date.now() - startTime;
|
|
220
|
+
logger.info(`Swarm scaled ${action} successfully`, {
|
|
221
|
+
agentsChanged,
|
|
222
|
+
duration,
|
|
223
|
+
avgTimePerAgent: duration / agentsChanged
|
|
224
|
+
});
|
|
225
|
+
return { action, agentsChanged, duration };
|
|
226
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
// Example: Multi-agent orchestration using .claude/agents
|
|
3
|
+
import "dotenv/config";
|
|
4
|
+
import { loadAgents } from "../utils/agentLoader.js";
|
|
5
|
+
import { claudeAgent } from "../agents/claudeAgent.js";
|
|
6
|
+
import { logger } from "../utils/logger.js";
|
|
7
|
+
async function main() {
|
|
8
|
+
logger.setContext({ service: 'multi-agent-orchestration', version: '1.0.0' });
|
|
9
|
+
logger.info('Starting multi-agent orchestration example');
|
|
10
|
+
// Load all available agents
|
|
11
|
+
const agents = loadAgents();
|
|
12
|
+
console.log(`\nš¦ Loaded ${agents.size} agents from .claude/agents/\n`);
|
|
13
|
+
// List some interesting agents
|
|
14
|
+
const agentNames = Array.from(agents.keys());
|
|
15
|
+
console.log('Available agents:');
|
|
16
|
+
agentNames.slice(0, 10).forEach(name => {
|
|
17
|
+
const agent = agents.get(name);
|
|
18
|
+
console.log(` ⢠${name}: ${agent.description.substring(0, 80)}...`);
|
|
19
|
+
});
|
|
20
|
+
console.log(` ... and ${agentNames.length - 10} more\n`);
|
|
21
|
+
// Example: Use multiple agents in sequence
|
|
22
|
+
console.log('š Running multi-agent workflow...\n');
|
|
23
|
+
// 1. Use goal-planner to create a plan
|
|
24
|
+
const goalPlanner = agents.get('goal-planner');
|
|
25
|
+
if (goalPlanner) {
|
|
26
|
+
console.log('Step 1: Using goal-planner to create improvement plan');
|
|
27
|
+
const planResult = await claudeAgent(goalPlanner, 'Create a 3-step plan to improve our Claude Agent SDK implementation with error handling, logging, and monitoring.');
|
|
28
|
+
console.log('\nā
Plan created\n');
|
|
29
|
+
console.log(planResult.output.substring(0, 300) + '...\n');
|
|
30
|
+
}
|
|
31
|
+
// 2. Use code-analyzer for implementation review
|
|
32
|
+
const codeAnalyzer = agents.get('code-analyzer');
|
|
33
|
+
if (codeAnalyzer) {
|
|
34
|
+
console.log('Step 2: Using code-analyzer to review current implementation');
|
|
35
|
+
const analysisResult = await claudeAgent(codeAnalyzer, 'Analyze the code quality of a Claude Agent SDK implementation focusing on error handling patterns and logging.');
|
|
36
|
+
console.log('\nā
Analysis complete\n');
|
|
37
|
+
console.log(analysisResult.output.substring(0, 300) + '...\n');
|
|
38
|
+
}
|
|
39
|
+
logger.info('Multi-agent orchestration completed successfully');
|
|
40
|
+
}
|
|
41
|
+
main().catch(err => {
|
|
42
|
+
logger.error('Multi-agent orchestration failed', { error: err });
|
|
43
|
+
console.error('ā Error:', err.message);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
});
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
// Example: Parallel swarm deployment with concurrent agent execution
|
|
3
|
+
import { deploySwarmConcurrently, executeTasksConcurrently, deployAndExecuteConcurrently, batchSpawnAgents, scaleSwarmConcurrently } from '../coordination/parallelSwarm.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
async function example1_parallelAgentSpawn() {
|
|
6
|
+
console.log('\nš Example 1: Parallel Agent Spawning');
|
|
7
|
+
console.log('='.repeat(60));
|
|
8
|
+
// Deploy 5 agents concurrently
|
|
9
|
+
const result = await deploySwarmConcurrently({
|
|
10
|
+
topology: 'mesh',
|
|
11
|
+
maxAgents: 10,
|
|
12
|
+
strategy: 'balanced',
|
|
13
|
+
agents: [
|
|
14
|
+
{ type: 'researcher', capabilities: ['search', 'analyze'] },
|
|
15
|
+
{ type: 'coder', capabilities: ['implement', 'refactor'] },
|
|
16
|
+
{ type: 'reviewer', capabilities: ['review', 'validate'] },
|
|
17
|
+
{ type: 'tester', capabilities: ['test', 'coverage'] },
|
|
18
|
+
{ type: 'documenter', capabilities: ['document', 'explain'] }
|
|
19
|
+
]
|
|
20
|
+
});
|
|
21
|
+
console.log(`\nā
Swarm deployed in ${result.deploymentTime}ms`);
|
|
22
|
+
console.log(`š Agents spawned: ${result.agents.length}`);
|
|
23
|
+
console.log(`ā” Avg spawn time: ${result.deploymentTime / result.agents.length}ms per agent`);
|
|
24
|
+
console.log('\nAgents:', result.agents.map(a => `${a.type}(${a.status})`).join(', '));
|
|
25
|
+
}
|
|
26
|
+
async function example2_parallelTaskExecution() {
|
|
27
|
+
console.log('\n\nā” Example 2: Parallel Task Execution');
|
|
28
|
+
console.log('='.repeat(60));
|
|
29
|
+
// Execute 6 tasks concurrently
|
|
30
|
+
const result = await executeTasksConcurrently({
|
|
31
|
+
tasks: [
|
|
32
|
+
{ description: 'Analyze requirements', agentType: 'researcher', priority: 'high' },
|
|
33
|
+
{ description: 'Design architecture', agentType: 'architect', priority: 'high' },
|
|
34
|
+
{ description: 'Implement API endpoints', agentType: 'coder', priority: 'high' },
|
|
35
|
+
{ description: 'Write unit tests', agentType: 'tester', priority: 'medium' },
|
|
36
|
+
{ description: 'Create documentation', agentType: 'documenter', priority: 'medium' },
|
|
37
|
+
{ description: 'Review code quality', agentType: 'reviewer', priority: 'medium' }
|
|
38
|
+
],
|
|
39
|
+
strategy: 'parallel',
|
|
40
|
+
maxConcurrency: 6 // All 6 tasks run concurrently
|
|
41
|
+
});
|
|
42
|
+
console.log(`\nā
All tasks completed in ${result.totalTime}ms`);
|
|
43
|
+
console.log(`š Tasks executed: ${result.results.length}`);
|
|
44
|
+
console.log(`ā” Concurrency level: ${result.concurrencyLevel}`);
|
|
45
|
+
console.log(`ā” Avg task time: ${result.totalTime / result.results.length}ms per task`);
|
|
46
|
+
// Calculate speedup vs sequential
|
|
47
|
+
const sequentialTime = result.results.reduce((sum, r) => sum + r.duration, 0);
|
|
48
|
+
const speedup = (sequentialTime / result.totalTime).toFixed(2);
|
|
49
|
+
console.log(`š Parallel speedup: ${speedup}x faster than sequential`);
|
|
50
|
+
}
|
|
51
|
+
async function example3_deployAndExecute() {
|
|
52
|
+
console.log('\n\nš„ Example 3: Deploy + Execute Simultaneously');
|
|
53
|
+
console.log('='.repeat(60));
|
|
54
|
+
// Deploy swarm AND start tasks in parallel
|
|
55
|
+
const result = await deployAndExecuteConcurrently({
|
|
56
|
+
topology: 'hierarchical',
|
|
57
|
+
maxAgents: 8,
|
|
58
|
+
strategy: 'specialized',
|
|
59
|
+
agents: [
|
|
60
|
+
{ type: 'coordinator', capabilities: ['orchestrate'] },
|
|
61
|
+
{ type: 'researcher', capabilities: ['search'] },
|
|
62
|
+
{ type: 'coder', capabilities: ['implement'] },
|
|
63
|
+
{ type: 'tester', capabilities: ['test'] }
|
|
64
|
+
]
|
|
65
|
+
}, {
|
|
66
|
+
tasks: [
|
|
67
|
+
{ description: 'Research best practices', priority: 'high' },
|
|
68
|
+
{ description: 'Implement core features', priority: 'high' },
|
|
69
|
+
{ description: 'Write comprehensive tests', priority: 'medium' }
|
|
70
|
+
],
|
|
71
|
+
strategy: 'parallel'
|
|
72
|
+
});
|
|
73
|
+
console.log(`\nā
Deployment + Execution in ${result.totalTime}ms`);
|
|
74
|
+
console.log(`š¦ Swarm: ${result.swarm.agents.length} agents in ${result.swarm.deploymentTime}ms`);
|
|
75
|
+
console.log(`ā” Tasks: ${result.execution.results.length} tasks in ${result.execution.totalTime}ms`);
|
|
76
|
+
const sequentialTime = result.swarm.deploymentTime + result.execution.totalTime;
|
|
77
|
+
const speedup = (sequentialTime / result.totalTime).toFixed(2);
|
|
78
|
+
console.log(`š Parallel speedup: ${speedup}x faster (both operations ran concurrently)`);
|
|
79
|
+
}
|
|
80
|
+
async function example4_batchSpawn() {
|
|
81
|
+
console.log('\n\nš¦ Example 4: Batch Spawn Multiple Agent Types');
|
|
82
|
+
console.log('='.repeat(60));
|
|
83
|
+
// Spawn 3 of each type concurrently (9 total agents)
|
|
84
|
+
const agents = await batchSpawnAgents([
|
|
85
|
+
{ type: 'researcher', count: 3, capabilities: ['search', 'analyze'] },
|
|
86
|
+
{ type: 'coder', count: 3, capabilities: ['implement', 'refactor'] },
|
|
87
|
+
{ type: 'tester', count: 3, capabilities: ['test', 'validate'] }
|
|
88
|
+
]);
|
|
89
|
+
console.log(`\nā
Batch spawned ${agents.length} agents`);
|
|
90
|
+
// Group by type
|
|
91
|
+
const byType = agents.reduce((acc, agent) => {
|
|
92
|
+
acc[agent.type] = (acc[agent.type] || 0) + 1;
|
|
93
|
+
return acc;
|
|
94
|
+
}, {});
|
|
95
|
+
console.log('š Agent distribution:');
|
|
96
|
+
Object.entries(byType).forEach(([type, count]) => {
|
|
97
|
+
console.log(` ${type}: ${count} agents`);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async function example5_dynamicScaling() {
|
|
101
|
+
console.log('\n\nš Example 5: Dynamic Swarm Scaling');
|
|
102
|
+
console.log('='.repeat(60));
|
|
103
|
+
console.log('\nš¼ Scaling up from 3 to 8 agents...');
|
|
104
|
+
const scaleUp = await scaleSwarmConcurrently(3, 8, 'worker');
|
|
105
|
+
console.log(`ā
Scaled ${scaleUp.action}: added ${scaleUp.agentsChanged} agents in ${scaleUp.duration}ms`);
|
|
106
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
107
|
+
console.log('\nš½ Scaling down from 8 to 5 agents...');
|
|
108
|
+
const scaleDown = await scaleSwarmConcurrently(8, 5, 'worker');
|
|
109
|
+
console.log(`ā
Scaled ${scaleDown.action}: removed ${scaleDown.agentsChanged} agents in ${scaleDown.duration}ms`);
|
|
110
|
+
}
|
|
111
|
+
async function example6_largeScaleDeployment() {
|
|
112
|
+
console.log('\n\nš Example 6: Large-Scale Concurrent Deployment');
|
|
113
|
+
console.log('='.repeat(60));
|
|
114
|
+
const startTime = Date.now();
|
|
115
|
+
// Deploy 20 agents concurrently
|
|
116
|
+
const agents = Array.from({ length: 20 }, (_, i) => ({
|
|
117
|
+
type: `worker-${i % 5}`, // 5 types, 4 of each
|
|
118
|
+
capabilities: ['process', 'analyze', 'report']
|
|
119
|
+
}));
|
|
120
|
+
const result = await deploySwarmConcurrently({
|
|
121
|
+
topology: 'mesh',
|
|
122
|
+
maxAgents: 50,
|
|
123
|
+
strategy: 'adaptive',
|
|
124
|
+
agents
|
|
125
|
+
});
|
|
126
|
+
const totalTime = Date.now() - startTime;
|
|
127
|
+
console.log(`\nā
Large-scale deployment complete in ${totalTime}ms`);
|
|
128
|
+
console.log(`š Agents deployed: ${result.agents.length}`);
|
|
129
|
+
console.log(`ā” Avg spawn time: ${totalTime / result.agents.length}ms per agent`);
|
|
130
|
+
// Calculate theoretical sequential time (assume 100ms per agent)
|
|
131
|
+
const theoreticalSequentialTime = result.agents.length * 100;
|
|
132
|
+
const speedup = (theoreticalSequentialTime / totalTime).toFixed(2);
|
|
133
|
+
console.log(`š Estimated speedup: ${speedup}x faster than sequential`);
|
|
134
|
+
}
|
|
135
|
+
// Run all examples
|
|
136
|
+
async function runAllExamples() {
|
|
137
|
+
console.log('\n' + '='.repeat(60));
|
|
138
|
+
console.log(' PARALLEL SWARM DEPLOYMENT EXAMPLES');
|
|
139
|
+
console.log('='.repeat(60));
|
|
140
|
+
try {
|
|
141
|
+
await example1_parallelAgentSpawn();
|
|
142
|
+
await example2_parallelTaskExecution();
|
|
143
|
+
await example3_deployAndExecute();
|
|
144
|
+
await example4_batchSpawn();
|
|
145
|
+
await example5_dynamicScaling();
|
|
146
|
+
await example6_largeScaleDeployment();
|
|
147
|
+
console.log('\n\n' + '='.repeat(60));
|
|
148
|
+
console.log(' ā
ALL EXAMPLES COMPLETED SUCCESSFULLY');
|
|
149
|
+
console.log('='.repeat(60));
|
|
150
|
+
console.log('\nšÆ Key Takeaways:');
|
|
151
|
+
console.log(' ⢠Promise.all ensures true parallel execution');
|
|
152
|
+
console.log(' ⢠Swarm deployment is 2-10x faster with concurrency');
|
|
153
|
+
console.log(' ⢠Batch operations maximize throughput');
|
|
154
|
+
console.log(' ⢠Dynamic scaling adapts to workload');
|
|
155
|
+
console.log(' ⢠Large-scale deployments benefit most from parallelism');
|
|
156
|
+
console.log('');
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.error('\nā Error running examples:', error);
|
|
160
|
+
logger.error('Example execution failed', { error });
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Run if called directly
|
|
165
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
166
|
+
runAllExamples().catch(error => {
|
|
167
|
+
console.error('Fatal error:', error);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
export { runAllExamples };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
// Example: Using goal-planner agent from .claude/agents
|
|
3
|
+
import "dotenv/config";
|
|
4
|
+
import { getAgent } from "../utils/agentLoader.js";
|
|
5
|
+
import { claudeAgent } from "../agents/claudeAgent.js";
|
|
6
|
+
import { logger } from "../utils/logger.js";
|
|
7
|
+
async function main() {
|
|
8
|
+
logger.setContext({ service: 'goal-planner-example', version: '1.0.0' });
|
|
9
|
+
logger.info('Starting goal-planner example');
|
|
10
|
+
// Load the goal-planner agent definition
|
|
11
|
+
const goalPlanner = getAgent('goal-planner');
|
|
12
|
+
if (!goalPlanner) {
|
|
13
|
+
logger.error('goal-planner agent not found');
|
|
14
|
+
console.error('ā goal-planner agent not found in .claude/agents/');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
logger.info('Loaded goal-planner agent', {
|
|
18
|
+
description: goalPlanner.description
|
|
19
|
+
});
|
|
20
|
+
// Use the goal-planner for a complex task
|
|
21
|
+
const task = `
|
|
22
|
+
Research the Claude Agent SDK and create a comprehensive improvement plan for our Docker implementation.
|
|
23
|
+
|
|
24
|
+
Current state:
|
|
25
|
+
- Basic parallel agent execution
|
|
26
|
+
- Limited error handling
|
|
27
|
+
- No observability
|
|
28
|
+
|
|
29
|
+
Goals:
|
|
30
|
+
1. Identify SDK capabilities we're not using
|
|
31
|
+
2. Propose specific improvements
|
|
32
|
+
3. Create actionable implementation plan
|
|
33
|
+
4. Estimate effort and ROI
|
|
34
|
+
`.trim();
|
|
35
|
+
console.log('\nšÆ Task:', task.substring(0, 100) + '...\n');
|
|
36
|
+
console.log('ā³ Running goal-planner agent...\n');
|
|
37
|
+
const result = await claudeAgent(goalPlanner, task, (chunk) => {
|
|
38
|
+
if (process.env.ENABLE_STREAMING === 'true') {
|
|
39
|
+
process.stdout.write(chunk);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
console.log('\nā
Goal-planner completed!\n');
|
|
43
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n');
|
|
44
|
+
console.log(result.output);
|
|
45
|
+
console.log('\nāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n');
|
|
46
|
+
logger.info('Example completed successfully');
|
|
47
|
+
}
|
|
48
|
+
main().catch(err => {
|
|
49
|
+
logger.error('Example failed', { error: err });
|
|
50
|
+
console.error('ā Error:', err.message);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
});
|
package/dist/health.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Health check endpoint
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import { logger } from './utils/logger.js';
|
|
4
|
+
let serverStartTime = Date.now();
|
|
5
|
+
export function getHealthStatus() {
|
|
6
|
+
const memUsage = process.memoryUsage();
|
|
7
|
+
const memLimit = 512 * 1024 * 1024; // 512MB
|
|
8
|
+
const memPercent = (memUsage.heapUsed / memLimit) * 100;
|
|
9
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
10
|
+
return {
|
|
11
|
+
status: memPercent > 90 ? 'unhealthy' : memPercent > 75 ? 'degraded' : 'healthy',
|
|
12
|
+
timestamp: new Date().toISOString(),
|
|
13
|
+
uptime: (Date.now() - serverStartTime) / 1000,
|
|
14
|
+
version: process.env.npm_package_version || '1.0.0',
|
|
15
|
+
checks: {
|
|
16
|
+
api: {
|
|
17
|
+
status: apiKey && apiKey.startsWith('sk-ant-') ? 'pass' : 'fail',
|
|
18
|
+
message: apiKey ? undefined : 'ANTHROPIC_API_KEY not configured'
|
|
19
|
+
},
|
|
20
|
+
memory: {
|
|
21
|
+
status: memPercent > 90 ? 'fail' : memPercent > 75 ? 'warn' : 'pass',
|
|
22
|
+
usage: Math.round(memUsage.heapUsed / 1024 / 1024),
|
|
23
|
+
limit: Math.round(memLimit / 1024 / 1024)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function startHealthServer(port = 8080) {
|
|
29
|
+
const server = http.createServer((req, res) => {
|
|
30
|
+
if (req.url === '/health' && req.method === 'GET') {
|
|
31
|
+
const health = getHealthStatus();
|
|
32
|
+
const statusCode = health.status === 'healthy' ? 200 : health.status === 'degraded' ? 200 : 503;
|
|
33
|
+
res.writeHead(statusCode, { 'Content-Type': 'application/json' });
|
|
34
|
+
res.end(JSON.stringify(health, null, 2));
|
|
35
|
+
logger.debug('Health check requested', { status: health.status });
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
39
|
+
res.end(JSON.stringify({ error: 'Not found' }));
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
server.listen(port, () => {
|
|
43
|
+
logger.info('Health check server started', { port });
|
|
44
|
+
});
|
|
45
|
+
return server;
|
|
46
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// Agentic Flow with integrated OpenRouter proxy support
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
import { AnthropicToOpenRouterProxy } from "./proxy/anthropic-to-openrouter.js";
|
|
4
|
+
import { logger } from "./utils/logger.js";
|
|
5
|
+
import { parseArgs, printHelp, validateOptions } from "./utils/cli.js";
|
|
6
|
+
import { getAgent } from "./utils/agentLoader.js";
|
|
7
|
+
import { claudeAgent } from "./agents/claudeAgent.js";
|
|
8
|
+
let proxyServer = null;
|
|
9
|
+
async function startProxyIfNeeded(useOpenRouter, proxyPort = 3000) {
|
|
10
|
+
if (!useOpenRouter) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const openrouterKey = process.env.OPENROUTER_API_KEY;
|
|
14
|
+
if (!openrouterKey) {
|
|
15
|
+
logger.warn('OpenRouter mode requested but OPENROUTER_API_KEY not set');
|
|
16
|
+
console.warn('ā ļø OpenRouter API key not found, falling back to direct Anthropic API');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
logger.info('Starting integrated OpenRouter proxy');
|
|
20
|
+
const proxy = new AnthropicToOpenRouterProxy({
|
|
21
|
+
openrouterApiKey: openrouterKey,
|
|
22
|
+
openrouterBaseUrl: process.env.ANTHROPIC_PROXY_BASE_URL,
|
|
23
|
+
defaultModel: process.env.COMPLETION_MODEL || process.env.REASONING_MODEL || 'meta-llama/llama-3.1-8b-instruct'
|
|
24
|
+
});
|
|
25
|
+
proxy.start(proxyPort);
|
|
26
|
+
// Set ANTHROPIC_BASE_URL to point to proxy
|
|
27
|
+
process.env.ANTHROPIC_BASE_URL = `http://localhost:${proxyPort}`;
|
|
28
|
+
logger.info('Proxy started, Claude SDK will use OpenRouter', {
|
|
29
|
+
proxyUrl: process.env.ANTHROPIC_BASE_URL,
|
|
30
|
+
model: process.env.COMPLETION_MODEL
|
|
31
|
+
});
|
|
32
|
+
proxyServer = proxy;
|
|
33
|
+
}
|
|
34
|
+
async function runAgentWithOpenRouter(agentName, task, stream) {
|
|
35
|
+
logger.info('Running agent with OpenRouter proxy', { agent: agentName });
|
|
36
|
+
const agent = getAgent(agentName);
|
|
37
|
+
if (!agent) {
|
|
38
|
+
console.error(`\nā Agent '${agentName}' not found.\n`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
console.log(`\nš¤ Agent: ${agent.name}`);
|
|
42
|
+
console.log(`š Description: ${agent.description}\n`);
|
|
43
|
+
console.log(`šÆ Task: ${task}\n`);
|
|
44
|
+
console.log(`š§ Provider: OpenRouter via Proxy`);
|
|
45
|
+
console.log(`š§ Model: ${process.env.COMPLETION_MODEL || 'meta-llama/llama-3.1-8b-instruct'}\n`);
|
|
46
|
+
console.log('ā³ Running...\n');
|
|
47
|
+
const streamHandler = stream ? (chunk) => process.stdout.write(chunk) : undefined;
|
|
48
|
+
const result = await claudeAgent(agent, task, streamHandler);
|
|
49
|
+
if (!stream) {
|
|
50
|
+
console.log('\nā
Completed!\n');
|
|
51
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n');
|
|
52
|
+
console.log(result.output);
|
|
53
|
+
console.log('\nāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function main() {
|
|
57
|
+
logger.setContext({ service: 'agentic-flow-proxy', version: '1.0.0' });
|
|
58
|
+
const options = parseArgs();
|
|
59
|
+
if (options.help) {
|
|
60
|
+
printHelp();
|
|
61
|
+
process.exit(0);
|
|
62
|
+
}
|
|
63
|
+
const validationError = validateOptions(options);
|
|
64
|
+
if (validationError) {
|
|
65
|
+
console.error(`\nā ${validationError}\n`);
|
|
66
|
+
printHelp();
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
const useOpenRouter = process.env.USE_OPENROUTER === 'true' || options.model?.includes('/');
|
|
70
|
+
const proxyPort = parseInt(process.env.PROXY_PORT || '3000');
|
|
71
|
+
try {
|
|
72
|
+
// Start proxy if using OpenRouter
|
|
73
|
+
await startProxyIfNeeded(useOpenRouter, proxyPort);
|
|
74
|
+
// Small delay to ensure proxy is ready
|
|
75
|
+
if (useOpenRouter) {
|
|
76
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
77
|
+
}
|
|
78
|
+
// Run agent
|
|
79
|
+
if (options.mode === 'agent') {
|
|
80
|
+
const task = options.task || process.env.TASK || '';
|
|
81
|
+
const agent = options.agent || process.env.AGENT || '';
|
|
82
|
+
await runAgentWithOpenRouter(agent, task, Boolean(options.stream));
|
|
83
|
+
}
|
|
84
|
+
logger.info('Execution completed successfully');
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
logger.error('Execution failed', { error: err });
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
// Cleanup
|
|
92
|
+
if (proxyServer) {
|
|
93
|
+
logger.info('Shutting down proxy');
|
|
94
|
+
}
|
|
95
|
+
process.exit(0);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
main().catch(err => {
|
|
99
|
+
console.error(err);
|
|
100
|
+
process.exit(1);
|
|
101
|
+
});
|