claude-flow-novice 2.15.3 → 2.15.5
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/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/.claude/commands/cfn-loop-cli.md +29 -6
- package/.claude/commands/switch-api.md +31 -10
- package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
- package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
- package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
- package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
- package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/.claude/skills/cfn-redis-coordination/redis-functions.sh +34 -0
- package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
- package/README.md +116 -475
- package/claude-assets/agents/cfn-dev-team/README.md +103 -0
- package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
- package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
- package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
- package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
- package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
- package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
- package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
- package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
- package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
- package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/claude-assets/commands/cfn-loop-cli.md +29 -6
- package/claude-assets/commands/switch-api.md +31 -10
- package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
- package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
- package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
- package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
- package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
- package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
- package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
- package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
- package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
- package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
- package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
- package/claude-assets/skills/bootstrap/database-connection.md +464 -0
- package/claude-assets/skills/bootstrap/error-handling.md +580 -0
- package/claude-assets/skills/bootstrap/file-operations.md +699 -0
- package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
- package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
- package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
- package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
- package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
- package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
- package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
- package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
- package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
- package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
- package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
- package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
- package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
- package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
- package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
- package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
- package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
- package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
- package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
- package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
- package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
- package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
- package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
- package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
- package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +34 -0
- package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
- package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
- package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
- package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
- package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
- package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
- package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
- package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
- package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
- package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
- package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
- package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
- package/claude-assets/skills/cfn-utilities/test.sh +317 -0
- package/claude-assets/skills/integration/agent-handoff.sh +62 -64
- package/claude-assets/skills/json-validation/SKILL.md +431 -0
- package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
- package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
- package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
- package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
- package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
- package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
- package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
- package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
- package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
- package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
- package/dist/ace/ace-curator.js +10 -2
- package/dist/ace/ace-curator.js.map +1 -1
- package/dist/ace/ace-generator.js +4 -0
- package/dist/ace/ace-generator.js.map +1 -1
- package/dist/ace/ace-reflector.js +1 -1
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/ace/context-injection.js +24 -2
- package/dist/ace/context-injection.js.map +1 -1
- package/dist/agents/task-agent-integration.js +1 -1
- package/dist/agents/task-agent-integration.js.map +1 -1
- package/dist/api/health-endpoints.js +390 -0
- package/dist/api/health-endpoints.js.map +1 -0
- package/dist/cli/agent-executor.js +4 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +89 -1
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +130 -37
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/config-manager.js +109 -91
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/conversation-fork-cleanup.js +201 -0
- package/dist/cli/conversation-fork-cleanup.js.map +1 -0
- package/dist/cli/conversation-fork.js +16 -3
- package/dist/cli/conversation-fork.js.map +1 -1
- package/dist/cli/skill-cache-validator.js +412 -0
- package/dist/cli/skill-cache-validator.js.map +1 -0
- package/dist/cli/skill-cli.js +991 -0
- package/dist/cli/skill-cli.js.map +1 -0
- package/dist/cli/skill-execution-logger.js +284 -0
- package/dist/cli/skill-execution-logger.js.map +1 -0
- package/dist/cli/skill-loader.js +457 -0
- package/dist/cli/skill-loader.js.map +1 -0
- package/dist/coordination/event-bus.js +2 -2
- package/dist/coordination/event-bus.js.map +1 -1
- package/dist/coordination/fleet-manager.js +1 -1
- package/dist/coordination/fleet-manager.js.map +1 -1
- package/dist/coordination/index.js +23 -9
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/types/fleet-manager.types.js.map +1 -1
- package/dist/db/migration-manager.js +483 -0
- package/dist/db/migration-manager.js.map +1 -0
- package/dist/db/skills-query.js +535 -0
- package/dist/db/skills-query.js.map +1 -0
- package/dist/integration/DatabaseHandoff.js +1 -1
- package/dist/integration/DatabaseHandoff.js.map +1 -1
- package/dist/jobs/edge-case-analyzer.js +367 -0
- package/dist/jobs/edge-case-analyzer.js.map +1 -0
- package/dist/jobs/promotion-sla-enforcer.js +288 -0
- package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
- package/dist/lib/agent-output-parser.js.map +1 -1
- package/dist/lib/agent-output-validator.js.map +1 -1
- package/dist/lib/agent-workspace.js +281 -0
- package/dist/lib/agent-workspace.js.map +1 -0
- package/dist/lib/atomic-file-writer.js +377 -0
- package/dist/lib/atomic-file-writer.js.map +1 -0
- package/dist/lib/backup-manager.js +779 -0
- package/dist/lib/backup-manager.js.map +1 -0
- package/dist/lib/checkpoint-manager.js +837 -0
- package/dist/lib/checkpoint-manager.js.map +1 -0
- package/dist/lib/circuit-breaker.js +340 -0
- package/dist/lib/circuit-breaker.js.map +1 -0
- package/dist/lib/completion-signal-handler.js +243 -0
- package/dist/lib/completion-signal-handler.js.map +1 -0
- package/dist/lib/config-manager.js +312 -0
- package/dist/lib/config-manager.js.map +1 -0
- package/dist/lib/config-migrator.js +386 -0
- package/dist/lib/config-migrator.js.map +1 -0
- package/dist/lib/config-validator.js.map +1 -1
- package/dist/lib/correlation-cache.js +311 -0
- package/dist/lib/correlation-cache.js.map +1 -0
- package/dist/lib/correlation.js +263 -0
- package/dist/lib/correlation.js.map +1 -0
- package/dist/lib/database-service/connection-pool-manager.js +520 -0
- package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
- package/dist/lib/database-service/correlation.js +329 -0
- package/dist/lib/database-service/correlation.js.map +1 -0
- package/dist/lib/database-service/errors.js +120 -0
- package/dist/lib/database-service/errors.js.map +1 -0
- package/dist/lib/database-service/index.js +168 -0
- package/dist/lib/database-service/index.js.map +1 -0
- package/dist/lib/database-service/postgres-adapter.js +526 -0
- package/dist/lib/database-service/postgres-adapter.js.map +1 -0
- package/dist/lib/database-service/redis-adapter.js +360 -0
- package/dist/lib/database-service/redis-adapter.js.map +1 -0
- package/dist/lib/database-service/sqlite-adapter.js +544 -0
- package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
- package/dist/lib/database-service/transaction-manager.js +773 -0
- package/dist/lib/database-service/transaction-manager.js.map +1 -0
- package/dist/lib/database-service/types.js +23 -0
- package/dist/lib/database-service/types.js.map +1 -0
- package/dist/lib/deadlock-resolver.js +292 -0
- package/dist/lib/deadlock-resolver.js.map +1 -0
- package/dist/lib/distributed-lock.js +451 -0
- package/dist/lib/distributed-lock.js.map +1 -0
- package/dist/lib/edge-case-deduplicator.js +227 -0
- package/dist/lib/edge-case-deduplicator.js.map +1 -0
- package/dist/lib/encryption-manager.js +322 -0
- package/dist/lib/encryption-manager.js.map +1 -0
- package/dist/lib/error-aggregator.js +234 -0
- package/dist/lib/error-aggregator.js.map +1 -0
- package/dist/lib/errors.js +287 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/file-lock-manager.js +578 -0
- package/dist/lib/file-lock-manager.js.map +1 -0
- package/dist/lib/file-operations.js +367 -0
- package/dist/lib/file-operations.js.map +1 -0
- package/dist/lib/idempotent-write.js +237 -0
- package/dist/lib/idempotent-write.js.map +1 -0
- package/dist/lib/integration-schema-validator.js +522 -0
- package/dist/lib/integration-schema-validator.js.map +1 -0
- package/dist/lib/lock-health-monitor.js +298 -0
- package/dist/lib/lock-health-monitor.js.map +1 -0
- package/dist/lib/log-shipper.js +422 -0
- package/dist/lib/log-shipper.js.map +1 -0
- package/dist/lib/logging.js +146 -0
- package/dist/lib/logging.js.map +1 -0
- package/dist/lib/message-deduplicator.js +439 -0
- package/dist/lib/message-deduplicator.js.map +1 -0
- package/dist/lib/multi-system-query.js +604 -0
- package/dist/lib/multi-system-query.js.map +1 -0
- package/dist/lib/orphan-detector.js +332 -0
- package/dist/lib/orphan-detector.js.map +1 -0
- package/dist/lib/password-generator.js +166 -0
- package/dist/lib/password-generator.js.map +1 -0
- package/dist/lib/path-validator.js +429 -0
- package/dist/lib/path-validator.js.map +1 -0
- package/dist/lib/query-translator.js +905 -0
- package/dist/lib/query-translator.js.map +1 -0
- package/dist/lib/queue-recovery.js +469 -0
- package/dist/lib/queue-recovery.js.map +1 -0
- package/dist/lib/redis-queue-manager.js +512 -0
- package/dist/lib/redis-queue-manager.js.map +1 -0
- package/dist/lib/reflection-archiver.js +272 -0
- package/dist/lib/reflection-archiver.js.map +1 -0
- package/dist/lib/retry-manager.js +453 -0
- package/dist/lib/retry-manager.js.map +1 -0
- package/dist/lib/retry.js +262 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/schema-transform.js +695 -0
- package/dist/lib/schema-transform.js.map +1 -0
- package/dist/lib/schema-validator.js +491 -0
- package/dist/lib/schema-validator.js.map +1 -0
- package/dist/lib/skill-cache.js +297 -0
- package/dist/lib/skill-cache.js.map +1 -0
- package/dist/lib/skill-content-manager.js +337 -0
- package/dist/lib/skill-content-manager.js.map +1 -0
- package/dist/lib/skill-frontmatter-parser.js +237 -0
- package/dist/lib/skill-frontmatter-parser.js.map +1 -0
- package/dist/lib/skill-git-integration.js +275 -0
- package/dist/lib/skill-git-integration.js.map +1 -0
- package/dist/lib/skill-markdown-validator.js +396 -0
- package/dist/lib/skill-markdown-validator.js.map +1 -0
- package/dist/lib/skill-output-parser.js +312 -0
- package/dist/lib/skill-output-parser.js.map +1 -0
- package/dist/lib/unified-query-api.js +467 -0
- package/dist/lib/unified-query-api.js.map +1 -0
- package/dist/middleware/auth-middleware.js +350 -0
- package/dist/middleware/auth-middleware.js.map +1 -0
- package/dist/middleware/schema-validation.js +347 -0
- package/dist/middleware/schema-validation.js.map +1 -0
- package/dist/providers/anthropic-provider.js +1 -1
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/provider-factory.js +2 -2
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/services/edge-case-analyzer.js +321 -0
- package/dist/services/edge-case-analyzer.js.map +1 -0
- package/dist/services/edge-case-deduplicator.js +266 -0
- package/dist/services/edge-case-deduplicator.js.map +1 -0
- package/dist/services/edge-case-detector.js +337 -0
- package/dist/services/edge-case-detector.js.map +1 -0
- package/dist/services/edge-case-tracker.js +547 -0
- package/dist/services/edge-case-tracker.js.map +1 -0
- package/dist/services/health-check-system.js +586 -0
- package/dist/services/health-check-system.js.map +1 -0
- package/dist/services/metrics-logger.js +412 -0
- package/dist/services/metrics-logger.js.map +1 -0
- package/dist/services/patch-generator.js +378 -0
- package/dist/services/patch-generator.js.map +1 -0
- package/dist/services/patch-validator.js +337 -0
- package/dist/services/patch-validator.js.map +1 -0
- package/dist/services/performance-monitor.js +811 -0
- package/dist/services/performance-monitor.js.map +1 -0
- package/dist/services/promotion-pipeline.js +918 -0
- package/dist/services/promotion-pipeline.js.map +1 -0
- package/dist/services/promotion-validator.js +394 -0
- package/dist/services/promotion-validator.js.map +1 -0
- package/dist/services/reflection-logger.js +388 -0
- package/dist/services/reflection-logger.js.map +1 -0
- package/dist/services/skill-deployment.js +472 -0
- package/dist/services/skill-deployment.js.map +1 -0
- package/dist/services/skill-loader.js +427 -0
- package/dist/services/skill-loader.js.map +1 -0
- package/dist/services/skill-promotion.js +372 -0
- package/dist/services/skill-promotion.js.map +1 -0
- package/dist/services/skill-validator.js +454 -0
- package/dist/services/skill-validator.js.map +1 -0
- package/dist/services/skill-versioning.js +244 -0
- package/dist/services/skill-versioning.js.map +1 -0
- package/dist/services/workspace-supervisor.js +597 -0
- package/dist/services/workspace-supervisor.js.map +1 -0
- package/dist/types/edge-case.js +45 -0
- package/dist/types/edge-case.js.map +1 -0
- package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
- package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
- package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
- package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
- package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
- package/package.json +35 -4
- package/readme/README.md +53 -5
- package/scripts/backup-cleanup.sh +627 -0
- package/scripts/cleanup-workspaces.sh +412 -0
- package/scripts/cleanup-yaml-configs.sh +141 -0
- package/scripts/deploy-approved-skills.sh +263 -0
- package/scripts/health-check.sh +447 -0
- package/scripts/log-aggregator.sh +554 -0
- package/scripts/log-monitor.sh +629 -0
- package/scripts/manage-agent-workspaces.sh +434 -0
- package/scripts/migrate-schema.sh +533 -0
- package/scripts/promote-staged-skills.sh +423 -0
- package/scripts/verify-no-secrets.sh +88 -35
- package/scripts/verify-redis-cleanup.sh +173 -0
- package/tests/README.md +84 -0
- package/tests/test-memory-leak-task-mode.sh +435 -0
- package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
- package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
- package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
- package/README.md.backup_before_replace +0 -781
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
|
@@ -2,6 +2,37 @@
|
|
|
2
2
|
|
|
3
3
|
# Post-Edit Hook for CFN Retrospective Skills
|
|
4
4
|
|
|
5
|
+
# Determine PROJECT_ROOT portably
|
|
6
|
+
if [[ -z "$PROJECT_ROOT" ]]; then
|
|
7
|
+
# Resolve script location (handle symlinks)
|
|
8
|
+
SCRIPT_SOURCE="${BASH_SOURCE[0]}"
|
|
9
|
+
if [[ -L "$SCRIPT_SOURCE" ]]; then
|
|
10
|
+
SCRIPT_SOURCE="$(readlink -f "$SCRIPT_SOURCE" 2>/dev/null)" || {
|
|
11
|
+
echo "❌ Failed to resolve symlink for ${BASH_SOURCE[0]}" >&2
|
|
12
|
+
exit 1
|
|
13
|
+
}
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
# Get script directory
|
|
17
|
+
SCRIPT_DIR="$(dirname "$SCRIPT_SOURCE")"
|
|
18
|
+
if ! cd "$SCRIPT_DIR" 2>/dev/null; then
|
|
19
|
+
echo "❌ Failed to cd to script directory: $SCRIPT_DIR" >&2
|
|
20
|
+
exit 1
|
|
21
|
+
fi
|
|
22
|
+
SCRIPT_DIR="$(pwd)"
|
|
23
|
+
|
|
24
|
+
# Navigate to project root (.claude/hooks -> ../..)
|
|
25
|
+
if ! cd "$SCRIPT_DIR/../.." 2>/dev/null; then
|
|
26
|
+
echo "❌ Failed to navigate to project root from $SCRIPT_DIR" >&2
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
export PROJECT_ROOT="$(pwd)"
|
|
31
|
+
|
|
32
|
+
# Return to original directory (optional, for safety)
|
|
33
|
+
cd - >/dev/null || true
|
|
34
|
+
fi
|
|
35
|
+
|
|
5
36
|
# Validate script permissions
|
|
6
37
|
validate_script_permissions() {
|
|
7
38
|
local script_path="$1"
|
|
@@ -23,7 +54,7 @@ validate_json_syntax() {
|
|
|
23
54
|
|
|
24
55
|
# Specific validation for retrospective components
|
|
25
56
|
validate_retrospective_skills() {
|
|
26
|
-
local base_path="
|
|
57
|
+
local base_path="${PROJECT_ROOT}/.claude/skills"
|
|
27
58
|
local skills=(
|
|
28
59
|
"pattern-extraction/extract-patterns.sh"
|
|
29
60
|
"playbook-auto-update/auto-update-playbook.sh"
|
|
@@ -49,7 +80,7 @@ validate_retrospective_skills() {
|
|
|
49
80
|
|
|
50
81
|
# Validate playbook JSON
|
|
51
82
|
validate_playbook() {
|
|
52
|
-
local playbook_path="/
|
|
83
|
+
local playbook_path="${PROJECT_ROOT}/docs/PLAYBOOK.json"
|
|
53
84
|
validate_json_syntax "$playbook_path"
|
|
54
85
|
}
|
|
55
86
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Pre-Edit Security Warning Hook
|
|
4
|
+
# Warns security-specialist agents when editing documentation files
|
|
5
|
+
# to remind them about credential redaction requirements
|
|
6
|
+
#
|
|
7
|
+
# Usage: Called automatically by cfn-invoke-pre-edit.sh
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
set -euo pipefail
|
|
11
|
+
|
|
12
|
+
FILE_PATH="${1:-}"
|
|
13
|
+
AGENT_TYPE="${2:-unknown}"
|
|
14
|
+
|
|
15
|
+
# Only warn when editing documentation as security-specialist
|
|
16
|
+
if [[ "$FILE_PATH" == docs/* ]] && [[ "$AGENT_TYPE" == "security-specialist" ]]; then
|
|
17
|
+
echo ""
|
|
18
|
+
echo "⚠️ SECURITY WARNING: Editing documentation as security-specialist"
|
|
19
|
+
echo " ════════════════════════════════════════════════════════════"
|
|
20
|
+
echo ""
|
|
21
|
+
echo " 📋 MANDATORY REDACTION PROTOCOL:"
|
|
22
|
+
echo " • ALWAYS redact sensitive values: API keys, passwords, tokens"
|
|
23
|
+
echo " • Use [REDACTED] or placeholder patterns only"
|
|
24
|
+
echo " • See: docs/templates/SECURITY_AUDIT_TEMPLATE.md"
|
|
25
|
+
echo ""
|
|
26
|
+
echo " ✅ CORRECT:"
|
|
27
|
+
echo " API_KEY=sk-ant-[REDACTED]"
|
|
28
|
+
echo " PASSWORD=[REDACTED]"
|
|
29
|
+
echo " JWT_TOKEN=eyJhbGci[REDACTED]..."
|
|
30
|
+
echo ""
|
|
31
|
+
echo " ❌ WRONG:"
|
|
32
|
+
echo " API_KEY=sk-ant-actual-key-value"
|
|
33
|
+
echo " PASSWORD=actual-password-123"
|
|
34
|
+
echo ""
|
|
35
|
+
echo " 🛡️ Pre-commit hook will BLOCK commits with exposed credentials"
|
|
36
|
+
echo ""
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Exit 0 (non-blocking warning)
|
|
40
|
+
exit 0
|
|
@@ -6,24 +6,26 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Environment Sanitization
|
|
10
|
-
# Load and apply environment sanitization to prevent memory leaks
|
|
11
|
-
# shellcheck source=../cfn-environment-sanitization/sanitize-environment.sh
|
|
12
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
13
|
-
if [[ -f "$SCRIPT_DIR/../cfn-environment-sanitization/sanitize-environment.sh" ]]; then
|
|
14
|
-
source "$SCRIPT_DIR/../cfn-environment-sanitization/sanitize-environment.sh" --strict
|
|
15
|
-
echo "✅ Agent spawning environment sanitized" >&2
|
|
16
|
-
else
|
|
17
|
-
echo "⚠️ Environment sanitization not available - proceeding without protection" >&2
|
|
18
|
-
fi
|
|
19
|
-
|
|
20
9
|
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Block Task Mode agents
|
|
21
10
|
# Task Mode agents spawn via Task() tool and should NOT use agent spawning CLI
|
|
22
|
-
|
|
23
|
-
|
|
11
|
+
# CLI mode requires TASK_ID environment variable (validates existence, not pattern)
|
|
12
|
+
if [[ -z "${TASK_ID:-}" ]]; then
|
|
13
|
+
echo "❌ ERROR: TASK_ID environment variable required for CLI mode" >&2
|
|
24
14
|
echo "🚨 ANTI-023: This script is for CLI-spawned coordinators only" >&2
|
|
25
|
-
echo "💡 Task Mode
|
|
26
|
-
|
|
15
|
+
echo "💡 Task Mode agents should use Task() tool, not CLI spawning" >&2
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
# Sanitize TASK_ID to prevent command injection
|
|
20
|
+
if [[ "${TASK_ID}" =~ [^a-zA-Z0-9._-] ]]; then
|
|
21
|
+
echo "❌ ERROR: TASK_ID contains invalid characters: ${TASK_ID}" >&2
|
|
22
|
+
echo "Allowed: alphanumeric, dot, underscore, hyphen" >&2
|
|
23
|
+
exit 1
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# Validate required parameters for CLI mode
|
|
27
|
+
if [[ -z "${1:-}" ]]; then
|
|
28
|
+
echo "❌ ERROR: Agent type required" >&2
|
|
27
29
|
exit 1
|
|
28
30
|
fi
|
|
29
31
|
|
|
@@ -121,18 +123,14 @@ spawn_agents() {
|
|
|
121
123
|
log_info "Spawning agents: $agents"
|
|
122
124
|
log_info "Task: $task"
|
|
123
125
|
|
|
124
|
-
#
|
|
125
|
-
local
|
|
126
|
-
|
|
127
|
-
# Add optional Redis channel
|
|
126
|
+
# Execute spawn command directly with proper quoting (no eval - prevents command injection)
|
|
127
|
+
local exit_code=0
|
|
128
128
|
if [[ -n "$redis_channel" ]]; then
|
|
129
|
-
|
|
129
|
+
npx claude-flow-spawn "$task" --agents="$agents" --provider="$provider" --redis-channel="$redis_channel" || exit_code=$?
|
|
130
|
+
else
|
|
131
|
+
npx claude-flow-spawn "$task" --agents="$agents" --provider="$provider" || exit_code=$?
|
|
130
132
|
fi
|
|
131
133
|
|
|
132
|
-
# Execute spawn
|
|
133
|
-
eval "$spawn_cmd"
|
|
134
|
-
local exit_code=$?
|
|
135
|
-
|
|
136
134
|
if [[ $exit_code -eq 0 ]]; then
|
|
137
135
|
log_info "Agents spawned successfully"
|
|
138
136
|
else
|
|
@@ -156,15 +156,39 @@ cfn-docker-agent-spawn \
|
|
|
156
156
|
- **Batch Operations**: 0.3-0.5 CPU units per agent
|
|
157
157
|
|
|
158
158
|
### Network Configuration
|
|
159
|
+
|
|
160
|
+
**Multi-Worktree Network Isolation:**
|
|
161
|
+
|
|
162
|
+
For multi-worktree environments, use project-scoped network names:
|
|
163
|
+
|
|
159
164
|
```bash
|
|
160
|
-
#
|
|
161
|
-
|
|
165
|
+
# Set project name from environment (set by run-in-worktree.sh)
|
|
166
|
+
PROJECT_NAME="${COMPOSE_PROJECT_NAME:-cfn-default}"
|
|
167
|
+
|
|
168
|
+
# Create isolated network for MCP communication (worktree-scoped)
|
|
169
|
+
docker network create "${PROJECT_NAME}_mcp-network" --driver bridge
|
|
162
170
|
|
|
163
171
|
# Connect containers to MCP network
|
|
164
|
-
docker network connect
|
|
165
|
-
docker network connect
|
|
172
|
+
docker network connect "${PROJECT_NAME}_mcp-network" agent-frontend-001
|
|
173
|
+
docker network connect "${PROJECT_NAME}_mcp-network" playwright-mcp
|
|
166
174
|
```
|
|
167
175
|
|
|
176
|
+
**Service Discovery Within Networks:**
|
|
177
|
+
|
|
178
|
+
Agents within the Docker network can access services by name:
|
|
179
|
+
```bash
|
|
180
|
+
# Use service names (not container names) for connections
|
|
181
|
+
redis-cli -h redis # Resolves to Redis service
|
|
182
|
+
psql -h postgres # Resolves to PostgreSQL service
|
|
183
|
+
curl http://orchestrator:3001 # Resolves to orchestrator service
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Why Project-Scoped Networks?**
|
|
187
|
+
- Prevents network name conflicts between worktrees
|
|
188
|
+
- Isolates agent communication per branch
|
|
189
|
+
- Enables simultaneous multi-worktree development
|
|
190
|
+
- Automatically managed by docker-compose with COMPOSE_PROJECT_NAME
|
|
191
|
+
|
|
168
192
|
## Integration with CFN Docker Skills
|
|
169
193
|
|
|
170
194
|
### Skill-Based MCP Selection
|
|
@@ -8,7 +8,9 @@ set -euo pipefail
|
|
|
8
8
|
# Default configuration
|
|
9
9
|
DEFAULT_MEMORY_LIMIT="1g"
|
|
10
10
|
DEFAULT_CPU_LIMIT="1.0"
|
|
11
|
-
|
|
11
|
+
# Dynamic network detection for multi-worktree support
|
|
12
|
+
DEFAULT_NETWORK="${COMPOSE_PROJECT_NAME:+${COMPOSE_PROJECT_NAME}_mcp-network}"
|
|
13
|
+
DEFAULT_NETWORK="${DEFAULT_NETWORK:-mcp-network}"
|
|
12
14
|
DEFAULT_IMAGE="claude-flow-novice-agent:latest"
|
|
13
15
|
|
|
14
16
|
# Colors for output
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
2
3
|
|
|
3
4
|
# CFN Docker Loop Orchestration Implementation
|
|
4
5
|
# Usage: ./orchestrate.sh [OPERATION] [TASK_ID] [OPTIONS]
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
# Determine PROJECT_ROOT
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
|
10
|
+
|
|
11
|
+
# Detect worktree/branch for environment injection
|
|
12
|
+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "main")
|
|
13
|
+
export WORKTREE_BRANCH="${CURRENT_BRANCH}"
|
|
7
14
|
|
|
8
15
|
# Default configuration
|
|
9
16
|
DEFAULT_MAX_ITERATIONS=10
|
|
@@ -75,6 +82,7 @@ Options:
|
|
|
75
82
|
--gate-threshold NUM Gate threshold (default: 0.75)
|
|
76
83
|
--consensus-threshold NUM Consensus threshold (default: 0.90)
|
|
77
84
|
--context-file PATH Task context file
|
|
85
|
+
--success-criteria JSON Success criteria for test-driven validation
|
|
78
86
|
--timeout SECONDS Operation timeout
|
|
79
87
|
--memory-limit LIMIT Agent memory limit
|
|
80
88
|
--network NAME Docker network
|
|
@@ -98,6 +106,72 @@ Examples:
|
|
|
98
106
|
EOF
|
|
99
107
|
}
|
|
100
108
|
|
|
109
|
+
# JSON validation helper with security bounds checking
|
|
110
|
+
validate_json_context() {
|
|
111
|
+
local json_str="$1"
|
|
112
|
+
|
|
113
|
+
if [ -z "$json_str" ]; then
|
|
114
|
+
return 1
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
# Security: Check size (max 10MB) BEFORE parsing
|
|
118
|
+
local size=$(echo -n "$json_str" | wc -c)
|
|
119
|
+
local MAX_JSON_SIZE=10485760 # 10MB limit
|
|
120
|
+
|
|
121
|
+
if [ "$size" -gt "$MAX_JSON_SIZE" ]; then
|
|
122
|
+
log_error "JSON exceeds maximum size (10MB): ${size} bytes"
|
|
123
|
+
log_error "Security Risk: DoS via excessive memory consumption"
|
|
124
|
+
return 1
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
# Validate JSON structure
|
|
128
|
+
if ! echo "$json_str" | jq empty 2>/dev/null; then
|
|
129
|
+
log_error "Invalid JSON structure"
|
|
130
|
+
return 1
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
# Security: Bounds check - validate array sizes if success criteria
|
|
134
|
+
if echo "$json_str" | jq -e '.test_suites' >/dev/null 2>&1; then
|
|
135
|
+
local TEST_SUITE_COUNT=$(echo "$json_str" | jq '.test_suites | length' 2>/dev/null || echo "0")
|
|
136
|
+
local MAX_TEST_SUITES=50
|
|
137
|
+
|
|
138
|
+
if [ "$TEST_SUITE_COUNT" -gt "$MAX_TEST_SUITES" ]; then
|
|
139
|
+
log_error "Test suites exceed maximum ($MAX_TEST_SUITES): $TEST_SUITE_COUNT"
|
|
140
|
+
log_error "Security Risk: DoS via resource exhaustion"
|
|
141
|
+
return 1
|
|
142
|
+
fi
|
|
143
|
+
fi
|
|
144
|
+
|
|
145
|
+
return 0
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
# Input sanitization helper
|
|
149
|
+
sanitize_input() {
|
|
150
|
+
local input="$1"
|
|
151
|
+
local max_length="${2:-256}"
|
|
152
|
+
|
|
153
|
+
# SECURITY FIX #2: Command injection prevention - strict alphanumeric whitelist
|
|
154
|
+
# Allows ONLY: letters, numbers, dash, underscore, space, comma, period, colon
|
|
155
|
+
local sanitized=$(echo "$input" | tr -cd '[:alnum:] _,.:-')
|
|
156
|
+
|
|
157
|
+
# Length bounds check
|
|
158
|
+
if [ ${#input} -gt "$max_length" ]; then
|
|
159
|
+
log_error "Input exceeds maximum length ($max_length): ${#input}"
|
|
160
|
+
return 1
|
|
161
|
+
fi
|
|
162
|
+
|
|
163
|
+
# Reject if input contains shell metacharacters: $, `, ;, |, &, >, <, (, ), {, }, [, ], \, ", ', =
|
|
164
|
+
if [[ "$input" =~ (\$|`|;|\||&|>|<|\(|\)|\{|\}|\[|\]|\\|\"|\'|=) ]]; then
|
|
165
|
+
log_error "Input contains dangerous shell metacharacters"
|
|
166
|
+
log_error "Original: $input"
|
|
167
|
+
log_error "Security Risk: Command injection attack prevented"
|
|
168
|
+
return 1
|
|
169
|
+
fi
|
|
170
|
+
|
|
171
|
+
echo "$sanitized"
|
|
172
|
+
return 0
|
|
173
|
+
}
|
|
174
|
+
|
|
101
175
|
# Mode configuration
|
|
102
176
|
get_mode_config() {
|
|
103
177
|
local mode="$1"
|
|
@@ -118,10 +192,6 @@ get_mode_config() {
|
|
|
118
192
|
esac
|
|
119
193
|
}
|
|
120
194
|
|
|
121
|
-
# Get script directory
|
|
122
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
123
|
-
PROJECT_ROOT="$(cd "$(dirname "$SCRIPT_DIR")/../.." && pwd)"
|
|
124
|
-
|
|
125
195
|
# Path to skills
|
|
126
196
|
REDIS_COORDINATION_SKILL="$PROJECT_ROOT/.claude/skills/cfn-docker-redis-coordination/coordinate.sh"
|
|
127
197
|
AGENT_SPAWNING_SKILL="$PROJECT_ROOT/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh"
|
|
@@ -144,6 +214,7 @@ GATE_THRESHOLD="$DEFAULT_GATE_THRESHOLD"
|
|
|
144
214
|
CONSENSUS_THRESHOLD="$DEFAULT_CONSENSUS_THRESHOLD"
|
|
145
215
|
CONTEXT_FILE=""
|
|
146
216
|
TIMEOUT=""
|
|
217
|
+
SUCCESS_CRITERIA=""
|
|
147
218
|
MEMORY_LIMIT=""
|
|
148
219
|
NETWORK=""
|
|
149
220
|
ADAPTIVE_SELECTION=false
|
|
@@ -187,6 +258,10 @@ while [[ $# -gt 0 ]]; do
|
|
|
187
258
|
CONTEXT_FILE="$2"
|
|
188
259
|
shift 2
|
|
189
260
|
;;
|
|
261
|
+
--success-criteria)
|
|
262
|
+
SUCCESS_CRITERIA="$2"
|
|
263
|
+
shift 2
|
|
264
|
+
;;
|
|
190
265
|
--timeout)
|
|
191
266
|
TIMEOUT="$2"
|
|
192
267
|
shift 2
|
|
@@ -534,6 +609,23 @@ init() {
|
|
|
534
609
|
}
|
|
535
610
|
EOF
|
|
536
611
|
|
|
612
|
+
# Store success criteria if provided
|
|
613
|
+
if [[ -n "$SUCCESS_CRITERIA" ]]; then
|
|
614
|
+
if validate_json_context "$SUCCESS_CRITERIA"; then
|
|
615
|
+
# Store in Redis using coordination skill
|
|
616
|
+
if command -v redis-cli >/dev/null 2>&1; then
|
|
617
|
+
redis-cli HSET "task:${task_id}:context" "success-criteria" "$SUCCESS_CRITERIA" >/dev/null 2>&1 || {
|
|
618
|
+
log_warning "Failed to store success criteria in Redis, will pass via env vars"
|
|
619
|
+
}
|
|
620
|
+
log "Stored success criteria ($(echo "$SUCCESS_CRITERIA" | jq -r '.test_suites | length' 2>/dev/null || echo '0') test suites)"
|
|
621
|
+
else
|
|
622
|
+
log_warning "Redis not available, success criteria will be passed via environment variables"
|
|
623
|
+
fi
|
|
624
|
+
else
|
|
625
|
+
log_error "Invalid success criteria JSON, skipping storage"
|
|
626
|
+
fi
|
|
627
|
+
fi
|
|
628
|
+
|
|
537
629
|
log_success "Loop orchestration initialized: $task_id"
|
|
538
630
|
}
|
|
539
631
|
|
|
@@ -550,6 +642,36 @@ spawn_loop3() {
|
|
|
550
642
|
log_loop "Spawning Loop 3 implementers (iteration $iteration)"
|
|
551
643
|
log "Agents: $agents"
|
|
552
644
|
|
|
645
|
+
# Load success criteria from Redis (if available)
|
|
646
|
+
local AGENT_SUCCESS_CRITERIA=""
|
|
647
|
+
local AGENT_SUCCESS_CRITERIA_B64=""
|
|
648
|
+
|
|
649
|
+
if command -v redis-cli >/dev/null 2>&1; then
|
|
650
|
+
local LOADED_CRITERIA=$(redis-cli HGET "task:${task_id}:context" "success-criteria" 2>/dev/null || echo "")
|
|
651
|
+
|
|
652
|
+
if [[ -n "$LOADED_CRITERIA" && "$LOADED_CRITERIA" != "null" ]]; then
|
|
653
|
+
# Validate JSON
|
|
654
|
+
if echo "$LOADED_CRITERIA" | jq empty 2>/dev/null; then
|
|
655
|
+
AGENT_SUCCESS_CRITERIA="$LOADED_CRITERIA"
|
|
656
|
+
|
|
657
|
+
# Base64-encode for safe environment variable passing
|
|
658
|
+
AGENT_SUCCESS_CRITERIA_B64=$(echo -n "$AGENT_SUCCESS_CRITERIA" | base64 -w 0 2>/dev/null || echo -n "$AGENT_SUCCESS_CRITERIA" | base64)
|
|
659
|
+
|
|
660
|
+
local TEST_SUITE_COUNT=$(echo "$AGENT_SUCCESS_CRITERIA" | jq -r '.test_suites | length' 2>/dev/null || echo "0")
|
|
661
|
+
log "Success criteria loaded ($TEST_SUITE_COUNT test suites)"
|
|
662
|
+
else
|
|
663
|
+
log_warning "Invalid success criteria JSON in Redis, skipping"
|
|
664
|
+
fi
|
|
665
|
+
fi
|
|
666
|
+
fi
|
|
667
|
+
|
|
668
|
+
# Fallback to global SUCCESS_CRITERIA if not in Redis
|
|
669
|
+
if [[ -z "$AGENT_SUCCESS_CRITERIA" && -n "$SUCCESS_CRITERIA" ]]; then
|
|
670
|
+
AGENT_SUCCESS_CRITERIA="$SUCCESS_CRITERIA"
|
|
671
|
+
AGENT_SUCCESS_CRITERIA_B64=$(echo -n "$AGENT_SUCCESS_CRITERIA" | base64 -w 0 2>/dev/null || echo -n "$AGENT_SUCCESS_CRITERIA" | base64)
|
|
672
|
+
log "Using global success criteria (not in Redis)"
|
|
673
|
+
fi
|
|
674
|
+
|
|
553
675
|
# Check for execution plan
|
|
554
676
|
local plan_file="/tmp/cfn-docker-plan-${task_id}.json"
|
|
555
677
|
local has_plan=false
|
|
@@ -587,7 +709,7 @@ spawn_loop3() {
|
|
|
587
709
|
local context_file="/tmp/task-context-${task_id}-loop3-${iteration}-${agent_type}.json"
|
|
588
710
|
|
|
589
711
|
# Create enhanced context with atomic task assignment
|
|
590
|
-
cat
|
|
712
|
+
local context_json=$(cat << EOF
|
|
591
713
|
{
|
|
592
714
|
"task_id": "$task_id",
|
|
593
715
|
"loop_number": 3,
|
|
@@ -603,6 +725,14 @@ spawn_loop3() {
|
|
|
603
725
|
"created_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
604
726
|
}
|
|
605
727
|
EOF
|
|
728
|
+
)
|
|
729
|
+
|
|
730
|
+
# Add success criteria if available (stored separately due to potential size)
|
|
731
|
+
if [[ -n "$AGENT_SUCCESS_CRITERIA_B64" ]]; then
|
|
732
|
+
context_json=$(echo "$context_json" | jq --arg criteria_b64 "$AGENT_SUCCESS_CRITERIA_B64" '. + {success_criteria_b64: $criteria_b64}')
|
|
733
|
+
fi
|
|
734
|
+
|
|
735
|
+
echo "$context_json" > "$context_file"
|
|
606
736
|
|
|
607
737
|
# Get task context from Redis if available
|
|
608
738
|
if [[ -n "$CONTEXT_FILE" ]]; then
|
|
@@ -612,6 +742,11 @@ EOF
|
|
|
612
742
|
fi
|
|
613
743
|
|
|
614
744
|
if [[ "$DRY_RUN" == false ]]; then
|
|
745
|
+
# Docker container environment: Agent spawning skill will extract
|
|
746
|
+
# success_criteria_b64 from context file and pass to container via:
|
|
747
|
+
# docker run --env AGENT_SUCCESS_CRITERIA_B64=<base64-encoded-json>
|
|
748
|
+
# This enables secure test-driven validation in containerized agents
|
|
749
|
+
|
|
615
750
|
local agent_id
|
|
616
751
|
agent_id=$("$AGENT_SPAWNING_SKILL" \
|
|
617
752
|
"$agent_type" \
|
|
@@ -726,26 +861,95 @@ gate_check() {
|
|
|
726
861
|
|
|
727
862
|
log_loop "Performing gate check for iteration $iteration"
|
|
728
863
|
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
864
|
+
# First, ensure Loop 3 agents have completed
|
|
865
|
+
if ! monitor_loop3 "$task_id" "$gate_threshold" "$iteration"; then
|
|
866
|
+
log_error "Loop 3 monitoring failed"
|
|
867
|
+
return 1
|
|
868
|
+
fi
|
|
732
869
|
|
|
733
|
-
|
|
734
|
-
|
|
870
|
+
# Get Loop 3 agent IDs for gate check
|
|
871
|
+
local agents_file="/tmp/loop3-agents-${task_id}-${iteration}.txt"
|
|
872
|
+
local loop3_agent_ids=""
|
|
735
873
|
|
|
736
|
-
|
|
874
|
+
if [[ -f "$agents_file" ]]; then
|
|
875
|
+
loop3_agent_ids=$(cat "$agents_file" | tr '\n' ',' | sed 's/,$//')
|
|
737
876
|
else
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
877
|
+
log_error "No Loop 3 agent IDs found for gate check"
|
|
878
|
+
return 1
|
|
879
|
+
fi
|
|
741
880
|
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
881
|
+
# Load success criteria from Redis
|
|
882
|
+
local gate_success_criteria=""
|
|
883
|
+
if command -v redis-cli >/dev/null 2>&1; then
|
|
884
|
+
gate_success_criteria=$(redis-cli HGET "task:${task_id}:context" "success-criteria" 2>/dev/null || echo "")
|
|
885
|
+
fi
|
|
886
|
+
|
|
887
|
+
# Fallback to global SUCCESS_CRITERIA
|
|
888
|
+
if [[ -z "$gate_success_criteria" && -n "$SUCCESS_CRITERIA" ]]; then
|
|
889
|
+
gate_success_criteria="$SUCCESS_CRITERIA"
|
|
890
|
+
fi
|
|
891
|
+
|
|
892
|
+
# Use test-driven gate check helper if available
|
|
893
|
+
local GATE_CHECK_HELPER="$PROJECT_ROOT/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh"
|
|
894
|
+
|
|
895
|
+
if [[ -x "$GATE_CHECK_HELPER" ]]; then
|
|
896
|
+
log "Using test-driven gate check"
|
|
897
|
+
|
|
898
|
+
# Prepare arguments
|
|
899
|
+
local gate_args=(
|
|
900
|
+
--task-id "$task_id"
|
|
901
|
+
--agents "$loop3_agent_ids"
|
|
902
|
+
--threshold "$gate_threshold"
|
|
903
|
+
--min-quorum "0.66"
|
|
904
|
+
--mode "$MODE"
|
|
905
|
+
)
|
|
906
|
+
|
|
907
|
+
# Add success criteria if available
|
|
908
|
+
if [[ -n "$gate_success_criteria" ]]; then
|
|
909
|
+
gate_args+=(--success-criteria "$gate_success_criteria")
|
|
910
|
+
gate_args+=(--strategy "test-driven")
|
|
745
911
|
else
|
|
746
|
-
|
|
747
|
-
|
|
912
|
+
gate_args+=(--strategy "confidence")
|
|
913
|
+
log_warning "No success criteria available, using confidence-based gate check"
|
|
914
|
+
fi
|
|
915
|
+
|
|
916
|
+
if "$GATE_CHECK_HELPER" "${gate_args[@]}"; then
|
|
917
|
+
# Gate passed - proceed to Loop 2
|
|
918
|
+
log_success "Gate PASSED - proceeding to Loop 2 validation"
|
|
919
|
+
|
|
920
|
+
# Signal gate passed for Loop 2 agents
|
|
921
|
+
if command -v redis-cli >/dev/null 2>&1; then
|
|
922
|
+
redis-cli LPUSH "cfn_docker:task:$task_id:gate-passed" "proceed" > /dev/null 2>&1 || true
|
|
923
|
+
fi
|
|
924
|
+
|
|
925
|
+
return 0
|
|
926
|
+
else
|
|
927
|
+
# Gate failed - check if we can iterate
|
|
928
|
+
if [[ $iteration -lt $max_iterations ]]; then
|
|
929
|
+
log_warning "Gate FAILED - iterating Loop 3 ($iteration/$max_iterations)"
|
|
930
|
+
|
|
931
|
+
# Force next iteration
|
|
932
|
+
spawn_loop3 "$task_id" "$AGENTS" $((iteration + 1))
|
|
933
|
+
return 2 # Signal to iterate
|
|
934
|
+
else
|
|
935
|
+
log_error "Gate FAILED - max iterations reached ($max_iterations)"
|
|
936
|
+
return 1
|
|
937
|
+
fi
|
|
748
938
|
fi
|
|
939
|
+
else
|
|
940
|
+
# Fallback to legacy confidence-based gate check
|
|
941
|
+
log_warning "Gate check helper not found, using legacy confidence-based validation"
|
|
942
|
+
|
|
943
|
+
# The monitor_loop3 function already checked confidence
|
|
944
|
+
# If we got here, monitoring succeeded, so gate passes
|
|
945
|
+
log_success "Gate PASSED (legacy mode)"
|
|
946
|
+
|
|
947
|
+
# Signal gate passed
|
|
948
|
+
if command -v redis-cli >/dev/null 2>&1; then
|
|
949
|
+
redis-cli LPUSH "cfn_docker:task:$task_id:gate-passed" "proceed" > /dev/null 2>&1 || true
|
|
950
|
+
fi
|
|
951
|
+
|
|
952
|
+
return 0
|
|
749
953
|
fi
|
|
750
954
|
}
|
|
751
955
|
|