claude-flow-novice 2.9.1 → 2.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/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/cli/agent-executor.js +1 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/package.json +43 -7
- package/readme/README.md +15 -4
- package/scripts/init-project.js +76 -6
- 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,142 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
#!/usr/bin/env bash
|
|
4
|
+
|
|
5
|
+
##############################################################################
|
|
6
|
+
# CFN Loop Context Injection Helper - Phase 3.3 Integration
|
|
7
|
+
# Unified ACE context injection using invoke-context-inject.sh
|
|
8
|
+
#
|
|
9
|
+
# Usage:
|
|
10
|
+
# source context-injection.sh
|
|
11
|
+
# inject_ace_context "$TASK_DESCRIPTION" "$TASK_TAGS" "$DOMAIN"
|
|
12
|
+
##############################################################################
|
|
13
|
+
|
|
14
|
+
set -euo pipefail
|
|
15
|
+
|
|
16
|
+
# Get script directory
|
|
17
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
18
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
|
19
|
+
ACE_INJECT_SCRIPT="${PROJECT_ROOT}/.claude/skills/cfn-ace-system/invoke-context-inject.sh"
|
|
20
|
+
|
|
21
|
+
##############################################################################
|
|
22
|
+
# Inject ACE Context (Unified Positive + Negative)
|
|
23
|
+
##############################################################################
|
|
24
|
+
inject_ace_context() {
|
|
25
|
+
local task_description="$1"
|
|
26
|
+
local task_tags="${2:-}"
|
|
27
|
+
local domain="${3:-}"
|
|
28
|
+
local enable_ace="${4:-true}"
|
|
29
|
+
local output_file="${5:-}"
|
|
30
|
+
|
|
31
|
+
# Validate dependencies
|
|
32
|
+
if [ ! -f "$ACE_INJECT_SCRIPT" ]; then
|
|
33
|
+
echo "# ACE Context (Unavailable)"
|
|
34
|
+
echo ""
|
|
35
|
+
echo "_ACE context injection script not found._"
|
|
36
|
+
return 1
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Build invocation parameters
|
|
40
|
+
local invoke_params="--task-description \"$task_description\""
|
|
41
|
+
|
|
42
|
+
if [ -n "$task_tags" ]; then
|
|
43
|
+
invoke_params="$invoke_params --task-tags \"$task_tags\""
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
if [ -n "$domain" ]; then
|
|
47
|
+
invoke_params="$invoke_params --domain \"$domain\""
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
invoke_params="$invoke_params --enable-ace $enable_ace"
|
|
51
|
+
|
|
52
|
+
if [ -n "$output_file" ]; then
|
|
53
|
+
invoke_params="$invoke_params --output \"$output_file\""
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Execute unified context injection
|
|
57
|
+
eval "$ACE_INJECT_SCRIPT" $invoke_params 2>/dev/null || {
|
|
58
|
+
echo "# ACE Context (Error)"
|
|
59
|
+
echo ""
|
|
60
|
+
echo "_Failed to retrieve ACE context._"
|
|
61
|
+
return 1
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return 0
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
##############################################################################
|
|
68
|
+
# Extract Tags from Context (Helper for Orchestrator)
|
|
69
|
+
##############################################################################
|
|
70
|
+
extract_tags_from_context() {
|
|
71
|
+
local context_json="$1"
|
|
72
|
+
|
|
73
|
+
# Extract tags from deliverables, acceptance criteria, etc.
|
|
74
|
+
local extracted_tags
|
|
75
|
+
extracted_tags=$(echo "$context_json" | jq -r '
|
|
76
|
+
[
|
|
77
|
+
(.deliverables // [] | .[]),
|
|
78
|
+
(.acceptanceCriteria // [] | .[]),
|
|
79
|
+
(.epicGoal // "" | split(" ") | .[])
|
|
80
|
+
] |
|
|
81
|
+
map(select(. != "")) |
|
|
82
|
+
unique |
|
|
83
|
+
join(",")
|
|
84
|
+
' 2>/dev/null || echo "")
|
|
85
|
+
|
|
86
|
+
echo "$extracted_tags"
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
##############################################################################
|
|
90
|
+
# Classify Domain from Task Description (Helper)
|
|
91
|
+
##############################################################################
|
|
92
|
+
classify_domain() {
|
|
93
|
+
local task_description="$1"
|
|
94
|
+
|
|
95
|
+
local classifier_script="${PROJECT_ROOT}/.claude/skills/cfn-task-classifier/classify-task.sh"
|
|
96
|
+
|
|
97
|
+
if [ ! -f "$classifier_script" ]; then
|
|
98
|
+
echo "general"
|
|
99
|
+
return
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
local classification
|
|
103
|
+
classification=$("$classifier_script" "$task_description" --format json 2>/dev/null || echo '{"domains":["general"]}')
|
|
104
|
+
|
|
105
|
+
local primary_domain
|
|
106
|
+
primary_domain=$(echo "$classification" | jq -r '.domains[0] // "general"')
|
|
107
|
+
|
|
108
|
+
echo "$primary_domain"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
##############################################################################
|
|
112
|
+
# Main Context Injection Wrapper (For Orchestrator Use)
|
|
113
|
+
##############################################################################
|
|
114
|
+
inject_context_for_agent() {
|
|
115
|
+
local agent_type="$1"
|
|
116
|
+
local task_id="$2"
|
|
117
|
+
local iteration="${3:-1}"
|
|
118
|
+
|
|
119
|
+
# Retrieve task context from Redis
|
|
120
|
+
local task_context
|
|
121
|
+
if command -v redis-cli &> /dev/null; then
|
|
122
|
+
task_context=$(redis-cli HGET "cfn_loop:task:$task_id:context" "task_description" 2>/dev/null || echo "")
|
|
123
|
+
else
|
|
124
|
+
task_context=""
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
if [ -z "$task_context" ]; then
|
|
128
|
+
echo "# ACE Context (No Task Description)"
|
|
129
|
+
echo ""
|
|
130
|
+
echo "_Task description not available for context injection._"
|
|
131
|
+
return 1
|
|
132
|
+
fi
|
|
133
|
+
|
|
134
|
+
# Extract tags and classify domain
|
|
135
|
+
local task_tags=$(extract_tags_from_context "$task_context")
|
|
136
|
+
local domain=$(classify_domain "$task_context")
|
|
137
|
+
|
|
138
|
+
# Inject unified context
|
|
139
|
+
inject_ace_context "$task_context" "$task_tags" "$domain" "true" ""
|
|
140
|
+
|
|
141
|
+
return 0
|
|
142
|
+
}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
##############################################################################
|
|
4
|
+
# Context Lookup Helper - ACE System Integration Phase 1.2
|
|
5
|
+
# Extracts keywords from task description and queries historical context
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# ./context-lookup.sh --task-id TASK_ID --description "Task description"
|
|
9
|
+
#
|
|
10
|
+
# Arguments:
|
|
11
|
+
# --task-id Unique task identifier (required)
|
|
12
|
+
# --description Task description for keyword extraction (required)
|
|
13
|
+
# --similarity-threshold Minimum similarity (0.0-1.0, default: 0.70)
|
|
14
|
+
# --max-results Maximum results (default: 5)
|
|
15
|
+
#
|
|
16
|
+
# Output:
|
|
17
|
+
# Stores results in Redis: cfn_loop:{TASK_ID}:historical_context
|
|
18
|
+
# TTL: 1 hour (3600 seconds)
|
|
19
|
+
# Logs to: .artifacts/logs/context-lookup-{TASK_ID}.log
|
|
20
|
+
##############################################################################
|
|
21
|
+
|
|
22
|
+
set -euo pipefail
|
|
23
|
+
|
|
24
|
+
# Script directory and project root
|
|
25
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
26
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
|
27
|
+
ACE_SKILL_DIR="$PROJECT_ROOT/.claude/skills/cfn-ace-system"
|
|
28
|
+
|
|
29
|
+
# Default values
|
|
30
|
+
TASK_ID=""
|
|
31
|
+
DESCRIPTION=""
|
|
32
|
+
SIMILARITY_THRESHOLD=0.70
|
|
33
|
+
MAX_RESULTS=5
|
|
34
|
+
LOG_DIR="$PROJECT_ROOT/.artifacts/logs"
|
|
35
|
+
MEMORY_PATH="$PROJECT_ROOT/.artifacts/database/swarm-memory.db"
|
|
36
|
+
|
|
37
|
+
# Domain classification keywords
|
|
38
|
+
declare -A DOMAIN_KEYWORDS=(
|
|
39
|
+
[frontend]="react,vue,angular,ui,component,jsx,tsx,css,html,dom,browser,frontend"
|
|
40
|
+
[backend]="api,server,database,sql,route,endpoint,auth,middleware,backend,express,node"
|
|
41
|
+
[security]="auth,security,encryption,jwt,oauth,vulnerability,xss,csrf,permission,access"
|
|
42
|
+
[devops]="deploy,docker,kubernetes,ci,cd,pipeline,infrastructure,aws,azure,gcp,monitoring"
|
|
43
|
+
[testing]="test,spec,jest,mocha,cypress,e2e,integration,unit,coverage,assertion"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
##############################################################################
|
|
47
|
+
# Input Sanitization
|
|
48
|
+
# Prevents command injection, SQL injection via keywords
|
|
49
|
+
##############################################################################
|
|
50
|
+
sanitize_input() {
|
|
51
|
+
local input="$1"
|
|
52
|
+
# Remove shell metacharacters and special characters
|
|
53
|
+
# Only allow alphanumeric, spaces, hyphens, underscores, periods
|
|
54
|
+
echo "$input" | tr -cd '[:alnum:][:space:]-_.'
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
##############################################################################
|
|
58
|
+
# Logging
|
|
59
|
+
##############################################################################
|
|
60
|
+
log() {
|
|
61
|
+
local level="$1"
|
|
62
|
+
shift
|
|
63
|
+
local message="$*"
|
|
64
|
+
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|
65
|
+
|
|
66
|
+
if [ -n "$TASK_ID" ]; then
|
|
67
|
+
local log_file="$LOG_DIR/context-lookup-${TASK_ID}.log"
|
|
68
|
+
mkdir -p "$LOG_DIR"
|
|
69
|
+
echo "[$timestamp] [$level] $message" | tee -a "$log_file"
|
|
70
|
+
else
|
|
71
|
+
echo "[$timestamp] [$level] $message"
|
|
72
|
+
fi
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
##############################################################################
|
|
76
|
+
# Keyword Extraction
|
|
77
|
+
# Uses regex to extract meaningful terms (3+ chars, excluding common words)
|
|
78
|
+
##############################################################################
|
|
79
|
+
extract_keywords() {
|
|
80
|
+
local text="$1"
|
|
81
|
+
local keywords=()
|
|
82
|
+
|
|
83
|
+
# Convert to lowercase and extract words
|
|
84
|
+
local words=$(echo "$text" | tr '[:upper:]' '[:lower:]' | grep -oE '\b[a-z0-9]{3,}\b' || true)
|
|
85
|
+
|
|
86
|
+
# Common stopwords to exclude
|
|
87
|
+
local stopwords="the|and|for|with|from|that|this|are|was|were|been|have|has|had|but|not|you|all|can|will|what|when|who|how"
|
|
88
|
+
|
|
89
|
+
# Filter out stopwords and collect unique keywords
|
|
90
|
+
for word in $words; do
|
|
91
|
+
if ! echo "$word" | grep -qE "^($stopwords)$"; then
|
|
92
|
+
# Add to keywords if not already present
|
|
93
|
+
if [[ ! " ${keywords[@]} " =~ " ${word} " ]]; then
|
|
94
|
+
keywords+=("$word")
|
|
95
|
+
fi
|
|
96
|
+
fi
|
|
97
|
+
done
|
|
98
|
+
|
|
99
|
+
# Return comma-separated keywords
|
|
100
|
+
IFS=','
|
|
101
|
+
echo "${keywords[*]}"
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
##############################################################################
|
|
105
|
+
# Domain Classification
|
|
106
|
+
# Classifies task domain based on keyword matching
|
|
107
|
+
##############################################################################
|
|
108
|
+
classify_domain() {
|
|
109
|
+
local keywords="$1"
|
|
110
|
+
local max_score=0
|
|
111
|
+
local detected_domain="general"
|
|
112
|
+
|
|
113
|
+
# Score each domain based on keyword overlap
|
|
114
|
+
for domain in "${!DOMAIN_KEYWORDS[@]}"; do
|
|
115
|
+
local domain_kw="${DOMAIN_KEYWORDS[$domain]}"
|
|
116
|
+
local score=0
|
|
117
|
+
|
|
118
|
+
# Count matching keywords
|
|
119
|
+
IFS=',' read -ra kw_array <<< "$keywords"
|
|
120
|
+
for kw in "${kw_array[@]}"; do
|
|
121
|
+
if echo "$domain_kw" | grep -q "$kw"; then
|
|
122
|
+
((score++))
|
|
123
|
+
fi
|
|
124
|
+
done
|
|
125
|
+
|
|
126
|
+
# Track highest scoring domain
|
|
127
|
+
if [ $score -gt $max_score ]; then
|
|
128
|
+
max_score=$score
|
|
129
|
+
detected_domain="$domain"
|
|
130
|
+
fi
|
|
131
|
+
done
|
|
132
|
+
|
|
133
|
+
# Calculate accuracy estimate
|
|
134
|
+
local total_keywords=$(echo "$keywords" | tr ',' '\n' | wc -l)
|
|
135
|
+
local accuracy=0
|
|
136
|
+
if [ $total_keywords -gt 0 ]; then
|
|
137
|
+
accuracy=$(echo "scale=2; ($max_score / $total_keywords) * 100" | bc)
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
log "INFO" "Domain classification: $detected_domain (score: $max_score/$total_keywords, accuracy: ${accuracy}%)"
|
|
141
|
+
echo "$detected_domain"
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
##############################################################################
|
|
145
|
+
# Query Historical Context
|
|
146
|
+
# Calls invoke-context-query.sh with extracted keywords
|
|
147
|
+
# Includes graceful fallback if query fails
|
|
148
|
+
##############################################################################
|
|
149
|
+
query_historical_context() {
|
|
150
|
+
local keywords="$1"
|
|
151
|
+
local query_script="$ACE_SKILL_DIR/invoke-context-query.sh"
|
|
152
|
+
|
|
153
|
+
if [ ! -f "$query_script" ]; then
|
|
154
|
+
log "ERROR" "invoke-context-query.sh not found at $query_script"
|
|
155
|
+
log "WARN" "Falling back to empty results due to missing query script"
|
|
156
|
+
echo "[]"
|
|
157
|
+
return 0
|
|
158
|
+
fi
|
|
159
|
+
|
|
160
|
+
log "INFO" "Querying historical context with keywords: $keywords"
|
|
161
|
+
|
|
162
|
+
# Call ACE query script with error handling
|
|
163
|
+
local results
|
|
164
|
+
local query_error=""
|
|
165
|
+
|
|
166
|
+
if ! results=$("$query_script" \
|
|
167
|
+
--keywords "$keywords" \
|
|
168
|
+
--similarity-threshold "$SIMILARITY_THRESHOLD" \
|
|
169
|
+
--max-results "$MAX_RESULTS" \
|
|
170
|
+
--memory-path "$MEMORY_PATH" 2>&1); then
|
|
171
|
+
query_error="$results"
|
|
172
|
+
log "ERROR" "Context query failed: $query_error"
|
|
173
|
+
log "WARN" "Falling back to empty results due to query failure"
|
|
174
|
+
echo "[]"
|
|
175
|
+
return 0
|
|
176
|
+
fi
|
|
177
|
+
|
|
178
|
+
# Validate JSON output
|
|
179
|
+
if ! echo "$results" | jq . > /dev/null 2>&1; then
|
|
180
|
+
log "ERROR" "Invalid JSON from context query"
|
|
181
|
+
log "WARN" "Falling back to empty results due to invalid JSON"
|
|
182
|
+
echo "[]"
|
|
183
|
+
return 0
|
|
184
|
+
fi
|
|
185
|
+
|
|
186
|
+
# Count results
|
|
187
|
+
local result_count=$(echo "$results" | jq 'length')
|
|
188
|
+
log "INFO" "Retrieved $result_count similar contexts (threshold: $SIMILARITY_THRESHOLD)"
|
|
189
|
+
|
|
190
|
+
echo "$results"
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
##############################################################################
|
|
194
|
+
# Store Results in Redis
|
|
195
|
+
# Stores query results with metadata and TTL
|
|
196
|
+
# Includes warning flag if results are empty due to query failure
|
|
197
|
+
##############################################################################
|
|
198
|
+
store_in_redis() {
|
|
199
|
+
local keywords="$1"
|
|
200
|
+
local domain="$2"
|
|
201
|
+
local results="$3"
|
|
202
|
+
local redis_key="cfn_loop:${TASK_ID}:historical_context"
|
|
203
|
+
|
|
204
|
+
# Detect if results are empty (query failure fallback)
|
|
205
|
+
local result_count=$(echo "$results" | jq 'length')
|
|
206
|
+
local has_error="false"
|
|
207
|
+
if [ "$result_count" -eq 0 ]; then
|
|
208
|
+
has_error="true"
|
|
209
|
+
log "WARN" "Storing empty results - ACE query may have failed"
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
# Create metadata object with error flag
|
|
213
|
+
local metadata=$(jq -n \
|
|
214
|
+
--arg keywords "$keywords" \
|
|
215
|
+
--arg domain "$domain" \
|
|
216
|
+
--arg timestamp "$(date -Iseconds)" \
|
|
217
|
+
--argjson results "$results" \
|
|
218
|
+
--argjson has_error "$has_error" \
|
|
219
|
+
'{
|
|
220
|
+
keywords: $keywords,
|
|
221
|
+
domain: $domain,
|
|
222
|
+
timestamp: $timestamp,
|
|
223
|
+
similarity_threshold: '"$SIMILARITY_THRESHOLD"',
|
|
224
|
+
max_results: '"$MAX_RESULTS"',
|
|
225
|
+
query_error: $has_error,
|
|
226
|
+
results: $results
|
|
227
|
+
}')
|
|
228
|
+
|
|
229
|
+
# Store in Redis with TTL
|
|
230
|
+
if ! redis-cli SET "$redis_key" "$metadata" EX 3600 > /dev/null 2>&1; then
|
|
231
|
+
log "ERROR" "Failed to store results in Redis"
|
|
232
|
+
return 1
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
log "INFO" "Stored results in Redis: $redis_key (TTL: 3600s)"
|
|
236
|
+
|
|
237
|
+
# Verify storage
|
|
238
|
+
if ! redis-cli EXISTS "$redis_key" > /dev/null 2>&1; then
|
|
239
|
+
log "ERROR" "Redis key verification failed"
|
|
240
|
+
return 1
|
|
241
|
+
fi
|
|
242
|
+
|
|
243
|
+
log "INFO" "Redis storage verified successfully"
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
##############################################################################
|
|
247
|
+
# Argument Parsing
|
|
248
|
+
##############################################################################
|
|
249
|
+
parse_arguments() {
|
|
250
|
+
while [[ $# -gt 0 ]]; do
|
|
251
|
+
case $1 in
|
|
252
|
+
--task-id)
|
|
253
|
+
TASK_ID="$2"
|
|
254
|
+
shift 2
|
|
255
|
+
;;
|
|
256
|
+
--description)
|
|
257
|
+
DESCRIPTION="$2"
|
|
258
|
+
shift 2
|
|
259
|
+
;;
|
|
260
|
+
--similarity-threshold)
|
|
261
|
+
SIMILARITY_THRESHOLD="$2"
|
|
262
|
+
shift 2
|
|
263
|
+
;;
|
|
264
|
+
--max-results)
|
|
265
|
+
MAX_RESULTS="$2"
|
|
266
|
+
shift 2
|
|
267
|
+
;;
|
|
268
|
+
*)
|
|
269
|
+
log "ERROR" "Unknown option: $1"
|
|
270
|
+
echo "Usage: $0 --task-id TASK_ID --description 'Task description' [OPTIONS]"
|
|
271
|
+
exit 1
|
|
272
|
+
;;
|
|
273
|
+
esac
|
|
274
|
+
done
|
|
275
|
+
|
|
276
|
+
# Validation
|
|
277
|
+
if [ -z "$TASK_ID" ]; then
|
|
278
|
+
log "ERROR" "--task-id is required"
|
|
279
|
+
exit 1
|
|
280
|
+
fi
|
|
281
|
+
|
|
282
|
+
if [ -z "$DESCRIPTION" ]; then
|
|
283
|
+
log "ERROR" "--description is required"
|
|
284
|
+
exit 1
|
|
285
|
+
fi
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
##############################################################################
|
|
289
|
+
# Main Execution
|
|
290
|
+
##############################################################################
|
|
291
|
+
main() {
|
|
292
|
+
parse_arguments "$@"
|
|
293
|
+
|
|
294
|
+
log "INFO" "Starting context lookup for task: $TASK_ID"
|
|
295
|
+
log "INFO" "Description: $DESCRIPTION"
|
|
296
|
+
|
|
297
|
+
# Step 0: Sanitize input
|
|
298
|
+
local sanitized_description
|
|
299
|
+
sanitized_description=$(sanitize_input "$DESCRIPTION")
|
|
300
|
+
log "INFO" "Sanitized description: $sanitized_description"
|
|
301
|
+
|
|
302
|
+
# Step 1: Extract keywords
|
|
303
|
+
local keywords
|
|
304
|
+
keywords=$(extract_keywords "$sanitized_description")
|
|
305
|
+
|
|
306
|
+
local keyword_count=$(echo "$keywords" | tr ',' '\n' | wc -l)
|
|
307
|
+
log "INFO" "Extracted $keyword_count keywords: $keywords"
|
|
308
|
+
|
|
309
|
+
if [ $keyword_count -lt 3 ]; then
|
|
310
|
+
log "WARN" "Only extracted $keyword_count keywords (requirement: ≥3)"
|
|
311
|
+
fi
|
|
312
|
+
|
|
313
|
+
# Step 2: Classify domain
|
|
314
|
+
local domain
|
|
315
|
+
domain=$(classify_domain "$keywords")
|
|
316
|
+
|
|
317
|
+
# Step 3: Query historical context
|
|
318
|
+
local results
|
|
319
|
+
if ! results=$(query_historical_context "$keywords"); then
|
|
320
|
+
log "ERROR" "Context query failed"
|
|
321
|
+
exit 1
|
|
322
|
+
fi
|
|
323
|
+
|
|
324
|
+
# Step 4: Store in Redis
|
|
325
|
+
if ! store_in_redis "$keywords" "$domain" "$results"; then
|
|
326
|
+
log "ERROR" "Redis storage failed"
|
|
327
|
+
exit 1
|
|
328
|
+
fi
|
|
329
|
+
|
|
330
|
+
# Summary
|
|
331
|
+
log "INFO" "Context lookup complete"
|
|
332
|
+
log "INFO" "Keywords: $keyword_count extracted"
|
|
333
|
+
log "INFO" "Domain: $domain"
|
|
334
|
+
log "INFO" "Results: $(echo "$results" | jq 'length') similar contexts"
|
|
335
|
+
log "INFO" "Redis: cfn_loop:${TASK_ID}:historical_context (TTL: 3600s)"
|
|
336
|
+
|
|
337
|
+
# Calculate confidence score
|
|
338
|
+
local confidence=0.75
|
|
339
|
+
|
|
340
|
+
# Boost confidence based on success criteria
|
|
341
|
+
if [ $keyword_count -ge 3 ]; then
|
|
342
|
+
confidence=$(echo "$confidence + 0.05" | bc)
|
|
343
|
+
fi
|
|
344
|
+
|
|
345
|
+
if [ "$(echo "$results" | jq 'length')" -gt 0 ]; then
|
|
346
|
+
confidence=$(echo "$confidence + 0.10" | bc)
|
|
347
|
+
fi
|
|
348
|
+
|
|
349
|
+
# Cap at 1.0
|
|
350
|
+
confidence=$(echo "if ($confidence > 1.0) 1.0 else $confidence" | bc)
|
|
351
|
+
|
|
352
|
+
log "INFO" "Self-confidence score: $confidence"
|
|
353
|
+
|
|
354
|
+
# Return success
|
|
355
|
+
exit 0
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
# Execute main
|
|
359
|
+
main "$@"
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
##############################################################################
|
|
4
|
+
# Deliverable Verifier
|
|
5
|
+
# Verifies expected deliverables were created (prevents "consensus on vapor")
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# deliverable-verifier.sh --expected-files <file1,file2,...> \
|
|
9
|
+
# --task-type <keyword-detection>
|
|
10
|
+
#
|
|
11
|
+
# Returns:
|
|
12
|
+
# Exit 0: Deliverables verified
|
|
13
|
+
# Exit 1: Missing deliverables
|
|
14
|
+
##############################################################################
|
|
15
|
+
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
# Parameters
|
|
19
|
+
EXPECTED_FILES=""
|
|
20
|
+
TASK_TYPE=""
|
|
21
|
+
|
|
22
|
+
# Parse arguments
|
|
23
|
+
while [[ $# -gt 0 ]]; do
|
|
24
|
+
case $1 in
|
|
25
|
+
--expected-files) EXPECTED_FILES="$2"; shift 2 ;;
|
|
26
|
+
--task-type) TASK_TYPE="$2"; shift 2 ;;
|
|
27
|
+
*) echo "Unknown option: $1"; exit 1 ;;
|
|
28
|
+
esac
|
|
29
|
+
done
|
|
30
|
+
|
|
31
|
+
# Check git status for file changes
|
|
32
|
+
GIT_CHANGES=$(git status --short | wc -l)
|
|
33
|
+
|
|
34
|
+
echo "Deliverable Verification:"
|
|
35
|
+
echo " Git changes detected: $GIT_CHANGES files"
|
|
36
|
+
|
|
37
|
+
# If expected files specified, check them explicitly
|
|
38
|
+
if [ -n "$EXPECTED_FILES" ]; then
|
|
39
|
+
IFS=',' read -ra FILE_ARRAY <<< "$EXPECTED_FILES"
|
|
40
|
+
MISSING_COUNT=0
|
|
41
|
+
|
|
42
|
+
for file in "${FILE_ARRAY[@]}"; do
|
|
43
|
+
if [ -f "$file" ]; then
|
|
44
|
+
echo " ✅ Found: $file"
|
|
45
|
+
else
|
|
46
|
+
echo " ❌ Missing: $file"
|
|
47
|
+
MISSING_COUNT=$((MISSING_COUNT + 1))
|
|
48
|
+
fi
|
|
49
|
+
done
|
|
50
|
+
|
|
51
|
+
if [ $MISSING_COUNT -gt 0 ]; then
|
|
52
|
+
echo "❌ Deliverable verification FAILED: $MISSING_COUNT missing files"
|
|
53
|
+
exit 1
|
|
54
|
+
fi
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Keyword-based task type detection
|
|
58
|
+
if [ -n "$TASK_TYPE" ]; then
|
|
59
|
+
if [[ "$TASK_TYPE" =~ (create|build|implement|add|generate) ]]; then
|
|
60
|
+
# Implementation tasks require file changes
|
|
61
|
+
if [ $GIT_CHANGES -eq 0 ]; then
|
|
62
|
+
echo "❌ Implementation task detected but no files created"
|
|
63
|
+
echo " Task type: $TASK_TYPE"
|
|
64
|
+
echo " This is 'consensus on vapor' - forcing iteration"
|
|
65
|
+
exit 1
|
|
66
|
+
fi
|
|
67
|
+
fi
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
echo "✅ Deliverable verification PASSED"
|
|
71
|
+
exit 0
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
##############################################################################
|
|
4
|
+
# Gate Check Helper
|
|
5
|
+
# Validates Loop 3 self-assessment against gate threshold
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# gate-check.sh --task-id <id> \
|
|
9
|
+
# --agents <agent1,agent2,...> \
|
|
10
|
+
# --threshold <0.0-1.0> \
|
|
11
|
+
# --min-quorum <n|n%|0.n>
|
|
12
|
+
#
|
|
13
|
+
# Returns:
|
|
14
|
+
# Exit 0: Gate passed (Loop 3 meets threshold)
|
|
15
|
+
# Exit 1: Gate failed (Loop 3 needs iteration)
|
|
16
|
+
##############################################################################
|
|
17
|
+
|
|
18
|
+
set -euo pipefail
|
|
19
|
+
|
|
20
|
+
# Parameters
|
|
21
|
+
TASK_ID=""
|
|
22
|
+
AGENTS=""
|
|
23
|
+
THRESHOLD=""
|
|
24
|
+
MIN_QUORUM=""
|
|
25
|
+
|
|
26
|
+
# Parse arguments
|
|
27
|
+
while [[ $# -gt 0 ]]; do
|
|
28
|
+
case $1 in
|
|
29
|
+
--task-id) TASK_ID="$2"; shift 2 ;;
|
|
30
|
+
--agents) AGENTS="$2"; shift 2 ;;
|
|
31
|
+
--threshold) THRESHOLD="$2"; shift 2 ;;
|
|
32
|
+
--min-quorum) MIN_QUORUM="$2"; shift 2 ;;
|
|
33
|
+
*) echo "Unknown option: $1"; exit 1 ;;
|
|
34
|
+
esac
|
|
35
|
+
done
|
|
36
|
+
|
|
37
|
+
# Validation
|
|
38
|
+
if [ -z "$TASK_ID" ] || [ -z "$AGENTS" ] || [ -z "$THRESHOLD" ] || [ -z "$MIN_QUORUM" ]; then
|
|
39
|
+
echo "Error: Missing required parameters"
|
|
40
|
+
exit 1
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
# Use Redis Coordination skill to collect confidence scores
|
|
44
|
+
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.claude/skills/cfn-cfn-.." && pwd)"
|
|
45
|
+
REDIS_COORD_SKILL="$SKILL_DIR/redis-coordination"
|
|
46
|
+
|
|
47
|
+
echo "Gate Check Configuration:"
|
|
48
|
+
echo " Task ID: $TASK_ID"
|
|
49
|
+
echo " Agent IDs: $AGENTS"
|
|
50
|
+
echo " Min Quorum: $MIN_QUORUM"
|
|
51
|
+
echo ""
|
|
52
|
+
|
|
53
|
+
# Collect Loop 3 confidence scores
|
|
54
|
+
# Note: invoke-waiting-mode.sh outputs consensus to stdout and verbose messages to stderr
|
|
55
|
+
# We capture only stdout to get the numeric consensus value
|
|
56
|
+
CONSENSUS=$("$REDIS_COORD_SKILL/invoke-waiting-mode.sh" collect \
|
|
57
|
+
--task-id "$TASK_ID" \
|
|
58
|
+
--agent-ids "$AGENTS" \
|
|
59
|
+
--min-quorum "$MIN_QUORUM") || {
|
|
60
|
+
echo "❌ Error: Failed to collect Loop 3 confidence scores"
|
|
61
|
+
echo " Agent IDs: $AGENTS"
|
|
62
|
+
echo " Output: $CONSENSUS"
|
|
63
|
+
exit 1
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# Validate consensus is a valid number
|
|
67
|
+
if ! [[ "$CONSENSUS" =~ ^[0-9]+\.?[0-9]*$ ]]; then
|
|
68
|
+
echo "⚠️ WARNING: Invalid consensus value: $CONSENSUS (expected numeric)"
|
|
69
|
+
echo " Defaulting to 0.0"
|
|
70
|
+
CONSENSUS="0.0"
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
echo "Loop 3 Gate Check:"
|
|
74
|
+
echo " Consensus: $CONSENSUS"
|
|
75
|
+
echo " Threshold: $THRESHOLD"
|
|
76
|
+
echo " Required: >= $THRESHOLD"
|
|
77
|
+
|
|
78
|
+
# Compare consensus to gate threshold
|
|
79
|
+
if (( $(echo "$CONSENSUS >= $THRESHOLD" | bc -l) )); then
|
|
80
|
+
echo "✅ Gate PASSED - Loop 3 self-validation successful"
|
|
81
|
+
|
|
82
|
+
# NOTE: Orchestrator controls Loop 2 spawn timing directly (orchestrate.sh line 520)
|
|
83
|
+
# No signal broadcast needed - Loop 2 agents spawn after this helper returns 0
|
|
84
|
+
|
|
85
|
+
exit 0
|
|
86
|
+
else
|
|
87
|
+
echo "❌ Gate FAILED - Loop 3 needs improvement"
|
|
88
|
+
echo " Gap: $(echo "$THRESHOLD - $CONSENSUS" | bc -l)"
|
|
89
|
+
exit 1
|
|
90
|
+
fi
|