claude-flow-novice 2.15.5 → 2.15.7
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/cfn-extras/.gs-api-quota.json +16 -0
- package/.claude/cfn-extras/.gs-progress-state.json +22 -0
- package/.claude/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
- package/.claude/cfn-extras/agents/google-sheets/README.md +114 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
- package/.claude/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
- package/.claude/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
- package/.claude/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
- package/.claude/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
- package/.claude/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
- package/.claude/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
- package/.claude/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
- package/.claude/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
- package/.claude/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
- package/.claude/commands/cfn-context.md +10 -0
- package/.claude/commands/cfn-loop-cli.md +36 -15
- package/.claude/commands/google-sheets/google-sheets-loop.md +289 -0
- package/.claude/skills/cfn-agent-selector/SKILL.md +143 -0
- package/.claude/skills/cfn-agent-selector/select-agents.sh +94 -0
- package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
- package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
- package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
- package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
- package/.claude/skills/cfn-docker-redis-coordination/README.md +294 -0
- package/.claude/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
- package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
- package/.claude/skills/cfn-docker-redis-coordination/package.json +40 -0
- package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
- package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
- package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
- package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
- package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
- package/.claude/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
- package/.claude/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
- package/.claude/skills/cfn-loop-orchestration/README.md +149 -41
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +39 -577
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +49 -270
- package/.claude/skills/cfn-loop-orchestration/jest.config.js +67 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +91 -8
- package/.claude/skills/cfn-loop-orchestration/package-lock.json +5470 -0
- package/.claude/skills/cfn-loop-orchestration/package.json +49 -0
- package/.claude/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
- package/.claude/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/consensus.ts +87 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +115 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/parse-test-results.ts +372 -0
- package/.claude/skills/cfn-loop-orchestration/src/index.ts +14 -0
- package/.claude/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
- package/.claude/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
- package/.claude/skills/cfn-loop-orchestration/src/types.ts +188 -0
- package/.claude/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
- package/.claude/skills/cfn-loop-orchestration/tests/consensus.test.ts +142 -0
- package/.claude/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +199 -0
- package/.claude/skills/cfn-loop-orchestration/tests/gate-check.test.ts +325 -0
- package/.claude/skills/cfn-loop-orchestration/tests/iteration-manager.test.ts +132 -0
- package/.claude/skills/cfn-loop-orchestration/tests/parse-test-results.test.ts +382 -0
- package/.claude/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
- package/.claude/skills/cfn-loop-orchestration/tests/timeout-calculator.test.ts +118 -0
- package/.claude/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
- package/.claude/skills/cfn-loop-orchestration/tsconfig.json +54 -0
- package/.claude/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
- package/.claude/skills/cfn-redis-coordination/coverage/clover.xml +1447 -0
- package/.claude/skills/cfn-redis-coordination/coverage/coverage-final.json +13 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/agent-logger.ts.html +1423 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/agent-recovery.ts.html +1447 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/base.css +224 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/block-navigation.js +87 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/completion-reporter.ts.html +1273 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/context-manager.ts.html +1066 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/favicon.png +0 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/index.html +281 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/mode-detector.ts.html +550 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/prettify.css +1 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/prettify.js +2 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/redis-client.ts.html +2047 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/result-collector.ts.html +1396 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/sorter.js +210 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/swarm-manager.ts.html +1567 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/task-analyzer.ts.html +1297 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/task-executor.ts.html +1354 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/types.ts.html +790 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov-report/waiting-coordinator.ts.html +1846 -0
- package/.claude/skills/cfn-redis-coordination/coverage/lcov.info +2650 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
- package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
- package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
- package/.claude/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.js +114 -0
- package/.claude/skills/cfn-redis-coordination/dist/index.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
- package/.claude/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
- package/.claude/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
- package/.claude/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
- package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
- package/.claude/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.js +81 -0
- package/.claude/skills/cfn-redis-coordination/dist/types.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
- package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
- package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
- package/.claude/skills/cfn-redis-coordination/jest.config.js +23 -0
- package/.claude/skills/cfn-redis-coordination/package-lock.json +5272 -0
- package/.claude/skills/cfn-redis-coordination/package.json +45 -0
- package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
- package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
- package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
- package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
- package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
- package/.claude/skills/cfn-redis-coordination/src/index.ts +82 -0
- package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
- package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
- package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
- package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
- package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
- package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
- package/.claude/skills/cfn-redis-coordination/src/types.ts +235 -0
- package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
- package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
- package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
- package/.claude/skills/cfn-redis-coordination/test-redis-check.js +84 -0
- package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
- package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +788 -0
- package/.claude/skills/cfn-redis-coordination/tsconfig.json +31 -0
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +13 -72
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +172 -62
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +465 -508
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +733 -743
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +13 -79
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +13 -18
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +13 -18
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +13 -18
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +15 -17
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +15 -17
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +15 -14
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +15 -17
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +15 -17
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +15 -17
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +23 -30
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +13 -18
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +13 -18
- package/claude-assets/agents/cfn-dev-team/reviewers/code-reviewer.md +312 -317
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +23 -20
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +23 -20
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +23 -20
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +23 -20
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +16 -21
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +15 -20
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +718 -737
- package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +817 -828
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +15 -20
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +8 -9
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +668 -684
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +15 -20
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +248 -253
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +13 -18
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +13 -18
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +13 -18
- package/claude-assets/agents/custom/cfn-redis-operations.md +530 -0
- package/claude-assets/agents/custom/cfn-system-expert.md +77 -0
- package/claude-assets/cfn-extras/.gs-api-quota.json +16 -0
- package/claude-assets/cfn-extras/.gs-progress-state.json +22 -0
- package/claude-assets/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
- package/claude-assets/cfn-extras/agents/google-sheets/README.md +114 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
- package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
- package/claude-assets/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
- package/claude-assets/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
- package/claude-assets/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
- package/claude-assets/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
- package/claude-assets/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
- package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
- package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
- package/claude-assets/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
- package/claude-assets/commands/cfn-context.md +10 -0
- package/claude-assets/commands/cfn-loop-cli.md +36 -15
- package/claude-assets/commands/google-sheets/google-sheets-loop.md +289 -0
- package/claude-assets/hooks/cfn-pre-execution/SESSION_START_README.md +87 -0
- package/claude-assets/hooks/cfn-pre-execution/TEST_SESSION_START.md +128 -0
- package/claude-assets/hooks/cfn-pre-execution/session-start-context.sh +111 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_EXAMPLE.md +209 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/README.md +130 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +243 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/agent-mappings.json +142 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +173 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +71 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/test-agent-selection.sh +282 -0
- package/claude-assets/skills/cfn-agent-selector/SKILL.md +143 -0
- package/claude-assets/skills/cfn-agent-selector/select-agents.sh +94 -0
- package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
- package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
- package/claude-assets/skills/cfn-docker-coordination/.eslintrc.json +33 -0
- package/claude-assets/skills/cfn-docker-coordination/README.md +349 -0
- package/claude-assets/skills/cfn-docker-coordination/docker-helpers.sh +433 -0
- package/claude-assets/skills/cfn-docker-coordination/jest.config.js +25 -0
- package/claude-assets/skills/cfn-docker-coordination/package-lock.json +6827 -0
- package/claude-assets/skills/cfn-docker-coordination/package.json +38 -0
- package/claude-assets/skills/cfn-docker-coordination/src/agent-container.ts +471 -0
- package/claude-assets/skills/cfn-docker-coordination/src/docker-client.ts +483 -0
- package/claude-assets/skills/cfn-docker-coordination/src/health-checker.ts +418 -0
- package/claude-assets/skills/cfn-docker-coordination/src/index.ts +45 -0
- package/claude-assets/skills/cfn-docker-coordination/src/network-manager.ts +377 -0
- package/claude-assets/skills/cfn-docker-coordination/src/types.ts +412 -0
- package/claude-assets/skills/cfn-docker-coordination/src/volume-manager.ts +389 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/agent-container.test.ts +379 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/docker-client.test.ts +345 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/health-checker.test.ts +535 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/integration.test.ts +193 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/network-manager.test.ts +352 -0
- package/claude-assets/skills/cfn-docker-coordination/tests/setup.ts +36 -0
- package/claude-assets/skills/cfn-docker-coordination/tsconfig.json +29 -0
- package/claude-assets/skills/cfn-docker-logging/INTEGRATION.md +268 -0
- package/claude-assets/skills/cfn-docker-logging/SAMPLE_OUTPUTS.md +237 -0
- package/claude-assets/skills/cfn-docker-logging/SKILL.md +442 -0
- package/claude-assets/skills/cfn-docker-logging/capture-container-logs.sh +120 -0
- package/claude-assets/skills/cfn-docker-logging/enable-logging.sh +430 -0
- package/claude-assets/skills/cfn-docker-logging/init-hybrid-logging.sh +210 -0
- package/claude-assets/skills/cfn-docker-logging/queries/analytics-summary.sh +87 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-agent-timeline.sh +51 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-consensus-history.sh +56 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-coordination-timeline.sh +39 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-failed-containers.sh +40 -0
- package/claude-assets/skills/cfn-docker-logging/queries/query-gate-checks.sh +39 -0
- package/claude-assets/skills/cfn-docker-logging/schema.sql +111 -0
- package/claude-assets/skills/cfn-docker-logging/sqlite-helpers.sh +240 -0
- package/claude-assets/skills/cfn-docker-logging/test-hybrid-logging.sh +331 -0
- package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
- package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/README.md +294 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/package.json +40 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
- package/claude-assets/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
- package/claude-assets/skills/cfn-error-logging/.eslintrc.json +57 -0
- package/claude-assets/skills/cfn-error-logging/.prettierrc.json +10 -0
- package/claude-assets/skills/cfn-error-logging/MIGRATION_SUMMARY.md +485 -0
- package/claude-assets/skills/cfn-error-logging/package.json +47 -0
- package/claude-assets/skills/cfn-error-logging/src/error-logger.ts +1042 -0
- package/claude-assets/skills/cfn-error-logging/src/index.ts +12 -0
- package/claude-assets/skills/cfn-error-logging/src/types.ts +456 -0
- package/claude-assets/skills/cfn-error-logging/tests/error-logger.test.ts +1302 -0
- package/claude-assets/skills/cfn-error-logging/tsconfig.json +38 -0
- package/claude-assets/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
- package/claude-assets/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
- package/claude-assets/skills/cfn-loop-orchestration/README.md +149 -41
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +39 -577
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +49 -270
- package/claude-assets/skills/cfn-loop-orchestration/jest.config.js +67 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +91 -8
- package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +5470 -0
- package/claude-assets/skills/cfn-loop-orchestration/package.json +49 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +115 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/parse-test-results.ts +372 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +14 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +188 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/consensus.test.ts +142 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +199 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/gate-check.test.ts +325 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/iteration-manager.test.ts +132 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/parse-test-results.test.ts +382 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/timeout-calculator.test.ts +118 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
- package/claude-assets/skills/cfn-loop-orchestration/tsconfig.json +54 -0
- package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/clover.xml +1447 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/coverage-final.json +13 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/agent-logger.ts.html +1423 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/agent-recovery.ts.html +1447 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/base.css +224 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/block-navigation.js +87 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/completion-reporter.ts.html +1273 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/context-manager.ts.html +1066 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/favicon.png +0 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/index.html +281 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/mode-detector.ts.html +550 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/prettify.css +1 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/prettify.js +2 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/redis-client.ts.html +2047 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/result-collector.ts.html +1396 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/sorter.js +210 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/swarm-manager.ts.html +1567 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/task-analyzer.ts.html +1297 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/task-executor.ts.html +1354 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/types.ts.html +790 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov-report/waiting-coordinator.ts.html +1846 -0
- package/claude-assets/skills/cfn-redis-coordination/coverage/lcov.info +2650 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.js +114 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/index.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.js +81 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/types.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
- package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
- package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
- package/claude-assets/skills/cfn-redis-coordination/jest.config.js +23 -0
- package/claude-assets/skills/cfn-redis-coordination/package-lock.json +5272 -0
- package/claude-assets/skills/cfn-redis-coordination/package.json +45 -0
- package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
- package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
- package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
- package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
- package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
- package/claude-assets/skills/cfn-redis-coordination/src/index.ts +82 -0
- package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
- package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
- package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
- package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
- package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
- package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
- package/claude-assets/skills/cfn-redis-coordination/src/types.ts +235 -0
- package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
- package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
- package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
- package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +84 -0
- package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
- package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +788 -0
- package/claude-assets/skills/cfn-redis-coordination/tsconfig.json +31 -0
- package/claude-assets/skills/cfn-skill-propagation/README.md +233 -0
- package/claude-assets/skills/cfn-skill-propagation/package-lock.json +5174 -0
- package/claude-assets/skills/cfn-skill-propagation/package.json +52 -0
- package/claude-assets/skills/cfn-skill-propagation/propagate-skill-update.sh +32 -0
- package/claude-assets/skills/cfn-skill-propagation/src/cli.ts +75 -0
- package/claude-assets/skills/cfn-skill-propagation/src/database-adapter.ts +239 -0
- package/claude-assets/skills/cfn-skill-propagation/src/file-system-adapter.ts +113 -0
- package/claude-assets/skills/cfn-skill-propagation/src/index.ts +72 -0
- package/claude-assets/skills/cfn-skill-propagation/src/logger.ts +43 -0
- package/claude-assets/skills/cfn-skill-propagation/src/metadata-parser.ts +154 -0
- package/claude-assets/skills/cfn-skill-propagation/src/skill-propagator.ts +274 -0
- package/claude-assets/skills/cfn-skill-propagation/src/skill-validator.ts +179 -0
- package/claude-assets/skills/cfn-skill-propagation/src/types.ts +143 -0
- package/claude-assets/skills/cfn-skill-propagation/src/version-manager.ts +118 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/file-system-adapter.test.ts +91 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/metadata-parser.test.ts +176 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/skill-propagator.test.ts +209 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/skill-validator.test.ts +203 -0
- package/claude-assets/skills/cfn-skill-propagation/tests/version-manager.test.ts +115 -0
- package/claude-assets/skills/cfn-skill-propagation/tsconfig.json +34 -0
- package/claude-assets/skills/task-classifier/SKILL.md +81 -0
- package/claude-assets/skills/task-classifier/classify-task.sh +62 -0
- package/claude-assets/skills/workflow-codification/package-lock.json +5170 -0
- package/claude-assets/skills/workflow-codification/package.json +30 -0
- package/claude-assets/skills/workflow-codification/src/index.ts +24 -0
- package/claude-assets/skills/workflow-codification/src/pattern-analyzer.ts +537 -0
- package/claude-assets/skills/workflow-codification/src/types.ts +180 -0
- package/claude-assets/skills/workflow-codification/tests/pattern-analyzer.test.ts +960 -0
- package/claude-assets/skills/workflow-codification/tsconfig.json +34 -0
- package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
- package/dist/agent-spawner/agent-spawner.js +448 -0
- package/dist/agent-spawner/agent-spawner.js.map +1 -0
- package/dist/agent-spawner/index.js +10 -0
- package/dist/agent-spawner/index.js.map +1 -0
- package/dist/agent-spawner/types.js +14 -0
- package/dist/agent-spawner/types.js.map +1 -0
- package/dist/cli/agent-executor.js +47 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-spawn.js +4 -1
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/config-manager.js +91 -109
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/tool-executor.js +3 -1
- package/dist/cli/tool-executor.js.map +1 -1
- package/dist/gate-checker/gate-checker.js +292 -0
- package/dist/gate-checker/gate-checker.js.map +1 -0
- package/dist/gate-checker/types.js +94 -0
- package/dist/gate-checker/types.js.map +1 -0
- package/dist/lib/database-service/connection-pool-manager.js +2 -1
- package/dist/lib/database-service/connection-pool-manager.js.map +1 -1
- package/dist/orchestrator/index.js +10 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestrate.js +496 -0
- package/dist/orchestrator/orchestrate.js.map +1 -0
- package/dist/orchestrator/types.js +58 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/package.json +1 -1
- package/scripts/clean-agent-profiles.sh +112 -0
- package/scripts/switch-api.sh +142 -4
- package/scripts/verify-no-secrets.sh +6 -13
- package/tests/README.md +175 -58
|
@@ -1,277 +1,56 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# OPTIMIZATION: Single jq call
|
|
34
|
-
local failed_names_json="[]"
|
|
35
|
-
[ ${#failed_names[@]} -gt 0 ] && failed_names_json=$(printf '%s\n' "${failed_names[@]}" | jq -Rs 'split("\n") | map(select(length > 0))')
|
|
36
|
-
|
|
37
|
-
cat <<EOF
|
|
38
|
-
{"framework":"jest","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":$duration,"failed_test_names":$failed_names_json}
|
|
39
|
-
EOF
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
parse_mocha_output() {
|
|
43
|
-
local output="$1"
|
|
44
|
-
local total=0 passed=0 failed=0 skipped=0 duration=0
|
|
45
|
-
local failed_names=()
|
|
46
|
-
|
|
47
|
-
[[ "$output" =~ ([0-9]+)[[:space:]]*passing ]] && passed="${BASH_REMATCH[1]}"
|
|
48
|
-
[[ "$output" =~ ([0-9]+)[[:space:]]*failing ]] && failed="${BASH_REMATCH[1]}"
|
|
49
|
-
[[ "$output" =~ ([0-9]+)[[:space:]]*pending ]] && skipped="${BASH_REMATCH[1]}"
|
|
50
|
-
total=$((passed + failed + skipped))
|
|
51
|
-
|
|
52
|
-
# OPTIMIZATION: Replace bc with awk
|
|
53
|
-
if [[ "$output" =~ passing[[:space:]]*\(([0-9]+)ms\) ]]; then
|
|
54
|
-
duration="${BASH_REMATCH[1]}"
|
|
55
|
-
elif [[ "$output" =~ passing[[:space:]]*\(([0-9.]+)s\) ]]; then
|
|
56
|
-
duration=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[1]} * 1000}")
|
|
57
|
-
fi
|
|
58
|
-
|
|
59
|
-
while IFS= read -r line; do
|
|
60
|
-
[[ "$line" =~ ^[[:space:]]*[0-9]+\)[[:space:]]*(.*): ]] && failed_names+=("${BASH_REMATCH[1]}")
|
|
61
|
-
done <<< "$output"
|
|
62
|
-
|
|
63
|
-
# OPTIMIZATION: Replace bc with awk
|
|
64
|
-
local pass_rate="0.0000"
|
|
65
|
-
if [ "$total" -gt 0 ]; then
|
|
66
|
-
pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
|
|
67
|
-
fi
|
|
68
|
-
|
|
69
|
-
# OPTIMIZATION: Single jq call
|
|
70
|
-
local failed_names_json="[]"
|
|
71
|
-
[ ${#failed_names[@]} -gt 0 ] && failed_names_json=$(printf '%s\n' "${failed_names[@]}" | jq -Rs 'split("\n") | map(select(length > 0))')
|
|
72
|
-
|
|
73
|
-
cat <<EOF
|
|
74
|
-
{"framework":"mocha","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":$duration,"failed_test_names":$failed_names_json}
|
|
75
|
-
EOF
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
parse_pytest_output() {
|
|
79
|
-
local output="$1"
|
|
80
|
-
local total=0 passed=0 failed=0 skipped=0 duration=0
|
|
81
|
-
local failed_names=()
|
|
82
|
-
|
|
83
|
-
[[ "$output" =~ ([0-9]+)[[:space:]]*passed ]] && passed="${BASH_REMATCH[1]}"
|
|
84
|
-
[[ "$output" =~ ([0-9]+)[[:space:]]*failed ]] && failed="${BASH_REMATCH[1]}"
|
|
85
|
-
[[ "$output" =~ ([0-9]+)[[:space:]]*skipped ]] && skipped="${BASH_REMATCH[1]}"
|
|
86
|
-
total=$((passed + failed + skipped))
|
|
87
|
-
|
|
88
|
-
# OPTIMIZATION: Replace bc with awk
|
|
89
|
-
[[ "$output" =~ in[[:space:]]+([0-9.]+)s ]] && duration=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[1]} * 1000}")
|
|
90
|
-
|
|
91
|
-
while IFS= read -r line; do
|
|
92
|
-
[[ "$line" =~ FAILED[[:space:]]+([^[:space:]]+) ]] && failed_names+=("${BASH_REMATCH[1]}")
|
|
93
|
-
done <<< "$output"
|
|
94
|
-
|
|
95
|
-
# OPTIMIZATION: Replace bc with awk
|
|
96
|
-
local pass_rate="0.0000"
|
|
97
|
-
if [ "$total" -gt 0 ]; then
|
|
98
|
-
pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
|
|
99
|
-
fi
|
|
100
|
-
|
|
101
|
-
# OPTIMIZATION: Single jq call
|
|
102
|
-
local failed_names_json="[]"
|
|
103
|
-
[ ${#failed_names[@]} -gt 0 ] && failed_names_json=$(printf '%s\n' "${failed_names[@]}" | jq -Rs 'split("\n") | map(select(length > 0))')
|
|
104
|
-
|
|
105
|
-
cat <<EOF
|
|
106
|
-
{"framework":"pytest","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":$duration,"failed_test_names":$failed_names_json}
|
|
107
|
-
EOF
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
parse_tap_output() {
|
|
111
|
-
local output="$1"
|
|
112
|
-
local total=0 passed=0 failed=0 skipped=0
|
|
113
|
-
local failed_names=()
|
|
114
|
-
|
|
115
|
-
[[ "$output" =~ 1\.\.([0-9]+) ]] && total="${BASH_REMATCH[1]}"
|
|
116
|
-
passed=$(echo "$output" | grep -c "^ok " || true)
|
|
117
|
-
failed=$(echo "$output" | grep -c "^not ok " || true)
|
|
118
|
-
skipped=$(echo "$output" | grep -c "^ok .* # SKIP" || true)
|
|
119
|
-
passed=$((passed - skipped))
|
|
120
|
-
|
|
121
|
-
while IFS= read -r line; do
|
|
122
|
-
[[ "$line" =~ ^not\ ok\ [0-9]+\ (.*) ]] && failed_names+=("${BASH_REMATCH[1]}")
|
|
123
|
-
done <<< "$output"
|
|
124
|
-
|
|
125
|
-
# OPTIMIZATION: Replace bc with awk
|
|
126
|
-
local pass_rate="0.0000"
|
|
127
|
-
if [ "$total" -gt 0 ]; then
|
|
128
|
-
pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
|
|
129
|
-
fi
|
|
130
|
-
|
|
131
|
-
# OPTIMIZATION: Single jq call
|
|
132
|
-
local failed_names_json="[]"
|
|
133
|
-
[ ${#failed_names[@]} -gt 0 ] && failed_names_json=$(printf '%s\n' "${failed_names[@]}" | jq -Rs 'split("\n") | map(select(length > 0))')
|
|
2
|
+
##############################################################################
|
|
3
|
+
# Parse Test Results - TypeScript Wrapper
|
|
4
|
+
# Parses test output from multiple testing frameworks
|
|
5
|
+
#
|
|
6
|
+
# This is a wrapper script that delegates to the TypeScript implementation
|
|
7
|
+
# for better type safety and maintainability.
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# parse-test-results.sh <framework|auto> <output_file_or_string>
|
|
11
|
+
#
|
|
12
|
+
# Frameworks:
|
|
13
|
+
# - jest: Jest testing framework
|
|
14
|
+
# - mocha: Mocha testing framework
|
|
15
|
+
# - pytest: Python pytest
|
|
16
|
+
# - tap: TAP (Test Anything Protocol)
|
|
17
|
+
# - go: Go test output
|
|
18
|
+
# - auto: Auto-detect framework
|
|
19
|
+
#
|
|
20
|
+
# Returns JSON:
|
|
21
|
+
# {
|
|
22
|
+
# "framework": "jest",
|
|
23
|
+
# "total": 10,
|
|
24
|
+
# "passed": 8,
|
|
25
|
+
# "failed": 2,
|
|
26
|
+
# "skipped": 0,
|
|
27
|
+
# "passRate": 0.8,
|
|
28
|
+
# "durationMs": 1234,
|
|
29
|
+
# "failedTestNames": ["test1", "test2"],
|
|
30
|
+
# "raw": "..."
|
|
31
|
+
# }
|
|
32
|
+
##############################################################################
|
|
134
33
|
|
|
135
|
-
|
|
136
|
-
{"framework":"tap","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":0,"failed_test_names":$failed_names_json}
|
|
137
|
-
EOF
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
parse_junit_xml() {
|
|
141
|
-
local xml_file="$1"
|
|
142
|
-
[ ! -f "$xml_file" ] && echo '{"error":"File not found"}' && return 1
|
|
143
|
-
|
|
144
|
-
local total=0 failures=0 errors=0 skipped=0 duration=0
|
|
145
|
-
|
|
146
|
-
if command -v xmllint &>/dev/null; then
|
|
147
|
-
total=$(xmllint --xpath "sum(//testsuite/@tests)" "$xml_file" 2>/dev/null || echo "0")
|
|
148
|
-
failures=$(xmllint --xpath "sum(//testsuite/@failures)" "$xml_file" 2>/dev/null || echo "0")
|
|
149
|
-
errors=$(xmllint --xpath "sum(//testsuite/@errors)" "$xml_file" 2>/dev/null || echo "0")
|
|
150
|
-
skipped=$(xmllint --xpath "sum(//testsuite/@skipped)" "$xml_file" 2>/dev/null || echo "0")
|
|
151
|
-
duration=$(xmllint --xpath "sum(//testsuite/@time)" "$xml_file" 2>/dev/null || echo "0")
|
|
152
|
-
else
|
|
153
|
-
total=$(grep -oP 'tests="\K[0-9]+' "$xml_file" | awk '{s+=$1} END {print s}')
|
|
154
|
-
failures=$(grep -oP 'failures="\K[0-9]+' "$xml_file" | awk '{s+=$1} END {print s}')
|
|
155
|
-
errors=$(grep -oP 'errors="\K[0-9]+' "$xml_file" | awk '{s+=$1} END {print s}')
|
|
156
|
-
skipped=$(grep -oP 'skipped="\K[0-9]+' "$xml_file" | awk '{s+=$1} END {print s}')
|
|
157
|
-
duration=$(grep -oP 'time="\K[0-9.]+' "$xml_file" | awk '{s+=$1} END {print s}')
|
|
158
|
-
fi
|
|
159
|
-
|
|
160
|
-
total=${total:-0} failures=${failures:-0} errors=${errors:-0} skipped=${skipped:-0} duration=${duration:-0}
|
|
161
|
-
local failed=$((failures + errors))
|
|
162
|
-
local passed=$((total - failed - skipped))
|
|
163
|
-
|
|
164
|
-
# OPTIMIZATION: Replace bc with awk
|
|
165
|
-
local duration_ms=$(awk "BEGIN {printf \"%.0f\", $duration * 1000}")
|
|
166
|
-
|
|
167
|
-
local pass_rate="0.0000"
|
|
168
|
-
if [ "$total" -gt 0 ]; then
|
|
169
|
-
pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
|
|
170
|
-
fi
|
|
171
|
-
|
|
172
|
-
cat <<EOF
|
|
173
|
-
{"framework":"junit","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":$duration_ms,"failed_test_names":[]}
|
|
174
|
-
EOF
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
parse_go_test_output() {
|
|
178
|
-
local output="$1"
|
|
179
|
-
local total=0 passed=0 failed=0 skipped=0 duration=0
|
|
180
|
-
local failed_names=()
|
|
181
|
-
|
|
182
|
-
passed=$(echo "$output" | grep -c "^--- PASS:" || true)
|
|
183
|
-
failed=$(echo "$output" | grep -c "^--- FAIL:" || true)
|
|
184
|
-
skipped=$(echo "$output" | grep -c "^--- SKIP:" || true)
|
|
185
|
-
total=$((passed + failed + skipped))
|
|
186
|
-
|
|
187
|
-
while IFS= read -r line; do
|
|
188
|
-
[[ "$line" =~ ^---\ FAIL:\ (.*) ]] && failed_names+=("${BASH_REMATCH[1]}")
|
|
189
|
-
done <<< "$output"
|
|
190
|
-
|
|
191
|
-
# OPTIMIZATION: Replace bc with awk
|
|
192
|
-
[[ "$output" =~ ok[[:space:]]+[^[:space:]]+[[:space:]]+([0-9.]+)s ]] && duration=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[1]} * 1000}")
|
|
193
|
-
|
|
194
|
-
local pass_rate="0.0000"
|
|
195
|
-
if [ "$total" -gt 0 ]; then
|
|
196
|
-
pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
|
|
197
|
-
fi
|
|
198
|
-
|
|
199
|
-
# OPTIMIZATION: Single jq call
|
|
200
|
-
local failed_names_json="[]"
|
|
201
|
-
[ ${#failed_names[@]} -gt 0 ] && failed_names_json=$(printf '%s\n' "${failed_names[@]}" | jq -Rs 'split("\n") | map(select(length > 0))')
|
|
202
|
-
|
|
203
|
-
cat <<EOF
|
|
204
|
-
{"framework":"go","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":$duration,"failed_test_names":$failed_names_json}
|
|
205
|
-
EOF
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
auto_detect_framework() {
|
|
209
|
-
local input="$1"
|
|
210
|
-
|
|
211
|
-
if [ -f "$input" ]; then
|
|
212
|
-
if grep -q "<testsuite" "$input" 2>/dev/null; then
|
|
213
|
-
echo "junit"
|
|
214
|
-
return 0
|
|
215
|
-
fi
|
|
216
|
-
input=$(cat "$input")
|
|
217
|
-
fi
|
|
218
|
-
|
|
219
|
-
if [[ "$input" =~ Test\ Suites: ]] || [[ "$input" =~ PASS[[:space:]]+.*\.test\.(js|ts) ]]; then
|
|
220
|
-
echo "jest"
|
|
221
|
-
return 0
|
|
222
|
-
fi
|
|
223
|
-
|
|
224
|
-
if [[ "$input" =~ [0-9]+\ passing ]] && [[ "$input" =~ [0-9]+\ failing ]]; then
|
|
225
|
-
echo "mocha"
|
|
226
|
-
return 0
|
|
227
|
-
fi
|
|
228
|
-
|
|
229
|
-
if [[ "$input" =~ ====.*passed.*==== ]] || [[ "$input" =~ FAILED.*\.py:: ]]; then
|
|
230
|
-
echo "pytest"
|
|
231
|
-
return 0
|
|
232
|
-
fi
|
|
233
|
-
|
|
234
|
-
if [[ "$input" =~ 1\.\.[0-9]+ ]] || [[ "$input" =~ ok\ [0-9]+ ]] || [[ "$input" =~ not\ ok\ [0-9]+ ]]; then
|
|
235
|
-
echo "tap"
|
|
236
|
-
return 0
|
|
237
|
-
fi
|
|
238
|
-
|
|
239
|
-
if [[ "$input" =~ ---\ PASS: ]] || [[ "$input" =~ ---\ FAIL: ]]; then
|
|
240
|
-
echo "go"
|
|
241
|
-
return 0
|
|
242
|
-
fi
|
|
243
|
-
|
|
244
|
-
echo "unknown"
|
|
245
|
-
return 1
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
parse_test_results() {
|
|
249
|
-
local framework="$1"
|
|
250
|
-
local input="$2"
|
|
34
|
+
set -euo pipefail
|
|
251
35
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
if [ "$framework" = "unknown" ]; then
|
|
255
|
-
echo '{"error":"Unable to auto-detect testing framework"}'
|
|
256
|
-
return 1
|
|
257
|
-
fi
|
|
258
|
-
fi
|
|
36
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
37
|
+
SKILL_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
259
38
|
|
|
260
|
-
|
|
261
|
-
|
|
39
|
+
# Path to compiled TypeScript
|
|
40
|
+
TS_DIST="$SKILL_ROOT/dist/helpers/parse-test-results.js"
|
|
262
41
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
go) parse_go_test_output "$output" ;;
|
|
270
|
-
*) echo '{"error":"Unknown framework"}' && return 1 ;;
|
|
271
|
-
esac
|
|
272
|
-
}
|
|
42
|
+
# Check if TypeScript implementation exists
|
|
43
|
+
if [ ! -f "$TS_DIST" ]; then
|
|
44
|
+
echo "❌ Error: TypeScript implementation not found at: $TS_DIST" >&2
|
|
45
|
+
echo " Run 'npm run build' in .claude/skills/cfn-loop-orchestration/" >&2
|
|
46
|
+
exit 1
|
|
47
|
+
fi
|
|
273
48
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
49
|
+
# Check if node is available
|
|
50
|
+
if ! command -v node &>/dev/null; then
|
|
51
|
+
echo "❌ Error: Node.js is required but not found in PATH" >&2
|
|
52
|
+
exit 1
|
|
277
53
|
fi
|
|
54
|
+
|
|
55
|
+
# Execute TypeScript implementation
|
|
56
|
+
exec node "$TS_DIST" "$@"
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
preset: 'ts-jest',
|
|
3
|
+
testEnvironment: 'node',
|
|
4
|
+
roots: ['<rootDir>/src', '<rootDir>/tests'],
|
|
5
|
+
testMatch: ['**/__tests__/**/*.ts', '**/?(*.)+(spec|test).ts'],
|
|
6
|
+
moduleFileExtensions: ['ts', 'js', 'json'],
|
|
7
|
+
transform: {
|
|
8
|
+
'^.+\\.ts$': [
|
|
9
|
+
'ts-jest',
|
|
10
|
+
{
|
|
11
|
+
tsconfig: {
|
|
12
|
+
esModuleInterop: true,
|
|
13
|
+
allowSyntheticDefaultImports: true,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
moduleNameMapper: {
|
|
19
|
+
'^@orchestrator/(.*)$': '<rootDir>/src/orchestrator/$1',
|
|
20
|
+
'^@gate-checker/(.*)$': '<rootDir>/src/gate-checker/$1',
|
|
21
|
+
'^@agent-spawner/(.*)$': '<rootDir>/src/agent-spawner/$1',
|
|
22
|
+
'^@redis/(.*)$': '<rootDir>/src/redis/$1',
|
|
23
|
+
'^@utils/(.*)$': '<rootDir>/src/utils/$1',
|
|
24
|
+
'^@types/(.*)$': '<rootDir>/src/types/$1',
|
|
25
|
+
},
|
|
26
|
+
collectCoverageFrom: [
|
|
27
|
+
'src/**/*.ts',
|
|
28
|
+
'!src/**/*.d.ts',
|
|
29
|
+
'!src/index.ts',
|
|
30
|
+
],
|
|
31
|
+
coverageThreshold: {
|
|
32
|
+
global: {
|
|
33
|
+
branches: 80,
|
|
34
|
+
functions: 80,
|
|
35
|
+
lines: 80,
|
|
36
|
+
statements: 80,
|
|
37
|
+
},
|
|
38
|
+
'./src/orchestrator/': {
|
|
39
|
+
branches: 100,
|
|
40
|
+
functions: 100,
|
|
41
|
+
lines: 100,
|
|
42
|
+
statements: 100,
|
|
43
|
+
},
|
|
44
|
+
'./src/gate-checker/': {
|
|
45
|
+
branches: 100,
|
|
46
|
+
functions: 100,
|
|
47
|
+
lines: 100,
|
|
48
|
+
statements: 100,
|
|
49
|
+
},
|
|
50
|
+
'./src/agent-spawner/': {
|
|
51
|
+
branches: 90,
|
|
52
|
+
functions: 90,
|
|
53
|
+
lines: 90,
|
|
54
|
+
statements: 90,
|
|
55
|
+
},
|
|
56
|
+
'./src/utils/': {
|
|
57
|
+
branches: 80,
|
|
58
|
+
functions: 80,
|
|
59
|
+
lines: 80,
|
|
60
|
+
statements: 80,
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
setupFilesAfterEnv: ['<rootDir>/tests/setup.ts'],
|
|
64
|
+
testTimeout: 30000,
|
|
65
|
+
verbose: true,
|
|
66
|
+
collectCoverage: false,
|
|
67
|
+
};
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
##############################################################################
|
|
4
|
+
# CFN Loop Orchestration Wrapper - Parameter Validation & Fallback Enforcement
|
|
5
|
+
# Version: 1.0.0 (BUG #22 Phase 2 - Parameter Fallback)
|
|
6
|
+
#
|
|
7
|
+
# Purpose:
|
|
8
|
+
# Validates and enforces non-empty parameters for orchestrate.sh invocation.
|
|
9
|
+
# Applies task-appropriate hardcoded fallbacks when parameters are empty or unset.
|
|
10
|
+
# Guarantees that orchestrator is always called with valid, non-empty agent lists.
|
|
11
|
+
#
|
|
12
|
+
# Usage:
|
|
13
|
+
# ./orchestrate-wrapper.sh --task-id <id> \
|
|
14
|
+
# --mode <mvp|standard|enterprise> \
|
|
15
|
+
# [--loop3-agents <agents>] \
|
|
16
|
+
# [--loop2-agents <agents>] \
|
|
17
|
+
# [--product-owner <agent>] \
|
|
18
|
+
# [--task-type <backend|full-stack|default>] \
|
|
19
|
+
# [--max-iterations <n>] \
|
|
20
|
+
# [other orchestrate.sh args...]
|
|
21
|
+
#
|
|
22
|
+
# Exit Codes:
|
|
23
|
+
# 0 = Success (orchestrator invoked)
|
|
24
|
+
# 1 = Invalid orchestrator path or orchestrator execution failed
|
|
25
|
+
# 2 = Missing required parameters (task-id, mode)
|
|
26
|
+
##############################################################################
|
|
27
|
+
|
|
28
|
+
set -euo pipefail
|
|
29
|
+
|
|
30
|
+
# Determine script location and project root
|
|
31
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
32
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
|
33
|
+
ORCHESTRATOR_PATH="$SCRIPT_DIR/orchestrate.sh"
|
|
34
|
+
|
|
35
|
+
# Parameter storage
|
|
36
|
+
TASK_ID=""
|
|
37
|
+
MODE=""
|
|
38
|
+
LOOP3_AGENTS=""
|
|
39
|
+
LOOP2_AGENTS=""
|
|
40
|
+
PRODUCT_OWNER=""
|
|
41
|
+
TASK_TYPE="default" # backend, full-stack, or default
|
|
42
|
+
REMAINING_ARGS=()
|
|
43
|
+
|
|
44
|
+
##############################################################################
|
|
45
|
+
# Fallback Agent Configuration by Task Type
|
|
46
|
+
##############################################################################
|
|
47
|
+
|
|
48
|
+
# Default fallbacks (for generic tasks with no specific type)
|
|
49
|
+
DEFAULT_LOOP3_AGENTS="backend-developer,coder"
|
|
50
|
+
DEFAULT_LOOP2_AGENTS="code-reviewer,tester"
|
|
51
|
+
DEFAULT_PRODUCT_OWNER="product-owner"
|
|
52
|
+
|
|
53
|
+
# Backend-specific fallbacks (for API, database, infrastructure tasks)
|
|
54
|
+
BACKEND_LOOP3_AGENTS="backend-developer,backend-dev"
|
|
55
|
+
BACKEND_LOOP2_AGENTS="code-reviewer,security-specialist,tester"
|
|
56
|
+
BACKEND_PRODUCT_OWNER="product-owner"
|
|
57
|
+
|
|
58
|
+
# Full-stack fallbacks (for tasks requiring both backend and frontend)
|
|
59
|
+
FULLSTACK_LOOP3_AGENTS="backend-developer,react-frontend-engineer"
|
|
60
|
+
FULLSTACK_LOOP2_AGENTS="code-reviewer,security-specialist,tester,qa-engineer"
|
|
61
|
+
FULLSTACK_PRODUCT_OWNER="product-owner"
|
|
62
|
+
|
|
63
|
+
##############################################################################
|
|
64
|
+
# Argument Parsing
|
|
65
|
+
##############################################################################
|
|
66
|
+
|
|
67
|
+
while [[ $# -gt 0 ]]; do
|
|
68
|
+
case $1 in
|
|
69
|
+
--task-id)
|
|
70
|
+
if [[ $# -lt 2 ]]; then
|
|
71
|
+
echo "Error: --task-id requires a value" >&2
|
|
72
|
+
exit 2
|
|
73
|
+
fi
|
|
74
|
+
TASK_ID="$2"
|
|
75
|
+
shift 2
|
|
76
|
+
;;
|
|
77
|
+
--mode)
|
|
78
|
+
if [[ $# -lt 2 ]]; then
|
|
79
|
+
echo "Error: --mode requires a value" >&2
|
|
80
|
+
exit 2
|
|
81
|
+
fi
|
|
82
|
+
# Validate mode is one of: mvp, standard, enterprise
|
|
83
|
+
if [[ ! "$2" =~ ^(mvp|standard|enterprise)$ ]]; then
|
|
84
|
+
echo "Error: --mode must be one of: mvp, standard, enterprise (got: '$2')" >&2
|
|
85
|
+
exit 2
|
|
86
|
+
fi
|
|
87
|
+
MODE="$2"
|
|
88
|
+
shift 2
|
|
89
|
+
;;
|
|
90
|
+
--loop3-agents)
|
|
91
|
+
if [[ $# -lt 2 ]]; then
|
|
92
|
+
echo "Error: --loop3-agents requires a value" >&2
|
|
93
|
+
exit 2
|
|
94
|
+
fi
|
|
95
|
+
LOOP3_AGENTS="$2"
|
|
96
|
+
shift 2
|
|
97
|
+
;;
|
|
98
|
+
--loop2-agents)
|
|
99
|
+
if [[ $# -lt 2 ]]; then
|
|
100
|
+
echo "Error: --loop2-agents requires a value" >&2
|
|
101
|
+
exit 2
|
|
102
|
+
fi
|
|
103
|
+
LOOP2_AGENTS="$2"
|
|
104
|
+
shift 2
|
|
105
|
+
;;
|
|
106
|
+
--product-owner)
|
|
107
|
+
if [[ $# -lt 2 ]]; then
|
|
108
|
+
echo "Error: --product-owner requires a value" >&2
|
|
109
|
+
exit 2
|
|
110
|
+
fi
|
|
111
|
+
PRODUCT_OWNER="$2"
|
|
112
|
+
shift 2
|
|
113
|
+
;;
|
|
114
|
+
--task-type)
|
|
115
|
+
if [[ $# -lt 2 ]]; then
|
|
116
|
+
echo "Error: --task-type requires a value" >&2
|
|
117
|
+
exit 2
|
|
118
|
+
fi
|
|
119
|
+
TASK_TYPE="$2"
|
|
120
|
+
shift 2
|
|
121
|
+
;;
|
|
122
|
+
*)
|
|
123
|
+
# Collect remaining arguments for orchestrator
|
|
124
|
+
REMAINING_ARGS+=("$1")
|
|
125
|
+
shift
|
|
126
|
+
;;
|
|
127
|
+
esac
|
|
128
|
+
done
|
|
129
|
+
|
|
130
|
+
##############################################################################
|
|
131
|
+
# Required Parameter Validation
|
|
132
|
+
##############################################################################
|
|
133
|
+
|
|
134
|
+
if [[ -z "$TASK_ID" ]]; then
|
|
135
|
+
echo "❌ Error: --task-id is required" >&2
|
|
136
|
+
exit 2
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
if [[ -z "$MODE" ]]; then
|
|
140
|
+
echo "❌ Error: --mode is required" >&2
|
|
141
|
+
exit 2
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
##############################################################################
|
|
145
|
+
# Parameter Normalization & Fallback Enforcement
|
|
146
|
+
##############################################################################
|
|
147
|
+
|
|
148
|
+
# Helper function to check if a value is effectively empty
|
|
149
|
+
# (handles empty strings, unset variables, and whitespace-only strings)
|
|
150
|
+
is_empty() {
|
|
151
|
+
local value="${1:-}"
|
|
152
|
+
# Remove leading/trailing whitespace
|
|
153
|
+
value=$(echo "$value" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
154
|
+
[[ -z "$value" ]]
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
# Apply task-type-specific fallbacks to empty parameters
|
|
158
|
+
case "$TASK_TYPE" in
|
|
159
|
+
backend)
|
|
160
|
+
# Backend-specific task defaults
|
|
161
|
+
if is_empty "$LOOP3_AGENTS"; then
|
|
162
|
+
LOOP3_AGENTS="$BACKEND_LOOP3_AGENTS"
|
|
163
|
+
fi
|
|
164
|
+
if is_empty "$LOOP2_AGENTS"; then
|
|
165
|
+
LOOP2_AGENTS="$BACKEND_LOOP2_AGENTS"
|
|
166
|
+
fi
|
|
167
|
+
if is_empty "$PRODUCT_OWNER"; then
|
|
168
|
+
PRODUCT_OWNER="$BACKEND_PRODUCT_OWNER"
|
|
169
|
+
fi
|
|
170
|
+
;;
|
|
171
|
+
full-stack)
|
|
172
|
+
# Full-stack task defaults
|
|
173
|
+
if is_empty "$LOOP3_AGENTS"; then
|
|
174
|
+
LOOP3_AGENTS="$FULLSTACK_LOOP3_AGENTS"
|
|
175
|
+
fi
|
|
176
|
+
if is_empty "$LOOP2_AGENTS"; then
|
|
177
|
+
LOOP2_AGENTS="$FULLSTACK_LOOP2_AGENTS"
|
|
178
|
+
fi
|
|
179
|
+
if is_empty "$PRODUCT_OWNER"; then
|
|
180
|
+
PRODUCT_OWNER="$FULLSTACK_PRODUCT_OWNER"
|
|
181
|
+
fi
|
|
182
|
+
;;
|
|
183
|
+
*)
|
|
184
|
+
# Default/generic task fallbacks
|
|
185
|
+
if is_empty "$LOOP3_AGENTS"; then
|
|
186
|
+
LOOP3_AGENTS="$DEFAULT_LOOP3_AGENTS"
|
|
187
|
+
fi
|
|
188
|
+
if is_empty "$LOOP2_AGENTS"; then
|
|
189
|
+
LOOP2_AGENTS="$DEFAULT_LOOP2_AGENTS"
|
|
190
|
+
fi
|
|
191
|
+
if is_empty "$PRODUCT_OWNER"; then
|
|
192
|
+
PRODUCT_OWNER="$DEFAULT_PRODUCT_OWNER"
|
|
193
|
+
fi
|
|
194
|
+
;;
|
|
195
|
+
esac
|
|
196
|
+
|
|
197
|
+
##############################################################################
|
|
198
|
+
# Post-Fallback Parameter Validation
|
|
199
|
+
##############################################################################
|
|
200
|
+
|
|
201
|
+
# Verify all parameters are now non-empty (guaranteed by fallbacks)
|
|
202
|
+
if is_empty "$LOOP3_AGENTS"; then
|
|
203
|
+
echo "❌ Fatal: LOOP3_AGENTS is empty (fallback failed)" >&2
|
|
204
|
+
echo " Task Type: $TASK_TYPE" >&2
|
|
205
|
+
echo " Value: '$LOOP3_AGENTS'" >&2
|
|
206
|
+
exit 1
|
|
207
|
+
fi
|
|
208
|
+
|
|
209
|
+
if is_empty "$LOOP2_AGENTS"; then
|
|
210
|
+
echo "❌ Fatal: LOOP2_AGENTS is empty (fallback failed)" >&2
|
|
211
|
+
echo " Task Type: $TASK_TYPE" >&2
|
|
212
|
+
echo " Value: '$LOOP2_AGENTS'" >&2
|
|
213
|
+
exit 1
|
|
214
|
+
fi
|
|
215
|
+
|
|
216
|
+
if is_empty "$PRODUCT_OWNER"; then
|
|
217
|
+
echo "❌ Fatal: PRODUCT_OWNER is empty (fallback failed)" >&2
|
|
218
|
+
echo " Task Type: $TASK_TYPE" >&2
|
|
219
|
+
echo " Value: '$PRODUCT_OWNER'" >&2
|
|
220
|
+
exit 1
|
|
221
|
+
fi
|
|
222
|
+
|
|
223
|
+
##############################################################################
|
|
224
|
+
# Orchestrator Path Validation
|
|
225
|
+
##############################################################################
|
|
226
|
+
|
|
227
|
+
if [[ ! -f "$ORCHESTRATOR_PATH" ]]; then
|
|
228
|
+
echo "❌ Error: Orchestrator not found at $ORCHESTRATOR_PATH" >&2
|
|
229
|
+
exit 1
|
|
230
|
+
fi
|
|
231
|
+
|
|
232
|
+
if [[ ! -x "$ORCHESTRATOR_PATH" ]]; then
|
|
233
|
+
echo "⚠️ Warning: Orchestrator is not executable. Attempting to fix..." >&2
|
|
234
|
+
chmod +x "$ORCHESTRATOR_PATH" || {
|
|
235
|
+
echo "❌ Error: Cannot make orchestrator executable at $ORCHESTRATOR_PATH" >&2
|
|
236
|
+
exit 1
|
|
237
|
+
}
|
|
238
|
+
fi
|
|
239
|
+
|
|
240
|
+
##############################################################################
|
|
241
|
+
# Agent Configuration Logging
|
|
242
|
+
##############################################################################
|
|
243
|
+
|
|
244
|
+
echo "📋 Agent Configuration ($(date +%Y-%m-%d' '%H:%M:%S)):" >&2
|
|
245
|
+
echo " Task ID: $TASK_ID" >&2
|
|
246
|
+
echo " Mode: $MODE" >&2
|
|
247
|
+
echo " Task Type: $TASK_TYPE" >&2
|
|
248
|
+
echo " Loop 3 Agents: $LOOP3_AGENTS" >&2
|
|
249
|
+
echo " Loop 2 Agents: $LOOP2_AGENTS" >&2
|
|
250
|
+
echo " Product Owner: $PRODUCT_OWNER" >&2
|
|
251
|
+
echo "" >&2
|
|
252
|
+
|
|
253
|
+
##############################################################################
|
|
254
|
+
# Orchestrator Invocation with Validated Parameters
|
|
255
|
+
##############################################################################
|
|
256
|
+
|
|
257
|
+
# Use exec to replace this process with orchestrator
|
|
258
|
+
# This ensures clean exit and proper signal handling
|
|
259
|
+
exec "$ORCHESTRATOR_PATH" \
|
|
260
|
+
--task-id "$TASK_ID" \
|
|
261
|
+
--mode "$MODE" \
|
|
262
|
+
--loop3-agents "$LOOP3_AGENTS" \
|
|
263
|
+
--loop2-agents "$LOOP2_AGENTS" \
|
|
264
|
+
--product-owner "$PRODUCT_OWNER" \
|
|
265
|
+
"${REMAINING_ARGS[@]}"
|
|
266
|
+
|
|
267
|
+
# Note: exec replaces the shell process, so code below never executes
|
|
268
|
+
# Exit code comes directly from orchestrator execution
|