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,247 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
##############################################################################
|
|
4
|
+
# ACE System: Test Data Population Script
|
|
5
|
+
# Generates realistic sample reflections for testing context queries
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# ./populate-test-data.sh [OPTIONS]
|
|
9
|
+
#
|
|
10
|
+
# Options:
|
|
11
|
+
# --db-path Path to SQLite database (default: .artifacts/database/swarm-memory.db)
|
|
12
|
+
# --count Number of reflections to generate (default: 10)
|
|
13
|
+
# --clean Drop existing reflections before inserting
|
|
14
|
+
##############################################################################
|
|
15
|
+
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
# Default values
|
|
19
|
+
DB_PATH="${ACE_DB_PATH:-./.artifacts/database/swarm-memory.db}"
|
|
20
|
+
COUNT=10
|
|
21
|
+
CLEAN=false
|
|
22
|
+
|
|
23
|
+
# Parse arguments
|
|
24
|
+
while [[ $# -gt 0 ]]; do
|
|
25
|
+
case $1 in
|
|
26
|
+
--db-path)
|
|
27
|
+
DB_PATH="$2"
|
|
28
|
+
shift 2
|
|
29
|
+
;;
|
|
30
|
+
--count)
|
|
31
|
+
COUNT="$2"
|
|
32
|
+
shift 2
|
|
33
|
+
;;
|
|
34
|
+
--clean)
|
|
35
|
+
CLEAN=true
|
|
36
|
+
shift
|
|
37
|
+
;;
|
|
38
|
+
*)
|
|
39
|
+
echo "Unknown option: $1"
|
|
40
|
+
exit 1
|
|
41
|
+
;;
|
|
42
|
+
esac
|
|
43
|
+
done
|
|
44
|
+
|
|
45
|
+
echo "=== ACE System: Populating Test Data ==="
|
|
46
|
+
echo "Database: $DB_PATH"
|
|
47
|
+
echo "Reflections to generate: $COUNT"
|
|
48
|
+
|
|
49
|
+
# Clean existing data if requested
|
|
50
|
+
if [[ "$CLEAN" == true ]]; then
|
|
51
|
+
echo "Cleaning existing reflections..."
|
|
52
|
+
sqlite3 "$DB_PATH" "DELETE FROM context_reflections;"
|
|
53
|
+
echo "✓ Existing data cleared"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Sample domains
|
|
57
|
+
DOMAINS=("frontend" "backend" "security" "devops" "database" "api" "testing")
|
|
58
|
+
|
|
59
|
+
# Sample keywords by domain
|
|
60
|
+
declare -A DOMAIN_KEYWORDS=(
|
|
61
|
+
["frontend"]="react,typescript,ui,components,hooks,state-management,routing,error-boundary,forms,validation"
|
|
62
|
+
["backend"]="nodejs,express,api,rest,graphql,authentication,authorization,middleware,error-handling,logging"
|
|
63
|
+
["security"]="jwt,oauth,encryption,csrf,xss,sql-injection,rate-limiting,access-control,audit-logging"
|
|
64
|
+
["devops"]="docker,kubernetes,ci-cd,github-actions,deployment,monitoring,logging,redis,nginx,load-balancing"
|
|
65
|
+
["database"]="postgresql,sql,migrations,indexing,query-optimization,transactions,replication,backup"
|
|
66
|
+
["api"]="rest,graphql,openapi,swagger,versioning,pagination,rate-limiting,caching,webhooks"
|
|
67
|
+
["testing"]="jest,unit-tests,integration-tests,e2e,test-coverage,mocking,fixtures,ci-testing"
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
# Sample strategies by domain
|
|
71
|
+
declare -A DOMAIN_STRATEGIES=(
|
|
72
|
+
["frontend"]='{"title":"Error Boundary Pattern","description":"Wrap components in ErrorBoundary to prevent full app crashes","confidence":0.92,"tags":["react","error-handling","resilience"]}'
|
|
73
|
+
["backend"]='{"title":"JWT + Redis Session","description":"Use short-lived JWT with Redis for token revocation","confidence":0.95,"tags":["authentication","security","session"]}'
|
|
74
|
+
["security"]='{"title":"Rate Limiting Middleware","description":"Implement rate limiting per IP and per user","confidence":0.88,"tags":["security","rate-limiting","ddos"]}'
|
|
75
|
+
["devops"]='{"title":"Blue-Green Deployment","description":"Use blue-green strategy for zero-downtime deploys","confidence":0.90,"tags":["deployment","ci-cd","reliability"]}'
|
|
76
|
+
["database"]='{"title":"Index Optimization","description":"Add covering indexes for common query patterns","confidence":0.93,"tags":["performance","sql","optimization"]}'
|
|
77
|
+
["api"]='{"title":"API Versioning Strategy","description":"Use URL versioning (v1, v2) for backward compatibility","confidence":0.87,"tags":["api","versioning","compatibility"]}'
|
|
78
|
+
["testing"]='{"title":"Test Pyramid Pattern","description":"More unit tests, fewer integration tests, minimal e2e","confidence":0.89,"tags":["testing","strategy","quality"]}'
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Sample anti-patterns by domain
|
|
82
|
+
declare -A DOMAIN_ANTIPATTERNS=(
|
|
83
|
+
["frontend"]='{"title":"Missing Security Headers","description":"Always set CSP, X-Frame-Options, X-Content-Type-Options","severity":"critical","tags":["security","headers","vulnerability"]}'
|
|
84
|
+
["backend"]='{"title":"Long-lived Access Tokens","description":"Avoid tokens that last >15 minutes without refresh","severity":"critical","tags":["security","jwt","session"]}'
|
|
85
|
+
["security"]='{"title":"Unvalidated User Input","description":"Always validate and sanitize user input before processing","severity":"critical","tags":["security","validation","xss"]}'
|
|
86
|
+
["devops"]='{"title":"Missing Health Checks","description":"All services need /health endpoint for monitoring","severity":"warning","tags":["monitoring","reliability","health-checks"]}'
|
|
87
|
+
["database"]='{"title":"N+1 Query Problem","description":"Use JOIN or eager loading instead of multiple queries","severity":"warning","tags":["performance","sql","optimization"]}'
|
|
88
|
+
["api"]='{"title":"Missing API Rate Limits","description":"Always implement rate limiting to prevent abuse","severity":"critical","tags":["security","rate-limiting","api"]}'
|
|
89
|
+
["testing"]='{"title":"Testing Implementation Details","description":"Test behavior, not implementation. Avoid testing internals.","severity":"warning","tags":["testing","best-practices","maintainability"]}'
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
# Function to generate random ID
|
|
93
|
+
generate_id() {
|
|
94
|
+
echo "refl-$(date +%s)-$RANDOM"
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
# Function to get random element from array
|
|
98
|
+
random_element() {
|
|
99
|
+
local array_name=$1[@]
|
|
100
|
+
local array=("${!array_name}")
|
|
101
|
+
echo "${array[$RANDOM % ${#array[@]}]}"
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
# Function to generate reflection
|
|
105
|
+
generate_reflection() {
|
|
106
|
+
local index=$1
|
|
107
|
+
local domain=$(random_element DOMAINS)
|
|
108
|
+
local reflection_type
|
|
109
|
+
local confidence
|
|
110
|
+
local curator_status
|
|
111
|
+
local success_count
|
|
112
|
+
local total_count
|
|
113
|
+
|
|
114
|
+
# Determine reflection type (70% strategy, 20% anti-pattern, 10% edge-case)
|
|
115
|
+
local rand=$((RANDOM % 100))
|
|
116
|
+
if [[ $rand -lt 70 ]]; then
|
|
117
|
+
reflection_type="strategy"
|
|
118
|
+
confidence=$(awk -v min=0.75 -v max=0.98 'BEGIN{srand(); print min+rand()*(max-min)}')
|
|
119
|
+
curator_status="curated"
|
|
120
|
+
success_count=$((RANDOM % 20 + 5))
|
|
121
|
+
total_count=$((success_count + RANDOM % 5))
|
|
122
|
+
elif [[ $rand -lt 90 ]]; then
|
|
123
|
+
reflection_type="anti-pattern"
|
|
124
|
+
confidence=$(awk -v min=0.40 -v max=0.65 'BEGIN{srand(); print min+rand()*(max-min)}')
|
|
125
|
+
curator_status="curated"
|
|
126
|
+
success_count=0
|
|
127
|
+
total_count=$((RANDOM % 10 + 1))
|
|
128
|
+
else
|
|
129
|
+
reflection_type="edge-case"
|
|
130
|
+
confidence=$(awk -v min=0.70 -v max=0.90 'BEGIN{srand(); print min+rand()*(max-min)}')
|
|
131
|
+
curator_status="curated"
|
|
132
|
+
success_count=$((RANDOM % 5))
|
|
133
|
+
total_count=$((success_count + RANDOM % 3))
|
|
134
|
+
fi
|
|
135
|
+
|
|
136
|
+
# Generate IDs
|
|
137
|
+
local id=$(generate_id)
|
|
138
|
+
local task_id="task-${domain}-$(date +%s)-$index"
|
|
139
|
+
local agent_id="agent-${domain}-dev-$((RANDOM % 5 + 1))"
|
|
140
|
+
local swarm_id="swarm-ace-test-001"
|
|
141
|
+
|
|
142
|
+
# Get keywords for domain
|
|
143
|
+
local keywords="${DOMAIN_KEYWORDS[$domain]}"
|
|
144
|
+
|
|
145
|
+
# Build extracted_lessons JSON based on type
|
|
146
|
+
local extracted_lessons
|
|
147
|
+
if [[ "$reflection_type" == "strategy" ]]; then
|
|
148
|
+
extracted_lessons="{\"strategies\":[${DOMAIN_STRATEGIES[$domain]}],\"antiPatterns\":[],\"edgeCases\":[]}"
|
|
149
|
+
elif [[ "$reflection_type" == "anti-pattern" ]]; then
|
|
150
|
+
extracted_lessons="{\"strategies\":[],\"antiPatterns\":[${DOMAIN_ANTIPATTERNS[$domain]}],\"edgeCases\":[]}"
|
|
151
|
+
else
|
|
152
|
+
extracted_lessons="{\"strategies\":[],\"antiPatterns\":[],\"edgeCases\":[{\"title\":\"Edge case in $domain\",\"description\":\"Unexpected behavior discovered\",\"tags\":[\"$domain\",\"edge-case\"]}]}"
|
|
153
|
+
fi
|
|
154
|
+
|
|
155
|
+
# Build metadata JSON
|
|
156
|
+
local metadata="{\"domain\":[\"$domain\"],\"keywords\":[$keywords],\"tags\":[\"$domain\",\"test-data\"],\"severity\":\"medium\"}"
|
|
157
|
+
|
|
158
|
+
# Build execution_trace JSON
|
|
159
|
+
local iterations=$((RANDOM % 3 + 1))
|
|
160
|
+
local execution_trace="{\"iterations\":$iterations,\"loops\":[\"loop3\",\"loop2\"],\"timeline\":[\"start\",\"loop3\",\"loop2\",\"product-owner\",\"complete\"]}"
|
|
161
|
+
|
|
162
|
+
# Build feedback_signals JSON
|
|
163
|
+
local feedback_signals="{\"loop2_feedback\":[\"Good implementation\",\"Add tests\"],\"product_owner_decision\":\"PROCEED\"}"
|
|
164
|
+
|
|
165
|
+
# Calculate created_at (within last 30 days)
|
|
166
|
+
local days_ago=$((RANDOM % 30))
|
|
167
|
+
local created_at=$(date -d "$days_ago days ago" '+%Y-%m-%d %H:%M:%S' 2>/dev/null || date -v -${days_ago}d '+%Y-%m-%d %H:%M:%S')
|
|
168
|
+
|
|
169
|
+
# Insert reflection
|
|
170
|
+
sqlite3 "$DB_PATH" <<EOF
|
|
171
|
+
INSERT INTO context_reflections (
|
|
172
|
+
id,
|
|
173
|
+
reflection_type,
|
|
174
|
+
task_id,
|
|
175
|
+
agent_id,
|
|
176
|
+
swarm_id,
|
|
177
|
+
project_id,
|
|
178
|
+
execution_trace,
|
|
179
|
+
feedback_signals,
|
|
180
|
+
extracted_lessons,
|
|
181
|
+
metadata,
|
|
182
|
+
curator_status,
|
|
183
|
+
confidence,
|
|
184
|
+
success_count,
|
|
185
|
+
total_count,
|
|
186
|
+
created_at,
|
|
187
|
+
processed_at,
|
|
188
|
+
acl_level
|
|
189
|
+
) VALUES (
|
|
190
|
+
'$id',
|
|
191
|
+
'$reflection_type',
|
|
192
|
+
'$task_id',
|
|
193
|
+
'$agent_id',
|
|
194
|
+
'$swarm_id',
|
|
195
|
+
'ace-test-project',
|
|
196
|
+
'$execution_trace',
|
|
197
|
+
'$feedback_signals',
|
|
198
|
+
'$extracted_lessons',
|
|
199
|
+
'$metadata',
|
|
200
|
+
'$curator_status',
|
|
201
|
+
$confidence,
|
|
202
|
+
$success_count,
|
|
203
|
+
$total_count,
|
|
204
|
+
'$created_at',
|
|
205
|
+
'$created_at',
|
|
206
|
+
3
|
|
207
|
+
);
|
|
208
|
+
EOF
|
|
209
|
+
|
|
210
|
+
echo "✓ Generated reflection $index: $reflection_type ($domain, confidence=$confidence)"
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
# Generate reflections
|
|
214
|
+
for i in $(seq 1 "$COUNT"); do
|
|
215
|
+
generate_reflection "$i"
|
|
216
|
+
# Small delay to ensure unique timestamps
|
|
217
|
+
sleep 0.1
|
|
218
|
+
done
|
|
219
|
+
|
|
220
|
+
# Show summary
|
|
221
|
+
echo ""
|
|
222
|
+
echo "=== Test Data Summary ==="
|
|
223
|
+
sqlite3 "$DB_PATH" <<'EOF'
|
|
224
|
+
SELECT
|
|
225
|
+
reflection_type,
|
|
226
|
+
COUNT(*) as count,
|
|
227
|
+
ROUND(AVG(confidence), 2) as avg_confidence,
|
|
228
|
+
SUM(success_count) as total_successes,
|
|
229
|
+
SUM(total_count) as total_uses
|
|
230
|
+
FROM context_reflections
|
|
231
|
+
GROUP BY reflection_type;
|
|
232
|
+
EOF
|
|
233
|
+
|
|
234
|
+
echo ""
|
|
235
|
+
echo "=== Domain Distribution ==="
|
|
236
|
+
sqlite3 "$DB_PATH" <<'EOF'
|
|
237
|
+
SELECT
|
|
238
|
+
json_extract(metadata, '$.domain[0]') as domain,
|
|
239
|
+
COUNT(*) as count
|
|
240
|
+
FROM context_reflections
|
|
241
|
+
GROUP BY domain
|
|
242
|
+
ORDER BY count DESC;
|
|
243
|
+
EOF
|
|
244
|
+
|
|
245
|
+
echo ""
|
|
246
|
+
echo "✓ Test data population complete!"
|
|
247
|
+
echo "Total reflections: $(sqlite3 "$DB_PATH" 'SELECT COUNT(*) FROM context_reflections;')"
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
##############################################################################
|
|
4
|
+
# ACE System: Database Migration Runner
|
|
5
|
+
# Applies schema migrations to SQLite database
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# ./run-migration.sh [OPTIONS]
|
|
9
|
+
#
|
|
10
|
+
# Options:
|
|
11
|
+
# --db-path Path to SQLite database (default: .artifacts/database/swarm-memory.db)
|
|
12
|
+
# --migration Specific migration file to run (default: all pending)
|
|
13
|
+
# --dry-run Show SQL without executing
|
|
14
|
+
# --rollback Rollback last migration (requires version tracking)
|
|
15
|
+
# --force Force migration even if already applied
|
|
16
|
+
##############################################################################
|
|
17
|
+
|
|
18
|
+
set -euo pipefail
|
|
19
|
+
|
|
20
|
+
# Default values
|
|
21
|
+
DB_PATH="${ACE_DB_PATH:-./.artifacts/database/swarm-memory.db}"
|
|
22
|
+
MIGRATION=""
|
|
23
|
+
DRY_RUN=false
|
|
24
|
+
ROLLBACK=false
|
|
25
|
+
FORCE=false
|
|
26
|
+
|
|
27
|
+
# Parse arguments
|
|
28
|
+
while [[ $# -gt 0 ]]; do
|
|
29
|
+
case $1 in
|
|
30
|
+
--db-path)
|
|
31
|
+
DB_PATH="$2"
|
|
32
|
+
shift 2
|
|
33
|
+
;;
|
|
34
|
+
--migration)
|
|
35
|
+
MIGRATION="$2"
|
|
36
|
+
shift 2
|
|
37
|
+
;;
|
|
38
|
+
--dry-run)
|
|
39
|
+
DRY_RUN=true
|
|
40
|
+
shift
|
|
41
|
+
;;
|
|
42
|
+
--rollback)
|
|
43
|
+
ROLLBACK=true
|
|
44
|
+
shift
|
|
45
|
+
;;
|
|
46
|
+
--force)
|
|
47
|
+
FORCE=true
|
|
48
|
+
shift
|
|
49
|
+
;;
|
|
50
|
+
*)
|
|
51
|
+
echo "Unknown option: $1"
|
|
52
|
+
echo "Usage: $0 [--db-path PATH] [--migration FILE] [--dry-run] [--rollback] [--force]"
|
|
53
|
+
exit 1
|
|
54
|
+
;;
|
|
55
|
+
esac
|
|
56
|
+
done
|
|
57
|
+
|
|
58
|
+
# Get script directory
|
|
59
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
60
|
+
MIGRATION_DIR="$SCRIPT_DIR"
|
|
61
|
+
|
|
62
|
+
# Colors for output
|
|
63
|
+
RED='\033[0;31m'
|
|
64
|
+
GREEN='\033[0;32m'
|
|
65
|
+
YELLOW='\033[1;33m'
|
|
66
|
+
BLUE='\033[0;34m'
|
|
67
|
+
NC='\033[0m' # No Color
|
|
68
|
+
|
|
69
|
+
# Logging functions
|
|
70
|
+
log_info() {
|
|
71
|
+
echo -e "${BLUE}[INFO]${NC} $1"
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
log_success() {
|
|
75
|
+
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
log_warning() {
|
|
79
|
+
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
log_error() {
|
|
83
|
+
echo -e "${RED}[ERROR]${NC} $1"
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
# Check if database exists
|
|
87
|
+
if [[ ! -f "$DB_PATH" ]]; then
|
|
88
|
+
log_warning "Database does not exist: $DB_PATH"
|
|
89
|
+
log_info "Creating new database..."
|
|
90
|
+
mkdir -p "$(dirname "$DB_PATH")"
|
|
91
|
+
touch "$DB_PATH"
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# Check if sqlite3 is available
|
|
95
|
+
if ! command -v sqlite3 &> /dev/null; then
|
|
96
|
+
log_error "sqlite3 command not found. Please install SQLite."
|
|
97
|
+
exit 1
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# Get current schema version
|
|
101
|
+
get_current_version() {
|
|
102
|
+
sqlite3 "$DB_PATH" "SELECT COALESCE(MAX(version), 0) FROM schema_version;" 2>/dev/null || echo "0"
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
# Check if table exists
|
|
106
|
+
table_exists() {
|
|
107
|
+
local table_name="$1"
|
|
108
|
+
sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table_name';" 2>/dev/null || echo "0"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
# Apply migration
|
|
112
|
+
apply_migration() {
|
|
113
|
+
local migration_file="$1"
|
|
114
|
+
local migration_name=$(basename "$migration_file" .sql)
|
|
115
|
+
|
|
116
|
+
log_info "Applying migration: $migration_name"
|
|
117
|
+
|
|
118
|
+
if [[ "$DRY_RUN" == true ]]; then
|
|
119
|
+
log_info "DRY RUN - Would execute:"
|
|
120
|
+
cat "$migration_file"
|
|
121
|
+
return 0
|
|
122
|
+
fi
|
|
123
|
+
|
|
124
|
+
# Execute migration in transaction
|
|
125
|
+
if sqlite3 "$DB_PATH" < "$migration_file" 2>&1; then
|
|
126
|
+
log_success "Migration applied: $migration_name"
|
|
127
|
+
return 0
|
|
128
|
+
else
|
|
129
|
+
log_error "Failed to apply migration: $migration_name"
|
|
130
|
+
return 1
|
|
131
|
+
fi
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
# Main migration logic
|
|
135
|
+
main() {
|
|
136
|
+
log_info "=== ACE System Database Migration ==="
|
|
137
|
+
log_info "Database: $DB_PATH"
|
|
138
|
+
|
|
139
|
+
# Check if schema_version table exists
|
|
140
|
+
if [[ $(table_exists "schema_version") -eq 0 ]]; then
|
|
141
|
+
log_warning "schema_version table does not exist. Creating..."
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
# Get current version
|
|
145
|
+
CURRENT_VERSION=$(get_current_version)
|
|
146
|
+
log_info "Current schema version: $CURRENT_VERSION"
|
|
147
|
+
|
|
148
|
+
# Handle rollback
|
|
149
|
+
if [[ "$ROLLBACK" == true ]]; then
|
|
150
|
+
log_error "Rollback not implemented yet. Manual rollback required."
|
|
151
|
+
log_info "To rollback manually:"
|
|
152
|
+
log_info " 1. Backup database: cp $DB_PATH ${DB_PATH}.backup"
|
|
153
|
+
log_info " 2. Drop tables: sqlite3 $DB_PATH 'DROP TABLE context_reflections;'"
|
|
154
|
+
log_info " 3. Re-run migration: $0"
|
|
155
|
+
exit 1
|
|
156
|
+
fi
|
|
157
|
+
|
|
158
|
+
# Determine migrations to run
|
|
159
|
+
if [[ -n "$MIGRATION" ]]; then
|
|
160
|
+
# Run specific migration
|
|
161
|
+
MIGRATION_FILE="$MIGRATION_DIR/$MIGRATION"
|
|
162
|
+
if [[ ! -f "$MIGRATION_FILE" ]]; then
|
|
163
|
+
log_error "Migration file not found: $MIGRATION_FILE"
|
|
164
|
+
exit 1
|
|
165
|
+
fi
|
|
166
|
+
|
|
167
|
+
apply_migration "$MIGRATION_FILE" || exit 1
|
|
168
|
+
else
|
|
169
|
+
# Run all pending migrations
|
|
170
|
+
log_info "Looking for migrations in: $MIGRATION_DIR"
|
|
171
|
+
|
|
172
|
+
MIGRATION_COUNT=0
|
|
173
|
+
for migration_file in "$MIGRATION_DIR"/*.sql; do
|
|
174
|
+
if [[ -f "$migration_file" ]]; then
|
|
175
|
+
# Extract version number from filename (e.g., 001-create-context-reflections.sql -> 1)
|
|
176
|
+
VERSION=$(basename "$migration_file" | grep -oP '^\d+' || echo "0")
|
|
177
|
+
|
|
178
|
+
if [[ "$FORCE" == true ]] || [[ "$VERSION" -gt "$CURRENT_VERSION" ]]; then
|
|
179
|
+
apply_migration "$migration_file" || exit 1
|
|
180
|
+
((MIGRATION_COUNT++))
|
|
181
|
+
else
|
|
182
|
+
log_info "Skipping already applied migration: $(basename "$migration_file")"
|
|
183
|
+
fi
|
|
184
|
+
fi
|
|
185
|
+
done
|
|
186
|
+
|
|
187
|
+
if [[ $MIGRATION_COUNT -eq 0 ]]; then
|
|
188
|
+
log_success "Database is up to date. No migrations applied."
|
|
189
|
+
else
|
|
190
|
+
log_success "Applied $MIGRATION_COUNT migration(s)."
|
|
191
|
+
fi
|
|
192
|
+
fi
|
|
193
|
+
|
|
194
|
+
# Verify migration
|
|
195
|
+
log_info "=== Migration Verification ==="
|
|
196
|
+
|
|
197
|
+
# Check if context_reflections table exists
|
|
198
|
+
if [[ $(table_exists "context_reflections") -eq 1 ]]; then
|
|
199
|
+
log_success "✓ context_reflections table exists"
|
|
200
|
+
|
|
201
|
+
# Get row count
|
|
202
|
+
ROW_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM context_reflections;" 2>/dev/null || echo "0")
|
|
203
|
+
log_info " Rows: $ROW_COUNT"
|
|
204
|
+
|
|
205
|
+
# Check indexes
|
|
206
|
+
INDEX_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM sqlite_master WHERE type='index' AND tbl_name='context_reflections';" 2>/dev/null || echo "0")
|
|
207
|
+
log_success "✓ $INDEX_COUNT indexes created"
|
|
208
|
+
else
|
|
209
|
+
log_error "✗ context_reflections table not found"
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
# Check if ace_telemetry table exists
|
|
213
|
+
if [[ $(table_exists "ace_telemetry") -eq 1 ]]; then
|
|
214
|
+
log_success "✓ ace_telemetry table exists"
|
|
215
|
+
else
|
|
216
|
+
log_warning "✗ ace_telemetry table not found"
|
|
217
|
+
fi
|
|
218
|
+
|
|
219
|
+
# Check views
|
|
220
|
+
VIEW_COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM sqlite_master WHERE type='view';" 2>/dev/null || echo "0")
|
|
221
|
+
log_success "✓ $VIEW_COUNT views created"
|
|
222
|
+
|
|
223
|
+
# Final version check
|
|
224
|
+
FINAL_VERSION=$(get_current_version)
|
|
225
|
+
log_info "Final schema version: $FINAL_VERSION"
|
|
226
|
+
|
|
227
|
+
log_success "=== Migration Complete ==="
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
# Run main function
|
|
231
|
+
main
|