claude-flow-novice 2.6.0 → 2.8.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/adaptive-context/cfn-v3-reflection.json +21 -0
- package/.claude/agents/AGENT_LIFECYCLE.md +495 -0
- package/.claude/agents/CLAUDE.md +1002 -995
- package/.claude/agents/accessibility-advocate.md +457 -0
- package/.claude/agents/agent-principles/README.md +226 -226
- package/.claude/agents/agent-principles/agent-type-guidelines.md +10 -0
- package/.claude/agents/agent-principles/format-selection.md +10 -0
- package/.claude/agents/agent-principles/phase4-template-optimization.md +502 -494
- package/.claude/agents/agent-principles/prompt-engineering.md +8 -0
- package/.claude/agents/agent-principles/quality-metrics.md +8 -0
- package/.claude/agents/analysis/code-analyzer.md +7 -17
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +2 -104
- package/.claude/agents/analysis/perf-analyzer.md +2 -196
- package/.claude/agents/context/context-curator.md +78 -84
- package/.claude/agents/context/context-reflector.md +27 -81
- package/.claude/agents/coordinators/README.md +42 -0
- package/.claude/agents/coordinators/cfn-v3-coordinator.md +440 -0
- package/.claude/agents/{product-owner-team → coordinators}/cto-agent.md +154 -187
- package/.claude/agents/coordinators/multi-sprint-coordinator.md +50 -0
- package/.claude/agents/{product-owner-team → coordinators}/product-owner-agent.md +6 -39
- package/.claude/agents/{cfn-loop → coordinators}/product-owner.md +72 -17
- package/.claude/agents/core-agents/reviewer.md +114 -135
- package/.claude/agents/custom/agent-builder.md +637 -637
- package/.claude/agents/developers/README.md +69 -0
- package/.claude/agents/developers/backend-dev.md +77 -0
- package/.claude/agents/{core-agents → developers}/coder.md +131 -26
- package/.claude/agents/developers/react-frontend-engineer.md +121 -0
- package/.claude/agents/{frontend → developers}/state-architect.md +1 -0
- package/.claude/agents/{frontend → developers}/ui-designer.md +1 -0
- package/.claude/agents/development/backend/dev-backend-api.md +0 -29
- package/.claude/agents/development/npm-package-specialist.md +355 -347
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +8 -0
- package/.claude/agents/documentation/api-docs.md +8 -0
- package/.claude/agents/github/github-commit-agent.md +125 -117
- package/.claude/agents/goal/goal-planner.md +8 -0
- package/.claude/agents/infrastructure/README.md +100 -0
- package/.claude/agents/{specialized → infrastructure}/devops-engineer.md +131 -150
- package/.claude/agents/planners/README.md +94 -0
- package/.claude/agents/{core-agents → planners}/analyst.md +1 -22
- package/.claude/agents/{planning-team → planners}/api-designer-persona.md +8 -0
- package/.claude/agents/{core-agents → planners}/architect.md +7 -20
- package/.claude/agents/{core-agents → planners}/planner.md +0 -21
- package/.claude/agents/{planning-team → planners}/security-architect-persona.md +8 -28
- package/.claude/agents/{planning-team → planners}/system-architect-persona.md +6 -38
- package/.claude/agents/{architecture → planners}/system-architect.md +12 -17
- package/.claude/agents/product-owner-team/accessibility-advocate-persona.md +132 -161
- package/.claude/agents/product-owner-team/power-user-persona.md +149 -182
- package/.claude/agents/retrospective-analyst.md +84 -0
- package/.claude/agents/reviewers/README.md +58 -0
- package/.claude/agents/{analysis → reviewers}/code-quality-validator.md +8 -17
- package/.claude/agents/reviewers/reviewer.md +181 -0
- package/.claude/agents/sparc/architecture.md +6 -25
- package/.claude/agents/sparc/pseudocode.md +6 -0
- package/.claude/agents/sparc/refinement.md +6 -0
- package/.claude/agents/sparc/specification.md +1 -0
- package/.claude/agents/specialists/README.md +60 -0
- package/.claude/agents/{core-agents → specialists}/base-template-generator.md +8 -21
- package/.claude/agents/{specialized → specialists}/cli-agent-optimizer.md +1 -1
- package/.claude/agents/{specialized → specialists}/code-booster.md +1 -0
- package/.claude/agents/{consensus → specialists}/consensus-builder.md +1 -17
- package/.claude/agents/{specialized/mobile → specialists}/mobile-dev.md +0 -20
- package/.claude/agents/{core-agents → specialists}/performance-benchmarker.md +134 -148
- package/.claude/agents/{specialized → specialists}/rust-developer.md +1 -20
- package/.claude/agents/{specialized → specialists}/rust-enterprise-developer.md +1 -20
- package/.claude/agents/{specialized → specialists}/rust-mvp-developer.md +1 -20
- package/.claude/agents/{core-agents → specialists}/security-manager.md +68 -88
- package/.claude/agents/{security → specialists}/security-specialist-existing.md +6 -57
- package/.claude/agents/{security → specialists}/security-specialist.md +6 -30
- package/.claude/agents/{specialized/mobile → specialists}/spec-mobile-react-native.md +2 -21
- package/.claude/agents/testers/README.md +94 -0
- package/.claude/agents/{testing → testers}/e2e/playwright-agent.md +1 -20
- package/.claude/agents/{testing → testers}/interaction-tester.md +1 -20
- package/.claude/agents/{testing → testers}/playwright-tester.md +1 -1
- package/.claude/agents/testers/tester.md +139 -0
- package/.claude/agents/testers/unit/tdd-london-swarm.md +49 -0
- package/.claude/agents/testers/validation/production-validator.md +33 -0
- package/.claude/agents-ignore/cfn-loop-coordinator.md +157 -0
- package/.claude/agents-ignore/cfn-loop-coordinator.md.backup +156 -0
- package/.claude/agents-ignore/coordinator.md.backup +182 -0
- package/.claude/agents-ignore/cost-savings-cfn-loop-coordinator.md +760 -0
- package/.claude/agents-ignore/cost-savings-coordinator.md +173 -0
- package/.claude/artifacts/ace-reflections/REFLECT-001-summary.json +39 -0
- package/.claude/artifacts/ace-reflections/sprint-7_$(date -u +/"%Y%m%d_%H%M%S/").json" +47 -0
- package/.claude/commands/CFN_COORDINATOR_PARAMETERS.md +10 -10
- package/.claude/commands/cfn-loop-epic.md +3 -3
- package/.claude/commands/cfn-loop-single.md +3 -3
- package/.claude/commands/cfn-loop-sprints.md +1 -1
- package/.claude/commands/cfn-loop.md +3 -3
- package/.claude/commands/cfn-mode.md +20 -0
- package/.claude/commands/write-plan.md +104 -0
- package/.claude/data/cfn-loop.db +0 -0
- package/.claude/data/cfn_loop_logs.db +0 -0
- package/.claude/hooks/BACKUP_USAGE.md +243 -0
- package/.claude/hooks/post-edit-cfn-retrospective.sh +79 -0
- package/.claude/hooks/post-edit.sh +21 -0
- package/.claude/hooks/pre-edit-backup.sh +71 -0
- package/.claude/hooks/restore-from-backup.sh +37 -0
- package/.claude/prompts/cfn-loop-context.md +115 -0
- package/.claude/prompts/loop-specific/loop2.md +50 -0
- package/.claude/prompts/loop-specific/loop3.md +43 -0
- package/.claude/prompts/loop-specific/loop4.md +54 -0
- package/.claude/root-claude-distribute/CLAUDE.md +76 -2
- package/.claude/skills/ace-system/sprint-7-lessons.json +46 -0
- package/.claude/skills/ace-system/store-reflection.sh +33 -136
- package/.claude/skills/agent-discovery/SKILL.md +40 -0
- package/.claude/skills/agent-discovery/agents-registry-clean.json +0 -0
- package/.claude/skills/agent-discovery/agents-registry-fixed.json +19 -0
- package/.claude/skills/agent-discovery/agents-registry.json +718 -0
- package/.claude/skills/agent-discovery/discover-agents.py +175 -0
- package/.claude/skills/agent-discovery/discover-agents.sh +87 -0
- package/.claude/skills/agent-discovery/invoke-registry.sh +11 -0
- package/.claude/skills/agent-discovery/temp_script.py +0 -0
- package/.claude/skills/agent-output-processing/SKILL.md +359 -0
- package/.claude/skills/agent-selector/SKILL.md +90 -0
- package/.claude/skills/agent-selector/select-agents.sh +96 -0
- package/.claude/skills/agent-spawning/agent-selection-guide.md +1 -1
- package/.claude/skills/agent-swap/SKILL.md +36 -0
- package/.claude/skills/agent-swap/recommend-swap.sh +60 -0
- package/.claude/skills/api-validation/test-endpoints.sh +54 -0
- package/.claude/skills/automatic-memory-persistence/SKILL.md +73 -0
- package/.claude/skills/automatic-memory-persistence/persist-agent-output.sh +49 -0
- package/.claude/skills/automatic-memory-persistence/query-agent-history.sh +35 -0
- package/.claude/skills/automatic-memory-persistence/test-memory-persistence.sh +235 -0
- package/.claude/skills/cfn-loop-orchestration/README.md +41 -0
- package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
- package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
- package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +840 -0
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
- package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
- package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
- package/.claude/skills/cfn-loop-validation/SKILL.md +307 -217
- package/.claude/skills/complexity-estimator/SKILL.md +96 -0
- package/.claude/skills/complexity-estimator/estimate-complexity.sh +144 -0
- package/.claude/skills/context-pruner/SKILL.md +75 -0
- package/.claude/skills/context-pruner/prune-context.sh +73 -0
- package/.claude/skills/defense-in-depth/SKILL.md +133 -0
- package/.claude/skills/dependency-extractor/SKILL.md +35 -0
- package/.claude/skills/dependency-extractor/extract-dependencies.sh +66 -0
- package/.claude/skills/epic-decomposer/SKILL.md +44 -0
- package/.claude/skills/epic-decomposer/decompose-epic.sh +104 -0
- package/.claude/skills/improvement-recommender/SKILL.md +33 -0
- package/.claude/skills/improvement-recommender/recommend-improvements.sh +92 -0
- package/.claude/skills/intervention-detector/SKILL.md +39 -0
- package/.claude/skills/intervention-detector/detect-intervention.sh +111 -0
- package/.claude/skills/intervention-orchestrator/SKILL.md +43 -0
- package/.claude/skills/intervention-orchestrator/execute-intervention.sh +59 -0
- package/.claude/skills/loop2-output-processing/SKILL.md +163 -0
- package/.claude/skills/loop2-output-processing/execute-and-extract.sh +77 -0
- package/.claude/skills/loop2-output-processing/execute-and-extract.sh.backup +36 -0
- package/.claude/skills/loop2-output-processing/parse-feedback.sh +147 -0
- package/.claude/skills/loop2-output-processing/process-validator-output.sh +275 -0
- package/.claude/skills/loop2-output-processing/test-bug27-fix.sh +200 -0
- package/.claude/skills/loop2-output-processing/test-loop2-processing.sh +113 -0
- package/.claude/skills/loop3-output-processing/AGENT_COMPLETION_PROTOCOL.md +206 -0
- package/.claude/skills/loop3-output-processing/SKILL.md +421 -0
- package/.claude/skills/loop3-output-processing/calculate-confidence.sh +28 -0
- package/.claude/skills/loop3-output-processing/execute-and-extract.sh +85 -0
- package/.claude/skills/loop3-output-processing/parse-confidence.sh +31 -0
- package/.claude/skills/loop3-output-processing/test-agent-timeout.sh +327 -0
- package/.claude/skills/loop3-output-processing/test-loop3-processing.sh +155 -0
- package/.claude/skills/loop3-output-processing/verify-deliverables.sh +42 -0
- package/.claude/skills/pattern-extraction/SKILL.md +30 -0
- package/.claude/skills/pattern-extraction/extract-patterns.sh +80 -0
- package/.claude/skills/playbook/SKILL.md +113 -0
- package/.claude/skills/playbook/init-playbook.sh +54 -0
- package/.claude/skills/playbook/playbook.db +0 -0
- package/.claude/skills/playbook/query-playbook.sh +79 -0
- package/.claude/skills/playbook/update-playbook.sh +69 -0
- package/.claude/skills/playbook-auto-update/SKILL.md +29 -0
- package/.claude/skills/playbook-auto-update/auto-update-playbook.sh +86 -0
- package/.claude/skills/product-owner-decision/SKILL.md +332 -0
- package/.claude/skills/product-owner-decision/execute-decision.sh +176 -0
- package/.claude/skills/product-owner-decision/parse-decision.sh +66 -0
- package/.claude/skills/product-owner-decision/validate-deliverables.sh +82 -0
- package/.claude/skills/redis-coordination/LOGGING.md +260 -0
- package/.claude/skills/redis-coordination/README.md +30 -29
- package/.claude/skills/redis-coordination/SKILL.md +685 -83
- package/.claude/skills/redis-coordination/analyze-task-complexity.sh +277 -0
- package/.claude/skills/redis-coordination/cfn-loop-exec.sh +468 -0
- package/.claude/skills/redis-coordination/collect-confidence-scores.sh +179 -0
- package/.claude/skills/redis-coordination/collect-results.sh +75 -0
- package/.claude/skills/redis-coordination/data/cfn-loop.db +0 -0
- package/.claude/skills/redis-coordination/{test-orchestrator.sh → demos/test-orchestrator.sh} +25 -0
- package/.claude/skills/redis-coordination/execute-product-owner-decision.sh +258 -0
- package/.claude/skills/redis-coordination/get-agent-timeout.sh +176 -176
- package/.claude/skills/redis-coordination/invoke-waiting-mode.sh +93 -227
- package/.claude/skills/redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
- package/.claude/skills/redis-coordination/log-event.sh +109 -0
- package/.claude/skills/redis-coordination/monitor-cfn-violations.sh +391 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh +31 -993
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
- package/.claude/skills/redis-coordination/query-logs.sh +103 -0
- package/.claude/skills/redis-coordination/retrieve-context.sh +58 -0
- package/.claude/skills/redis-coordination/select-specialist-agent.sh +371 -0
- package/.claude/skills/redis-coordination/semantic-match-tfidf.py +252 -0
- package/.claude/skills/redis-coordination/send-heartbeat.sh +164 -72
- package/.claude/skills/redis-coordination/signal.sh +38 -0
- package/.claude/skills/redis-coordination/store-context.sh +86 -0
- package/.claude/skills/redis-coordination/test-context-injection.sh +354 -0
- package/.claude/skills/redis-coordination/test-timeout-enforcement.sh +513 -0
- package/.claude/skills/redis-coordination/tests/convert-line-endings.sh +15 -0
- package/.claude/skills/redis-coordination/tests/dlq-functionality-test.sh +101 -101
- package/.claude/skills/redis-coordination/tests/edge-cases-test.sh +98 -98
- package/.claude/skills/redis-coordination/tests/integration-test.sh +169 -169
- package/.claude/skills/redis-coordination/tests/retry-mechanism-test.sh +81 -81
- package/.claude/skills/redis-coordination/tests/run-test-suite.sh +91 -91
- package/.claude/skills/redis-coordination/tests/run-tests.sh +4 -0
- package/.claude/skills/redis-coordination/tests/test-primitives.sh +166 -0
- package/.claude/skills/redis-coordination/tests/test-utils.sh +53 -121
- package/.claude/skills/redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
- package/.claude/skills/redis-coordination/tests/test_utils.sh +49 -0
- package/.claude/skills/redis-coordination/v2_modularization/core_orchestration.sh +76 -0
- package/.claude/skills/redis-coordination/validate-parameters.sh +492 -0
- package/.claude/skills/retrospective-report/SKILL.md +31 -0
- package/.claude/skills/retrospective-report/generate-report.sh +101 -0
- package/.claude/skills/run-all-skill-tests.sh +124 -0
- package/.claude/skills/scope-simplifier/SKILL.md +37 -0
- package/.claude/skills/scope-simplifier/simplify-scope.sh +68 -0
- package/.claude/skills/simplified-agent-lifecycle/COST_ANALYSIS.md +49 -0
- package/.claude/skills/simplified-agent-lifecycle/DESIGN.md +98 -0
- package/.claude/skills/simplified-agent-lifecycle/MIGRATION_PLAN.md +74 -0
- package/.claude/skills/specialist-injection/SKILL.md +41 -0
- package/.claude/skills/specialist-injection/recommend-specialist.sh +57 -0
- package/.claude/skills/sprint-execution/SKILL.md +27 -0
- package/.claude/skills/sprint-execution/execute-sprint-task.sh +59 -0
- package/.claude/skills/sprint-execution/execute-sprint.sh +65 -0
- package/.claude/skills/sprint-planner/SKILL.md +37 -0
- package/.claude/skills/sprint-planner/plan-sprint.sh +85 -0
- package/.claude/skills/standardized-error-handling/SKILL.md +56 -0
- package/.claude/skills/standardized-error-handling/capture-agent-error.sh +87 -0
- package/.claude/skills/standardized-error-handling/test-error-handling.sh +166 -0
- package/.claude/skills/task-classifier/SKILL.md +94 -0
- package/.claude/skills/task-classifier/classify-task.sh +115 -0
- package/.claude/skills/validation-templates/SKILL.md +47 -0
- package/.claude/skills/validation-templates/content.json +38 -0
- package/.claude/skills/validation-templates/data.json +38 -0
- package/.claude/skills/validation-templates/design.json +38 -0
- package/.claude/skills/validation-templates/infrastructure.json +38 -0
- package/.claude/skills/validation-templates/research.json +38 -0
- package/.claude/skills/validation-templates/software.json +38 -0
- package/.claude/skills/webapp-testing/README.md +142 -0
- package/.claude/skills/webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
- package/.claude/skills/webapp-testing/SKILL.md +877 -0
- package/.claude/skills/webapp-testing/capture-screenshot.sh +238 -0
- package/.claude/skills/webapp-testing/cfn-loop-integration.sh +265 -0
- package/.claude/skills/webapp-testing/compare-screenshots.sh +199 -0
- package/.claude/skills/webapp-testing/init-storage.sh +150 -0
- package/.claude/skills/webapp-testing/set-baseline.sh +196 -0
- package/.claude/skills/webapp-testing/test-webapp-testing.sh +233 -0
- package/.claude/spawn-pattern-examples.md +3 -3
- package/CLAUDE.md +319 -45
- package/README.md +598 -251
- package/dist/agents/agent-loader.js +146 -165
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/cli/agent-command.js +2 -0
- package/dist/cli/agent-command.js.map +1 -1
- package/dist/cli/agent-definition-parser.js +7 -0
- package/dist/cli/agent-definition-parser.js.map +1 -1
- package/dist/cli/agent-executor.js +145 -11
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +81 -1
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +10 -1
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/anthropic-client.js +192 -13
- package/dist/cli/anthropic-client.js.map +1 -1
- package/dist/cli/cfn-context.js +150 -0
- package/dist/cli/cfn-context.js.map +1 -1
- package/dist/cli/cfn-fork.js +159 -0
- package/dist/cli/cfn-fork.js.map +1 -0
- package/dist/cli/cli-agent-context.js +8 -3
- package/dist/cli/cli-agent-context.js.map +1 -1
- package/dist/cli/config-manager.js +109 -91
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/conversation-fork.js +201 -0
- package/dist/cli/conversation-fork.js.map +1 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tool-definitions.js +263 -0
- package/dist/cli/tool-definitions.js.map +1 -0
- package/dist/cli/tool-executor.js +247 -0
- package/dist/cli/tool-executor.js.map +1 -0
- package/dist/hello.js +8 -0
- package/dist/hello.js.map +1 -0
- package/package.json +14 -6
- package/scripts/README.md +68 -0
- package/scripts/cfn-intervention-example.sh +21 -0
- package/scripts/migrate-test-infrastructure.sh +40 -0
- package/scripts/validate-test-migration.sh +49 -0
- package/scripts/verify-no-secrets.sh +55 -0
- package/.claude/agents/architecture/system-architect.md.backup +0 -603
- package/.claude/agents/code-booster.md +0 -131
- package/.claude/agents/consensus/performance-benchmarker.md +0 -101
- package/.claude/agents/consensus/security-manager.md +0 -107
- package/.claude/agents/context-curator.md +0 -167
- package/.claude/agents/context-reflector.md +0 -65
- package/.claude/agents/core-agents/cfn-loop-coordinator.md +0 -134
- package/.claude/agents/core-agents/code-quality-validator.md +0 -149
- package/.claude/agents/core-agents/context-curator.md +0 -452
- package/.claude/agents/core-agents/context-reflector.md +0 -273
- package/.claude/agents/core-agents/cost-savings-cfn-loop-coordinator.md +0 -235
- package/.claude/agents/core-agents/tester.md +0 -170
- package/.claude/agents/development/backend-dev.md +0 -165
- package/.claude/agents/devops/devops-engineer.md +0 -148
- package/.claude/agents/frontend/interaction-tester.md +0 -139
- package/.claude/agents/frontend/react-frontend-engineer.md +0 -9
- package/.claude/agents/personas/accessibility-advocate-persona.md +0 -107
- package/.claude/agents/testing/production-validator.md +0 -179
- package/.claude/agents/testing/tdd-london-swarm.md +0 -209
- package/.claude/agents/testing/unit/tdd-london-swarm.md +0 -43
- package/.claude/agents/testing/validation/production-validator.md +0 -43
- package/.claude/api-configs/config-current-zai-config.env +0 -62
- package/.claude/api-configs/config-test-zai-config.env +0 -62
- package/.claude/api-configs/env-backups/before-anthropic-20251020-025404.env +0 -62
- package/.claude/api-configs/env-backups/before-restore-20251020-025431.env +0 -62
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-1760949407 +0 -933
- package/dist/cli/cli-agent-context.test.js +0 -451
- package/dist/cli/cli-agent-context.test.js.map +0 -1
- package/dist/coordination/fleet-manager.test.js +0 -141
- package/dist/coordination/fleet-manager.test.js.map +0 -1
- package/dist/middleware/transparency-middleware.test.js +0 -184
- package/dist/middleware/transparency-middleware.test.js.map +0 -1
- /package/.claude/agents/{core-agents → developers}/researcher.md +0 -0
- /package/.claude/agents/{consensus → specialists}/crdt-synchronizer.md +0 -0
- /package/.claude/agents/{consensus → specialists}/quorum-manager.md +0 -0
- /package/.claude/agents/{consensus → specialists}/raft-manager.md +0 -0
- /package/.claude/{agents/core-agents → agents-ignore}/coordinator.md +0 -0
- /package/.claude/{agents/core-agents/cost-savings-coordinator.md → agents-ignore/cost-savings-coordinator.md.backup} +0 -0
- /package/.claude/skills/redis-coordination/{phase4-wake-queue-test-report.md → demos/phase4-wake-queue-test-report.md} +0 -0
- /package/.claude/skills/redis-coordination/{test-bzpopmin-fix.sh → demos/test-bzpopmin-fix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-cancel-swarm.sh → demos/test-cancel-swarm.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-dlq.sh → demos/test-dlq.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-iteration-feedback.sh → demos/test-iteration-feedback.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-priority-wake-phase4-unix.sh → demos/test-priority-wake-phase4-unix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-priority-wake-phase4.sh → demos/test-priority-wake-phase4.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-priority-wake.sh → demos/test-priority-wake.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quick-fix.sh → demos/test-quick-fix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-absolute.sh → demos/test-quorum-absolute.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-fallback.sh → demos/test-quorum-fallback.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-percentage.sh → demos/test-quorum-percentage.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-with-retry.sh → demos/test-quorum-with-retry.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum.sh → demos/test-quorum.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-shutdown-handling.sh → demos/test-shutdown-handling.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-shutdown.sh → demos/test-shutdown.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-utils-unix.sh → demos/test-utils-unix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-utils.sh → demos/test-utils.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-waiting-mode.sh → demos/test-waiting-mode.sh} +0 -0
|
@@ -3,37 +3,21 @@
|
|
|
3
3
|
# Redis Waiting Mode CLI Wrapper for Agents
|
|
4
4
|
#
|
|
5
5
|
# Usage:
|
|
6
|
-
# ./invoke-waiting-mode.sh enter --task-id <task> --agent-id <agent> --context <context>
|
|
7
|
-
# ./invoke-waiting-mode.sh wake --task-id <task> --agent-id <agent> --reason <reason> [--iteration <n>] [--priority <0-100>]
|
|
8
6
|
# ./invoke-waiting-mode.sh report --task-id <task> --agent-id <agent> --confidence <score> [--iteration <n>]
|
|
9
7
|
# ./invoke-waiting-mode.sh collect --task-id <task> --agent-ids <id1,id2,id3>
|
|
10
8
|
# ./invoke-waiting-mode.sh shutdown --task-id <task> [--reason <reason>]
|
|
11
9
|
#
|
|
10
|
+
# DEPRECATION NOTICE:
|
|
11
|
+
# - 'enter' and 'wake' subcommands are DEPRECATED
|
|
12
|
+
# - This script now only supports 'report', 'collect', and 'shutdown' subcommands
|
|
13
|
+
# - Agents are expected to exit cleanly without waiting mode
|
|
14
|
+
#
|
|
12
15
|
# Priority Levels (0-100, higher = more urgent, default = 50):
|
|
13
16
|
# 90-100: Critical (security patches, system failures)
|
|
14
17
|
# 70-89: High (urgent features, blocking bugs)
|
|
15
18
|
# 40-60: Medium (normal tasks, default)
|
|
16
19
|
# 20-39: Low (optimizations, refactoring)
|
|
17
20
|
# 0-19: Minimal (documentation, cleanup)
|
|
18
|
-
#
|
|
19
|
-
# Examples:
|
|
20
|
-
# # Agent enters waiting mode
|
|
21
|
-
# ./invoke-waiting-mode.sh enter --task-id auth-system --agent-id coder-1 --context "iteration-1"
|
|
22
|
-
#
|
|
23
|
-
# # Coordinator wakes agent with default priority
|
|
24
|
-
# ./invoke-waiting-mode.sh wake --task-id auth-system --agent-id coder-1 --reason cfn_loop_iteration --iteration 2
|
|
25
|
-
#
|
|
26
|
-
# # Coordinator wakes agent with high priority
|
|
27
|
-
# ./invoke-waiting-mode.sh wake --task-id auth-system --agent-id coder-1 --reason security_patch --priority 95
|
|
28
|
-
#
|
|
29
|
-
# # Agent reports result
|
|
30
|
-
# ./invoke-waiting-mode.sh report --task-id auth-system --agent-id coder-1 --confidence 0.85 --iteration 1
|
|
31
|
-
#
|
|
32
|
-
# # Coordinator collects results
|
|
33
|
-
# ./invoke-waiting-mode.sh collect --task-id auth-system --agent-ids coder-1,reviewer-1,tester-1
|
|
34
|
-
#
|
|
35
|
-
# # Coordinator broadcasts shutdown signal
|
|
36
|
-
# ./invoke-waiting-mode.sh shutdown --task-id auth-system --reason task_complete
|
|
37
21
|
|
|
38
22
|
set -euo pipefail
|
|
39
23
|
|
|
@@ -48,13 +32,12 @@ shift || true
|
|
|
48
32
|
TASK_ID=""
|
|
49
33
|
AGENT_ID=""
|
|
50
34
|
AGENT_IDS=""
|
|
51
|
-
CONTEXT=""
|
|
52
35
|
REASON=""
|
|
53
36
|
ITERATION=""
|
|
54
37
|
CONFIDENCE=""
|
|
55
38
|
FEEDBACK=""
|
|
56
|
-
TASK_DESC=""
|
|
57
39
|
PRIORITY=50 # Default medium priority (0-100, higher = more urgent)
|
|
40
|
+
MIN_QUORUM="" # Minimum quorum for consensus validation
|
|
58
41
|
|
|
59
42
|
while [[ $# -gt 0 ]]; do
|
|
60
43
|
case $1 in
|
|
@@ -70,10 +53,6 @@ while [[ $# -gt 0 ]]; do
|
|
|
70
53
|
AGENT_IDS="$2"
|
|
71
54
|
shift 2
|
|
72
55
|
;;
|
|
73
|
-
--context)
|
|
74
|
-
CONTEXT="$2"
|
|
75
|
-
shift 2
|
|
76
|
-
;;
|
|
77
56
|
--reason)
|
|
78
57
|
REASON="$2"
|
|
79
58
|
shift 2
|
|
@@ -90,14 +69,14 @@ while [[ $# -gt 0 ]]; do
|
|
|
90
69
|
FEEDBACK="$2"
|
|
91
70
|
shift 2
|
|
92
71
|
;;
|
|
93
|
-
--task)
|
|
94
|
-
TASK_DESC="$2"
|
|
95
|
-
shift 2
|
|
96
|
-
;;
|
|
97
72
|
--priority)
|
|
98
73
|
PRIORITY="$2"
|
|
99
74
|
shift 2
|
|
100
75
|
;;
|
|
76
|
+
--min-quorum)
|
|
77
|
+
MIN_QUORUM="$2"
|
|
78
|
+
shift 2
|
|
79
|
+
;;
|
|
101
80
|
*)
|
|
102
81
|
echo "Unknown argument: $1"
|
|
103
82
|
exit 1
|
|
@@ -105,156 +84,17 @@ while [[ $# -gt 0 ]]; do
|
|
|
105
84
|
esac
|
|
106
85
|
done
|
|
107
86
|
|
|
108
|
-
# Validate required arguments
|
|
109
87
|
case "$COMMAND" in
|
|
110
88
|
enter)
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
fi
|
|
115
|
-
|
|
116
|
-
# Enter waiting mode
|
|
117
|
-
READY_KEY="swarm:${TASK_ID}:${AGENT_ID}:ready"
|
|
118
|
-
WAKE_QUEUE="swarm:${TASK_ID}:${AGENT_ID}:wake-queue"
|
|
119
|
-
SHUTDOWN_KEY="swarm:${TASK_ID}:shutdown"
|
|
120
|
-
|
|
121
|
-
# Publish ready status
|
|
122
|
-
READY_MSG=$(jq -n \
|
|
123
|
-
--arg status "waiting" \
|
|
124
|
-
--arg context "$CONTEXT" \
|
|
125
|
-
--arg ts "$(date +%s)" \
|
|
126
|
-
'{status: $status, context: $context, timestamp: ($ts | tonumber)}')
|
|
127
|
-
|
|
128
|
-
echo "$READY_MSG" | redis-cli -x LPUSH "$READY_KEY" >/dev/null
|
|
129
|
-
|
|
130
|
-
echo "[$AGENT_ID] Entered waiting mode (context: $CONTEXT)"
|
|
131
|
-
echo "[$AGENT_ID] Blocking on priority queue $WAKE_QUEUE and $SHUTDOWN_KEY (infinite timeout)..."
|
|
132
|
-
echo "[$AGENT_ID] Zero token cost while waiting"
|
|
133
|
-
|
|
134
|
-
# Poll loop: check shutdown first, then block on wake queue with timeout
|
|
135
|
-
# This allows us to support both priority queues and shutdown signals
|
|
136
|
-
while true; do
|
|
137
|
-
# Check for shutdown signal first (highest priority)
|
|
138
|
-
SHUTDOWN_CHECK=$(redis-cli LPOP "$SHUTDOWN_KEY")
|
|
139
|
-
|
|
140
|
-
if [ -n "$SHUTDOWN_CHECK" ] && [ "$SHUTDOWN_CHECK" != "(nil)" ]; then
|
|
141
|
-
# Shutdown signal received
|
|
142
|
-
SHUTDOWN_REASON=$(echo "$SHUTDOWN_CHECK" | jq -r '.reason // "unknown"')
|
|
143
|
-
echo "[$AGENT_ID] 🛑 Shutdown signal received"
|
|
144
|
-
echo "[$AGENT_ID] Reason: $SHUTDOWN_REASON"
|
|
145
|
-
echo "$SHUTDOWN_CHECK" | jq '.'
|
|
146
|
-
|
|
147
|
-
# Exit with SIGINT code to indicate graceful shutdown
|
|
148
|
-
exit 130
|
|
149
|
-
fi
|
|
150
|
-
|
|
151
|
-
# Block on wake queue with 1-second timeout (allows periodic shutdown checks)
|
|
152
|
-
# BZPOPMIN returns: key, member, score (3 lines)
|
|
153
|
-
WAKE_RESULT=$(redis-cli BZPOPMIN "$WAKE_QUEUE" 1 2>/dev/null)
|
|
154
|
-
|
|
155
|
-
if [ -n "$WAKE_RESULT" ] && [ "$WAKE_RESULT" != "(nil)" ]; then
|
|
156
|
-
# Parse result (BZPOPMIN returns 3 lines: key, member, score)
|
|
157
|
-
WAKE_MSG=$(echo "$WAKE_RESULT" | sed -n '2p')
|
|
158
|
-
|
|
159
|
-
# Validate JSON before processing
|
|
160
|
-
if echo "$WAKE_MSG" | jq empty 2>/dev/null; then
|
|
161
|
-
echo "[$AGENT_ID] ✅ Woken up!"
|
|
162
|
-
echo "$WAKE_MSG" | jq '.'
|
|
163
|
-
|
|
164
|
-
# Return wake message to caller
|
|
165
|
-
echo "$WAKE_MSG"
|
|
166
|
-
break
|
|
167
|
-
else
|
|
168
|
-
echo "[$AGENT_ID] ⚠️ Invalid JSON in wake message, ignoring"
|
|
169
|
-
continue
|
|
170
|
-
fi
|
|
171
|
-
fi
|
|
172
|
-
|
|
173
|
-
# If no wake signal received, loop back to check shutdown again
|
|
174
|
-
done
|
|
89
|
+
echo "[DEPRECATED] 'enter' subcommand is no longer supported."
|
|
90
|
+
echo "Agents should no longer use waiting mode. Exit cleanly."
|
|
91
|
+
exit 1
|
|
175
92
|
;;
|
|
176
93
|
|
|
177
94
|
wake)
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
fi
|
|
182
|
-
|
|
183
|
-
WAKE_QUEUE="swarm:${TASK_ID}:${AGENT_ID}:wake-queue"
|
|
184
|
-
|
|
185
|
-
# Build wake message (compact JSON for Redis storage)
|
|
186
|
-
WAKE_MSG=$(jq -nc \
|
|
187
|
-
--arg reason "$REASON" \
|
|
188
|
-
--arg iteration "${ITERATION:-0}" \
|
|
189
|
-
--arg task "${TASK_DESC:-}" \
|
|
190
|
-
--arg feedback "${FEEDBACK:-}" \
|
|
191
|
-
--arg priority "$PRIORITY" \
|
|
192
|
-
--arg ts "$(date +%s)" \
|
|
193
|
-
'{
|
|
194
|
-
reason: $reason,
|
|
195
|
-
iteration: ($iteration | tonumber),
|
|
196
|
-
task: $task,
|
|
197
|
-
feedback: ($feedback | split(",") | map(select(length > 0))),
|
|
198
|
-
priority: ($priority | tonumber),
|
|
199
|
-
timestamp: ($ts | tonumber)
|
|
200
|
-
}')
|
|
201
|
-
|
|
202
|
-
# Store feedback in Redis for agent to read (if provided and iteration > 0)
|
|
203
|
-
# Debug: Echo values before conditional (only if feedback provided)
|
|
204
|
-
if [ -n "$FEEDBACK" ]; then
|
|
205
|
-
[ "$DEBUG" = "true" ] && echo "[DEBUG] Checking feedback storage: FEEDBACK='$FEEDBACK', ITERATION='${ITERATION:-0}'"
|
|
206
|
-
fi
|
|
207
|
-
|
|
208
|
-
# Only store feedback if: feedback is non-empty AND iteration > 0
|
|
209
|
-
# Check iteration value explicitly (not just default)
|
|
210
|
-
if [ -n "$FEEDBACK" ] && [ -n "$ITERATION" ] && [ "$ITERATION" -gt 0 ]; then
|
|
211
|
-
FEEDBACK_KEY="swarm:${TASK_ID}:${AGENT_ID}:feedback:iteration-${ITERATION}"
|
|
212
|
-
FEEDBACK_ARRAY=$(echo "$FEEDBACK" | jq -Rc 'split(",") | map(select(length > 0))')
|
|
213
|
-
|
|
214
|
-
# Only store if feedback array is not empty after filtering
|
|
215
|
-
ARRAY_LENGTH=$(echo "$FEEDBACK_ARRAY" | jq 'length')
|
|
216
|
-
if [ "$ARRAY_LENGTH" -gt 0 ]; then
|
|
217
|
-
# Store as JSON array with 24-hour TTL using redis-cli -x (reads from stdin)
|
|
218
|
-
# Note: -x reads LAST argument from stdin, so we can't use SET key value EX ttl
|
|
219
|
-
# Instead: SET key (value from stdin), then EXPIRE key ttl
|
|
220
|
-
REDIS_RESULT=$(printf '%s' "$FEEDBACK_ARRAY" | redis-cli -x SET "$FEEDBACK_KEY")
|
|
221
|
-
redis-cli EXPIRE "$FEEDBACK_KEY" 86400 >/dev/null
|
|
222
|
-
|
|
223
|
-
# Always log feedback storage (not just in DEBUG mode)
|
|
224
|
-
if [ "$REDIS_RESULT" = "OK" ]; then
|
|
225
|
-
echo " [Feedback] Stored $ARRAY_LENGTH items in Redis (TTL: 24h)"
|
|
226
|
-
fi
|
|
227
|
-
|
|
228
|
-
if [ "$DEBUG" = "true" ]; then
|
|
229
|
-
echo "[DEBUG] Stored feedback in $FEEDBACK_KEY (TTL: 24h)"
|
|
230
|
-
echo "[DEBUG] Feedback: $FEEDBACK_ARRAY"
|
|
231
|
-
echo "[DEBUG] Redis SET result: $REDIS_RESULT"
|
|
232
|
-
fi
|
|
233
|
-
fi
|
|
234
|
-
fi
|
|
235
|
-
|
|
236
|
-
# Calculate priority score (lower score = higher priority, popped first)
|
|
237
|
-
# Score = (100 - priority) * 1000000 + timestamp
|
|
238
|
-
# This ensures higher priority messages are processed first, with FIFO for same priority
|
|
239
|
-
TIMESTAMP=$(date +%s)
|
|
240
|
-
PRIORITY_SCORE=$(echo "(100 - $PRIORITY) * 1000000 + $TIMESTAMP" | bc)
|
|
241
|
-
|
|
242
|
-
# Debug output
|
|
243
|
-
if [ "$DEBUG" = "true" ]; then
|
|
244
|
-
echo "[DEBUG] WAKE_QUEUE: $WAKE_QUEUE"
|
|
245
|
-
echo "[DEBUG] PRIORITY: $PRIORITY"
|
|
246
|
-
echo "[DEBUG] Priority score: $PRIORITY_SCORE"
|
|
247
|
-
echo "[DEBUG] Message: $WAKE_MSG"
|
|
248
|
-
fi
|
|
249
|
-
|
|
250
|
-
# Add to sorted set (ZADD with calculated score)
|
|
251
|
-
# Use redis-cli with ZADD and pass JSON as the member directly
|
|
252
|
-
redis-cli ZADD "$WAKE_QUEUE" "$PRIORITY_SCORE" "$WAKE_MSG" >/dev/null
|
|
253
|
-
|
|
254
|
-
echo "[Coordinator] ✅ Wake signal sent to $AGENT_ID"
|
|
255
|
-
echo " Reason: $REASON"
|
|
256
|
-
echo " Priority: $PRIORITY (score: $PRIORITY_SCORE)"
|
|
257
|
-
[ -n "$ITERATION" ] && echo " Iteration: $ITERATION"
|
|
95
|
+
echo "[DEPRECATED] 'wake' subcommand is no longer supported."
|
|
96
|
+
echo "Coordinator should spawn agents directly without waiting mode."
|
|
97
|
+
exit 1
|
|
258
98
|
;;
|
|
259
99
|
|
|
260
100
|
report)
|
|
@@ -290,12 +130,13 @@ case "$COMMAND" in
|
|
|
290
130
|
|
|
291
131
|
collect)
|
|
292
132
|
if [ -z "$TASK_ID" ] || [ -z "$AGENT_IDS" ]; then
|
|
293
|
-
echo "Error: collect requires --task-id and --agent-ids"
|
|
133
|
+
echo "Error: collect requires --task-id and --agent-ids" >&2
|
|
294
134
|
exit 1
|
|
295
135
|
fi
|
|
296
136
|
|
|
297
|
-
|
|
298
|
-
echo ""
|
|
137
|
+
# Output verbose messages to stderr
|
|
138
|
+
echo "[Coordinator] Collecting results from agents..." >&2
|
|
139
|
+
echo "" >&2
|
|
299
140
|
|
|
300
141
|
# Split agent IDs
|
|
301
142
|
IFS=',' read -ra AGENTS <<< "$AGENT_IDS"
|
|
@@ -307,31 +148,70 @@ case "$COMMAND" in
|
|
|
307
148
|
for AGENT in "${AGENTS[@]}"; do
|
|
308
149
|
RESULT_KEY="swarm:${TASK_ID}:${AGENT}:result"
|
|
309
150
|
|
|
310
|
-
# Get latest result (non-blocking)
|
|
311
|
-
|
|
151
|
+
# Get latest result (non-blocking, non-destructive)
|
|
152
|
+
# Use LINDEX instead of LPOP to preserve results for multiple reads
|
|
153
|
+
RESULT=$(redis-cli LINDEX "$RESULT_KEY" 0)
|
|
312
154
|
|
|
313
155
|
if [ -n "$RESULT" ] && [ "$RESULT" != "(nil)" ]; then
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
echo "$RESULT" | jq -r '.feedback
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
156
|
+
# Handle both simple numeric format and JSON format
|
|
157
|
+
# Try to parse as JSON first, fall back to simple number
|
|
158
|
+
if CONF=$(echo "$RESULT" | jq -r '.confidence' 2>/dev/null) && [ "$CONF" != "null" ]; then
|
|
159
|
+
# JSON format: {"confidence":0.85,"iteration":1,...}
|
|
160
|
+
echo " [$AGENT] Confidence: $CONF" >&2
|
|
161
|
+
RESULTS+=("$RESULT")
|
|
162
|
+
CONFIDENCES+=("$CONF")
|
|
163
|
+
|
|
164
|
+
# Check if result includes feedback array
|
|
165
|
+
FEEDBACK=$(echo "$RESULT" | jq -r '.feedback // empty | .[]?' 2>/dev/null)
|
|
166
|
+
if [ -n "$FEEDBACK" ]; then
|
|
167
|
+
echo " [$AGENT] Feedback provided:" >&2
|
|
168
|
+
echo "$RESULT" | jq -r '.feedback[]' | sed 's/^/ - /' >&2
|
|
169
|
+
|
|
170
|
+
# Collect all feedback items
|
|
171
|
+
while IFS= read -r ITEM; do
|
|
172
|
+
ALL_FEEDBACK+=("$ITEM")
|
|
173
|
+
done < <(echo "$RESULT" | jq -r '.feedback[]')
|
|
174
|
+
fi
|
|
175
|
+
elif [[ "$RESULT" =~ ^[0-9]+\.?[0-9]*$ ]]; then
|
|
176
|
+
# Simple numeric format: "0.85"
|
|
177
|
+
CONF="$RESULT"
|
|
178
|
+
echo " [$AGENT] Confidence: $CONF" >&2
|
|
179
|
+
CONFIDENCES+=("$CONF")
|
|
180
|
+
else
|
|
181
|
+
echo " [$AGENT] ⚠️ Invalid result format: $RESULT" >&2
|
|
329
182
|
fi
|
|
330
183
|
else
|
|
331
|
-
echo " [$AGENT] ⚠️ No result found"
|
|
184
|
+
echo " [$AGENT] ⚠️ No result found" >&2
|
|
332
185
|
fi
|
|
333
186
|
done
|
|
334
187
|
|
|
188
|
+
# Validate quorum if specified
|
|
189
|
+
TOTAL_AGENTS=${#AGENTS[@]}
|
|
190
|
+
RESPONDING_AGENTS=${#CONFIDENCES[@]}
|
|
191
|
+
|
|
192
|
+
if [ -n "$MIN_QUORUM" ]; then
|
|
193
|
+
# Parse min-quorum (supports: absolute number, percentage, or decimal)
|
|
194
|
+
if [[ "$MIN_QUORUM" =~ ^[0-9]+%$ ]]; then
|
|
195
|
+
# Percentage format: "66%"
|
|
196
|
+
PCT=${MIN_QUORUM%\%}
|
|
197
|
+
REQUIRED=$(echo "scale=0; ($TOTAL_AGENTS * $PCT) / 100" | bc)
|
|
198
|
+
elif [[ "$MIN_QUORUM" =~ ^0\.[0-9]+$ ]]; then
|
|
199
|
+
# Decimal format: "0.66"
|
|
200
|
+
REQUIRED=$(echo "scale=0; ($TOTAL_AGENTS * $MIN_QUORUM) / 1" | bc)
|
|
201
|
+
else
|
|
202
|
+
# Absolute number format: "2"
|
|
203
|
+
REQUIRED=$MIN_QUORUM
|
|
204
|
+
fi
|
|
205
|
+
|
|
206
|
+
if [ "$RESPONDING_AGENTS" -lt "$REQUIRED" ]; then
|
|
207
|
+
echo "" >&2
|
|
208
|
+
echo "[Coordinator] ❌ Quorum not met" >&2
|
|
209
|
+
echo " Required: $REQUIRED agents" >&2
|
|
210
|
+
echo " Responding: $RESPONDING_AGENTS agents" >&2
|
|
211
|
+
exit 1
|
|
212
|
+
fi
|
|
213
|
+
fi
|
|
214
|
+
|
|
335
215
|
# Calculate consensus
|
|
336
216
|
if [ ${#CONFIDENCES[@]} -gt 0 ]; then
|
|
337
217
|
SUM=0
|
|
@@ -341,19 +221,25 @@ case "$COMMAND" in
|
|
|
341
221
|
COUNT=${#CONFIDENCES[@]}
|
|
342
222
|
CONSENSUS=$(echo "scale=2; $SUM / $COUNT" | bc)
|
|
343
223
|
|
|
344
|
-
|
|
345
|
-
|
|
224
|
+
# Ensure leading zero for bc output (handles .87 -> 0.87)
|
|
225
|
+
if [[ "$CONSENSUS" =~ ^\. ]]; then
|
|
226
|
+
CONSENSUS="0$CONSENSUS"
|
|
227
|
+
fi
|
|
228
|
+
|
|
229
|
+
echo "" >&2
|
|
230
|
+
echo "[Coordinator] Consensus: $CONSENSUS" >&2
|
|
346
231
|
|
|
347
232
|
# Print aggregated feedback if available
|
|
348
233
|
if [ ${#ALL_FEEDBACK[@]} -gt 0 ]; then
|
|
349
|
-
echo "[Coordinator] Aggregated Feedback (${#ALL_FEEDBACK[@]} items):"
|
|
350
|
-
printf '%s\n' "${ALL_FEEDBACK[@]}" | sort -u | sed 's/^/ - /'
|
|
234
|
+
echo "[Coordinator] Aggregated Feedback (${#ALL_FEEDBACK[@]} items):" >&2
|
|
235
|
+
printf '%s\n' "${ALL_FEEDBACK[@]}" | sort -u | sed 's/^/ - /' >&2
|
|
351
236
|
fi
|
|
352
237
|
|
|
238
|
+
# Output only consensus value to stdout for callers
|
|
353
239
|
echo "$CONSENSUS"
|
|
354
240
|
else
|
|
355
|
-
echo ""
|
|
356
|
-
echo "[Coordinator] No results to calculate consensus"
|
|
241
|
+
echo "" >&2
|
|
242
|
+
echo "[Coordinator] No results to calculate consensus" >&2
|
|
357
243
|
echo "0.0"
|
|
358
244
|
fi
|
|
359
245
|
;;
|
|
@@ -375,43 +261,23 @@ case "$COMMAND" in
|
|
|
375
261
|
timestamp: ($ts | tonumber)
|
|
376
262
|
}')
|
|
377
263
|
|
|
378
|
-
# Broadcast shutdown signal
|
|
379
|
-
# All waiting agents will check this key and exit gracefully
|
|
264
|
+
# Broadcast shutdown signal
|
|
380
265
|
echo "$SHUTDOWN_MSG" | redis-cli -x LPUSH "$SHUTDOWN_KEY" >/dev/null
|
|
381
266
|
|
|
382
267
|
echo "[Coordinator] 🛑 Shutdown signal broadcasted"
|
|
383
268
|
echo " Task ID: $TASK_ID"
|
|
384
269
|
echo " Reason: ${REASON:-task_complete}"
|
|
385
|
-
echo ""
|
|
386
|
-
echo "Note: Signal added to $SHUTDOWN_KEY"
|
|
387
|
-
echo "All waiting agents will receive shutdown on next poll cycle (max 1 second)"
|
|
388
270
|
;;
|
|
389
271
|
|
|
390
272
|
*)
|
|
391
|
-
|
|
392
273
|
echo "Usage: $0 <command> [options]"
|
|
393
274
|
echo ""
|
|
394
275
|
echo "Commands:"
|
|
395
|
-
echo " enter - Agent enters waiting mode"
|
|
396
|
-
echo " wake - Coordinator wakes an agent (supports --priority 0-100)"
|
|
397
276
|
echo " report - Agent reports result"
|
|
398
277
|
echo " collect - Coordinator collects results"
|
|
399
|
-
echo " shutdown - Coordinator broadcasts shutdown signal
|
|
400
|
-
echo ""
|
|
401
|
-
echo "Priority Levels (0-100, higher = more urgent, default = 50):"
|
|
402
|
-
echo " 90-100: Critical (security patches, system failures)"
|
|
403
|
-
echo " 70-89: High (urgent features, blocking bugs)"
|
|
404
|
-
echo " 40-60: Medium (normal tasks, default)"
|
|
405
|
-
echo " 20-39: Low (optimizations, refactoring)"
|
|
406
|
-
echo " 0-19: Minimal (documentation, cleanup)"
|
|
278
|
+
echo " shutdown - Coordinator broadcasts shutdown signal"
|
|
407
279
|
echo ""
|
|
408
|
-
echo "
|
|
409
|
-
echo " $0 enter --task-id auth --agent-id coder-1 --context iteration-1"
|
|
410
|
-
echo " $0 wake --task-id auth --agent-id coder-1 --reason cfn_loop_iteration --iteration 2"
|
|
411
|
-
echo " $0 wake --task-id auth --agent-id coder-1 --reason security_patch --priority 95"
|
|
412
|
-
echo " $0 report --task-id auth --agent-id coder-1 --confidence 0.85 --iteration 1"
|
|
413
|
-
echo " $0 collect --task-id auth --agent-ids coder-1,reviewer-1,tester-1"
|
|
414
|
-
echo " $0 shutdown --task-id auth --reason task_complete"
|
|
280
|
+
echo "Note: 'enter' and 'wake' subcommands are DEPRECATED"
|
|
415
281
|
exit 1
|
|
416
282
|
;;
|
|
417
|
-
esac
|
|
283
|
+
esac
|