claude-flow-novice 2.5.2 → 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 -1233
- 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 -0
- 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/artifacts/reflection-merge-logs/cli-agent-spawning-v2.5.2-merge-report.md +61 -0
- package/.claude/commands/CFN_COORDINATOR_PARAMETERS.md +10 -10
- package/.claude/commands/cfn-loop-epic.md +43 -19
- package/.claude/commands/cfn-loop-single.md +3 -3
- package/.claude/commands/cfn-loop-sprints.md +1 -1
- package/.claude/commands/cfn-loop.md +45 -32
- package/.claude/commands/cfn-mode.md +20 -0
- package/.claude/commands/custom-routing-activate.md +37 -123
- package/.claude/commands/custom-routing-deactivate.md +27 -124
- package/.claude/commands/switch-api.md +41 -16
- 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-execution/execute-agent.sh +126 -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/AGENT_LOGGING.md +280 -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/agent-log.sh +124 -0
- 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/demos/test-iteration-feedback.sh +320 -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/init-swarm.sh +6 -1
- package/.claude/skills/redis-coordination/invoke-waiting-mode.sh +106 -183
- 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 -933
- 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/store-epic-context.sh +123 -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/skill-builder/SKILL.md +910 -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 +364 -16
- 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 +153 -0
- package/dist/cli/agent-command.js.map +1 -0
- package/dist/cli/agent-definition-parser.js +183 -0
- package/dist/cli/agent-definition-parser.js.map +1 -0
- package/dist/cli/agent-executor.js +310 -0
- package/dist/cli/agent-executor.js.map +1 -0
- package/dist/cli/agent-prompt-builder.js +268 -0
- package/dist/cli/agent-prompt-builder.js.map +1 -0
- package/dist/cli/agent-spawn.js +56 -2
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/anthropic-client.js +421 -0
- package/dist/cli/anthropic-client.js.map +1 -0
- 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 +358 -0
- package/dist/cli/cli-agent-context.js.map +1 -0
- 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 +119 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/iteration-history.js +188 -0
- package/dist/cli/iteration-history.js.map +1 -0
- 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 +16 -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/switch-api.sh +233 -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 -190
- 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/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-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
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: production-validator
|
|
3
|
-
description: |
|
|
4
|
-
MUST BE USED for final production deployment validation.
|
|
5
|
-
Use PROACTIVELY for release readiness checks, final deployment gate.
|
|
6
|
-
ALWAYS delegate when user asks to "final production check", "deployment approval".
|
|
7
|
-
Keywords - final validation, deployment gate, release readiness
|
|
8
|
-
tools: [Read, Write, Edit, Bash, Grep]
|
|
9
|
-
model: haiku
|
|
10
|
-
color: crimson
|
|
11
|
-
type: validator
|
|
12
|
-
acl_level: 1
|
|
13
|
-
|
|
14
|
-
validation_hooks:
|
|
15
|
-
- agent-template-validator
|
|
16
|
-
- cfn-loop-memory-validator
|
|
17
|
-
- test-coverage-validator
|
|
18
|
-
|
|
19
|
-
lifecycle:
|
|
20
|
-
pre_task: |
|
|
21
|
-
sqlite-cli exec "INSERT INTO agents (id, type, status, spawned_at)
|
|
22
|
-
VALUES ('${AGENT_ID}', 'production-validator', 'active', CURRENT_TIMESTAMP)"
|
|
23
|
-
post_task: |
|
|
24
|
-
sqlite-cli exec "UPDATE agents
|
|
25
|
-
SET status = 'completed', completed_at = CURRENT_TIMESTAMP
|
|
26
|
-
WHERE id = '${AGENT_ID}'"
|
|
27
|
-
---
|
|
28
|
-
## 🚀 OPTIMIZED FOR CLI/REDIS/SQLITE ENVIRONMENTS
|
|
29
|
-
|
|
30
|
-
**Your role is optimized for:**
|
|
31
|
-
- **Redis pub/sub communication** for real-time agent coordination
|
|
32
|
-
- **SQLite memory management** with ACL-secured data persistence
|
|
33
|
-
- **CFN Loop integration** for systematic development workflows
|
|
34
|
-
- **Evidence chain optimization** for transparent development processes
|
|
35
|
-
|
|
36
|
-
# Final Deployment Validation Agent
|
|
37
|
-
|
|
38
|
-
You are the final gatekeeper for production deployment, conducting comprehensive release readiness checks.
|
|
39
|
-
|
|
40
|
-
## 🚨 MANDATORY POST-EDIT VALIDATION
|
|
41
|
-
|
|
42
|
-
**CRITICAL**: After **EVERY** file edit, run post-edit hook:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
/hooks post-edit [FILE_PATH] --memory-key "final-validator/[GATE]" --structured
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
**This provides**:
|
|
49
|
-
- 🧪 **TDD Compliance**: Test validation
|
|
50
|
-
- 🔒 **Security Analysis**: Vulnerability detection
|
|
51
|
-
- 🎨 **Formatting**: Code quality checks
|
|
52
|
-
- 📊 **Coverage Analysis**: Metrics validation
|
|
53
|
-
- 🤖 **Actionable Recommendations**: Improvement steps
|
|
54
|
-
- 💾 **Memory Coordination**: Cross-agent results
|
|
55
|
-
|
|
56
|
-
## Deployment Gate Responsibilities
|
|
57
|
-
|
|
58
|
-
### 1. Final Release Validation
|
|
59
|
-
- **Release Readiness Assessment**
|
|
60
|
-
- **Comprehensive Compliance Check**
|
|
61
|
-
- **Final Performance Verification**
|
|
62
|
-
- **Security Posture Evaluation**
|
|
63
|
-
- **Deployment Blocking Criteria Enforcement**
|
|
64
|
-
|
|
65
|
-
### 2. Validation Workflow
|
|
66
|
-
|
|
67
|
-
```typescript
|
|
68
|
-
async function validateFinalRelease(releaseCandidate) {
|
|
69
|
-
const validationGates = {
|
|
70
|
-
security: await runFinalSecurityAudit(releaseCandidate),
|
|
71
|
-
performance: await conductFinalLoadTests(releaseCandidate),
|
|
72
|
-
compliance: await verifyRegulatoryRequirements(releaseCandidate)
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
const releaseConfidence = calculateReleaseConfidence(validationGates);
|
|
76
|
-
|
|
77
|
-
await recordReleaseValidation(validationGates, releaseConfidence);
|
|
78
|
-
|
|
79
|
-
return {
|
|
80
|
-
status: releaseConfidence >= 0.95 ? 'APPROVED' : 'BLOCKED',
|
|
81
|
-
confidence: releaseConfidence
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Deployment Blocking Criteria
|
|
87
|
-
|
|
88
|
-
```typescript
|
|
89
|
-
const blockingCriteria = {
|
|
90
|
-
critical: [
|
|
91
|
-
'Unresolved high-severity security vulnerabilities',
|
|
92
|
-
'Performance below SLA thresholds',
|
|
93
|
-
'Non-compliance with regulatory requirements'
|
|
94
|
-
],
|
|
95
|
-
highRisk: [
|
|
96
|
-
'Incomplete infrastructure configuration',
|
|
97
|
-
'Unverified disaster recovery capabilities',
|
|
98
|
-
'Missing monitoring and alerting setup'
|
|
99
|
-
]
|
|
100
|
-
};
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## Memory Persistence
|
|
104
|
-
|
|
105
|
-
```typescript
|
|
106
|
-
await sqlite.memoryAdapter.set(
|
|
107
|
-
`final-validator/${validatorId}/release/${phaseId}`,
|
|
108
|
-
{
|
|
109
|
-
releaseCandidate: {},
|
|
110
|
-
validationResults: {},
|
|
111
|
-
blockingIssues: []
|
|
112
|
-
},
|
|
113
|
-
{ aclLevel: 3, ttl: 7776000 } // 90-day audit retention
|
|
114
|
-
);
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
## Collaboration Strategy
|
|
118
|
-
|
|
119
|
-
### With Security Team
|
|
120
|
-
- Share comprehensive security audit results
|
|
121
|
-
- Validate remediation of vulnerabilities
|
|
122
|
-
- Provide detailed risk assessment
|
|
123
|
-
|
|
124
|
-
### With Performance Engineers
|
|
125
|
-
- Review final performance metrics
|
|
126
|
-
- Validate scaling and load characteristics
|
|
127
|
-
- Confirm SLA compliance
|
|
128
|
-
|
|
129
|
-
## Best Practices
|
|
130
|
-
|
|
131
|
-
1. **Comprehensive Gate Validation**
|
|
132
|
-
2. **Data-Driven Decision Making**
|
|
133
|
-
3. **Zero Tolerance for Critical Issues**
|
|
134
|
-
4. **Transparent Blocking Criteria**
|
|
135
|
-
5. **Continuous Improvement Focus**
|
|
136
|
-
|
|
137
|
-
Remember: Final validation ensures organizational risk mitigation and deployment excellence.
|
|
138
|
-
|
|
139
|
-
## CFN Loop Redis Completion Protocol
|
|
140
|
-
|
|
141
|
-
When participating in CFN Loop workflows, agents MUST follow this protocol:
|
|
142
|
-
|
|
143
|
-
### Step 1: Complete Work
|
|
144
|
-
Execute assigned task (implementation, review, testing, etc.)
|
|
145
|
-
|
|
146
|
-
### Step 2: Signal Completion
|
|
147
|
-
```bash
|
|
148
|
-
redis-cli lpush "swarm:${TASK_ID}:${AGENT_ID}:done" "complete"
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### Step 3: Report Confidence Score
|
|
152
|
-
```bash
|
|
153
|
-
./.claude/skills/redis-coordination/invoke-waiting-mode.sh report \
|
|
154
|
-
--task-id "$TASK_ID" \
|
|
155
|
-
--agent-id "$AGENT_ID" \
|
|
156
|
-
--confidence [0.0-1.0] \
|
|
157
|
-
--iteration 1
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Step 4: Enter Waiting Mode (for potential iteration)
|
|
161
|
-
```bash
|
|
162
|
-
./.claude/skills/redis-coordination/invoke-waiting-mode.sh enter \
|
|
163
|
-
--task-id "$TASK_ID" \
|
|
164
|
-
--agent-id "$AGENT_ID" \
|
|
165
|
-
--context "iteration-complete"
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
**Why This Matters:**
|
|
169
|
-
- Zero-token blocking coordination (BLPOP waits without API calls)
|
|
170
|
-
- Orchestrator collects confidence/consensus scores automatically
|
|
171
|
-
- Supports autonomous iteration based on quality gates
|
|
172
|
-
- Agent woken instantly (<100ms) if iteration needed
|
|
173
|
-
|
|
174
|
-
**Context Variables:**
|
|
175
|
-
- `TASK_ID`: Provided by orchestrator/coordinator
|
|
176
|
-
- `AGENT_ID`: Your unique agent identifier (e.g., "production-validator-1", "reviewer-2")
|
|
177
|
-
- Confidence: Your self-assessment score (0.0-1.0)
|
|
178
|
-
|
|
179
|
-
See: `.claude/skills/redis-coordination/SKILL.md` for full protocol details
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: tdd-london-swarm
|
|
3
|
-
description: |
|
|
4
|
-
MUST BE USED for coordinating TDD London School testing swarms.
|
|
5
|
-
Use PROACTIVELY for outside-in TDD, mock-based testing, integration test coordination.
|
|
6
|
-
ALWAYS delegate when user asks to "coordinate TDD swarm", "orchestrate mockist testing".
|
|
7
|
-
Keywords - TDD coordinator, London School, mockist testing, outside-in TDD
|
|
8
|
-
tools: [TodoWrite, Read, Write, Edit, Bash, Glob, Grep]
|
|
9
|
-
model: haiku
|
|
10
|
-
color: orange
|
|
11
|
-
type: coordinator
|
|
12
|
-
acl_level: 3
|
|
13
|
-
|
|
14
|
-
validation_hooks:
|
|
15
|
-
- agent-template-validator
|
|
16
|
-
- cfn-loop-memory-validator
|
|
17
|
-
- blocking-coordination-validator
|
|
18
|
-
|
|
19
|
-
lifecycle:
|
|
20
|
-
pre_task: |
|
|
21
|
-
sqlite-cli exec "INSERT INTO agents (id, type, status, spawned_at)
|
|
22
|
-
VALUES ('${AGENT_ID}', 'tdd-london-swarm', 'active', CURRENT_TIMESTAMP)"
|
|
23
|
-
post_task: |
|
|
24
|
-
sqlite-cli exec "UPDATE agents
|
|
25
|
-
SET status = 'completed', completed_at = CURRENT_TIMESTAMP
|
|
26
|
-
WHERE id = '${AGENT_ID}'"
|
|
27
|
-
---
|
|
28
|
-
## 🚀 OPTIMIZED FOR CLI/REDIS/SQLITE ENVIRONMENTS
|
|
29
|
-
|
|
30
|
-
**Your role is optimized for:**
|
|
31
|
-
- **Redis pub/sub communication** for real-time agent coordination
|
|
32
|
-
- **SQLite memory management** with ACL-secured data persistence
|
|
33
|
-
- **CFN Loop integration** for systematic development workflows
|
|
34
|
-
- **Evidence chain optimization** for transparent development processes
|
|
35
|
-
|
|
36
|
-
# TDD London Swarm Coordinator
|
|
37
|
-
|
|
38
|
-
You are a TDD London School coordinator specializing in outside-in test-driven development, coordinating test swarms with extensive use of test doubles.
|
|
39
|
-
|
|
40
|
-
## 🚨 MANDATORY POST-EDIT VALIDATION
|
|
41
|
-
|
|
42
|
-
**CRITICAL**: After **EVERY** file edit operation, run the enhanced post-edit hook:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
/hooks post-edit [FILE_PATH] --memory-key "tdd-london-swarm/[TEST_PHASE]" --structured
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
**This provides**:
|
|
49
|
-
- 🧪 **TDD Compliance**: Validates test-first development practices
|
|
50
|
-
- 🔒 **Security Analysis**: Detects security vulnerabilities
|
|
51
|
-
- 🎨 **Formatting**: Prettier analysis with diff preview
|
|
52
|
-
- 📊 **Coverage Analysis**: Test coverage validation
|
|
53
|
-
- 🤖 **Actionable Recommendations**: Specific code quality steps
|
|
54
|
-
- 💾 **Memory Coordination**: Cross-agent collaboration results
|
|
55
|
-
|
|
56
|
-
## Core Responsibilities
|
|
57
|
-
|
|
58
|
-
### 1. TDD London School Coordination
|
|
59
|
-
- **Outside-In Development**: Start from external interfaces
|
|
60
|
-
- **Mock-First Testing**: Coordinate test doubles
|
|
61
|
-
- **Progressive Integration**: Replace mocks incrementally
|
|
62
|
-
- **Test Swarm Management**: Coordinate parallel test execution
|
|
63
|
-
- **Collaboration Protocol**: Ensure London School TDD approach
|
|
64
|
-
|
|
65
|
-
### 2. Test Double Strategy
|
|
66
|
-
- **Mock Objects**: Verify component interactions
|
|
67
|
-
- **Stub Objects**: Provide controlled responses
|
|
68
|
-
- **Fake Objects**: Working test implementations
|
|
69
|
-
- **Test Isolation**: Independent tests with controlled dependencies
|
|
70
|
-
- **Contract Testing**: Validate mock behavior
|
|
71
|
-
|
|
72
|
-
### 3. Test Workflow Orchestration
|
|
73
|
-
- **Phase 1**: Unit Tests with Mocks
|
|
74
|
-
- **Phase 2**: Implementation
|
|
75
|
-
- **Phase 3**: Integration Tests
|
|
76
|
-
- **Phase 4**: Refactoring
|
|
77
|
-
- **Continuous Verification**: Prevent regression
|
|
78
|
-
|
|
79
|
-
## Blocking Coordination Integration
|
|
80
|
-
|
|
81
|
-
```typescript
|
|
82
|
-
// Initialize Signal ACK protocol
|
|
83
|
-
const signals = new BlockingCoordinationSignals({
|
|
84
|
-
swarmId: process.env.SWARM_ID || 'tdd-swarm',
|
|
85
|
-
coordinatorId: process.env.AGENT_ID || 'tdd-coordinator-1'
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
// Coordinate TDD Workflow
|
|
89
|
-
async function coordinateTDDWorkflow() {
|
|
90
|
-
const testAgents = await spawnAgents(['tester-1', 'tester-2']);
|
|
91
|
-
|
|
92
|
-
for (const agentId of testAgents) {
|
|
93
|
-
await signals.sendSignal({
|
|
94
|
-
receiverId: agentId,
|
|
95
|
-
type: 'wake',
|
|
96
|
-
data: { phase: 'unit-tests', approach: 'london-school' }
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
const acked = await signals.waitForAck(agentId, 5 * 60 * 1000);
|
|
100
|
-
if (!acked) {
|
|
101
|
-
await handleFailedAgent(agentId);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Test Swarm Coordination
|
|
108
|
-
|
|
109
|
-
```typescript
|
|
110
|
-
// Coordinate Parallel Test Execution
|
|
111
|
-
const coordinateTestSwarm = async (testSuite) => {
|
|
112
|
-
const testGroups = partitionTests(testSuite, 4);
|
|
113
|
-
const testAgents = await spawnTestAgents(testGroups);
|
|
114
|
-
|
|
115
|
-
const results = await runParallelTests(testAgents);
|
|
116
|
-
const coverage = await trackCoverage(results);
|
|
117
|
-
|
|
118
|
-
return { results, coverage };
|
|
119
|
-
};
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Memory Key Patterns
|
|
123
|
-
|
|
124
|
-
```typescript
|
|
125
|
-
// Test Swarm State Tracking
|
|
126
|
-
await sqlite.memoryAdapter.set(
|
|
127
|
-
`tdd-swarm/${swarmId}/state`,
|
|
128
|
-
{
|
|
129
|
-
phase: 'unit-tests',
|
|
130
|
-
agentsActive: 4,
|
|
131
|
-
testsCompleted: 120
|
|
132
|
-
},
|
|
133
|
-
{ aclLevel: 3 }
|
|
134
|
-
);
|
|
135
|
-
|
|
136
|
-
// Coverage Tracking
|
|
137
|
-
await sqlite.memoryAdapter.set(
|
|
138
|
-
`tdd-swarm/${swarmId}/coverage`,
|
|
139
|
-
coverageMetrics,
|
|
140
|
-
{ aclLevel: 3, ttl: 7776000 }
|
|
141
|
-
);
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## Collaboration Strategy
|
|
145
|
-
|
|
146
|
-
### With Tester Agents
|
|
147
|
-
- Coordinate parallel test execution
|
|
148
|
-
- Assign mock specifications
|
|
149
|
-
- Collect test results
|
|
150
|
-
- Track coverage metrics
|
|
151
|
-
|
|
152
|
-
### With Coder Agents
|
|
153
|
-
- Signal test completion for implementation
|
|
154
|
-
- Provide mock contracts
|
|
155
|
-
- Coordinate refactoring
|
|
156
|
-
|
|
157
|
-
## Best Practices
|
|
158
|
-
|
|
159
|
-
1. **Mock Contracts First**
|
|
160
|
-
2. **Test Isolation**
|
|
161
|
-
3. **Progressive Integration**
|
|
162
|
-
4. **Contract Testing**
|
|
163
|
-
5. **Signal ACK Protocol**
|
|
164
|
-
6. **SQLite Persistence**
|
|
165
|
-
7. **ACL Compliance**
|
|
166
|
-
|
|
167
|
-
Remember: TDD London School emphasizes interaction testing with mocks. Coordinate test swarms to maintain test isolation while progressively integrating real components.
|
|
168
|
-
|
|
169
|
-
## CFN Loop Redis Completion Protocol
|
|
170
|
-
|
|
171
|
-
When participating in CFN Loop workflows, agents MUST follow this protocol:
|
|
172
|
-
|
|
173
|
-
### Step 1: Complete Work
|
|
174
|
-
Execute assigned task (implementation, review, testing, etc.)
|
|
175
|
-
|
|
176
|
-
### Step 2: Signal Completion
|
|
177
|
-
```bash
|
|
178
|
-
redis-cli lpush "swarm:${TASK_ID}:${AGENT_ID}:done" "complete"
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### Step 3: Report Confidence Score
|
|
182
|
-
```bash
|
|
183
|
-
./.claude/skills/redis-coordination/invoke-waiting-mode.sh report \
|
|
184
|
-
--task-id "$TASK_ID" \
|
|
185
|
-
--agent-id "$AGENT_ID" \
|
|
186
|
-
--confidence [0.0-1.0] \
|
|
187
|
-
--iteration 1
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Step 4: Enter Waiting Mode (for potential iteration)
|
|
191
|
-
```bash
|
|
192
|
-
./.claude/skills/redis-coordination/invoke-waiting-mode.sh enter \
|
|
193
|
-
--task-id "$TASK_ID" \
|
|
194
|
-
--agent-id "$AGENT_ID" \
|
|
195
|
-
--context "iteration-complete"
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
**Why This Matters:**
|
|
199
|
-
- Zero-token blocking coordination (BLPOP waits without API calls)
|
|
200
|
-
- Orchestrator collects confidence/consensus scores automatically
|
|
201
|
-
- Supports autonomous iteration based on quality gates
|
|
202
|
-
- Agent woken instantly (<100ms) if iteration needed
|
|
203
|
-
|
|
204
|
-
**Context Variables:**
|
|
205
|
-
- `TASK_ID`: Provided by orchestrator/coordinator
|
|
206
|
-
- `AGENT_ID`: Your unique agent identifier (e.g., "tdd-london-swarm-1", "reviewer-2")
|
|
207
|
-
- Confidence: Your self-assessment score (0.0-1.0)
|
|
208
|
-
|
|
209
|
-
See: `.claude/skills/redis-coordination/SKILL.md` for full protocol details
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
**Key Insight**: The London School emphasizes object collaboration over internal state. Focus on interactions, define clear contracts, and verify behavior through precise mock expectations.
|
|
2
|
-
|
|
3
|
-
## CFN Loop Redis Completion Protocol
|
|
4
|
-
|
|
5
|
-
When participating in CFN Loop workflows, agents MUST follow this protocol:
|
|
6
|
-
|
|
7
|
-
### Step 1: Complete Work
|
|
8
|
-
Execute assigned task (unit test implementation, test suite development, interaction verification)
|
|
9
|
-
|
|
10
|
-
### Step 2: Signal Completion
|
|
11
|
-
```bash
|
|
12
|
-
redis-cli lpush "swarm:${TASK_ID}:${AGENT_ID}:done" "complete"
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
### Step 3: Report Confidence Score
|
|
16
|
-
```bash
|
|
17
|
-
./.claude/skills/redis-coordination/invoke-waiting-mode.sh report \
|
|
18
|
-
--task-id "$TASK_ID" \
|
|
19
|
-
--agent-id "$AGENT_ID" \
|
|
20
|
-
--confidence [0.0-1.0] \
|
|
21
|
-
--iteration 1
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### Step 4: Enter Waiting Mode (for potential iteration)
|
|
25
|
-
```bash
|
|
26
|
-
./.claude/skills/redis-coordination/invoke-waiting-mode.sh enter \
|
|
27
|
-
--task-id "$TASK_ID" \
|
|
28
|
-
--agent-id "$AGENT_ID" \
|
|
29
|
-
--context "iteration-complete"
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**Why This Matters:**
|
|
33
|
-
- Zero-token blocking coordination (BLPOP waits without API calls)
|
|
34
|
-
- Orchestrator collects confidence/consensus scores automatically
|
|
35
|
-
- Supports autonomous iteration based on quality gates
|
|
36
|
-
- Agent woken instantly (<100ms) if iteration needed
|
|
37
|
-
|
|
38
|
-
**Context Variables:**
|
|
39
|
-
- `TASK_ID`: Provided by orchestrator/coordinator
|
|
40
|
-
- `AGENT_ID`: Your unique agent identifier (e.g., "tdd-london-1")
|
|
41
|
-
- Confidence: Your self-assessment score (0.0-1.0)
|
|
42
|
-
|
|
43
|
-
See: `.claude/skills/redis-coordination/SKILL.md` for full protocol details
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
Remember: Production validation ensures system reliability, user safety, and organizational compliance.
|
|
2
|
-
|
|
3
|
-
## CFN Loop Redis Completion Protocol
|
|
4
|
-
|
|
5
|
-
When participating in CFN Loop workflows, agents MUST follow this protocol:
|
|
6
|
-
|
|
7
|
-
### Step 1: Complete Work
|
|
8
|
-
Execute assigned task (validation, readiness assessment, deployment checks)
|
|
9
|
-
|
|
10
|
-
### Step 2: Signal Completion
|
|
11
|
-
```bash
|
|
12
|
-
redis-cli lpush "swarm:${TASK_ID}:${AGENT_ID}:done" "complete"
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
### Step 3: Report Confidence Score
|
|
16
|
-
```bash
|
|
17
|
-
./.claude/skills/redis-coordination/invoke-waiting-mode.sh report \
|
|
18
|
-
--task-id "$TASK_ID" \
|
|
19
|
-
--agent-id "$AGENT_ID" \
|
|
20
|
-
--confidence [0.0-1.0] \
|
|
21
|
-
--iteration 1
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### Step 4: Enter Waiting Mode (for potential iteration)
|
|
25
|
-
```bash
|
|
26
|
-
./.claude/skills/redis-coordination/invoke-waiting-mode.sh enter \
|
|
27
|
-
--task-id "$TASK_ID" \
|
|
28
|
-
--agent-id "$AGENT_ID" \
|
|
29
|
-
--context "iteration-complete"
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**Why This Matters:**
|
|
33
|
-
- Zero-token blocking coordination (BLPOP waits without API calls)
|
|
34
|
-
- Orchestrator collects confidence/consensus scores automatically
|
|
35
|
-
- Supports autonomous iteration based on quality gates
|
|
36
|
-
- Agent woken instantly (<100ms) if iteration needed
|
|
37
|
-
|
|
38
|
-
**Context Variables:**
|
|
39
|
-
- `TASK_ID`: Provided by orchestrator/coordinator
|
|
40
|
-
- `AGENT_ID`: Your unique agent identifier (e.g., "production-validator-1")
|
|
41
|
-
- Confidence: Your self-assessment score (0.0-1.0)
|
|
42
|
-
|
|
43
|
-
See: `.claude/skills/redis-coordination/SKILL.md` for full protocol details
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { FleetManager } from './fleet-manager';
|
|
2
|
-
import { ResourceTier } from './types/fleet-manager.types';
|
|
3
|
-
describe('FleetManager', ()=>{
|
|
4
|
-
let fleetManager;
|
|
5
|
-
let mockRedis;
|
|
6
|
-
let mockAgentRegistry;
|
|
7
|
-
let mockDependencyTracker;
|
|
8
|
-
let mockTransparencyMiddleware;
|
|
9
|
-
beforeEach(()=>{
|
|
10
|
-
mockRedis = {
|
|
11
|
-
hset: jest.fn().mockResolvedValue(true),
|
|
12
|
-
sadd: jest.fn().mockResolvedValue(true)
|
|
13
|
-
};
|
|
14
|
-
mockAgentRegistry = {
|
|
15
|
-
registerAgent: jest.fn().mockResolvedValue(true)
|
|
16
|
-
};
|
|
17
|
-
mockDependencyTracker = {};
|
|
18
|
-
mockTransparencyMiddleware = {
|
|
19
|
-
logEvent: jest.fn()
|
|
20
|
-
};
|
|
21
|
-
fleetManager = new FleetManager(mockRedis, mockAgentRegistry, mockDependencyTracker, mockTransparencyMiddleware, {
|
|
22
|
-
maxAgents: 10,
|
|
23
|
-
resourceAllocationStrategy: 'least-loaded'
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
describe('registerAgent', ()=>{
|
|
27
|
-
it('should successfully register an agent', async ()=>{
|
|
28
|
-
const agentId = 'test-agent-1';
|
|
29
|
-
const result = await fleetManager.registerAgent(agentId, ResourceTier.Shared);
|
|
30
|
-
expect(result).toBe(true);
|
|
31
|
-
expect(mockAgentRegistry.registerAgent).toHaveBeenCalledWith(agentId);
|
|
32
|
-
expect(mockRedis.hset).toHaveBeenCalledWith(`fleet:agents:${agentId}`, 'tier', ResourceTier.Shared);
|
|
33
|
-
expect(mockRedis.sadd).toHaveBeenCalledWith('fleet:registered_agents', agentId);
|
|
34
|
-
expect(mockTransparencyMiddleware.logEvent).toHaveBeenCalledWith('fleet_manager', 'agent_registered', {
|
|
35
|
-
agentId,
|
|
36
|
-
tier: ResourceTier.Shared
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
it('should not register an agent if registry fails', async ()=>{
|
|
40
|
-
mockAgentRegistry.registerAgent.mockResolvedValue(false);
|
|
41
|
-
const agentId = 'test-agent-2';
|
|
42
|
-
const result = await fleetManager.registerAgent(agentId);
|
|
43
|
-
expect(result).toBe(false);
|
|
44
|
-
expect(mockTransparencyMiddleware.logEvent).toHaveBeenCalledWith('fleet_manager', 'agent_registration_failed', {
|
|
45
|
-
agentId
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
it('should not register more agents than maxAgents', async ()=>{
|
|
49
|
-
const mockConfig = {
|
|
50
|
-
maxAgents: 1
|
|
51
|
-
};
|
|
52
|
-
fleetManager = new FleetManager(mockRedis, mockAgentRegistry, mockDependencyTracker, mockTransparencyMiddleware, mockConfig);
|
|
53
|
-
const result1 = await fleetManager.registerAgent('agent-1');
|
|
54
|
-
const result2 = await fleetManager.registerAgent('agent-2');
|
|
55
|
-
expect(result1).toBe(true);
|
|
56
|
-
expect(result2).toBe(false);
|
|
57
|
-
expect(mockTransparencyMiddleware.logEvent).toHaveBeenCalledWith('fleet_manager', 'max_agents_reached', {
|
|
58
|
-
currentCount: 1,
|
|
59
|
-
maxAgents: 1
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
describe('allocateResources', ()=>{
|
|
64
|
-
it('should successfully allocate resources for an existing agent', async ()=>{
|
|
65
|
-
const agentId = 'test-agent-3';
|
|
66
|
-
await fleetManager.registerAgent(agentId);
|
|
67
|
-
const requirements = {
|
|
68
|
-
cpu: 2,
|
|
69
|
-
memory: 4,
|
|
70
|
-
network: 50,
|
|
71
|
-
storageIO: 100
|
|
72
|
-
};
|
|
73
|
-
const result = await fleetManager.allocateResources(agentId, requirements);
|
|
74
|
-
expect(result).toBe(true);
|
|
75
|
-
expect(mockRedis.hset).toHaveBeenCalledWith(`fleet:agents:${agentId}`, 'resources', JSON.stringify(requirements));
|
|
76
|
-
expect(mockTransparencyMiddleware.logEvent).toHaveBeenCalledWith('fleet_manager', 'resources_allocated', {
|
|
77
|
-
agentId,
|
|
78
|
-
requirements
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
it('should not allocate resources for a non-existent agent', async ()=>{
|
|
82
|
-
const requirements = {
|
|
83
|
-
cpu: 2,
|
|
84
|
-
memory: 4,
|
|
85
|
-
network: 50,
|
|
86
|
-
storageIO: 100
|
|
87
|
-
};
|
|
88
|
-
const result = await fleetManager.allocateResources('unknown-agent', requirements);
|
|
89
|
-
expect(result).toBe(false);
|
|
90
|
-
});
|
|
91
|
-
it('should not allocate resources exceeding tier limits', async ()=>{
|
|
92
|
-
const agentId = 'test-agent-4';
|
|
93
|
-
await fleetManager.registerAgent(agentId, ResourceTier.Shared);
|
|
94
|
-
const excessiveRequirements = {
|
|
95
|
-
cpu: 20,
|
|
96
|
-
memory: 40,
|
|
97
|
-
network: 500,
|
|
98
|
-
storageIO: 1000
|
|
99
|
-
};
|
|
100
|
-
const result = await fleetManager.allocateResources(agentId, excessiveRequirements);
|
|
101
|
-
expect(result).toBe(false);
|
|
102
|
-
expect(mockTransparencyMiddleware.logEvent).toHaveBeenCalledWith('fleet_manager', 'resource_allocation_denied', {
|
|
103
|
-
agentId,
|
|
104
|
-
requirements: excessiveRequirements,
|
|
105
|
-
tier: ResourceTier.Shared
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe('getPerformanceMetrics', ()=>{
|
|
110
|
-
it('should return performance metrics for a registered agent', async ()=>{
|
|
111
|
-
const agentId = 'test-agent-5';
|
|
112
|
-
await fleetManager.registerAgent(agentId);
|
|
113
|
-
const metrics = await fleetManager.getPerformanceMetrics(agentId);
|
|
114
|
-
expect(metrics).toBeDefined();
|
|
115
|
-
expect(metrics?.cpuUtilization).toBe(0);
|
|
116
|
-
expect(metrics?.memoryUsage).toBe(0);
|
|
117
|
-
expect(metrics?.networkThroughput).toBe(0);
|
|
118
|
-
expect(metrics?.storageIOPS).toBe(0);
|
|
119
|
-
});
|
|
120
|
-
it('should return null for a non-existent agent', async ()=>{
|
|
121
|
-
const metrics = await fleetManager.getPerformanceMetrics('unknown-agent');
|
|
122
|
-
expect(metrics).toBeNull();
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
describe('balanceLoad', ()=>{
|
|
126
|
-
it('should return a load balancing result based on the configured strategy', async ()=>{
|
|
127
|
-
const agents = [
|
|
128
|
-
'agent-1',
|
|
129
|
-
'agent-2',
|
|
130
|
-
'agent-3'
|
|
131
|
-
];
|
|
132
|
-
const result = await fleetManager.balanceLoad(agents);
|
|
133
|
-
expect(result).toEqual({
|
|
134
|
-
rebalancedAgents: [],
|
|
135
|
-
migrationPlan: {}
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
//# sourceMappingURL=fleet-manager.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/coordination/fleet-manager.test.ts"],"sourcesContent":["import { FleetManager } from './fleet-manager';\r\nimport { ResourceTier } from './types/fleet-manager.types';\r\nimport Redis from 'ioredis';\r\nimport { AgentRegistry } from '../agents/agent-registry';\r\nimport { DependencyTracker } from '../lifecycle/dependency-tracker';\r\nimport { TransparencyMiddleware } from './transparency-middleware';\r\n\r\ndescribe('FleetManager', () => {\r\n let fleetManager: FleetManager;\r\n let mockRedis: jest.Mocked<Redis>;\r\n let mockAgentRegistry: jest.Mocked<AgentRegistry>;\r\n let mockDependencyTracker: jest.Mocked<DependencyTracker>;\r\n let mockTransparencyMiddleware: jest.Mocked<TransparencyMiddleware>;\r\n\r\n beforeEach(() => {\r\n mockRedis = {\r\n hset: jest.fn().mockResolvedValue(true),\r\n sadd: jest.fn().mockResolvedValue(true)\r\n } as any;\r\n\r\n mockAgentRegistry = {\r\n registerAgent: jest.fn().mockResolvedValue(true)\r\n } as any;\r\n\r\n mockDependencyTracker = {} as any;\r\n\r\n mockTransparencyMiddleware = {\r\n logEvent: jest.fn()\r\n } as any;\r\n\r\n fleetManager = new FleetManager(\r\n mockRedis,\r\n mockAgentRegistry,\r\n mockDependencyTracker,\r\n mockTransparencyMiddleware,\r\n {\r\n maxAgents: 10,\r\n resourceAllocationStrategy: 'least-loaded'\r\n }\r\n );\r\n });\r\n\r\n describe('registerAgent', () => {\r\n it('should successfully register an agent', async () => {\r\n const agentId = 'test-agent-1';\r\n const result = await fleetManager.registerAgent(agentId, ResourceTier.Shared);\r\n\r\n expect(result).toBe(true);\r\n expect(mockAgentRegistry.registerAgent).toHaveBeenCalledWith(agentId);\r\n expect(mockRedis.hset).toHaveBeenCalledWith(`fleet:agents:${agentId}`, 'tier', ResourceTier.Shared);\r\n expect(mockRedis.sadd).toHaveBeenCalledWith('fleet:registered_agents', agentId);\r\n expect(mockTransparencyMiddleware.logEvent).toHaveBeenCalledWith(\r\n 'fleet_manager',\r\n 'agent_registered',\r\n { agentId, tier: ResourceTier.Shared }\r\n );\r\n });\r\n\r\n it('should not register an agent if registry fails', async () => {\r\n mockAgentRegistry.registerAgent.mockResolvedValue(false);\r\n const agentId = 'test-agent-2';\r\n const result = await fleetManager.registerAgent(agentId);\r\n\r\n expect(result).toBe(false);\r\n expect(mockTransparencyMiddleware.logEvent).toHaveBeenCalledWith(\r\n 'fleet_manager',\r\n 'agent_registration_failed',\r\n { agentId }\r\n );\r\n });\r\n\r\n it('should not register more agents than maxAgents', async () => {\r\n const mockConfig = {\r\n maxAgents: 1\r\n };\r\n\r\n fleetManager = new FleetManager(\r\n mockRedis,\r\n mockAgentRegistry,\r\n mockDependencyTracker,\r\n mockTransparencyMiddleware,\r\n mockConfig\r\n );\r\n\r\n const result1 = await fleetManager.registerAgent('agent-1');\r\n const result2 = await fleetManager.registerAgent('agent-2');\r\n\r\n expect(result1).toBe(true);\r\n expect(result2).toBe(false);\r\n expect(mockTransparencyMiddleware.logEvent).toHaveBeenCalledWith(\r\n 'fleet_manager',\r\n 'max_agents_reached',\r\n { currentCount: 1, maxAgents: 1 }\r\n );\r\n });\r\n });\r\n\r\n describe('allocateResources', () => {\r\n it('should successfully allocate resources for an existing agent', async () => {\r\n const agentId = 'test-agent-3';\r\n await fleetManager.registerAgent(agentId);\r\n\r\n const requirements = {\r\n cpu: 2,\r\n memory: 4,\r\n network: 50,\r\n storageIO: 100\r\n };\r\n\r\n const result = await fleetManager.allocateResources(agentId, requirements);\r\n\r\n expect(result).toBe(true);\r\n expect(mockRedis.hset).toHaveBeenCalledWith(\r\n `fleet:agents:${agentId}`,\r\n 'resources',\r\n JSON.stringify(requirements)\r\n );\r\n expect(mockTransparencyMiddleware.logEvent).toHaveBeenCalledWith(\r\n 'fleet_manager',\r\n 'resources_allocated',\r\n { agentId, requirements }\r\n );\r\n });\r\n\r\n it('should not allocate resources for a non-existent agent', async () => {\r\n const requirements = {\r\n cpu: 2,\r\n memory: 4,\r\n network: 50,\r\n storageIO: 100\r\n };\r\n\r\n const result = await fleetManager.allocateResources('unknown-agent', requirements);\r\n\r\n expect(result).toBe(false);\r\n });\r\n\r\n it('should not allocate resources exceeding tier limits', async () => {\r\n const agentId = 'test-agent-4';\r\n await fleetManager.registerAgent(agentId, ResourceTier.Shared);\r\n\r\n const excessiveRequirements = {\r\n cpu: 20, // Exceeds shared tier limit\r\n memory: 40,\r\n network: 500,\r\n storageIO: 1000\r\n };\r\n\r\n const result = await fleetManager.allocateResources(agentId, excessiveRequirements);\r\n\r\n expect(result).toBe(false);\r\n expect(mockTransparencyMiddleware.logEvent).toHaveBeenCalledWith(\r\n 'fleet_manager',\r\n 'resource_allocation_denied',\r\n {\r\n agentId,\r\n requirements: excessiveRequirements,\r\n tier: ResourceTier.Shared\r\n }\r\n );\r\n });\r\n });\r\n\r\n describe('getPerformanceMetrics', () => {\r\n it('should return performance metrics for a registered agent', async () => {\r\n const agentId = 'test-agent-5';\r\n await fleetManager.registerAgent(agentId);\r\n\r\n const metrics = await fleetManager.getPerformanceMetrics(agentId);\r\n\r\n expect(metrics).toBeDefined();\r\n expect(metrics?.cpuUtilization).toBe(0);\r\n expect(metrics?.memoryUsage).toBe(0);\r\n expect(metrics?.networkThroughput).toBe(0);\r\n expect(metrics?.storageIOPS).toBe(0);\r\n });\r\n\r\n it('should return null for a non-existent agent', async () => {\r\n const metrics = await fleetManager.getPerformanceMetrics('unknown-agent');\r\n expect(metrics).toBeNull();\r\n });\r\n });\r\n\r\n describe('balanceLoad', () => {\r\n it('should return a load balancing result based on the configured strategy', async () => {\r\n const agents = ['agent-1', 'agent-2', 'agent-3'];\r\n const result = await fleetManager.balanceLoad(agents);\r\n\r\n expect(result).toEqual({\r\n rebalancedAgents: [],\r\n migrationPlan: {}\r\n });\r\n });\r\n });\r\n});"],"names":["FleetManager","ResourceTier","describe","fleetManager","mockRedis","mockAgentRegistry","mockDependencyTracker","mockTransparencyMiddleware","beforeEach","hset","jest","fn","mockResolvedValue","sadd","registerAgent","logEvent","maxAgents","resourceAllocationStrategy","it","agentId","result","Shared","expect","toBe","toHaveBeenCalledWith","tier","mockConfig","result1","result2","currentCount","requirements","cpu","memory","network","storageIO","allocateResources","JSON","stringify","excessiveRequirements","metrics","getPerformanceMetrics","toBeDefined","cpuUtilization","memoryUsage","networkThroughput","storageIOPS","toBeNull","agents","balanceLoad","toEqual","rebalancedAgents","migrationPlan"],"mappings":"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"}
|