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
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
##############################################################################
|
|
4
|
+
# Security Utilities for CFN Loop Orchestration
|
|
5
|
+
# Provides input sanitization and validation functions
|
|
6
|
+
##############################################################################
|
|
7
|
+
|
|
8
|
+
# Validate and sanitize input for agent IDs, task IDs, iteration numbers
|
|
9
|
+
# Allowed characters: alphanumeric, dash, underscore
|
|
10
|
+
# Maximum length: 64 characters
|
|
11
|
+
function sanitize_input() {
|
|
12
|
+
local input="$1"
|
|
13
|
+
local max_length="${2:-64}"
|
|
14
|
+
local pattern="^[a-zA-Z0-9_-]+$"
|
|
15
|
+
|
|
16
|
+
# Check if input is empty
|
|
17
|
+
if [ -z "$input" ]; then
|
|
18
|
+
echo "Error: Input cannot be empty" >&2
|
|
19
|
+
return 1
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
# Check input length
|
|
23
|
+
if [ ${#input} -gt "$max_length" ]; then
|
|
24
|
+
echo "Error: Input exceeds maximum length of $max_length characters" >&2
|
|
25
|
+
return 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# Validate against allowed pattern
|
|
29
|
+
if [[ ! "$input" =~ $pattern ]]; then
|
|
30
|
+
echo "Error: Invalid characters in input. Only alphanumeric, dash, and underscore allowed" >&2
|
|
31
|
+
return 1
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# If all checks pass, echo the sanitized input
|
|
35
|
+
echo "$input"
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
# Validate context JSON (optional JSON structure validation)
|
|
39
|
+
function validate_json_context() {
|
|
40
|
+
local context="$1"
|
|
41
|
+
|
|
42
|
+
# If context is empty, return success
|
|
43
|
+
if [ -z "$context" ]; then
|
|
44
|
+
return 0
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Use jq to validate JSON structure, silently discard output
|
|
48
|
+
if ! echo "$context" | jq -e . >/dev/null 2>&1; then
|
|
49
|
+
echo "Error: Invalid JSON context" >&2
|
|
50
|
+
return 1
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
return 0
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# Safe Redis key generator
|
|
57
|
+
function generate_safe_redis_key() {
|
|
58
|
+
local prefix="$1"
|
|
59
|
+
local task_id="$2"
|
|
60
|
+
local suffix="${3:-}"
|
|
61
|
+
|
|
62
|
+
# Sanitize all input components
|
|
63
|
+
local safe_prefix
|
|
64
|
+
local safe_task_id
|
|
65
|
+
local safe_suffix
|
|
66
|
+
|
|
67
|
+
safe_prefix=$(sanitize_input "$prefix" 32) || return 1
|
|
68
|
+
safe_task_id=$(sanitize_input "$task_id" 64) || return 1
|
|
69
|
+
|
|
70
|
+
# Suffix is optional, but if provided, must be sanitized
|
|
71
|
+
if [ -n "$suffix" ]; then
|
|
72
|
+
safe_suffix=$(sanitize_input "$suffix" 32) || return 1
|
|
73
|
+
echo "swarm:${safe_prefix}:${safe_task_id}:${safe_suffix}"
|
|
74
|
+
else
|
|
75
|
+
echo "swarm:${safe_prefix}:${safe_task_id}"
|
|
76
|
+
fi
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
# Validation function for agent lists
|
|
80
|
+
function validate_agent_list() {
|
|
81
|
+
local agents="$1"
|
|
82
|
+
|
|
83
|
+
# Check if empty
|
|
84
|
+
if [ -z "$agents" ]; then
|
|
85
|
+
echo "Error: Agent list cannot be empty" >&2
|
|
86
|
+
return 1
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
# Split agents and validate each
|
|
90
|
+
IFS=',' read -ra AGENT_ARRAY <<< "$agents"
|
|
91
|
+
for agent in "${AGENT_ARRAY[@]}"; do
|
|
92
|
+
if ! sanitize_input "$agent" 64 >/dev/null; then
|
|
93
|
+
echo "Error: Invalid agent ID: $agent" >&2
|
|
94
|
+
return 1
|
|
95
|
+
fi
|
|
96
|
+
done
|
|
97
|
+
|
|
98
|
+
return 0
|
|
99
|
+
}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
##############################################################################
|
|
4
|
+
# CFN Loop Orchestration Test Suite
|
|
5
|
+
# Version: 1.0.0
|
|
6
|
+
#
|
|
7
|
+
# Comprehensive tests for modular CFN Loop Orchestration skill
|
|
8
|
+
##############################################################################
|
|
9
|
+
|
|
10
|
+
set -euo pipefail
|
|
11
|
+
|
|
12
|
+
# Test configuration
|
|
13
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
14
|
+
HELPERS_DIR="$SCRIPT_DIR/helpers"
|
|
15
|
+
TEST_TASK_ID="test-cfn-$(date +%s)"
|
|
16
|
+
PASSED=0
|
|
17
|
+
FAILED=0
|
|
18
|
+
|
|
19
|
+
# Colors
|
|
20
|
+
RED='\033[0;31m'
|
|
21
|
+
GREEN='\033[0;32m'
|
|
22
|
+
YELLOW='\033[1;33m'
|
|
23
|
+
NC='\033[0m' # No Color
|
|
24
|
+
|
|
25
|
+
##############################################################################
|
|
26
|
+
# Test Helper Functions
|
|
27
|
+
##############################################################################
|
|
28
|
+
|
|
29
|
+
function test_passed() {
|
|
30
|
+
local test_name="$1"
|
|
31
|
+
echo -e "${GREEN}✓${NC} $test_name"
|
|
32
|
+
PASSED=$((PASSED + 1))
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function test_failed() {
|
|
36
|
+
local test_name="$1"
|
|
37
|
+
local reason="$2"
|
|
38
|
+
echo -e "${RED}✗${NC} $test_name: $reason"
|
|
39
|
+
FAILED=$((FAILED + 1))
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function cleanup_test() {
|
|
43
|
+
local task_id="$1"
|
|
44
|
+
# Clean up Redis keys for test
|
|
45
|
+
redis-cli --scan --pattern "swarm:${task_id}:*" | xargs -r redis-cli del > /dev/null 2>&1 || true
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
##############################################################################
|
|
49
|
+
# Test Cases
|
|
50
|
+
##############################################################################
|
|
51
|
+
|
|
52
|
+
echo "=============================================="
|
|
53
|
+
echo "CFN Loop Orchestration Test Suite"
|
|
54
|
+
echo "=============================================="
|
|
55
|
+
echo ""
|
|
56
|
+
|
|
57
|
+
# Test 1: Gate Check Helper - Pass
|
|
58
|
+
echo "Test 1: Gate Check - Pass Scenario"
|
|
59
|
+
cleanup_test "$TEST_TASK_ID"
|
|
60
|
+
|
|
61
|
+
# Simulate Loop 3 agents with high confidence
|
|
62
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:agent1:result" "0.85" > /dev/null
|
|
63
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:agent2:result" "0.90" > /dev/null
|
|
64
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:agent3:result" "0.88" > /dev/null
|
|
65
|
+
|
|
66
|
+
if "$HELPERS_DIR/gate-check.sh" \
|
|
67
|
+
--task-id "$TEST_TASK_ID" \
|
|
68
|
+
--agents "agent1,agent2,agent3" \
|
|
69
|
+
--threshold "0.75" \
|
|
70
|
+
--min-quorum "0.66" > /dev/null 2>&1; then
|
|
71
|
+
# Check that gate-passed signal was sent
|
|
72
|
+
if redis-cli --raw lrange "swarm:${TEST_TASK_ID}:gate-passed" 0 -1 | grep -q "1"; then
|
|
73
|
+
test_passed "Gate check PASS with signal broadcast"
|
|
74
|
+
else
|
|
75
|
+
test_failed "Gate check PASS" "Signal not broadcast to Loop 2"
|
|
76
|
+
fi
|
|
77
|
+
else
|
|
78
|
+
test_failed "Gate check PASS" "Should have passed with 0.87 avg confidence"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
cleanup_test "$TEST_TASK_ID"
|
|
82
|
+
echo ""
|
|
83
|
+
|
|
84
|
+
# Test 2: Gate Check Helper - Fail
|
|
85
|
+
echo "Test 2: Gate Check - Fail Scenario"
|
|
86
|
+
cleanup_test "$TEST_TASK_ID"
|
|
87
|
+
|
|
88
|
+
# Simulate Loop 3 agents with low confidence
|
|
89
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:agent1:result" "0.65" > /dev/null
|
|
90
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:agent2:result" "0.70" > /dev/null
|
|
91
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:agent3:result" "0.68" > /dev/null
|
|
92
|
+
|
|
93
|
+
if ! "$HELPERS_DIR/gate-check.sh" \
|
|
94
|
+
--task-id "$TEST_TASK_ID" \
|
|
95
|
+
--agents "agent1,agent2,agent3" \
|
|
96
|
+
--threshold "0.75" \
|
|
97
|
+
--min-quorum "0.66" > /dev/null 2>&1; then
|
|
98
|
+
test_passed "Gate check FAIL detection"
|
|
99
|
+
else
|
|
100
|
+
test_failed "Gate check FAIL" "Should have failed with 0.67 avg confidence"
|
|
101
|
+
fi
|
|
102
|
+
|
|
103
|
+
cleanup_test "$TEST_TASK_ID"
|
|
104
|
+
echo ""
|
|
105
|
+
|
|
106
|
+
# Test 3: Consensus Check Helper - Pass
|
|
107
|
+
echo "Test 3: Consensus Check - Pass Scenario"
|
|
108
|
+
cleanup_test "$TEST_TASK_ID"
|
|
109
|
+
|
|
110
|
+
# Simulate Loop 2 validators with high consensus
|
|
111
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:reviewer1:result" "0.92" > /dev/null
|
|
112
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:tester1:result" "0.95" > /dev/null
|
|
113
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:security1:result" "0.91" > /dev/null
|
|
114
|
+
|
|
115
|
+
if "$HELPERS_DIR/consensus.sh" \
|
|
116
|
+
--task-id "$TEST_TASK_ID" \
|
|
117
|
+
--agents "reviewer1,tester1,security1" \
|
|
118
|
+
--threshold "0.90" \
|
|
119
|
+
--min-quorum "0.66" > /dev/null 2>&1; then
|
|
120
|
+
test_passed "Consensus check PASS"
|
|
121
|
+
else
|
|
122
|
+
test_failed "Consensus check PASS" "Should have passed with 0.93 avg consensus"
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
cleanup_test "$TEST_TASK_ID"
|
|
126
|
+
echo ""
|
|
127
|
+
|
|
128
|
+
# Test 4: Consensus Check Helper - Fail
|
|
129
|
+
echo "Test 4: Consensus Check - Fail Scenario"
|
|
130
|
+
cleanup_test "$TEST_TASK_ID"
|
|
131
|
+
|
|
132
|
+
# Simulate Loop 2 validators with low consensus
|
|
133
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:reviewer1:result" "0.82" > /dev/null
|
|
134
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:tester1:result" "0.85" > /dev/null
|
|
135
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:security1:result" "0.88" > /dev/null
|
|
136
|
+
|
|
137
|
+
if ! "$HELPERS_DIR/consensus.sh" \
|
|
138
|
+
--task-id "$TEST_TASK_ID" \
|
|
139
|
+
--agents "reviewer1,tester1,security1" \
|
|
140
|
+
--threshold "0.90" \
|
|
141
|
+
--min-quorum "0.66" > /dev/null 2>&1; then
|
|
142
|
+
test_passed "Consensus check FAIL detection"
|
|
143
|
+
else
|
|
144
|
+
test_failed "Consensus check FAIL" "Should have failed with 0.85 avg consensus"
|
|
145
|
+
fi
|
|
146
|
+
|
|
147
|
+
cleanup_test "$TEST_TASK_ID"
|
|
148
|
+
echo ""
|
|
149
|
+
|
|
150
|
+
# Test 5: Deliverable Verifier - File Exists
|
|
151
|
+
echo "Test 5: Deliverable Verifier - File Exists"
|
|
152
|
+
|
|
153
|
+
# Create test file
|
|
154
|
+
TEST_FILE="/tmp/test-deliverable-$$.txt"
|
|
155
|
+
echo "test content" > "$TEST_FILE"
|
|
156
|
+
|
|
157
|
+
if "$HELPERS_DIR/deliverable-verifier.sh" \
|
|
158
|
+
--expected-files "$TEST_FILE" \
|
|
159
|
+
--task-type "implement feature" > /dev/null 2>&1; then
|
|
160
|
+
test_passed "Deliverable verification - file exists"
|
|
161
|
+
else
|
|
162
|
+
test_failed "Deliverable verification" "Should have passed with existing file"
|
|
163
|
+
fi
|
|
164
|
+
|
|
165
|
+
# Cleanup
|
|
166
|
+
rm -f "$TEST_FILE"
|
|
167
|
+
echo ""
|
|
168
|
+
|
|
169
|
+
# Test 6: Deliverable Verifier - Missing File
|
|
170
|
+
echo "Test 6: Deliverable Verifier - Missing File"
|
|
171
|
+
|
|
172
|
+
# Reference non-existent file
|
|
173
|
+
TEST_FILE="/tmp/nonexistent-file-$$.txt"
|
|
174
|
+
|
|
175
|
+
if ! "$HELPERS_DIR/deliverable-verifier.sh" \
|
|
176
|
+
--expected-files "$TEST_FILE" \
|
|
177
|
+
--task-type "create component" > /dev/null 2>&1; then
|
|
178
|
+
test_passed "Deliverable verification - missing file detection"
|
|
179
|
+
else
|
|
180
|
+
test_failed "Deliverable verification" "Should have failed with missing file"
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
echo ""
|
|
184
|
+
|
|
185
|
+
# Test 7: Timeout Calculator - Phase-Specific
|
|
186
|
+
echo "Test 7: Timeout Calculator - Phase-Specific"
|
|
187
|
+
|
|
188
|
+
PHASE1_TIMEOUT=$("$HELPERS_DIR/timeout-calculator.sh" --phase-id "phase-1")
|
|
189
|
+
PHASE2_TIMEOUT=$("$HELPERS_DIR/timeout-calculator.sh" --phase-id "phase-2")
|
|
190
|
+
UNKNOWN_TIMEOUT=$("$HELPERS_DIR/timeout-calculator.sh" --phase-id "unknown-phase")
|
|
191
|
+
|
|
192
|
+
if [ "$PHASE1_TIMEOUT" = "900" ] && [ "$PHASE2_TIMEOUT" = "3600" ] && [ "$UNKNOWN_TIMEOUT" = "3600" ]; then
|
|
193
|
+
test_passed "Timeout calculator - phase-specific values"
|
|
194
|
+
else
|
|
195
|
+
test_failed "Timeout calculator" "Expected 900, 3600, 3600 but got $PHASE1_TIMEOUT, $PHASE2_TIMEOUT, $UNKNOWN_TIMEOUT"
|
|
196
|
+
fi
|
|
197
|
+
|
|
198
|
+
echo ""
|
|
199
|
+
|
|
200
|
+
# Test 8: Iteration Manager - Wake Agents
|
|
201
|
+
echo "Test 8: Iteration Manager - Agent Wake"
|
|
202
|
+
cleanup_test "$TEST_TASK_ID"
|
|
203
|
+
|
|
204
|
+
# Simulate agents in waiting mode
|
|
205
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:agent1:wake" "" > /dev/null
|
|
206
|
+
redis-cli lpush "swarm:${TEST_TASK_ID}:agent2:wake" "" > /dev/null
|
|
207
|
+
|
|
208
|
+
# Store feedback
|
|
209
|
+
redis-cli set "swarm:${TEST_TASK_ID}:feedback:agent1" "Improve test coverage" > /dev/null
|
|
210
|
+
redis-cli set "swarm:${TEST_TASK_ID}:feedback:agent2" "Add error handling" > /dev/null
|
|
211
|
+
|
|
212
|
+
if "$HELPERS_DIR/iteration-manager.sh" \
|
|
213
|
+
--task-id "$TEST_TASK_ID" \
|
|
214
|
+
--iteration "2" \
|
|
215
|
+
--agents "agent1,agent2" \
|
|
216
|
+
--feedback-source "swarm:${TEST_TASK_ID}:feedback" > /dev/null 2>&1; then
|
|
217
|
+
test_passed "Iteration manager - agent wake"
|
|
218
|
+
else
|
|
219
|
+
test_failed "Iteration manager" "Failed to wake agents"
|
|
220
|
+
fi
|
|
221
|
+
|
|
222
|
+
cleanup_test "$TEST_TASK_ID"
|
|
223
|
+
echo ""
|
|
224
|
+
|
|
225
|
+
# Test 9: Helper Script Parameter Validation
|
|
226
|
+
echo "Test 9: Parameter Validation"
|
|
227
|
+
|
|
228
|
+
# Test gate-check.sh without required params
|
|
229
|
+
if ! "$HELPERS_DIR/gate-check.sh" > /dev/null 2>&1; then
|
|
230
|
+
test_passed "Parameter validation - gate-check.sh"
|
|
231
|
+
else
|
|
232
|
+
test_failed "Parameter validation" "gate-check.sh should fail without params"
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
# Test consensus.sh without required params
|
|
236
|
+
if ! "$HELPERS_DIR/consensus.sh" > /dev/null 2>&1; then
|
|
237
|
+
test_passed "Parameter validation - consensus.sh"
|
|
238
|
+
else
|
|
239
|
+
test_failed "Parameter validation" "consensus.sh should fail without params"
|
|
240
|
+
fi
|
|
241
|
+
|
|
242
|
+
echo ""
|
|
243
|
+
|
|
244
|
+
# Test 10: SKILL.md Metadata Validation
|
|
245
|
+
echo "Test 10: SKILL.md Metadata Validation"
|
|
246
|
+
|
|
247
|
+
if [ -f "$SCRIPT_DIR/SKILL.md" ]; then
|
|
248
|
+
# Check for required metadata fields
|
|
249
|
+
if grep -q "Skill ID:" "$SCRIPT_DIR/SKILL.md" && \
|
|
250
|
+
grep -q "Version:" "$SCRIPT_DIR/SKILL.md" && \
|
|
251
|
+
grep -q "Dependencies:" "$SCRIPT_DIR/SKILL.md" && \
|
|
252
|
+
grep -q "Purpose" "$SCRIPT_DIR/SKILL.md"; then
|
|
253
|
+
test_passed "SKILL.md metadata completeness"
|
|
254
|
+
else
|
|
255
|
+
test_failed "SKILL.md metadata" "Missing required fields"
|
|
256
|
+
fi
|
|
257
|
+
else
|
|
258
|
+
test_failed "SKILL.md" "File not found"
|
|
259
|
+
fi
|
|
260
|
+
|
|
261
|
+
echo ""
|
|
262
|
+
|
|
263
|
+
##############################################################################
|
|
264
|
+
# Test Summary
|
|
265
|
+
##############################################################################
|
|
266
|
+
|
|
267
|
+
echo "=============================================="
|
|
268
|
+
echo "Test Summary"
|
|
269
|
+
echo "=============================================="
|
|
270
|
+
echo -e "${GREEN}Passed:${NC} $PASSED"
|
|
271
|
+
echo -e "${RED}Failed:${NC} $FAILED"
|
|
272
|
+
echo "Total: $((PASSED + FAILED))"
|
|
273
|
+
echo "=============================================="
|
|
274
|
+
|
|
275
|
+
if [ $FAILED -eq 0 ]; then
|
|
276
|
+
echo -e "${GREEN}All tests passed!${NC}"
|
|
277
|
+
exit 0
|
|
278
|
+
else
|
|
279
|
+
echo -e "${RED}Some tests failed${NC}"
|
|
280
|
+
exit 1
|
|
281
|
+
fi
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Edge Case Test Suite for CFN Loop Orchestration
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
# Results tracking
|
|
7
|
+
TOTAL_TESTS=0
|
|
8
|
+
PASSED_TESTS=0
|
|
9
|
+
OUTPUT_FILE="/tmp/edge-case-test-results.md"
|
|
10
|
+
|
|
11
|
+
# Utility function
|
|
12
|
+
log_test() {
|
|
13
|
+
local test_name="$1"
|
|
14
|
+
local result="$2"
|
|
15
|
+
local reason="${3:-No details}"
|
|
16
|
+
|
|
17
|
+
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
|
18
|
+
|
|
19
|
+
if [[ "$result" == "PASS" ]]; then
|
|
20
|
+
PASSED_TESTS=$((PASSED_TESTS + 1))
|
|
21
|
+
echo "- [x] $test_name" >> "$OUTPUT_FILE"
|
|
22
|
+
else
|
|
23
|
+
echo "- [ ] $test_name (FAILED)" >> "$OUTPUT_FILE"
|
|
24
|
+
echo " - Reason: $reason" >> "$OUTPUT_FILE"
|
|
25
|
+
fi
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
# Prepare results file
|
|
29
|
+
echo "# CFN Loop Edge Case Test Suite" > "$OUTPUT_FILE"
|
|
30
|
+
echo "## Test Execution: $(date)" >> "$OUTPUT_FILE"
|
|
31
|
+
echo "---" >> "$OUTPUT_FILE"
|
|
32
|
+
|
|
33
|
+
# Test context injection
|
|
34
|
+
test_context_injection() {
|
|
35
|
+
# Test empty context
|
|
36
|
+
if echo '{}' | jq empty >/dev/null 2>&1; then
|
|
37
|
+
log_test "Empty Context" "PASS"
|
|
38
|
+
else
|
|
39
|
+
log_test "Empty Context" "FAIL" "JSON parsing failed"
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# Test large context
|
|
43
|
+
local large_context=$(python3 -c "
|
|
44
|
+
import json
|
|
45
|
+
print(json.dumps({
|
|
46
|
+
'deliverables': [f'file_{i}' for i in range(1000)],
|
|
47
|
+
'description': 'A' * 10000
|
|
48
|
+
}))
|
|
49
|
+
")
|
|
50
|
+
|
|
51
|
+
if echo "$large_context" | jq empty >/dev/null 2>&1; then
|
|
52
|
+
log_test "Large Context" "PASS"
|
|
53
|
+
else
|
|
54
|
+
log_test "Large Context" "FAIL" "Large JSON parsing failed"
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Test Unicode context
|
|
58
|
+
local unicode_context='{"key": "こんにちは世界"}'
|
|
59
|
+
if echo "$unicode_context" | jq empty >/dev/null 2>&1; then
|
|
60
|
+
log_test "Unicode Context" "PASS"
|
|
61
|
+
else
|
|
62
|
+
log_test "Unicode Context" "FAIL" "Unicode JSON parsing failed"
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
# Test malformed JSON
|
|
66
|
+
local malformed_cases=(
|
|
67
|
+
'{invalid json'
|
|
68
|
+
'{"key": "value"'
|
|
69
|
+
'{]'
|
|
70
|
+
'{"nested": {]}'
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
for case in "${malformed_cases[@]}"; do
|
|
74
|
+
if ! echo "$case" | jq empty >/dev/null 2>&1; then
|
|
75
|
+
log_test "Malformed JSON: $case" "PASS"
|
|
76
|
+
else
|
|
77
|
+
log_test "Malformed JSON: $case" "FAIL" "Should fail parsing"
|
|
78
|
+
fi
|
|
79
|
+
done
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
# Test confidence handling
|
|
83
|
+
test_confidence_handling() {
|
|
84
|
+
# Test valid confidence ranges
|
|
85
|
+
local confidence_cases=(0.0 0.5 0.75 1.0)
|
|
86
|
+
local invalid_cases=(-0.1 1.1)
|
|
87
|
+
|
|
88
|
+
for conf in "${confidence_cases[@]}"; do
|
|
89
|
+
if [[ $(echo "$conf >= 0.0 && $conf <= 1.0" | bc) -eq 1 ]]; then
|
|
90
|
+
log_test "Confidence Range: $conf" "PASS"
|
|
91
|
+
else
|
|
92
|
+
log_test "Confidence Range: $conf" "FAIL" "Out of valid range"
|
|
93
|
+
fi
|
|
94
|
+
done
|
|
95
|
+
|
|
96
|
+
for conf in "${invalid_cases[@]}"; do
|
|
97
|
+
if [[ $(echo "$conf >= 0.0 && $conf <= 1.0" | bc) -eq 0 ]]; then
|
|
98
|
+
log_test "Invalid Confidence: $conf" "PASS"
|
|
99
|
+
else
|
|
100
|
+
log_test "Invalid Confidence: $conf" "FAIL" "Should be rejected"
|
|
101
|
+
fi
|
|
102
|
+
done
|
|
103
|
+
|
|
104
|
+
# Test mixed confidence formats
|
|
105
|
+
local mixed_cases=(
|
|
106
|
+
'{"agent1": 0.85, "agent2": "high", "agent3": 90}'
|
|
107
|
+
'{"agent1": 95, "agent2": 0.95, "agent3": "excellent"}'
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
for case in "${mixed_cases[@]}"; do
|
|
111
|
+
if echo "$case" | jq . >/dev/null 2>&1; then
|
|
112
|
+
log_test "Mixed Confidence Format" "PASS"
|
|
113
|
+
else
|
|
114
|
+
log_test "Mixed Confidence Format" "FAIL" "Unable to parse mixed format"
|
|
115
|
+
fi
|
|
116
|
+
done
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
# Test agent spawning
|
|
120
|
+
test_agent_spawning() {
|
|
121
|
+
# Simulate agent list scenarios
|
|
122
|
+
local single_agent=("test-agent")
|
|
123
|
+
local duplicate_agents=("agent1" "agent1" "agent2")
|
|
124
|
+
local many_agents=("agent1" "agent2" "agent3" "agent4" "agent5")
|
|
125
|
+
|
|
126
|
+
if [[ "${#single_agent[@]}" -eq 1 ]]; then
|
|
127
|
+
log_test "Single Agent Spawn" "PASS"
|
|
128
|
+
else
|
|
129
|
+
log_test "Single Agent Spawn" "FAIL" "Incorrect agent count"
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
local unique_agents=($(echo "${duplicate_agents[@]}" | tr ' ' '\n' | sort -u))
|
|
133
|
+
if [[ "${#unique_agents[@]}" -lt "${#duplicate_agents[@]}" ]]; then
|
|
134
|
+
log_test "Duplicate Agents Detection" "PASS"
|
|
135
|
+
else
|
|
136
|
+
log_test "Duplicate Agents Detection" "FAIL" "Failed to detect duplicates"
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
if [[ "${#many_agents[@]}" -ge 3 ]]; then
|
|
140
|
+
log_test "Multiple Agent Spawn" "PASS"
|
|
141
|
+
else
|
|
142
|
+
log_test "Multiple Agent Spawn" "FAIL" "Insufficient agents"
|
|
143
|
+
fi
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
# Test Redis connectivity
|
|
147
|
+
test_redis_connectivity() {
|
|
148
|
+
if redis-cli ping | grep -q PONG; then
|
|
149
|
+
log_test "Redis Connection" "PASS"
|
|
150
|
+
else
|
|
151
|
+
log_test "Redis Connection" "FAIL" "Cannot connect to Redis"
|
|
152
|
+
fi
|
|
153
|
+
|
|
154
|
+
# Test Redis key operations
|
|
155
|
+
local test_key="cfn_loop_test_$(date +%s)"
|
|
156
|
+
if redis-cli SET "$test_key" "test_value" &&
|
|
157
|
+
redis-cli GET "$test_key" | grep -q "test_value" &&
|
|
158
|
+
redis-cli DEL "$test_key" >/dev/null; then
|
|
159
|
+
log_test "Redis Key Operations" "PASS"
|
|
160
|
+
else
|
|
161
|
+
log_test "Redis Key Operations" "FAIL" "Failed basic Redis operations"
|
|
162
|
+
fi
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
# Main test execution
|
|
166
|
+
main() {
|
|
167
|
+
test_context_injection
|
|
168
|
+
test_confidence_handling
|
|
169
|
+
test_agent_spawning
|
|
170
|
+
test_redis_connectivity
|
|
171
|
+
|
|
172
|
+
# Summarize results
|
|
173
|
+
echo "" >> "$OUTPUT_FILE"
|
|
174
|
+
echo "## Test Summary" >> "$OUTPUT_FILE"
|
|
175
|
+
echo "- Total Tests: $TOTAL_TESTS" >> "$OUTPUT_FILE"
|
|
176
|
+
echo "- Passed: $PASSED_TESTS" >> "$OUTPUT_FILE"
|
|
177
|
+
echo "- Failure Rate: $((TOTAL_TESTS - PASSED_TESTS))/$TOTAL_TESTS" >> "$OUTPUT_FILE"
|
|
178
|
+
|
|
179
|
+
local confidence=$(echo "scale=2; $PASSED_TESTS / $TOTAL_TESTS" | bc)
|
|
180
|
+
echo "CONFIDENCE_SCORE=$confidence" > /tmp/edge_case_confidence.txt
|
|
181
|
+
|
|
182
|
+
cat "$OUTPUT_FILE"
|
|
183
|
+
echo ""
|
|
184
|
+
cat /tmp/edge_case_confidence.txt
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
# Run tests
|
|
188
|
+
main
|