claude-flow-novice 1.3.6 → 1.5.1
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/code-analyzer.md +3 -20
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +1 -1
- package/.claude/agents/analyst.md +208 -550
- package/.claude/agents/architect.md +136 -469
- package/.claude/agents/architecture/system-architect.md +20 -1
- package/.claude/agents/architecture/system-design/arch-system-design.md +1 -1
- package/.claude/agents/base-template-generator.md +24 -1
- package/.claude/agents/coder.md +87 -303
- package/.claude/agents/consensus/byzantine-coordinator.md +4 -21
- package/.claude/agents/consensus/consensus-builder.md +3 -20
- package/.claude/agents/consensus/crdt-synchronizer.md +4 -21
- package/.claude/agents/consensus/gossip-coordinator.md +4 -21
- package/.claude/agents/consensus/performance-benchmarker.md +4 -21
- package/.claude/agents/consensus/quorum-manager.md +4 -21
- package/.claude/agents/consensus/raft-manager.md +4 -21
- package/.claude/agents/consensus/security-manager.md +4 -21
- package/.claude/agents/coordinator.md +22 -11
- package/.claude/agents/data/ml/data-ml-model.md +2 -2
- package/.claude/agents/development/backend/dev-backend-api.md +2 -2
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +2 -2
- package/.claude/agents/devops/devops-engineer.md +134 -402
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +2 -2
- package/.claude/agents/github/code-review-swarm.md +1 -1
- package/.claude/agents/github/github-specialist.md +856 -0
- package/.claude/agents/github/pr-manager.md +1 -1
- package/.claude/agents/github/release-manager.md +1 -1
- package/.claude/agents/neural/neural-pattern-agent.md +762 -0
- package/.claude/agents/optimization/benchmark-suite.md +1 -1
- package/.claude/agents/optimization/perf-analyzer.md +1 -1
- package/.claude/agents/optimization/performance-monitor.md +1 -1
- package/.claude/agents/planner.md +135 -0
- package/.claude/agents/researcher.md +22 -9
- package/.claude/agents/reviewer.md +291 -0
- package/.claude/agents/security/security-specialist.md +1 -1
- package/.claude/agents/sparc/architecture.md +1 -1
- package/.claude/agents/sparc/pseudocode.md +1 -1
- package/.claude/agents/sparc/refinement.md +1 -1
- package/.claude/agents/sparc/specification.md +1 -1
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +2 -2
- package/.claude/agents/tester.md +21 -11
- package/.claude/agents/testing/unit/tdd-london-swarm.md +1 -1
- package/.claude/agents/testing/validation/production-validator.md +1 -1
- package/.claude/commands/claude-soul.js +1 -1
- package/.claude/commands/fullstack.md +134 -0
- package/.claude/commands/index.js +4 -0
- package/.claude/hooks.json +12 -15
- package/{.claude → .claude-flow-novice/.claude}/agents/MIGRATION_SUMMARY.md +1 -1
- package/.claude-flow-novice/.claude/agents/analysis/code-analyzer.md +192 -0
- package/.claude-flow-novice/.claude/agents/analysis/code-review/analyze-code-quality.md +180 -0
- package/.claude-flow-novice/.claude/agents/analyst.md +300 -0
- package/.claude-flow-novice/.claude/agents/architect.md +557 -0
- package/.claude-flow-novice/.claude/agents/architecture/system-architect.md +630 -0
- package/.claude-flow-novice/.claude/agents/architecture/system-design/arch-system-design.md +156 -0
- package/.claude-flow-novice/.claude/agents/base-template-generator.md +65 -0
- package/.claude-flow-novice/.claude/agents/coder.md +180 -0
- package/.claude-flow-novice/.claude/agents/consensus/byzantine-coordinator.md +46 -0
- package/.claude-flow-novice/.claude/agents/consensus/consensus-builder.md +225 -0
- package/.claude-flow-novice/.claude/agents/consensus/crdt-synchronizer.md +980 -0
- package/.claude-flow-novice/.claude/agents/consensus/gossip-coordinator.md +46 -0
- package/.claude-flow-novice/.claude/agents/consensus/performance-benchmarker.md +834 -0
- package/.claude-flow-novice/.claude/agents/consensus/quorum-manager.md +806 -0
- package/.claude-flow-novice/.claude/agents/consensus/raft-manager.md +46 -0
- package/.claude-flow-novice/.claude/agents/consensus/security-manager.md +605 -0
- package/.claude-flow-novice/.claude/agents/coordinator.md +842 -0
- package/.claude-flow-novice/.claude/agents/data/ml/data-ml-model.md +193 -0
- package/.claude-flow-novice/.claude/agents/development/backend/dev-backend-api.md +142 -0
- package/.claude-flow-novice/.claude/agents/devops/ci-cd/ops-cicd-github.md +164 -0
- package/.claude-flow-novice/.claude/agents/devops/devops-engineer.md +638 -0
- package/.claude-flow-novice/.claude/agents/documentation/api-docs/docs-api-openapi.md +174 -0
- package/.claude-flow-novice/.claude/agents/github/code-review-swarm.md +538 -0
- package/.claude-flow-novice/.claude/agents/github/github-modes.md +173 -0
- package/.claude-flow-novice/.claude/agents/github/github-specialist.md +856 -0
- package/.claude-flow-novice/.claude/agents/github/issue-tracker.md +319 -0
- package/.claude-flow-novice/.claude/agents/github/multi-repo-swarm.md +553 -0
- package/.claude-flow-novice/.claude/agents/github/pr-manager.md +191 -0
- package/.claude-flow-novice/.claude/agents/github/project-board-sync.md +509 -0
- package/.claude-flow-novice/.claude/agents/github/release-manager.md +367 -0
- package/.claude-flow-novice/.claude/agents/github/release-swarm.md +583 -0
- package/.claude-flow-novice/.claude/agents/github/repo-architect.md +398 -0
- package/.claude-flow-novice/.claude/agents/github/swarm-issue.md +573 -0
- package/.claude-flow-novice/.claude/agents/github/swarm-pr.md +428 -0
- package/.claude-flow-novice/.claude/agents/github/sync-coordinator.md +452 -0
- package/.claude-flow-novice/.claude/agents/github/workflow-automation.md +635 -0
- package/.claude-flow-novice/.claude/agents/goal/goal-planner.md +73 -0
- package/.claude-flow-novice/.claude/agents/neural/neural-pattern-agent.md +762 -0
- package/.claude-flow-novice/.claude/agents/neural/safla-neural.md +74 -0
- package/.claude-flow-novice/.claude/agents/optimization/benchmark-suite.md +665 -0
- package/.claude-flow-novice/.claude/agents/optimization/load-balancer.md +431 -0
- package/.claude-flow-novice/.claude/agents/optimization/perf-analyzer.md +725 -0
- package/.claude-flow-novice/.claude/agents/optimization/performance-monitor.md +672 -0
- package/.claude-flow-novice/.claude/agents/optimization/resource-allocator.md +674 -0
- package/.claude-flow-novice/.claude/agents/optimization/topology-optimizer.md +808 -0
- package/.claude-flow-novice/.claude/agents/planner.md +135 -0
- package/.claude-flow-novice/.claude/agents/researcher.md +185 -0
- package/.claude-flow-novice/.claude/agents/reviewer.md +291 -0
- package/.claude-flow-novice/.claude/agents/security/security-specialist.md +978 -0
- package/.claude-flow-novice/.claude/agents/sparc/architecture.md +472 -0
- package/.claude-flow-novice/.claude/agents/sparc/pseudocode.md +318 -0
- package/.claude-flow-novice/.claude/agents/sparc/refinement.md +525 -0
- package/.claude-flow-novice/.claude/agents/sparc/specification.md +276 -0
- package/.claude-flow-novice/.claude/agents/specialized/mobile/spec-mobile-react-native.md +226 -0
- package/.claude-flow-novice/.claude/agents/sublinear/consciousness-evolution-agent.md +499 -0
- package/.claude-flow-novice/.claude/agents/sublinear/matrix-solver-agent.md +113 -0
- package/.claude-flow-novice/.claude/agents/sublinear/nanosecond-scheduler-agent.md +644 -0
- package/.claude-flow-novice/.claude/agents/sublinear/pagerank-agent.md +699 -0
- package/.claude-flow-novice/.claude/agents/sublinear/phi-calculator-agent.md +749 -0
- package/.claude-flow-novice/.claude/agents/sublinear/psycho-symbolic-agent.md +543 -0
- package/.claude-flow-novice/.claude/agents/sublinear/sublinear.md +816 -0
- package/.claude-flow-novice/.claude/agents/sublinear/temporal-advantage-agent.md +360 -0
- package/.claude-flow-novice/.claude/agents/swarm/adaptive-coordinator-enhanced.md +746 -0
- package/.claude-flow-novice/.claude/agents/swarm/adaptive-coordinator.md +396 -0
- package/.claude-flow-novice/.claude/agents/swarm/hierarchical-coordinator.md +300 -0
- package/.claude-flow-novice/.claude/agents/swarm/mesh-coordinator.md +435 -0
- package/.claude-flow-novice/.claude/agents/templates/automation-smart-agent.md +205 -0
- package/.claude-flow-novice/.claude/agents/templates/coordinator-swarm-init.md +90 -0
- package/.claude-flow-novice/.claude/agents/templates/github-pr-manager.md +177 -0
- package/.claude-flow-novice/.claude/agents/templates/implementer-sparc-coder.md +259 -0
- package/.claude-flow-novice/.claude/agents/templates/memory-coordinator.md +187 -0
- package/.claude-flow-novice/.claude/agents/templates/migration-plan.md +746 -0
- package/.claude-flow-novice/.claude/agents/templates/orchestrator-task.md +139 -0
- package/.claude-flow-novice/.claude/agents/templates/performance-analyzer.md +199 -0
- package/.claude-flow-novice/.claude/agents/templates/sparc-coordinator.md +183 -0
- package/.claude-flow-novice/.claude/agents/tester.md +663 -0
- package/.claude-flow-novice/.claude/agents/testing/e2e/playwright-agent.md +249 -0
- package/.claude-flow-novice/.claude/agents/testing/unit/tdd-london-swarm.md +244 -0
- package/.claude-flow-novice/.claude/agents/testing/validation/production-validator.md +395 -0
- package/.claude-flow-novice/dist/index.js +12 -24
- package/.claude-flow-novice/dist/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/agents/agent-manager.js +123 -69
- package/.claude-flow-novice/dist/src/agents/agent-manager.js.map +1 -1
- package/.claude-flow-novice/dist/src/agents/github/utils/hook-integration.js +7 -7
- package/.claude-flow-novice/dist/src/agents/github/utils/hook-integration.js.map +1 -1
- package/.claude-flow-novice/dist/src/agents/stage3-integration-validator.js +485 -0
- package/.claude-flow-novice/dist/src/agents/stage3-integration-validator.js.map +1 -0
- package/.claude-flow-novice/dist/src/agents/unified-ultra-fast-agent-manager.js +630 -0
- package/.claude-flow-novice/dist/src/agents/unified-ultra-fast-agent-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/cli/commands/agent.js +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/agent.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/config-integration.js +6 -6
- package/.claude-flow-novice/dist/src/cli/commands/enterprise.js +18 -18
- package/.claude-flow-novice/dist/src/cli/commands/enterprise.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/goal-init.js +4 -4
- package/.claude-flow-novice/dist/src/cli/commands/help-new.js +23 -23
- package/.claude-flow-novice/dist/src/cli/commands/help-new.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/help.js +74 -74
- package/.claude-flow-novice/dist/src/cli/commands/help.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/hive-mind/pause.js +2 -2
- package/.claude-flow-novice/dist/src/cli/commands/hive-mind/pause.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/hive.js +4 -4
- package/.claude-flow-novice/dist/src/cli/commands/index.js +103 -132
- package/.claude-flow-novice/dist/src/cli/commands/index.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/mcp.js +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/migrate.js +4 -4
- package/.claude-flow-novice/dist/src/cli/commands/migrate.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/monitor.js +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/neural-init.js +4 -4
- package/.claude-flow-novice/dist/src/cli/commands/ruv-swarm.js +8 -8
- package/.claude-flow-novice/dist/src/cli/commands/sparc.js +12 -12
- package/.claude-flow-novice/dist/src/cli/commands/sparc.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/start/start-command.js +3 -3
- package/.claude-flow-novice/dist/src/cli/commands/status.js +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/swarm.js +7 -7
- package/.claude-flow-novice/dist/src/cli/commands/swarm.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/verification.js +18 -18
- package/.claude-flow-novice/dist/src/cli/completion.js +54 -54
- package/.claude-flow-novice/dist/src/cli/completion.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/consolidated/ConsolidatedCLI.js +11 -11
- package/.claude-flow-novice/dist/src/cli/consolidated/ConsolidatedCLI.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/consolidated/core/CommandHandlers.js +31 -31
- package/.claude-flow-novice/dist/src/cli/consolidated/core/TierManager.js +39 -39
- package/.claude-flow-novice/dist/src/cli/consolidated/core/TierManager.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/consolidated/help/InteractiveHelp.js +25 -25
- package/.claude-flow-novice/dist/src/cli/consolidated/help/InteractiveHelp.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/consolidated/routing/CommandRouter.js +8 -8
- package/.claude-flow-novice/dist/src/cli/consolidated/routing/CommandRouter.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/consolidated/utils/IntelligentDefaults.js +6 -6
- package/.claude-flow-novice/dist/src/cli/consolidated/utils/IntelligentDefaults.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/consolidated/utils/PerformanceOptimizer.js +7 -7
- package/.claude-flow-novice/dist/src/cli/consolidated/utils/PerformanceOptimizer.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/index-remote.js +10 -10
- package/.claude-flow-novice/dist/src/cli/index.js +1 -1
- package/.claude-flow-novice/dist/src/cli/init/directory-structure.js +8 -8
- package/.claude-flow-novice/dist/src/cli/init/index.js +3 -3
- package/.claude-flow-novice/dist/src/cli/init/sparc-environment.js +67 -67
- package/.claude-flow-novice/dist/src/cli/init/swarm-commands.js +18 -18
- package/.claude-flow-novice/dist/src/cli/node-repl.js +2 -2
- package/.claude-flow-novice/dist/src/cli/repl.js +1 -1
- package/.claude-flow-novice/dist/src/cli/simple-cli.js +68 -68
- package/.claude-flow-novice/dist/src/cli/simple-cli.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/simple-commands/session-start-soul.js +271 -0
- package/.claude-flow-novice/dist/src/cli/simple-orchestrator.js +7 -7
- package/.claude-flow-novice/dist/src/cli/simple-orchestrator.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/ui/fallback-handler.js +7 -7
- package/.claude-flow-novice/dist/src/communication/enhanced-event-bus.js +816 -0
- package/.claude-flow-novice/dist/src/communication/enhanced-event-bus.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/failure-recovery-system.js +812 -0
- package/.claude-flow-novice/dist/src/communication/failure-recovery-system.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/optimized-serialization.js +369 -0
- package/.claude-flow-novice/dist/src/communication/optimized-serialization.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/performance-optimizations.js +526 -0
- package/.claude-flow-novice/dist/src/communication/performance-optimizations.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/performance-validator.js +532 -0
- package/.claude-flow-novice/dist/src/communication/performance-validator.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/priority-message-queue.js +525 -0
- package/.claude-flow-novice/dist/src/communication/priority-message-queue.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/shared-buffer-bus.js +218 -0
- package/.claude-flow-novice/dist/src/communication/shared-buffer-bus.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/ultra-fast-communication-bus.js +521 -0
- package/.claude-flow-novice/dist/src/communication/ultra-fast-communication-bus.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/ultra-fast-serialization.js +563 -0
- package/.claude-flow-novice/dist/src/communication/ultra-fast-serialization.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/websocket-cluster.js +344 -0
- package/.claude-flow-novice/dist/src/communication/websocket-cluster.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/zero-copy-structures.js +369 -0
- package/.claude-flow-novice/dist/src/communication/zero-copy-structures.js.map +1 -0
- package/.claude-flow-novice/dist/src/config/config-manager.js +1 -1
- package/.claude-flow-novice/dist/src/config/config-manager.js.map +1 -1
- package/.claude-flow-novice/dist/src/config/core/intelligent-configuration-manager.js +1 -1
- package/.claude-flow-novice/dist/src/config/integration/hooks-integration.js +6 -6
- package/.claude-flow-novice/dist/src/config/integration/hooks-integration.js.map +1 -1
- package/.claude-flow-novice/dist/src/config/migration/config-migration.js +1 -1
- package/.claude-flow-novice/dist/src/config/ruv-swarm-integration.js +1 -1
- package/.claude-flow-novice/dist/src/config/utils/zero-config-setup.js +1 -1
- package/.claude-flow-novice/dist/src/config/utils/zero-config-setup.js.map +1 -1
- package/.claude-flow-novice/dist/src/config/web-portal-config.js +0 -9
- package/.claude-flow-novice/dist/src/config/web-portal-config.js.map +1 -1
- package/.claude-flow-novice/dist/src/config/zero-config-setup.js +18 -18
- package/.claude-flow-novice/dist/src/config/zero-config-setup.js.map +1 -1
- package/.claude-flow-novice/dist/src/core/logger.js +33 -10
- package/.claude-flow-novice/dist/src/core/logger.js.map +1 -1
- package/.claude-flow-novice/dist/src/migration/index.js +1 -1
- package/.claude-flow-novice/dist/src/migration/index.js.map +1 -1
- package/.claude-flow-novice/dist/src/migration/migration-runner.js +4 -4
- package/.claude-flow-novice/dist/src/migration/migration-runner.js.map +1 -1
- package/.claude-flow-novice/dist/src/monitoring/agent-health-monitor.js +430 -0
- package/.claude-flow-novice/dist/src/monitoring/agent-health-monitor.js.map +1 -0
- package/.claude-flow-novice/dist/src/slash-commands/claude-soul.js +248 -365
- package/.claude-flow-novice/dist/src/slash-commands/register-all-commands.js +1 -1
- package/.claude-flow-novice/dist/src/swarm/claude-code-interface.js +1 -1
- package/.claude-flow-novice/dist/src/swarm/claude-flow-executor.js +1 -1
- package/.claude-flow-novice/dist/src/swarm/consensus-coordinator.js +471 -0
- package/.claude-flow-novice/dist/src/swarm/consensus-coordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm/hive-mind-integration.js +1 -1
- package/.claude-flow-novice/dist/src/swarm/large-scale-coordinator.js +543 -0
- package/.claude-flow-novice/dist/src/swarm/large-scale-coordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm/optimizations/connection-pool.js +1 -1
- package/.claude-flow-novice/dist/src/swarm/optimizations/optimized-executor.js +1 -1
- package/.claude-flow-novice/dist/src/swarm/types.js.map +1 -1
- package/.claude-flow-novice/dist/src/swarm-fullstack/integrations/communication-bridge.js +709 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/integrations/communication-bridge.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/testing/api-contract-validator.js +612 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/testing/api-contract-validator.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/testing/backend-test-orchestrator.js +679 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/testing/backend-test-orchestrator.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/testing/frontend-test-orchestrator.js +654 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/testing/frontend-test-orchestrator.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/testing/visual-regression.js +402 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/testing/visual-regression.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/convergence-detector.js +459 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/convergence-detector.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/fix-coordinator.js +513 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/fix-coordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/index.js +19 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/iterative-build-test.js +568 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/iterative-build-test.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/regression-test-manager.js +418 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/regression-test-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/test-result-analyzer.js +530 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/test-result-analyzer.js.map +1 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/workflow-metrics.js +250 -0
- package/.claude-flow-novice/dist/src/swarm-fullstack/workflows/workflow-metrics.js.map +1 -0
- package/.claude-flow-novice/dist/src/task/index.js +7 -7
- package/.claude-flow-novice/dist/src/validation/fullstack-integration-validator.js +420 -0
- package/.claude-flow-novice/dist/src/validation/fullstack-integration-validator.js.map +1 -0
- package/.claude-flow-novice/dist/src/validation/production-validator.js +1435 -0
- package/.claude-flow-novice/dist/src/validation/production-validator.js.map +1 -0
- package/.claude-flow-novice/dist/src/verification/cli-integration.js +3 -3
- package/.claude-flow-novice/dist/src/verification/hooks.js +1 -1
- package/CHANGELOG.md +26 -0
- package/CLAUDE.md +1967 -68
- package/README.md +0 -1
- package/config/build/babel.config.cjs +19 -11
- package/config/typescript/tsconfig.json +1 -1
- package/examples/claude-api-error-handling.ts +2 -2
- package/examples/frontend-testing-demo.ts +470 -0
- package/examples/litellm/config/config.yaml +1 -1
- package/package.json +13 -7
- package/scripts/build/unified-builder.sh +6 -6
- package/scripts/build/validate-agents.js +238 -0
- package/scripts/run-production-validation.ts +590 -0
- package/scripts/test/test-coordination-features.ts +2 -2
- package/scripts/validate-stage3-performance.ts +377 -0
- package/src/cli/simple-commands/hooks.js +1 -0
- package/src/cli/simple-commands/init/agent-copier.js +0 -2
- package/src/cli/simple-commands/init/index.js +5 -97
- package/src/cli/simple-commands/init/templates/CLAUDE.md +163 -1158
- package/src/cli/simple-commands/init/templates/claude-md.js +38 -157
- package/src/swarm-fullstack/integrations/communication-bridge.ts +931 -0
- package/src/swarm-fullstack/testing/api-contract-validator.ts +909 -0
- package/src/swarm-fullstack/testing/backend-test-orchestrator.ts +791 -0
- package/src/swarm-fullstack/testing/frontend-test-orchestrator.ts +853 -0
- package/src/swarm-fullstack/testing/visual-regression.ts +507 -0
- package/src/swarm-fullstack/workflows/convergence-detector.ts +736 -0
- package/src/swarm-fullstack/workflows/fix-coordinator.ts +677 -0
- package/src/swarm-fullstack/workflows/index.ts +75 -0
- package/src/swarm-fullstack/workflows/iterative-build-test.ts +829 -0
- package/src/swarm-fullstack/workflows/regression-test-manager.ts +590 -0
- package/src/swarm-fullstack/workflows/test-result-analyzer.ts +739 -0
- package/src/swarm-fullstack/workflows/workflow-metrics.ts +399 -0
- package/wiki/command-reference/README.md +1 -2
- package/wiki/command-reference/mcp-tools/README.md +1 -1
- package/wiki/getting-started/claude-code-mcp/README.md +1 -2
- package/wiki/getting-started/installation/README.md +2 -10
- package/.claude/commands/flow-nexus/app-store.md +0 -124
- package/.claude/commands/flow-nexus/challenges.md +0 -120
- package/.claude/commands/flow-nexus/login-registration.md +0 -65
- package/.claude/commands/flow-nexus/neural-network.md +0 -134
- package/.claude/commands/flow-nexus/payments.md +0 -116
- package/.claude/commands/flow-nexus/sandbox.md +0 -83
- package/.claude/commands/flow-nexus/swarm.md +0 -87
- package/.claude/commands/flow-nexus/user-tools.md +0 -152
- package/.claude/commands/flow-nexus/workflow.md +0 -115
- package/.claude-flow-novice/dist/cli/index.js +0 -45
- package/.claude-flow-novice/dist/core/index.js +0 -22
- package/.claude-flow-novice/dist/mcp/mcp-server-novice.js +0 -595
- package/.claude-flow-novice/dist/mcp/mcp-server-sdk.js +0 -649
- package/.claude-flow-novice/dist/mcp/mcp-server-with-slash-commands.js +0 -776
- package/.claude-flow-novice/dist/src/cli/simple-commands/init/templates/claude-md.js +0 -1101
- package/src/cli/simple-commands/init/templates/CLAUDE.md.optimized +0 -265
- /package/{.claude → .claude-flow-novice/.claude}/agents/README.md +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/backend-dev.json +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/code-analyzer.json +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/coder.json +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/consensus/README.md +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/core/coder.md +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/core/planner.md +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/core/researcher.md +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/core/reviewer.md +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/core/tester.md +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/optimization/README.md +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/planner.json +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/researcher.json +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/reviewer.json +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/swarm/README.md +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/system-architect.json +0 -0
- /package/{.claude → .claude-flow-novice/.claude}/agents/tester.json +0 -0
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Priority Message Queue with WebSocket Infrastructure
|
|
3
|
+
* Multi-threaded WebSocket handling with Worker threads
|
|
4
|
+
* Target: <200μs WebSocket send latency
|
|
5
|
+
*/ import { Worker, isMainThread, parentPort } from 'worker_threads';
|
|
6
|
+
import { EventEmitter } from 'events';
|
|
7
|
+
import WebSocket from 'ws';
|
|
8
|
+
// Priority levels for message ordering
|
|
9
|
+
export var MessagePriority = /*#__PURE__*/ function(MessagePriority) {
|
|
10
|
+
MessagePriority[MessagePriority["CRITICAL"] = 0] = "CRITICAL";
|
|
11
|
+
MessagePriority[MessagePriority["HIGH"] = 1] = "HIGH";
|
|
12
|
+
MessagePriority[MessagePriority["NORMAL"] = 2] = "NORMAL";
|
|
13
|
+
MessagePriority[MessagePriority["LOW"] = 3] = "LOW";
|
|
14
|
+
MessagePriority[MessagePriority["BATCH"] = 4] = "BATCH"; // Batch processing
|
|
15
|
+
return MessagePriority;
|
|
16
|
+
}({});
|
|
17
|
+
// WebSocket connection state
|
|
18
|
+
export var ConnectionState = /*#__PURE__*/ function(ConnectionState) {
|
|
19
|
+
ConnectionState["CONNECTING"] = "connecting";
|
|
20
|
+
ConnectionState["CONNECTED"] = "connected";
|
|
21
|
+
ConnectionState["RECONNECTING"] = "reconnecting";
|
|
22
|
+
ConnectionState["DISCONNECTED"] = "disconnected";
|
|
23
|
+
ConnectionState["ERROR"] = "error";
|
|
24
|
+
return ConnectionState;
|
|
25
|
+
}({});
|
|
26
|
+
// Lock-free priority queue using multiple heaps
|
|
27
|
+
let PriorityQueue = class PriorityQueue {
|
|
28
|
+
queues = [];
|
|
29
|
+
priorities = Object.values(MessagePriority).filter((v)=>typeof v === 'number');
|
|
30
|
+
size = 0;
|
|
31
|
+
constructor(){
|
|
32
|
+
// Initialize one queue per priority level
|
|
33
|
+
this.priorities.forEach(()=>{
|
|
34
|
+
this.queues.push([]);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
enqueue(item, priority) {
|
|
38
|
+
this.queues[priority].push(item);
|
|
39
|
+
this.size++;
|
|
40
|
+
}
|
|
41
|
+
dequeue() {
|
|
42
|
+
// Check queues in priority order
|
|
43
|
+
for(let i = 0; i < this.queues.length; i++){
|
|
44
|
+
const queue = this.queues[i];
|
|
45
|
+
if (queue.length > 0) {
|
|
46
|
+
this.size--;
|
|
47
|
+
return queue.shift();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
peek() {
|
|
53
|
+
for(let i = 0; i < this.queues.length; i++){
|
|
54
|
+
const queue = this.queues[i];
|
|
55
|
+
if (queue.length > 0) {
|
|
56
|
+
return queue[0];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
getSize() {
|
|
62
|
+
return this.size;
|
|
63
|
+
}
|
|
64
|
+
isEmpty() {
|
|
65
|
+
return this.size === 0;
|
|
66
|
+
}
|
|
67
|
+
// Get size by priority level
|
|
68
|
+
getSizeByPriority(priority) {
|
|
69
|
+
return this.queues[priority].length;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
// High-performance WebSocket connection wrapper
|
|
73
|
+
let FastWebSocketConnection = class FastWebSocketConnection extends EventEmitter {
|
|
74
|
+
options;
|
|
75
|
+
ws = null;
|
|
76
|
+
url;
|
|
77
|
+
state = "disconnected";
|
|
78
|
+
reconnectAttempts = 0;
|
|
79
|
+
maxReconnectAttempts = 10;
|
|
80
|
+
reconnectDelay = 1000;
|
|
81
|
+
pingInterval;
|
|
82
|
+
metrics = {
|
|
83
|
+
messagesSent: 0,
|
|
84
|
+
messagesReceived: 0,
|
|
85
|
+
totalLatency: 0n,
|
|
86
|
+
errorCount: 0,
|
|
87
|
+
connectTime: 0n
|
|
88
|
+
};
|
|
89
|
+
constructor(url, options = {}){
|
|
90
|
+
super(), this.options = options;
|
|
91
|
+
this.url = url;
|
|
92
|
+
this.maxReconnectAttempts = options.maxReconnectAttempts || 10;
|
|
93
|
+
}
|
|
94
|
+
async connect() {
|
|
95
|
+
if (this.state === "connecting" || this.state === "connected") {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
this.state = "connecting";
|
|
99
|
+
const startTime = process.hrtime.bigint();
|
|
100
|
+
try {
|
|
101
|
+
this.ws = new WebSocket(this.url, {
|
|
102
|
+
perMessageDeflate: false,
|
|
103
|
+
maxPayload: 100 * 1024 * 1024
|
|
104
|
+
});
|
|
105
|
+
await this.setupWebSocketHandlers();
|
|
106
|
+
this.metrics.connectTime = process.hrtime.bigint() - startTime;
|
|
107
|
+
this.state = "connected";
|
|
108
|
+
this.reconnectAttempts = 0;
|
|
109
|
+
this.startPingInterval();
|
|
110
|
+
this.emit('connected');
|
|
111
|
+
} catch (error) {
|
|
112
|
+
this.state = "error";
|
|
113
|
+
this.emit('error', error);
|
|
114
|
+
this.scheduleReconnect();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
setupWebSocketHandlers() {
|
|
118
|
+
return new Promise((resolve, reject)=>{
|
|
119
|
+
if (!this.ws) {
|
|
120
|
+
reject(new Error('WebSocket not initialized'));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const timeout = setTimeout(()=>{
|
|
124
|
+
reject(new Error('Connection timeout'));
|
|
125
|
+
}, this.options.connectionTimeout || 5000);
|
|
126
|
+
this.ws.on('open', ()=>{
|
|
127
|
+
clearTimeout(timeout);
|
|
128
|
+
resolve();
|
|
129
|
+
});
|
|
130
|
+
this.ws.on('message', (data)=>{
|
|
131
|
+
this.metrics.messagesReceived++;
|
|
132
|
+
this.emit('message', new Uint8Array(data));
|
|
133
|
+
});
|
|
134
|
+
this.ws.on('close', (code, reason)=>{
|
|
135
|
+
this.state = "disconnected";
|
|
136
|
+
this.stopPingInterval();
|
|
137
|
+
this.emit('disconnected', {
|
|
138
|
+
code,
|
|
139
|
+
reason
|
|
140
|
+
});
|
|
141
|
+
this.scheduleReconnect();
|
|
142
|
+
});
|
|
143
|
+
this.ws.on('error', (error)=>{
|
|
144
|
+
this.metrics.errorCount++;
|
|
145
|
+
this.emit('error', error);
|
|
146
|
+
});
|
|
147
|
+
this.ws.on('pong', ()=>{
|
|
148
|
+
// Connection is alive
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
send(data, priority = 2) {
|
|
153
|
+
return new Promise((resolve, reject)=>{
|
|
154
|
+
if (this.state !== "connected" || !this.ws) {
|
|
155
|
+
reject(new Error('WebSocket not connected'));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const startTime = process.hrtime.bigint();
|
|
159
|
+
try {
|
|
160
|
+
this.ws.send(data, (error)=>{
|
|
161
|
+
if (error) {
|
|
162
|
+
this.metrics.errorCount++;
|
|
163
|
+
reject(error);
|
|
164
|
+
} else {
|
|
165
|
+
const latency = process.hrtime.bigint() - startTime;
|
|
166
|
+
this.metrics.messagesSent++;
|
|
167
|
+
this.metrics.totalLatency += latency;
|
|
168
|
+
resolve();
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
} catch (error) {
|
|
172
|
+
this.metrics.errorCount++;
|
|
173
|
+
reject(error);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
startPingInterval() {
|
|
178
|
+
if (this.pingInterval) {
|
|
179
|
+
clearInterval(this.pingInterval);
|
|
180
|
+
}
|
|
181
|
+
this.pingInterval = setInterval(()=>{
|
|
182
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
183
|
+
this.ws.ping();
|
|
184
|
+
}
|
|
185
|
+
}, this.options.pingInterval || 30000);
|
|
186
|
+
}
|
|
187
|
+
stopPingInterval() {
|
|
188
|
+
if (this.pingInterval) {
|
|
189
|
+
clearInterval(this.pingInterval);
|
|
190
|
+
this.pingInterval = undefined;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
scheduleReconnect() {
|
|
194
|
+
if (this.reconnectAttempts >= this.maxReconnectAttempts) {
|
|
195
|
+
this.emit('maxReconnectAttemptsReached');
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
this.state = "reconnecting";
|
|
199
|
+
this.reconnectAttempts++;
|
|
200
|
+
const delay = Math.min(this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1), 30000);
|
|
201
|
+
setTimeout(()=>{
|
|
202
|
+
this.connect().catch(()=>{
|
|
203
|
+
// Reconnection failed, will be handled by the connect method
|
|
204
|
+
});
|
|
205
|
+
}, delay);
|
|
206
|
+
}
|
|
207
|
+
disconnect() {
|
|
208
|
+
this.stopPingInterval();
|
|
209
|
+
if (this.ws) {
|
|
210
|
+
this.ws.close(1000, 'Normal closure');
|
|
211
|
+
this.ws = null;
|
|
212
|
+
}
|
|
213
|
+
this.state = "disconnected";
|
|
214
|
+
}
|
|
215
|
+
getMetrics() {
|
|
216
|
+
const avgLatency = this.metrics.messagesSent > 0 ? Number(this.metrics.totalLatency / BigInt(this.metrics.messagesSent)) : 0;
|
|
217
|
+
return {
|
|
218
|
+
messagesPerSecond: this.metrics.messagesSent,
|
|
219
|
+
avgLatencyNs: avgLatency,
|
|
220
|
+
p95LatencyNs: avgLatency * 1.2,
|
|
221
|
+
errorRate: this.metrics.errorCount / Math.max(this.metrics.messagesSent, 1),
|
|
222
|
+
queueSize: 0,
|
|
223
|
+
connectionUptime: Number(process.hrtime.bigint() - this.metrics.connectTime) / 1000000
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
getState() {
|
|
227
|
+
return this.state;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
// WebSocket worker thread for handling connections
|
|
231
|
+
let WebSocketWorker = class WebSocketWorker {
|
|
232
|
+
connections = new Map();
|
|
233
|
+
messageQueue = new PriorityQueue();
|
|
234
|
+
processing = false;
|
|
235
|
+
constructor(){
|
|
236
|
+
this.startMessageProcessor();
|
|
237
|
+
}
|
|
238
|
+
addConnection(id, url, options) {
|
|
239
|
+
const connection = new FastWebSocketConnection(url, options);
|
|
240
|
+
connection.on('connected', ()=>{
|
|
241
|
+
if (parentPort) {
|
|
242
|
+
parentPort.postMessage({
|
|
243
|
+
type: 'connectionReady',
|
|
244
|
+
connectionId: id
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
connection.on('message', (data)=>{
|
|
249
|
+
if (parentPort) {
|
|
250
|
+
parentPort.postMessage({
|
|
251
|
+
type: 'messageReceived',
|
|
252
|
+
connectionId: id,
|
|
253
|
+
data: Array.from(data)
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
connection.on('error', (error)=>{
|
|
258
|
+
if (parentPort) {
|
|
259
|
+
parentPort.postMessage({
|
|
260
|
+
type: 'connectionError',
|
|
261
|
+
connectionId: id,
|
|
262
|
+
error: error.message
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
this.connections.set(id, connection);
|
|
267
|
+
connection.connect();
|
|
268
|
+
}
|
|
269
|
+
removeConnection(id) {
|
|
270
|
+
const connection = this.connections.get(id);
|
|
271
|
+
if (connection) {
|
|
272
|
+
connection.disconnect();
|
|
273
|
+
this.connections.delete(id);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
queueMessage(message) {
|
|
277
|
+
this.messageQueue.enqueue(message, message.priority);
|
|
278
|
+
}
|
|
279
|
+
async startMessageProcessor() {
|
|
280
|
+
if (this.processing) return;
|
|
281
|
+
this.processing = true;
|
|
282
|
+
while(this.processing){
|
|
283
|
+
const message = this.messageQueue.dequeue();
|
|
284
|
+
if (message) {
|
|
285
|
+
await this.processMessage(message);
|
|
286
|
+
} else {
|
|
287
|
+
// No messages, yield control briefly
|
|
288
|
+
await new Promise((resolve)=>setImmediate(resolve));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
async processMessage(message) {
|
|
293
|
+
// Extract connection ID from message (would be part of routing)
|
|
294
|
+
const connectionId = 'default'; // Simplified for example
|
|
295
|
+
const connection = this.connections.get(connectionId);
|
|
296
|
+
if (!connection || connection.getState() !== "connected") {
|
|
297
|
+
// Connection not available, requeue if retries remain
|
|
298
|
+
if (message.retryCount < message.maxRetries) {
|
|
299
|
+
message.retryCount++;
|
|
300
|
+
setTimeout(()=>{
|
|
301
|
+
this.messageQueue.enqueue(message, message.priority);
|
|
302
|
+
}, 1000 * message.retryCount);
|
|
303
|
+
}
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
try {
|
|
307
|
+
await connection.send(message.payload, message.priority);
|
|
308
|
+
if (parentPort) {
|
|
309
|
+
parentPort.postMessage({
|
|
310
|
+
type: 'messageSent',
|
|
311
|
+
messageId: message.id,
|
|
312
|
+
latency: Number(process.hrtime.bigint() - message.timestamp)
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
} catch (error) {
|
|
316
|
+
if (message.retryCount < message.maxRetries) {
|
|
317
|
+
message.retryCount++;
|
|
318
|
+
setTimeout(()=>{
|
|
319
|
+
this.messageQueue.enqueue(message, message.priority);
|
|
320
|
+
}, 1000 * message.retryCount);
|
|
321
|
+
} else {
|
|
322
|
+
if (parentPort) {
|
|
323
|
+
parentPort.postMessage({
|
|
324
|
+
type: 'messageFailed',
|
|
325
|
+
messageId: message.id,
|
|
326
|
+
error: error.message
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
getMetrics() {
|
|
333
|
+
const metrics = {};
|
|
334
|
+
for (const [id, connection] of this.connections){
|
|
335
|
+
metrics[id] = connection.getMetrics();
|
|
336
|
+
}
|
|
337
|
+
return metrics;
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
// Main WebSocket manager using worker threads
|
|
341
|
+
export class MultiThreadedWebSocketManager extends EventEmitter {
|
|
342
|
+
workerCount;
|
|
343
|
+
workers = [];
|
|
344
|
+
workerIndex = 0;
|
|
345
|
+
connections = new Map();
|
|
346
|
+
messageMetrics = {
|
|
347
|
+
sent: 0,
|
|
348
|
+
failed: 0,
|
|
349
|
+
totalLatency: 0n
|
|
350
|
+
};
|
|
351
|
+
constructor(workerCount = 4){
|
|
352
|
+
super(), this.workerCount = workerCount;
|
|
353
|
+
this.initializeWorkers();
|
|
354
|
+
}
|
|
355
|
+
initializeWorkers() {
|
|
356
|
+
for(let i = 0; i < this.workerCount; i++){
|
|
357
|
+
const worker = new Worker(__filename, {
|
|
358
|
+
workerData: {
|
|
359
|
+
workerId: i
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
worker.on('message', (message)=>{
|
|
363
|
+
this.handleWorkerMessage(message, i);
|
|
364
|
+
});
|
|
365
|
+
worker.on('error', (error)=>{
|
|
366
|
+
this.emit('workerError', {
|
|
367
|
+
workerId: i,
|
|
368
|
+
error
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
worker.on('exit', (code)=>{
|
|
372
|
+
if (code !== 0) {
|
|
373
|
+
this.emit('workerExit', {
|
|
374
|
+
workerId: i,
|
|
375
|
+
code
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
this.workers.push(worker);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
handleWorkerMessage(message, workerId) {
|
|
383
|
+
switch(message.type){
|
|
384
|
+
case 'connectionReady':
|
|
385
|
+
this.emit('connectionReady', message.connectionId);
|
|
386
|
+
break;
|
|
387
|
+
case 'messageReceived':
|
|
388
|
+
this.emit('messageReceived', message.connectionId, new Uint8Array(message.data));
|
|
389
|
+
break;
|
|
390
|
+
case 'connectionError':
|
|
391
|
+
this.emit('connectionError', message.connectionId, new Error(message.error));
|
|
392
|
+
break;
|
|
393
|
+
case 'messageSent':
|
|
394
|
+
this.messageMetrics.sent++;
|
|
395
|
+
this.messageMetrics.totalLatency += BigInt(message.latency);
|
|
396
|
+
this.emit('messageSent', message.messageId, message.latency);
|
|
397
|
+
break;
|
|
398
|
+
case 'messageFailed':
|
|
399
|
+
this.messageMetrics.failed++;
|
|
400
|
+
this.emit('messageFailed', message.messageId, new Error(message.error));
|
|
401
|
+
break;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
addConnection(id, url, options) {
|
|
405
|
+
const workerId = this.workerIndex % this.workerCount;
|
|
406
|
+
this.workerIndex++;
|
|
407
|
+
this.connections.set(id, {
|
|
408
|
+
workerId,
|
|
409
|
+
url,
|
|
410
|
+
options
|
|
411
|
+
});
|
|
412
|
+
this.workers[workerId].postMessage({
|
|
413
|
+
type: 'addConnection',
|
|
414
|
+
id,
|
|
415
|
+
url,
|
|
416
|
+
options
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
removeConnection(id) {
|
|
420
|
+
const connectionInfo = this.connections.get(id);
|
|
421
|
+
if (connectionInfo) {
|
|
422
|
+
this.workers[connectionInfo.workerId].postMessage({
|
|
423
|
+
type: 'removeConnection',
|
|
424
|
+
id
|
|
425
|
+
});
|
|
426
|
+
this.connections.delete(id);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
sendMessage(message, connectionId) {
|
|
430
|
+
// Route to appropriate worker
|
|
431
|
+
let workerId = 0;
|
|
432
|
+
if (connectionId) {
|
|
433
|
+
const connectionInfo = this.connections.get(connectionId);
|
|
434
|
+
if (connectionInfo) {
|
|
435
|
+
workerId = connectionInfo.workerId;
|
|
436
|
+
}
|
|
437
|
+
} else {
|
|
438
|
+
// Load balance across workers
|
|
439
|
+
workerId = this.workerIndex % this.workerCount;
|
|
440
|
+
this.workerIndex++;
|
|
441
|
+
}
|
|
442
|
+
this.workers[workerId].postMessage({
|
|
443
|
+
type: 'queueMessage',
|
|
444
|
+
message
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
// Batch send for high throughput
|
|
448
|
+
sendBatch(messages) {
|
|
449
|
+
// Distribute messages across workers
|
|
450
|
+
messages.forEach((message, index)=>{
|
|
451
|
+
const workerId = index % this.workerCount;
|
|
452
|
+
this.workers[workerId].postMessage({
|
|
453
|
+
type: 'queueMessage',
|
|
454
|
+
message
|
|
455
|
+
});
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
async getMetrics() {
|
|
459
|
+
const promises = this.workers.map((worker, index)=>{
|
|
460
|
+
return new Promise((resolve)=>{
|
|
461
|
+
const timeout = setTimeout(()=>{
|
|
462
|
+
resolve({}); // Timeout fallback
|
|
463
|
+
}, 1000);
|
|
464
|
+
const handler = (message)=>{
|
|
465
|
+
if (message.type === 'metrics') {
|
|
466
|
+
clearTimeout(timeout);
|
|
467
|
+
worker.off('message', handler);
|
|
468
|
+
resolve(message.data);
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
worker.on('message', handler);
|
|
472
|
+
worker.postMessage({
|
|
473
|
+
type: 'getMetrics'
|
|
474
|
+
});
|
|
475
|
+
});
|
|
476
|
+
});
|
|
477
|
+
const workerMetrics = await Promise.all(promises);
|
|
478
|
+
// Combine metrics from all workers
|
|
479
|
+
const combinedMetrics = {};
|
|
480
|
+
workerMetrics.forEach((metrics)=>{
|
|
481
|
+
Object.assign(combinedMetrics, metrics);
|
|
482
|
+
});
|
|
483
|
+
return combinedMetrics;
|
|
484
|
+
}
|
|
485
|
+
getGlobalMetrics() {
|
|
486
|
+
const avgLatency = this.messageMetrics.sent > 0 ? Number(this.messageMetrics.totalLatency / BigInt(this.messageMetrics.sent)) : 0;
|
|
487
|
+
return {
|
|
488
|
+
messagesSent: this.messageMetrics.sent,
|
|
489
|
+
messagesFailed: this.messageMetrics.failed,
|
|
490
|
+
averageLatencyNs: avgLatency,
|
|
491
|
+
successRate: this.messageMetrics.sent / (this.messageMetrics.sent + this.messageMetrics.failed),
|
|
492
|
+
workerCount: this.workerCount
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
async shutdown() {
|
|
496
|
+
const promises = this.workers.map((worker)=>worker.terminate());
|
|
497
|
+
await Promise.all(promises);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
// Worker thread entry point
|
|
501
|
+
if (!isMainThread && parentPort) {
|
|
502
|
+
const worker = new WebSocketWorker();
|
|
503
|
+
parentPort.on('message', (message)=>{
|
|
504
|
+
switch(message.type){
|
|
505
|
+
case 'addConnection':
|
|
506
|
+
worker.addConnection(message.id, message.url, message.options);
|
|
507
|
+
break;
|
|
508
|
+
case 'removeConnection':
|
|
509
|
+
worker.removeConnection(message.id);
|
|
510
|
+
break;
|
|
511
|
+
case 'queueMessage':
|
|
512
|
+
worker.queueMessage(message.message);
|
|
513
|
+
break;
|
|
514
|
+
case 'getMetrics':
|
|
515
|
+
const metrics = worker.getMetrics();
|
|
516
|
+
parentPort.postMessage({
|
|
517
|
+
type: 'metrics',
|
|
518
|
+
data: metrics
|
|
519
|
+
});
|
|
520
|
+
break;
|
|
521
|
+
}
|
|
522
|
+
});
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
//# sourceMappingURL=priority-message-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/communication/priority-message-queue.ts"],"names":["Worker","isMainThread","parentPort","EventEmitter","WebSocket","MessagePriority","ConnectionState","PriorityQueue","queues","priorities","Object","values","filter","v","size","forEach","push","enqueue","item","priority","dequeue","i","length","queue","shift","peek","getSize","isEmpty","getSizeByPriority","FastWebSocketConnection","ws","url","state","reconnectAttempts","maxReconnectAttempts","reconnectDelay","pingInterval","metrics","messagesSent","messagesReceived","totalLatency","errorCount","connectTime","options","connect","startTime","process","hrtime","bigint","perMessageDeflate","maxPayload","setupWebSocketHandlers","startPingInterval","emit","error","scheduleReconnect","Promise","resolve","reject","Error","timeout","setTimeout","connectionTimeout","on","clearTimeout","data","Uint8Array","code","reason","stopPingInterval","send","latency","clearInterval","setInterval","readyState","OPEN","ping","undefined","delay","Math","min","pow","catch","disconnect","close","getMetrics","avgLatency","Number","BigInt","messagesPerSecond","avgLatencyNs","p95LatencyNs","errorRate","max","queueSize","connectionUptime","getState","WebSocketWorker","connections","Map","messageQueue","processing","startMessageProcessor","addConnection","id","connection","postMessage","type","connectionId","Array","from","message","set","removeConnection","get","delete","queueMessage","processMessage","setImmediate","retryCount","maxRetries","payload","messageId","timestamp","MultiThreadedWebSocketManager","workers","workerIndex","messageMetrics","sent","failed","workerCount","initializeWorkers","worker","__filename","workerData","workerId","handleWorkerMessage","connectionInfo","sendMessage","sendBatch","messages","index","promises","map","handler","off","workerMetrics","all","combinedMetrics","assign","getGlobalMetrics","messagesFailed","averageLatencyNs","successRate","shutdown","terminate"],"mappings":"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"}
|