claude-flow-novice 2.9.0 → 2.10.0
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/agents/cfn-dev-team/CLAUDE.md +1086 -0
- package/.claude/agents/cfn-dev-team/README.md +116 -0
- package/.claude/agents/cfn-dev-team/architecture/api-designer-persona.md +149 -0
- package/.claude/agents/cfn-dev-team/architecture/base-template-generator.md +196 -0
- package/.claude/agents/cfn-dev-team/architecture/goal-planner.md +183 -0
- package/.claude/agents/cfn-dev-team/architecture/planner.md +182 -0
- package/.claude/agents/cfn-dev-team/architecture/system-architect.md +162 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +540 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +20 -14
- package/.claude/agents/cfn-dev-team/coordinators/consensus-builder.md +167 -0
- package/.claude/agents/cfn-dev-team/dev-ops/devops-engineer.md +148 -0
- package/.claude/agents/cfn-dev-team/dev-ops/github-commit-agent.md +118 -0
- package/.claude/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +540 -0
- package/.claude/agents/cfn-dev-team/developers/backend-dev.md +20 -0
- package/.claude/agents/cfn-dev-team/developers/data/data-engineer.md +585 -0
- package/.claude/agents/cfn-dev-team/developers/database/database-architect.md +276 -0
- package/.claude/agents/cfn-dev-team/developers/dev-backend-api.md +147 -0
- package/.claude/agents/cfn-dev-team/developers/frontend/mobile-dev.md +218 -0
- package/.claude/agents/cfn-dev-team/developers/{react-frontend-engineer.md → frontend/react-frontend-engineer.md} +53 -5
- package/.claude/agents/cfn-dev-team/developers/frontend/spec-mobile-react-native.md +199 -0
- package/.claude/agents/cfn-dev-team/developers/graphql-specialist.md +615 -0
- package/.claude/agents/cfn-dev-team/developers/rust-developer.md +174 -0
- package/.claude/agents/cfn-dev-team/documentation/README-VALIDATION.md +243 -0
- package/.claude/agents/cfn-dev-team/documentation/agent-type-guidelines.md +465 -0
- package/.claude/agents/cfn-dev-team/documentation/api-docs.md +103 -0
- package/.claude/agents/cfn-dev-team/documentation/docs-api-openapi.md +98 -0
- package/.claude/agents/cfn-dev-team/documentation/pseudocode.md +159 -0
- package/.claude/agents/cfn-dev-team/documentation/specification.md +157 -0
- package/.claude/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +109 -0
- package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/cto-agent.md +8 -6
- package/.claude/agents/cfn-dev-team/product-owners/power-user-persona.md +190 -0
- package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner.md +85 -59
- package/.claude/agents/cfn-dev-team/reviewers/quality/analyze-code-quality.md +141 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/code-analyzer.md +200 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/cyclomatic-complexity-reducer.md +321 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +238 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +101 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/quality-metrics.md +375 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/security-specialist.md +193 -0
- package/.claude/agents/cfn-dev-team/reviewers/reviewer.md +39 -0
- package/.claude/agents/cfn-dev-team/testers/interaction-tester.md +31 -0
- package/.claude/agents/cfn-dev-team/testers/load-testing-specialist.md +469 -0
- package/.claude/agents/cfn-dev-team/testers/playwright-tester.md +24 -0
- package/.claude/agents/cfn-dev-team/testers/tester.md +20 -0
- package/.claude/agents/cfn-dev-team/utility/agent-builder.md +151 -0
- package/.claude/agents/cfn-dev-team/utility/analyst.md +178 -0
- package/.claude/agents/cfn-dev-team/utility/claude-code-expert.md +1043 -0
- package/.claude/agents/cfn-dev-team/utility/code-booster.md +139 -0
- package/.claude/agents/cfn-dev-team/utility/context-curator.md +99 -0
- package/.claude/agents/cfn-dev-team/{developers → utility}/researcher.md +6 -4
- package/.claude/commands/cfn/CFN_LOOP_FRONTEND.md +741 -0
- package/.claude/commands/cfn/CFN_LOOP_TASK_MODE.md +353 -0
- package/.claude/commands/cfn/cfn-loop-frontend.md +555 -0
- package/.claude/commands/cfn/cfn-loop.md +168 -7
- package/{CFN-CLAUDE.md → .claude/root-claude-distribute/CFN-CLAUDE.md} +23 -3
- package/.claude/skills/cfn-ace-system/SKILL.md +364 -0
- package/.claude/skills/cfn-ace-system/add-bullet.sh +145 -0
- package/.claude/skills/cfn-ace-system/analyze-anti-pattern-effectiveness.sh +56 -0
- package/.claude/skills/cfn-ace-system/classify-task.sh +18 -0
- package/.claude/skills/cfn-ace-system/export-ace-metrics.sh +48 -0
- package/.claude/skills/cfn-ace-system/extract-tags.sh +385 -0
- package/.claude/skills/cfn-ace-system/format-negative-context.sh +180 -0
- package/.claude/skills/cfn-ace-system/init-indexes.sql +160 -0
- package/.claude/skills/cfn-ace-system/invoke-context-curate.sh +192 -0
- package/.claude/skills/cfn-ace-system/invoke-context-inject.sh +361 -0
- package/.claude/skills/cfn-ace-system/invoke-context-query.sh +139 -0
- package/.claude/skills/cfn-ace-system/invoke-context-reflect.sh +343 -0
- package/.claude/skills/cfn-ace-system/invoke-context-stats.sh +227 -0
- package/.claude/skills/cfn-ace-system/log-merge.sh +67 -0
- package/.claude/skills/cfn-ace-system/monitor-injection-performance.sh +138 -0
- package/.claude/skills/cfn-ace-system/optimize-injection-pipeline.sh +169 -0
- package/.claude/skills/cfn-ace-system/query-anti-patterns.sh +276 -0
- package/.claude/skills/cfn-ace-system/query-contexts.sh +150 -0
- package/.claude/skills/cfn-ace-system/query-reflections.sh +35 -0
- package/.claude/skills/cfn-ace-system/schema/001-create-context-reflections.sql +237 -0
- package/.claude/skills/cfn-ace-system/schema/README.md +723 -0
- package/.claude/skills/cfn-ace-system/schema/SCHEMA_DESIGN_SUMMARY.md +564 -0
- package/.claude/skills/cfn-ace-system/schema/populate-test-data-simple.sh +62 -0
- package/.claude/skills/cfn-ace-system/schema/populate-test-data.sh +247 -0
- package/.claude/skills/cfn-ace-system/schema/run-migration.sh +231 -0
- package/.claude/skills/cfn-ace-system/schema/validate-schema.sql +280 -0
- package/.claude/skills/cfn-ace-system/score-relevance-adapter.sh +138 -0
- package/.claude/skills/cfn-ace-system/score-relevance.sh +253 -0
- package/.claude/skills/cfn-ace-system/sprint-7-lessons.json +46 -0
- package/.claude/skills/cfn-ace-system/store-reflection.sh +46 -0
- package/.claude/skills/cfn-ace-system/test-ace-skill.sh +312 -0
- package/.claude/skills/cfn-ace-system/track-ab-test.sh +42 -0
- package/.claude/skills/cfn-ace-system/update-reflection.sh +41 -0
- package/.claude/skills/cfn-agent-discovery/SKILL.md +40 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry-clean.json +0 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry-fixed.json +19 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry.json +718 -0
- package/.claude/skills/cfn-agent-discovery/discover-agents.py +184 -0
- package/.claude/skills/cfn-agent-discovery/discover-agents.sh +87 -0
- package/.claude/skills/cfn-agent-discovery/invoke-registry.sh +11 -0
- package/.claude/skills/cfn-agent-discovery/temp_script.py +0 -0
- package/.claude/skills/cfn-agent-execution/execute-agent.sh +126 -0
- package/.claude/skills/cfn-agent-output-processing/SKILL.md +359 -0
- package/.claude/skills/cfn-agent-selector/SKILL.md +90 -0
- package/.claude/skills/cfn-agent-selector/select-agents.sh +112 -0
- package/.claude/skills/cfn-agent-spawning/SKILL.md +135 -0
- package/.claude/skills/cfn-agent-spawning/agent-selection-guide.md +814 -0
- package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +30 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +263 -0
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +613 -0
- package/.claude/skills/cfn-analytics/description-refinement-guide.md +164 -0
- package/.claude/skills/cfn-analytics/log-skill-invocation.js +122 -0
- package/.claude/skills/cfn-analytics/run-production-criteria-tests.sh +126 -0
- package/.claude/skills/cfn-analytics/skill-analytics-dashboard.js +113 -0
- package/.claude/skills/cfn-analytics/skill-invocation-hook.sh +28 -0
- package/.claude/skills/cfn-analytics/skill-invocations.sql +58 -0
- package/.claude/skills/cfn-analytics/test-corpus.json +32 -0
- package/.claude/skills/cfn-analytics/test-data-generator.js +115 -0
- package/.claude/skills/cfn-analytics/test-manual-override-rate.js +285 -0
- package/.claude/skills/cfn-analytics/validate-skill-selection.js +188 -0
- package/.claude/skills/cfn-config-management/SKILL.md +34 -0
- package/.claude/skills/cfn-config-management/check-dependencies.sh +56 -0
- package/.claude/skills/cfn-config-management/config.json +32 -0
- package/.claude/skills/cfn-config-management/manage-config.sh +113 -0
- package/.claude/skills/cfn-event-bus/SKILL.md +412 -0
- package/.claude/skills/cfn-event-bus/config.json +111 -0
- package/.claude/skills/cfn-event-bus/eventbus-wrapper.cjs +69 -0
- package/.claude/skills/cfn-event-bus/invoke-event-publish.sh +147 -0
- package/.claude/skills/cfn-event-bus/invoke-event-subscribe.sh +171 -0
- package/.claude/skills/cfn-event-bus/invoke-lifecycle-track.sh +201 -0
- package/.claude/skills/cfn-event-bus/test-event-bus.sh +280 -0
- package/.claude/skills/cfn-fleet-manager/SKILL.md +412 -0
- package/.claude/skills/cfn-fleet-manager/config.json +60 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-allocate.sh +182 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-balance.sh +239 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-metrics.sh +193 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-register.sh +124 -0
- package/.claude/skills/cfn-fleet-manager/test-fleet-manager.sh +345 -0
- package/.claude/skills/cfn-hook-pipeline/SKILL.md +148 -0
- package/.claude/skills/cfn-hook-pipeline/auto-resolve.sh +66 -0
- package/.claude/skills/cfn-hook-pipeline/check-dependencies.sh +40 -0
- package/.claude/skills/cfn-hook-pipeline/feedback-resolver.sh +452 -0
- package/.claude/skills/cfn-hook-pipeline/post-edit-handler.sh +154 -0
- package/.claude/skills/cfn-hook-pipeline/security-scan.json +60 -0
- package/.claude/skills/cfn-hook-pipeline/security-scanner.sh +121 -0
- package/.claude/skills/cfn-hook-pipeline/test-root-warning-resolution.sh +148 -0
- package/.claude/skills/cfn-hybrid-routing/SKILL.md +46 -0
- package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +52 -0
- package/.claude/skills/cfn-hybrid-routing/config.json +26 -0
- package/.claude/skills/cfn-hybrid-routing/spawn-worker.sh +44 -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/context-injection.sh +142 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +359 -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/spawn-agents.sh +271 -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 +884 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +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 +353 -0
- package/.claude/skills/cfn-loop-validation/check-dependencies.sh +31 -0
- package/.claude/skills/cfn-loop-validation/config.json +161 -0
- package/.claude/skills/cfn-loop-validation/consensus-calculator.js +477 -0
- package/.claude/skills/cfn-loop-validation/evidence-chain.sql +163 -0
- package/.claude/skills/cfn-loop-validation/examples/README.md +453 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-full-cfn-loop.sh +234 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop2-consensus.sh +132 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop3-gate.sh +115 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-redis-integration.sh +186 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh +134 -0
- package/.claude/skills/cfn-process-lifecycle/SKILL.md +39 -0
- package/.claude/skills/cfn-process-lifecycle/check-dependencies.sh +58 -0
- package/.claude/skills/cfn-process-lifecycle/config.json +39 -0
- package/.claude/skills/cfn-process-lifecycle/process-manager.sh +144 -0
- package/.claude/skills/cfn-product-owner-decision/SKILL.md +332 -0
- package/.claude/skills/cfn-product-owner-decision/execute-decision.sh +176 -0
- package/.claude/skills/cfn-product-owner-decision/parse-decision.sh +66 -0
- package/.claude/skills/cfn-product-owner-decision/validate-deliverables.sh +82 -0
- package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +280 -0
- package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +209 -0
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +57 -0
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +267 -0
- package/.claude/skills/cfn-redis-coordination/LOGGING.md +260 -0
- package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +25 -0
- package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +164 -0
- package/.claude/skills/cfn-redis-coordination/SKILL.md +720 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/analyze-task-complexity.sh +277 -0
- package/.claude/skills/cfn-redis-coordination/cancel-swarm.sh +221 -0
- package/.claude/skills/cfn-redis-coordination/cfn-loop-exec.sh +468 -0
- package/.claude/skills/cfn-redis-coordination/cfn-loop-relaunch.sh +29 -0
- package/.claude/skills/cfn-redis-coordination/check-dependencies.sh +32 -0
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +179 -0
- package/.claude/skills/cfn-redis-coordination/collect-results.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/complete-swarm.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/config.json +61 -0
- package/.claude/skills/cfn-redis-coordination/data/cfn-loop.db +0 -0
- package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +82 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +274 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +276 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +129 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +320 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +249 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +148 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +163 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +138 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +81 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +45 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +68 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +56 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +81 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +57 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +187 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +160 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +97 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +97 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +59 -0
- package/.claude/skills/cfn-redis-coordination/examples/README.md +73 -0
- package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +352 -0
- package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +127 -0
- package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +171 -0
- package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +227 -0
- package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +239 -0
- package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +258 -0
- package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +177 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +137 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +106 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat.sh +126 -0
- package/.claude/skills/cfn-redis-coordination/init-swarm.sh +148 -0
- package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +220 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +283 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
- package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +147 -0
- package/.claude/skills/cfn-redis-coordination/log-event.sh +109 -0
- package/.claude/skills/cfn-redis-coordination/metrics-export.sh +674 -0
- package/.claude/skills/cfn-redis-coordination/metrics-schema.json +66 -0
- package/.claude/skills/cfn-redis-coordination/metrics-storage.md +31 -0
- package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +391 -0
- package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +101 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +31 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
- package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +75 -0
- package/.claude/skills/cfn-redis-coordination/priority_wake.py +134 -0
- package/.claude/skills/cfn-redis-coordination/query-dlq.sh +162 -0
- package/.claude/skills/cfn-redis-coordination/query-logs.sh +103 -0
- package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +619 -0
- package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +58 -0
- package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +371 -0
- package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +252 -0
- package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +165 -0
- package/.claude/skills/cfn-redis-coordination/signal.sh +38 -0
- package/.claude/skills/cfn-redis-coordination/store-context.sh +86 -0
- package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +123 -0
- package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +354 -0
- package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +513 -0
- package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +15 -0
- package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +102 -0
- package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +99 -0
- package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +170 -0
- package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +82 -0
- package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +92 -0
- package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +418 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +124 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +166 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
- package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +49 -0
- package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +76 -0
- package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +492 -0
- package/.claude/skills/cfn-sqlite-memory/IMPLEMENTATION_REPORT.md +393 -0
- package/.claude/skills/cfn-sqlite-memory/QUICK_REFERENCE.md +204 -0
- package/.claude/skills/cfn-sqlite-memory/SKILL.md +415 -0
- package/.claude/skills/cfn-sqlite-memory/acl-queries.sql +452 -0
- package/.claude/skills/cfn-sqlite-memory/check-dependencies.sh +36 -0
- package/.claude/skills/cfn-sqlite-memory/config.json +45 -0
- package/.claude/skills/cfn-sqlite-memory/memory-cli.sh +88 -0
- package/.claude/skills/cfn-sqlite-memory/test-state-persistence.js +187 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +274 -0
- package/.claude/skills/cfn-test-execution/SKILL.md +128 -0
- package/.claude/skills/cfn-test-execution/check-dependencies.sh +36 -0
- package/.claude/skills/cfn-test-execution/test-cache-reader.sh +134 -0
- package/.claude/skills/cfn-test-execution/test-concurrent-conflicts.sh +115 -0
- package/.claude/skills/cfn-test-execution/test-coordinator-pattern.sh +109 -0
- package/.claude/skills/cfn-transparency-middleware/Cargo.toml +18 -0
- package/.claude/skills/cfn-transparency-middleware/SECURITY.md +41 -0
- package/.claude/skills/cfn-transparency-middleware/SKILL.md +91 -0
- package/.claude/skills/cfn-transparency-middleware/TEST_RESULTS.md +174 -0
- package/.claude/skills/cfn-transparency-middleware/config.json +31 -0
- package/.claude/skills/cfn-transparency-middleware/examples/basic-usage.ts +39 -0
- package/.claude/skills/cfn-transparency-middleware/examples/batch-processing.ts +52 -0
- package/.claude/skills/cfn-transparency-middleware/examples/custom-filtering.ts +61 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-filter.sh +98 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-init.sh +224 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-level.sh +333 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-metrics.sh +345 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-observe.sh +140 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-stop.sh +235 -0
- package/.claude/skills/cfn-transparency-middleware/memory_query.rs +85 -0
- package/.claude/skills/cfn-transparency-middleware/memory_repository.rs +140 -0
- package/.claude/skills/cfn-transparency-middleware/memory_schema.rs +64 -0
- package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +29 -0
- package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +79 -0
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +406 -0
- package/.claude/skills/cfn-transparency-middleware/test-integration.sh +162 -0
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +368 -0
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh.unix +126 -0
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +93 -0
- package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +132 -0
- package/.claude/skills/cfn-webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
- package/.claude/skills/cfn-webapp-testing/SKILL.md +877 -0
- package/.claude/skills/cfn-webapp-testing/capture-screenshot.sh +238 -0
- package/.claude/skills/cfn-webapp-testing/cfn-loop-integration.sh +265 -0
- package/.claude/skills/cfn-webapp-testing/compare-screenshots.sh +199 -0
- package/.claude/skills/cfn-webapp-testing/init-storage.sh +150 -0
- package/.claude/skills/cfn-webapp-testing/set-baseline.sh +196 -0
- package/.claude/skills/cfn-webapp-testing/test-webapp-testing.sh +233 -0
- package/README.md +51 -2
- package/dist/ace/ace-reflector.js +109 -10
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/agents/agent-loader.js +165 -146
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/cli/agent-executor.js +1 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/config-manager.js +109 -91
- package/dist/cli/config-manager.js.map +1 -1
- package/package.json +43 -7
- package/readme/README.md +15 -4
- package/scripts/init-project.js +84 -29
- package/scripts/run-marketing-tests.sh +43 -0
- package/scripts/update_paths.sh +47 -0
- package/tools/install-lizard.sh +37 -0
- package/tools/simple-complexity.sh +44 -0
- package/.claude/agents/cfn-dev-team/developers/coder.md +0 -270
- package/.claude/agents/cfn-dev-team/developers/state-architect.md +0 -127
- package/.claude/agents/cfn-dev-team/reviewers/code-quality-validator.md +0 -128
- /package/.claude/agents/cfn-dev-team/developers/{ui-designer.md → frontend/ui-designer.md} +0 -0
- /package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner-agent.md +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Dependency checker for Hook Pipeline
|
|
3
|
+
|
|
4
|
+
check_command() {
|
|
5
|
+
if command -v "$1" &> /dev/null; then
|
|
6
|
+
VERSION=$($1 --version 2>&1 | head -n1)
|
|
7
|
+
echo "✅ $1: $VERSION"
|
|
8
|
+
return 0
|
|
9
|
+
else
|
|
10
|
+
echo "❌ $1: NOT FOUND"
|
|
11
|
+
return 1
|
|
12
|
+
fi
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
echo "Checking dependencies for Hook Pipeline..."
|
|
16
|
+
MISSING=0
|
|
17
|
+
|
|
18
|
+
# Required dependencies
|
|
19
|
+
check_command "node" || MISSING=$((MISSING+1))
|
|
20
|
+
check_command "jq" || MISSING=$((MISSING+1))
|
|
21
|
+
check_command "tsc" || MISSING=$((MISSING+1))
|
|
22
|
+
|
|
23
|
+
# Optional dependencies (warnings only)
|
|
24
|
+
optional_deps=("pylint" "black" "cargo" "clippy" "rustfmt" "gofmt" "go" "vet" "google-java-format" "clang-format" "cppcheck")
|
|
25
|
+
|
|
26
|
+
for dep in "${optional_deps[@]}"; do
|
|
27
|
+
if ! command -v "$dep" &> /dev/null; then
|
|
28
|
+
echo "⚠️ $dep: NOT FOUND (optional)"
|
|
29
|
+
fi
|
|
30
|
+
done
|
|
31
|
+
|
|
32
|
+
if [ $MISSING -eq 0 ]; then
|
|
33
|
+
echo ""
|
|
34
|
+
echo "✅ All required dependencies installed"
|
|
35
|
+
exit 0
|
|
36
|
+
else
|
|
37
|
+
echo ""
|
|
38
|
+
echo "❌ Missing $MISSING required dependencies"
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Feedback Resolver - Sprint 2.2
|
|
4
|
+
# Intelligent feedback resolution with auto-fix capabilities
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# ./feedback-resolver.sh [--type TYPE] [--auto-resolve] [--resolve-last] [--edit-id ID]
|
|
8
|
+
#
|
|
9
|
+
# Examples:
|
|
10
|
+
# ./feedback-resolver.sh --resolve-last
|
|
11
|
+
# ./feedback-resolver.sh --type ROOT_WARNING --auto-resolve
|
|
12
|
+
# ./feedback-resolver.sh --edit-id "edit-1729123456789-abc123"
|
|
13
|
+
|
|
14
|
+
set -euo pipefail
|
|
15
|
+
|
|
16
|
+
# Parse arguments
|
|
17
|
+
FEEDBACK_TYPE=""
|
|
18
|
+
AUTO_RESOLVE=false
|
|
19
|
+
RESOLVE_LAST=false
|
|
20
|
+
EDIT_ID=""
|
|
21
|
+
FEEDBACK_FILE=""
|
|
22
|
+
|
|
23
|
+
while [[ $# -gt 0 ]]; do
|
|
24
|
+
case $1 in
|
|
25
|
+
--type)
|
|
26
|
+
FEEDBACK_TYPE="$2"
|
|
27
|
+
shift 2
|
|
28
|
+
;;
|
|
29
|
+
--auto-resolve)
|
|
30
|
+
AUTO_RESOLVE=true
|
|
31
|
+
shift
|
|
32
|
+
;;
|
|
33
|
+
--resolve-last)
|
|
34
|
+
RESOLVE_LAST=true
|
|
35
|
+
shift
|
|
36
|
+
;;
|
|
37
|
+
--edit-id)
|
|
38
|
+
EDIT_ID="$2"
|
|
39
|
+
shift 2
|
|
40
|
+
;;
|
|
41
|
+
*)
|
|
42
|
+
if [ -z "$FEEDBACK_FILE" ]; then
|
|
43
|
+
FEEDBACK_FILE="$1"
|
|
44
|
+
fi
|
|
45
|
+
shift
|
|
46
|
+
;;
|
|
47
|
+
esac
|
|
48
|
+
done
|
|
49
|
+
|
|
50
|
+
# Determine feedback file to process
|
|
51
|
+
FEEDBACK_DIR=".artifacts/feedback"
|
|
52
|
+
|
|
53
|
+
if [ "$RESOLVE_LAST" = true ]; then
|
|
54
|
+
# Find most recent pending feedback file
|
|
55
|
+
FEEDBACK_FILE=$(find "$FEEDBACK_DIR" -name "pending-*.json" -type f -printf '%T@ %p\n' 2>/dev/null | sort -rn | head -1 | cut -d' ' -f2-)
|
|
56
|
+
if [ -z "$FEEDBACK_FILE" ]; then
|
|
57
|
+
echo "No pending feedback found"
|
|
58
|
+
exit 0
|
|
59
|
+
fi
|
|
60
|
+
echo "Resolving most recent feedback: $FEEDBACK_FILE"
|
|
61
|
+
elif [ -n "$EDIT_ID" ]; then
|
|
62
|
+
# Search for feedback by edit ID
|
|
63
|
+
FEEDBACK_FILE=$(grep -l "\"editId\": \"$EDIT_ID\"" "$FEEDBACK_DIR"/pending-*.json 2>/dev/null | head -1)
|
|
64
|
+
if [ -z "$FEEDBACK_FILE" ]; then
|
|
65
|
+
echo "No feedback found for edit ID: $EDIT_ID"
|
|
66
|
+
exit 1
|
|
67
|
+
fi
|
|
68
|
+
echo "Resolving feedback for edit ID: $EDIT_ID"
|
|
69
|
+
elif [ -n "$FEEDBACK_TYPE" ]; then
|
|
70
|
+
# Use type-specific file
|
|
71
|
+
FEEDBACK_FILE="$FEEDBACK_DIR/pending-${FEEDBACK_TYPE,,}.json"
|
|
72
|
+
if [ ! -f "$FEEDBACK_FILE" ]; then
|
|
73
|
+
FEEDBACK_FILE="$FEEDBACK_DIR/pending-$(echo "$FEEDBACK_TYPE" | tr '[:upper:]' '[:lower:]' | tr '_' '-').json"
|
|
74
|
+
fi
|
|
75
|
+
elif [ -z "$FEEDBACK_FILE" ]; then
|
|
76
|
+
# Default to root warning
|
|
77
|
+
FEEDBACK_FILE="$FEEDBACK_DIR/pending-root-warning.json"
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# Validate feedback file exists
|
|
81
|
+
if [ ! -f "$FEEDBACK_FILE" ]; then
|
|
82
|
+
echo "Feedback file not found: $FEEDBACK_FILE"
|
|
83
|
+
echo "Available feedback files:"
|
|
84
|
+
find "$FEEDBACK_DIR" -name "pending-*.json" -type f 2>/dev/null || echo " (none)"
|
|
85
|
+
exit 1
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
echo "Processing feedback: $FEEDBACK_FILE"
|
|
89
|
+
|
|
90
|
+
# Extract feedback details
|
|
91
|
+
STATUS=$(jq -r '.status // .type // "UNKNOWN"' "$FEEDBACK_FILE")
|
|
92
|
+
FILE_PATH=$(jq -r '.file // ""' "$FEEDBACK_FILE")
|
|
93
|
+
TIMESTAMP=$(jq -r '.timestamp // ""' "$FEEDBACK_FILE")
|
|
94
|
+
|
|
95
|
+
echo "Feedback type: $STATUS"
|
|
96
|
+
echo "File: $FILE_PATH"
|
|
97
|
+
echo "Timestamp: $TIMESTAMP"
|
|
98
|
+
echo ""
|
|
99
|
+
|
|
100
|
+
# Resolution functions
|
|
101
|
+
resolve_root_warning() {
|
|
102
|
+
local suggestions=$(jq -r '.rootWarning.suggestions // .suggestions // []' "$FEEDBACK_FILE")
|
|
103
|
+
local suggested_location=$(echo "$suggestions" | jq -r '.[0].location // ""')
|
|
104
|
+
local reason=$(echo "$suggestions" | jq -r '.[0].reason // ""')
|
|
105
|
+
|
|
106
|
+
if [ -z "$suggested_location" ]; then
|
|
107
|
+
echo "❌ No suggested location found in feedback"
|
|
108
|
+
return 1
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
if [ ! -f "$FILE_PATH" ]; then
|
|
112
|
+
echo "❌ Source file not found: $FILE_PATH"
|
|
113
|
+
return 1
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
echo "📦 ROOT_WARNING Auto-Resolution"
|
|
117
|
+
echo " Moving: $FILE_PATH"
|
|
118
|
+
echo " To: $suggested_location"
|
|
119
|
+
echo " Reason: $reason"
|
|
120
|
+
echo ""
|
|
121
|
+
|
|
122
|
+
# Create target directory
|
|
123
|
+
mkdir -p "$(dirname "$suggested_location")"
|
|
124
|
+
|
|
125
|
+
# Move file
|
|
126
|
+
mv "$FILE_PATH" "$suggested_location"
|
|
127
|
+
echo "✅ File moved successfully"
|
|
128
|
+
|
|
129
|
+
# Re-run hook validation on new location
|
|
130
|
+
echo ""
|
|
131
|
+
echo "🔍 Re-validating at new location..."
|
|
132
|
+
if node config/hooks/post-edit-pipeline.js "$suggested_location" >/dev/null 2>&1; then
|
|
133
|
+
echo "✅ Validation passed"
|
|
134
|
+
return 0
|
|
135
|
+
else
|
|
136
|
+
echo "⚠️ Validation failed - may require additional fixes"
|
|
137
|
+
return 0 # Still consider ROOT_WARNING resolved
|
|
138
|
+
fi
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
handle_tdd_violation() {
|
|
142
|
+
local has_tests=$(jq -r '.hasTests // false' "$FEEDBACK_FILE")
|
|
143
|
+
local test_file=$(jq -r '.testFile // ""' "$FEEDBACK_FILE")
|
|
144
|
+
local recommendations=$(jq -r '.recommendations // []' "$FEEDBACK_FILE")
|
|
145
|
+
|
|
146
|
+
echo "🧪 TDD_VIOLATION Semi-Auto Resolution"
|
|
147
|
+
echo " Has tests: $has_tests"
|
|
148
|
+
echo " Test file: $test_file"
|
|
149
|
+
echo ""
|
|
150
|
+
|
|
151
|
+
if [ "$has_tests" = "false" ] || [ -z "$test_file" ]; then
|
|
152
|
+
# Generate test file template
|
|
153
|
+
local ext="${FILE_PATH##*.}"
|
|
154
|
+
local base_name=$(basename "$FILE_PATH" ".$ext")
|
|
155
|
+
local dir_name=$(dirname "$FILE_PATH")
|
|
156
|
+
|
|
157
|
+
# Determine test file name based on extension
|
|
158
|
+
case "$ext" in
|
|
159
|
+
js|jsx)
|
|
160
|
+
test_file="${dir_name}/${base_name}.test.js"
|
|
161
|
+
;;
|
|
162
|
+
ts|tsx)
|
|
163
|
+
test_file="${dir_name}/${base_name}.test.ts"
|
|
164
|
+
;;
|
|
165
|
+
py)
|
|
166
|
+
test_file="${dir_name}/test_${base_name}.py"
|
|
167
|
+
;;
|
|
168
|
+
go)
|
|
169
|
+
test_file="${dir_name}/${base_name}_test.go"
|
|
170
|
+
;;
|
|
171
|
+
rs)
|
|
172
|
+
# Rust tests are usually in the same file
|
|
173
|
+
echo "⚠️ Rust uses inline tests - add #[cfg(test)] module to: $FILE_PATH"
|
|
174
|
+
return 0
|
|
175
|
+
;;
|
|
176
|
+
*)
|
|
177
|
+
echo "⚠️ Unknown file type: $ext - manual test creation required"
|
|
178
|
+
return 1
|
|
179
|
+
;;
|
|
180
|
+
esac
|
|
181
|
+
|
|
182
|
+
if [ -f "$test_file" ]; then
|
|
183
|
+
echo "⚠️ Test file already exists: $test_file"
|
|
184
|
+
echo " Manual review required"
|
|
185
|
+
return 0
|
|
186
|
+
fi
|
|
187
|
+
|
|
188
|
+
echo "📝 Generating test template: $test_file"
|
|
189
|
+
|
|
190
|
+
# Generate test template based on language
|
|
191
|
+
case "$ext" in
|
|
192
|
+
js|jsx|ts|tsx)
|
|
193
|
+
cat > "$test_file" <<EOF
|
|
194
|
+
import { describe, it, expect } from 'vitest';
|
|
195
|
+
// TODO: Import functions from $(basename "$FILE_PATH")
|
|
196
|
+
// import { functionName } from './$(basename "$FILE_PATH")';
|
|
197
|
+
|
|
198
|
+
describe('$(basename "$FILE_PATH" ".$ext")', () => {
|
|
199
|
+
it('should pass basic test', () => {
|
|
200
|
+
// TODO: Write test implementation
|
|
201
|
+
expect(true).toBe(true);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
// TODO: Add more test cases
|
|
205
|
+
});
|
|
206
|
+
EOF
|
|
207
|
+
;;
|
|
208
|
+
py)
|
|
209
|
+
cat > "$test_file" <<EOF
|
|
210
|
+
import pytest
|
|
211
|
+
# TODO: Import functions from $(basename "$FILE_PATH")
|
|
212
|
+
# from $(basename "$FILE_PATH" .py) import function_name
|
|
213
|
+
|
|
214
|
+
def test_basic():
|
|
215
|
+
"""Basic test case"""
|
|
216
|
+
# TODO: Write test implementation
|
|
217
|
+
assert True
|
|
218
|
+
|
|
219
|
+
# TODO: Add more test cases
|
|
220
|
+
EOF
|
|
221
|
+
;;
|
|
222
|
+
go)
|
|
223
|
+
cat > "$test_file" <<EOF
|
|
224
|
+
package $(basename "$dir_name")
|
|
225
|
+
|
|
226
|
+
import "testing"
|
|
227
|
+
|
|
228
|
+
// TODO: Add test cases
|
|
229
|
+
func TestBasic(t *testing.T) {
|
|
230
|
+
// TODO: Write test implementation
|
|
231
|
+
if true != true {
|
|
232
|
+
t.Error("Basic test failed")
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
EOF
|
|
236
|
+
;;
|
|
237
|
+
esac
|
|
238
|
+
|
|
239
|
+
echo "✅ Test template created"
|
|
240
|
+
echo ""
|
|
241
|
+
echo "⚠️ MANUAL ACTION REQUIRED:"
|
|
242
|
+
echo " 1. Complete test implementation in: $test_file"
|
|
243
|
+
echo " 2. Run tests: npm test $test_file"
|
|
244
|
+
echo " 3. Verify tests pass before continuing"
|
|
245
|
+
|
|
246
|
+
return 0
|
|
247
|
+
else
|
|
248
|
+
echo "⚠️ Test file exists but may be incomplete"
|
|
249
|
+
echo " Review recommendations:"
|
|
250
|
+
echo "$recommendations" | jq -r '.[] | " - \(.message // .type)"'
|
|
251
|
+
return 0
|
|
252
|
+
fi
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
resolve_low_coverage() {
|
|
256
|
+
local current=$(jq -r '.current // 0' "$FEEDBACK_FILE")
|
|
257
|
+
local required=$(jq -r '.required // 80' "$FEEDBACK_FILE")
|
|
258
|
+
local uncovered=$(jq -r '.uncovered // []' "$FEEDBACK_FILE")
|
|
259
|
+
|
|
260
|
+
echo "📊 LOW_COVERAGE Semi-Auto Resolution"
|
|
261
|
+
echo " Current coverage: $current%"
|
|
262
|
+
echo " Required coverage: $required%"
|
|
263
|
+
echo " Gap: $((required - current))%"
|
|
264
|
+
echo ""
|
|
265
|
+
|
|
266
|
+
echo "🔍 Analyzing uncovered code paths..."
|
|
267
|
+
if [ "$uncovered" != "[]" ]; then
|
|
268
|
+
echo "$uncovered" | jq -r '.[] | " Line \(.line): \(.code)"'
|
|
269
|
+
else
|
|
270
|
+
echo " Run: npm test -- --coverage $FILE_PATH"
|
|
271
|
+
echo " to identify uncovered lines"
|
|
272
|
+
fi
|
|
273
|
+
|
|
274
|
+
echo ""
|
|
275
|
+
echo "⚠️ MANUAL ACTION REQUIRED:"
|
|
276
|
+
echo " 1. Review uncovered lines above"
|
|
277
|
+
echo " 2. Add test cases for uncovered code paths"
|
|
278
|
+
echo " 3. Run: npm test -- --coverage"
|
|
279
|
+
echo " 4. Verify coverage meets threshold: $required%"
|
|
280
|
+
|
|
281
|
+
return 0
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
auto_rust_quality() {
|
|
285
|
+
local issues=$(jq -r '.issues // []' "$FEEDBACK_FILE")
|
|
286
|
+
local issue_count=$(echo "$issues" | jq -r 'length')
|
|
287
|
+
|
|
288
|
+
echo "🦀 RUST_QUALITY Auto-Resolution"
|
|
289
|
+
echo " Issues found: $issue_count"
|
|
290
|
+
echo ""
|
|
291
|
+
|
|
292
|
+
if [ ! -f "Cargo.toml" ]; then
|
|
293
|
+
echo "❌ Not a Rust project (Cargo.toml not found)"
|
|
294
|
+
return 1
|
|
295
|
+
fi
|
|
296
|
+
|
|
297
|
+
echo "🔧 Running cargo fmt..."
|
|
298
|
+
if cargo fmt 2>&1; then
|
|
299
|
+
echo "✅ Formatting complete"
|
|
300
|
+
else
|
|
301
|
+
echo "⚠️ Formatting failed - manual review required"
|
|
302
|
+
fi
|
|
303
|
+
|
|
304
|
+
echo ""
|
|
305
|
+
echo "🔍 Running cargo clippy --fix..."
|
|
306
|
+
if cargo clippy --fix --allow-dirty --allow-staged 2>&1; then
|
|
307
|
+
echo "✅ Clippy auto-fixes applied"
|
|
308
|
+
else
|
|
309
|
+
echo "⚠️ Some clippy issues require manual fixes"
|
|
310
|
+
fi
|
|
311
|
+
|
|
312
|
+
echo ""
|
|
313
|
+
echo "🔍 Re-validating..."
|
|
314
|
+
if node config/hooks/post-edit-pipeline.js "$FILE_PATH" >/dev/null 2>&1; then
|
|
315
|
+
echo "✅ Validation passed"
|
|
316
|
+
return 0
|
|
317
|
+
else
|
|
318
|
+
echo "⚠️ Validation failed - manual review required"
|
|
319
|
+
return 1
|
|
320
|
+
fi
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
resolve_lint_issues() {
|
|
324
|
+
local linter=$(jq -r '.linter // "unknown"' "$FEEDBACK_FILE")
|
|
325
|
+
local issues=$(jq -r '.issues // ""' "$FEEDBACK_FILE")
|
|
326
|
+
|
|
327
|
+
echo "🔍 LINT_ISSUES Auto-Resolution"
|
|
328
|
+
echo " Linter: $linter"
|
|
329
|
+
echo ""
|
|
330
|
+
|
|
331
|
+
local ext="${FILE_PATH##*.}"
|
|
332
|
+
|
|
333
|
+
case "$ext" in
|
|
334
|
+
js|jsx|ts|tsx)
|
|
335
|
+
echo "🔧 Running eslint --fix..."
|
|
336
|
+
if npx eslint --fix "$FILE_PATH" 2>&1; then
|
|
337
|
+
echo "✅ ESLint auto-fixes applied"
|
|
338
|
+
else
|
|
339
|
+
echo "⚠️ Some ESLint issues require manual fixes"
|
|
340
|
+
fi
|
|
341
|
+
|
|
342
|
+
echo ""
|
|
343
|
+
echo "🔧 Running prettier --write..."
|
|
344
|
+
if npx prettier --write "$FILE_PATH" 2>&1; then
|
|
345
|
+
echo "✅ Prettier formatting applied"
|
|
346
|
+
else
|
|
347
|
+
echo "⚠️ Prettier failed - check configuration"
|
|
348
|
+
fi
|
|
349
|
+
;;
|
|
350
|
+
py)
|
|
351
|
+
echo "🔧 Running black..."
|
|
352
|
+
if python -m black "$FILE_PATH" 2>&1; then
|
|
353
|
+
echo "✅ Black formatting applied"
|
|
354
|
+
else
|
|
355
|
+
echo "⚠️ Black not available - install with: pip install black"
|
|
356
|
+
fi
|
|
357
|
+
;;
|
|
358
|
+
*)
|
|
359
|
+
echo "⚠️ No auto-fix available for file type: $ext"
|
|
360
|
+
return 1
|
|
361
|
+
;;
|
|
362
|
+
esac
|
|
363
|
+
|
|
364
|
+
echo ""
|
|
365
|
+
echo "🔍 Re-validating..."
|
|
366
|
+
if node config/hooks/post-edit-pipeline.js "$FILE_PATH" >/dev/null 2>&1; then
|
|
367
|
+
echo "✅ Validation passed"
|
|
368
|
+
return 0
|
|
369
|
+
else
|
|
370
|
+
echo "⚠️ Some issues remain - manual review required"
|
|
371
|
+
return 1
|
|
372
|
+
fi
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
# Main resolution logic
|
|
376
|
+
RESOLVED=false
|
|
377
|
+
|
|
378
|
+
case "$STATUS" in
|
|
379
|
+
"ROOT_WARNING")
|
|
380
|
+
if [ "$AUTO_RESOLVE" = true ] || [ "$RESOLVE_LAST" = true ]; then
|
|
381
|
+
if resolve_root_warning; then
|
|
382
|
+
RESOLVED=true
|
|
383
|
+
fi
|
|
384
|
+
else
|
|
385
|
+
echo "⚠️ Auto-resolve not enabled"
|
|
386
|
+
echo " Run with --auto-resolve to move file automatically"
|
|
387
|
+
echo " Suggested location: $(jq -r '.rootWarning.suggestions[0].location // ""' "$FEEDBACK_FILE")"
|
|
388
|
+
fi
|
|
389
|
+
;;
|
|
390
|
+
"TDD_VIOLATION")
|
|
391
|
+
if handle_tdd_violation; then
|
|
392
|
+
RESOLVED=true
|
|
393
|
+
fi
|
|
394
|
+
;;
|
|
395
|
+
"LOW_COVERAGE")
|
|
396
|
+
if resolve_low_coverage; then
|
|
397
|
+
RESOLVED=true
|
|
398
|
+
fi
|
|
399
|
+
;;
|
|
400
|
+
"RUST_QUALITY")
|
|
401
|
+
if [ "$AUTO_RESOLVE" = true ] || [ "$RESOLVE_LAST" = true ]; then
|
|
402
|
+
if auto_rust_quality; then
|
|
403
|
+
RESOLVED=true
|
|
404
|
+
fi
|
|
405
|
+
else
|
|
406
|
+
echo "⚠️ Auto-resolve not enabled"
|
|
407
|
+
echo " Run with --auto-resolve to apply cargo fmt and clippy --fix"
|
|
408
|
+
fi
|
|
409
|
+
;;
|
|
410
|
+
"LINT_ISSUES")
|
|
411
|
+
if [ "$AUTO_RESOLVE" = true ] || [ "$RESOLVE_LAST" = true ]; then
|
|
412
|
+
if resolve_lint_issues; then
|
|
413
|
+
RESOLVED=true
|
|
414
|
+
fi
|
|
415
|
+
else
|
|
416
|
+
echo "⚠️ Auto-resolve not enabled"
|
|
417
|
+
echo " Run with --auto-resolve to apply linter auto-fixes"
|
|
418
|
+
fi
|
|
419
|
+
;;
|
|
420
|
+
*)
|
|
421
|
+
echo "❌ Unhandled feedback status: $STATUS"
|
|
422
|
+
exit 1
|
|
423
|
+
;;
|
|
424
|
+
esac
|
|
425
|
+
|
|
426
|
+
# Cleanup and publish resolution status
|
|
427
|
+
if [ "$RESOLVED" = true ]; then
|
|
428
|
+
echo ""
|
|
429
|
+
echo "✅ Feedback resolved successfully"
|
|
430
|
+
|
|
431
|
+
# Archive feedback file
|
|
432
|
+
ARCHIVE_DIR=".artifacts/feedback/archive"
|
|
433
|
+
mkdir -p "$ARCHIVE_DIR"
|
|
434
|
+
ARCHIVE_FILE="$ARCHIVE_DIR/$(basename "$FEEDBACK_FILE" .json)-$(date +%s).json"
|
|
435
|
+
mv "$FEEDBACK_FILE" "$ARCHIVE_FILE"
|
|
436
|
+
echo "📦 Feedback archived: $ARCHIVE_FILE"
|
|
437
|
+
|
|
438
|
+
# Publish resolution to Redis
|
|
439
|
+
redis-cli lpush "swarm:skills:sprint-2.2:feedback:resolutions" "{
|
|
440
|
+
\"status\": \"$STATUS\",
|
|
441
|
+
\"file\": \"$FILE_PATH\",
|
|
442
|
+
\"resolved\": true,
|
|
443
|
+
\"timestamp\": $(date +%s),
|
|
444
|
+
\"archive\": \"$ARCHIVE_FILE\"
|
|
445
|
+
}" >/dev/null 2>&1 || true
|
|
446
|
+
|
|
447
|
+
exit 0
|
|
448
|
+
else
|
|
449
|
+
echo ""
|
|
450
|
+
echo "⚠️ Feedback processed but manual action may be required"
|
|
451
|
+
exit 2
|
|
452
|
+
fi
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Post-Edit Hook Handler - Sprint 2.2
|
|
4
|
+
# Reusable wrapper for post-edit-pipeline.js with automatic feedback capture
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# ./post-edit-handler.sh <file_path> [--memory-key <key>] [--agent-id <id>] [--coordinator-id <id>]
|
|
8
|
+
#
|
|
9
|
+
# Examples:
|
|
10
|
+
# ./post-edit-handler.sh src/example.js --memory-key "swarm/coder-1/step-2"
|
|
11
|
+
# ./post-edit-handler.sh test.js --agent-id "coder-1" --coordinator-id "coordinator-cfn"
|
|
12
|
+
|
|
13
|
+
set -euo pipefail
|
|
14
|
+
|
|
15
|
+
# Parse arguments
|
|
16
|
+
FILE_PATH=""
|
|
17
|
+
MEMORY_KEY=""
|
|
18
|
+
AGENT_ID=""
|
|
19
|
+
COORDINATOR_ID=""
|
|
20
|
+
|
|
21
|
+
while [[ $# -gt 0 ]]; do
|
|
22
|
+
case $1 in
|
|
23
|
+
--memory-key)
|
|
24
|
+
MEMORY_KEY="$2"
|
|
25
|
+
shift 2
|
|
26
|
+
;;
|
|
27
|
+
--agent-id)
|
|
28
|
+
AGENT_ID="$2"
|
|
29
|
+
shift 2
|
|
30
|
+
;;
|
|
31
|
+
--coordinator-id)
|
|
32
|
+
COORDINATOR_ID="$2"
|
|
33
|
+
shift 2
|
|
34
|
+
;;
|
|
35
|
+
*)
|
|
36
|
+
if [ -z "$FILE_PATH" ]; then
|
|
37
|
+
FILE_PATH="$1"
|
|
38
|
+
fi
|
|
39
|
+
shift
|
|
40
|
+
;;
|
|
41
|
+
esac
|
|
42
|
+
done
|
|
43
|
+
|
|
44
|
+
# Validate required arguments
|
|
45
|
+
if [ -z "$FILE_PATH" ]; then
|
|
46
|
+
echo "Error: File path required"
|
|
47
|
+
echo "Usage: $0 <file_path> [--memory-key <key>] [--agent-id <id>] [--coordinator-id <id>]"
|
|
48
|
+
exit 1
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# Auto-detect agent context from memory key if not provided
|
|
52
|
+
if [ -z "$AGENT_ID" ] && [ -n "$MEMORY_KEY" ]; then
|
|
53
|
+
# Extract agent ID from memory key pattern: swarm/{agentId}/...
|
|
54
|
+
AGENT_ID=$(echo "$MEMORY_KEY" | grep -oP 'swarm/\K[^/]+' || echo "")
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Set default memory key if not provided
|
|
58
|
+
if [ -z "$MEMORY_KEY" ]; then
|
|
59
|
+
MEMORY_KEY="swarm/${AGENT_ID:-unknown}/hook-pipeline"
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Build command arguments
|
|
63
|
+
CMD_ARGS="$FILE_PATH --memory-key $MEMORY_KEY"
|
|
64
|
+
if [ -n "$AGENT_ID" ]; then
|
|
65
|
+
CMD_ARGS="$CMD_ARGS --agent-id $AGENT_ID"
|
|
66
|
+
fi
|
|
67
|
+
if [ -n "$COORDINATOR_ID" ]; then
|
|
68
|
+
CMD_ARGS="$CMD_ARGS --coordinator-id $COORDINATOR_ID"
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
echo "Executing post-edit pipeline: $FILE_PATH"
|
|
72
|
+
echo "Memory key: $MEMORY_KEY"
|
|
73
|
+
[ -n "$AGENT_ID" ] && echo "Agent ID: $AGENT_ID"
|
|
74
|
+
[ -n "$COORDINATOR_ID" ] && echo "Coordinator ID: $COORDINATOR_ID"
|
|
75
|
+
|
|
76
|
+
# Execute post-edit pipeline
|
|
77
|
+
set +e # Temporarily disable exit on error to capture exit code
|
|
78
|
+
node config/hooks/post-edit-pipeline.js $CMD_ARGS
|
|
79
|
+
EXIT_CODE=$?
|
|
80
|
+
set -e # Re-enable exit on error
|
|
81
|
+
|
|
82
|
+
# Extract feedback from log
|
|
83
|
+
LOG_FILE=".artifacts/logs/post-edit-pipeline.log"
|
|
84
|
+
if [ ! -f "$LOG_FILE" ]; then
|
|
85
|
+
echo "Warning: Log file not found: $LOG_FILE"
|
|
86
|
+
exit $EXIT_CODE
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
LAST_LOG_ENTRY=$(tail -n 1 "$LOG_FILE")
|
|
90
|
+
STATUS=$(echo "$LAST_LOG_ENTRY" | jq -r '.status // "NO_STATUS"' 2>/dev/null || echo "NO_STATUS")
|
|
91
|
+
|
|
92
|
+
echo "Validation status: $STATUS"
|
|
93
|
+
|
|
94
|
+
# Handle feedback types
|
|
95
|
+
case "$STATUS" in
|
|
96
|
+
"ROOT_WARNING")
|
|
97
|
+
echo "⚠️ ROOT_WARNING detected - automatic resolution available"
|
|
98
|
+
FEEDBACK_DIR=".artifacts/feedback"
|
|
99
|
+
mkdir -p "$FEEDBACK_DIR"
|
|
100
|
+
echo "$LAST_LOG_ENTRY" > "$FEEDBACK_DIR/pending-root-warning.json"
|
|
101
|
+
echo "Feedback saved to: $FEEDBACK_DIR/pending-root-warning.json"
|
|
102
|
+
echo "Run: ./claude/skills/hook-pipeline/feedback-resolver.sh --type ROOT_WARNING --auto-resolve"
|
|
103
|
+
exit 2 # Special exit code for ROOT_WARNING
|
|
104
|
+
;;
|
|
105
|
+
"TDD_VIOLATION")
|
|
106
|
+
echo "⚠️ TDD_VIOLATION detected - test file missing or incomplete"
|
|
107
|
+
FEEDBACK_DIR=".artifacts/feedback"
|
|
108
|
+
mkdir -p "$FEEDBACK_DIR"
|
|
109
|
+
echo "$LAST_LOG_ENTRY" > "$FEEDBACK_DIR/pending-tdd-violation.json"
|
|
110
|
+
echo "Feedback saved to: $FEEDBACK_DIR/pending-tdd-violation.json"
|
|
111
|
+
echo "Run: ./claude/skills/hook-pipeline/feedback-resolver.sh --type TDD_VIOLATION"
|
|
112
|
+
exit 3 # Special exit code for TDD_VIOLATION
|
|
113
|
+
;;
|
|
114
|
+
"LOW_COVERAGE")
|
|
115
|
+
echo "⚠️ LOW_COVERAGE detected - test coverage below threshold"
|
|
116
|
+
CURRENT=$(echo "$LAST_LOG_ENTRY" | jq -r '.current // 0')
|
|
117
|
+
REQUIRED=$(echo "$LAST_LOG_ENTRY" | jq -r '.required // 80')
|
|
118
|
+
echo "Current coverage: $CURRENT% (required: $REQUIRED%)"
|
|
119
|
+
FEEDBACK_DIR=".artifacts/feedback"
|
|
120
|
+
mkdir -p "$FEEDBACK_DIR"
|
|
121
|
+
echo "$LAST_LOG_ENTRY" > "$FEEDBACK_DIR/pending-low-coverage.json"
|
|
122
|
+
exit 4 # Special exit code for LOW_COVERAGE
|
|
123
|
+
;;
|
|
124
|
+
"RUST_QUALITY")
|
|
125
|
+
echo "⚠️ RUST_QUALITY issues detected - run cargo clippy and rustfmt"
|
|
126
|
+
FEEDBACK_DIR=".artifacts/feedback"
|
|
127
|
+
mkdir -p "$FEEDBACK_DIR"
|
|
128
|
+
echo "$LAST_LOG_ENTRY" > "$FEEDBACK_DIR/pending-rust-quality.json"
|
|
129
|
+
echo "Run: ./claude/skills/hook-pipeline/feedback-resolver.sh --type RUST_QUALITY --auto-resolve"
|
|
130
|
+
exit 5 # Special exit code for RUST_QUALITY
|
|
131
|
+
;;
|
|
132
|
+
"LINT_ISSUES")
|
|
133
|
+
echo "⚠️ LINT_ISSUES detected - run linter auto-fix"
|
|
134
|
+
FEEDBACK_DIR=".artifacts/feedback"
|
|
135
|
+
mkdir -p "$FEEDBACK_DIR"
|
|
136
|
+
echo "$LAST_LOG_ENTRY" > "$FEEDBACK_DIR/pending-lint-issues.json"
|
|
137
|
+
echo "Run: ./claude/skills/hook-pipeline/feedback-resolver.sh --type LINT_ISSUES --auto-resolve"
|
|
138
|
+
exit 6 # Special exit code for LINT_ISSUES
|
|
139
|
+
;;
|
|
140
|
+
"NO_STATUS"|"SUCCESS")
|
|
141
|
+
echo "✅ Validation passed"
|
|
142
|
+
;;
|
|
143
|
+
*)
|
|
144
|
+
echo "⚠️ Unknown status: $STATUS"
|
|
145
|
+
;;
|
|
146
|
+
esac
|
|
147
|
+
|
|
148
|
+
# Publish completion to Redis (if agent context available)
|
|
149
|
+
if [ -n "$AGENT_ID" ]; then
|
|
150
|
+
REDIS_CHANNEL="swarm:skills:sprint-2.2:${AGENT_ID}:hooks"
|
|
151
|
+
redis-cli lpush "$REDIS_CHANNEL" "{\"file\": \"$FILE_PATH\", \"status\": \"$STATUS\", \"timestamp\": $(date +%s)}" >/dev/null 2>&1 || true
|
|
152
|
+
fi
|
|
153
|
+
|
|
154
|
+
exit $EXIT_CODE
|