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,150 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Webapp Testing Skill - Initialize Storage
|
|
3
|
+
# Purpose: Create SQLite schema and directory structure for screenshot management
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-.." && pwd)"
|
|
9
|
+
cd "$PROJECT_ROOT"
|
|
10
|
+
|
|
11
|
+
FORCE=false
|
|
12
|
+
|
|
13
|
+
# Parse arguments
|
|
14
|
+
while [[ $# -gt 0 ]]; do
|
|
15
|
+
case $1 in
|
|
16
|
+
--force) FORCE=true; shift ;;
|
|
17
|
+
*) echo "Unknown parameter: $1"; exit 1 ;;
|
|
18
|
+
esac
|
|
19
|
+
done
|
|
20
|
+
|
|
21
|
+
DB_PATH="${HOME}/.claude/memory/adaptive-context.db"
|
|
22
|
+
|
|
23
|
+
echo "Initializing webapp-testing storage..." >&2
|
|
24
|
+
|
|
25
|
+
# Create directory structure
|
|
26
|
+
echo "Creating directory structure..." >&2
|
|
27
|
+
mkdir -p .screenshots/baselines
|
|
28
|
+
mkdir -p .screenshots/current
|
|
29
|
+
mkdir -p .screenshots/diffs
|
|
30
|
+
mkdir -p .screenshots/archive
|
|
31
|
+
echo "✅ Directories created" >&2
|
|
32
|
+
|
|
33
|
+
# Check if tables already exist
|
|
34
|
+
TABLES_EXIST=$(sqlite3 "$DB_PATH" \
|
|
35
|
+
"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name IN ('webapp_screenshots', 'screenshot_audit_log');" 2>/dev/null || echo "0")
|
|
36
|
+
|
|
37
|
+
if [ "$TABLES_EXIST" -eq 2 ] && [ "$FORCE" = false ]; then
|
|
38
|
+
echo "⚠️ SQLite tables already exist. Use --force to recreate (will drop existing data)" >&2
|
|
39
|
+
exit 0
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if [ "$FORCE" = true ] && [ "$TABLES_EXIST" -gt 0 ]; then
|
|
43
|
+
echo "⚠️ --force flag set. Dropping existing tables..." >&2
|
|
44
|
+
sqlite3 "$DB_PATH" <<EOF
|
|
45
|
+
DROP TABLE IF EXISTS webapp_screenshots;
|
|
46
|
+
DROP TABLE IF EXISTS screenshot_audit_log;
|
|
47
|
+
EOF
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
# Create SQLite schema
|
|
51
|
+
echo "Creating SQLite schema..." >&2
|
|
52
|
+
sqlite3 "$DB_PATH" <<'EOF'
|
|
53
|
+
-- Main screenshots table
|
|
54
|
+
CREATE TABLE IF NOT EXISTS webapp_screenshots (
|
|
55
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
56
|
+
screenshot_key TEXT UNIQUE NOT NULL,
|
|
57
|
+
project TEXT NOT NULL,
|
|
58
|
+
component TEXT NOT NULL,
|
|
59
|
+
viewport TEXT NOT NULL,
|
|
60
|
+
state TEXT NOT NULL,
|
|
61
|
+
variant TEXT NOT NULL DEFAULT 'default',
|
|
62
|
+
file_path TEXT NOT NULL,
|
|
63
|
+
file_hash TEXT NOT NULL,
|
|
64
|
+
baseline BOOLEAN DEFAULT 0,
|
|
65
|
+
captured_at INTEGER NOT NULL,
|
|
66
|
+
task_id TEXT,
|
|
67
|
+
agent_id TEXT,
|
|
68
|
+
metadata TEXT,
|
|
69
|
+
UNIQUE(project, component, viewport, state, variant, baseline)
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
-- Indexes for efficient querying
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_baseline ON webapp_screenshots(project, component, viewport, state, variant, baseline);
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_task ON webapp_screenshots(task_id);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_component ON webapp_screenshots(project, component);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_captured ON webapp_screenshots(captured_at DESC);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_screenshot_key ON webapp_screenshots(screenshot_key);
|
|
78
|
+
|
|
79
|
+
-- Audit log table
|
|
80
|
+
CREATE TABLE IF NOT EXISTS screenshot_audit_log (
|
|
81
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
82
|
+
screenshot_key TEXT NOT NULL,
|
|
83
|
+
action TEXT NOT NULL,
|
|
84
|
+
reason TEXT,
|
|
85
|
+
old_file_hash TEXT,
|
|
86
|
+
new_file_hash TEXT,
|
|
87
|
+
approved_by TEXT,
|
|
88
|
+
created_at INTEGER NOT NULL,
|
|
89
|
+
task_id TEXT,
|
|
90
|
+
metadata TEXT
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
-- Indexes for audit log
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_audit_screenshot ON screenshot_audit_log(screenshot_key);
|
|
95
|
+
CREATE INDEX IF NOT EXISTS idx_audit_created ON screenshot_audit_log(created_at DESC);
|
|
96
|
+
CREATE INDEX IF NOT EXISTS idx_audit_task ON screenshot_audit_log(task_id);
|
|
97
|
+
CREATE INDEX IF NOT EXISTS idx_audit_action ON screenshot_audit_log(action);
|
|
98
|
+
EOF
|
|
99
|
+
|
|
100
|
+
echo "✅ SQLite schema created" >&2
|
|
101
|
+
|
|
102
|
+
# Verify tables created
|
|
103
|
+
VERIFY=$(sqlite3 "$DB_PATH" \
|
|
104
|
+
"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name IN ('webapp_screenshots', 'screenshot_audit_log');" 2>/dev/null)
|
|
105
|
+
|
|
106
|
+
if [ "$VERIFY" -eq 2 ]; then
|
|
107
|
+
echo "✅ Verification passed: 2 tables created" >&2
|
|
108
|
+
else
|
|
109
|
+
echo "❌ Verification failed: Expected 2 tables, found $VERIFY" >&2
|
|
110
|
+
exit 1
|
|
111
|
+
fi
|
|
112
|
+
|
|
113
|
+
# Create .gitignore for ephemeral directories
|
|
114
|
+
cat > .screenshots/.gitignore <<'EOF'
|
|
115
|
+
# Ephemeral screenshot directories (not version controlled)
|
|
116
|
+
current/
|
|
117
|
+
diffs/
|
|
118
|
+
archive/
|
|
119
|
+
|
|
120
|
+
# Version control baselines only
|
|
121
|
+
!baselines/
|
|
122
|
+
EOF
|
|
123
|
+
|
|
124
|
+
echo "✅ .gitignore created for .screenshots/" >&2
|
|
125
|
+
|
|
126
|
+
# Output summary
|
|
127
|
+
cat <<EOF
|
|
128
|
+
|
|
129
|
+
✅ Webapp-testing storage initialized successfully
|
|
130
|
+
|
|
131
|
+
Directory Structure:
|
|
132
|
+
.screenshots/
|
|
133
|
+
├── baselines/ (version controlled - reference images)
|
|
134
|
+
├── current/ (ephemeral - test captures)
|
|
135
|
+
├── diffs/ (ephemeral - comparison outputs)
|
|
136
|
+
└── archive/ (ephemeral - historical captures)
|
|
137
|
+
|
|
138
|
+
SQLite Tables:
|
|
139
|
+
- webapp_screenshots (screenshot metadata and file references)
|
|
140
|
+
- screenshot_audit_log (baseline change audit trail)
|
|
141
|
+
|
|
142
|
+
Database Location:
|
|
143
|
+
${DB_PATH}
|
|
144
|
+
|
|
145
|
+
Next Steps:
|
|
146
|
+
1. Capture screenshot: ./.claude/skills/cfn-webapp-testing/capture-screenshot.sh --help
|
|
147
|
+
2. Set baseline: ./.claude/skills/cfn-webapp-testing/set-baseline.sh --help
|
|
148
|
+
3. Compare screenshots: ./.claude/skills/cfn-webapp-testing/compare-screenshots.sh --help
|
|
149
|
+
|
|
150
|
+
EOF
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Webapp Testing Skill - Set Baseline
|
|
3
|
+
# Purpose: Set a captured screenshot as the baseline reference for future comparisons
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-.." && pwd)"
|
|
9
|
+
cd "$PROJECT_ROOT"
|
|
10
|
+
|
|
11
|
+
REASON=""
|
|
12
|
+
|
|
13
|
+
# Parse arguments
|
|
14
|
+
while [[ $# -gt 0 ]]; do
|
|
15
|
+
case $1 in
|
|
16
|
+
--screenshot-key) SCREENSHOT_KEY="$2"; shift 2 ;;
|
|
17
|
+
--reason) REASON="$2"; shift 2 ;;
|
|
18
|
+
--current-file) CURRENT_FILE="$2"; shift 2 ;; # Optional: explicit file path
|
|
19
|
+
*) echo "Unknown parameter: $1"; exit 1 ;;
|
|
20
|
+
esac
|
|
21
|
+
done
|
|
22
|
+
|
|
23
|
+
# Validate required parameters
|
|
24
|
+
if [ -z "$SCREENSHOT_KEY" ]; then
|
|
25
|
+
echo "Error: Missing required parameter --screenshot-key" >&2
|
|
26
|
+
echo "Usage: $0 --screenshot-key <key> [--reason <reason>] [--current-file <path>]" >&2
|
|
27
|
+
echo "" >&2
|
|
28
|
+
echo "Required:" >&2
|
|
29
|
+
echo " --screenshot-key Screenshot identifier (e.g., 'auth-system/login-form/1920x1080/default/light-mode')" >&2
|
|
30
|
+
echo "" >&2
|
|
31
|
+
echo "Optional:" >&2
|
|
32
|
+
echo " --reason Reason for setting baseline (for audit trail)" >&2
|
|
33
|
+
echo " --current-file Explicit path to screenshot file (default: auto-detect latest)" >&2
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
DB_PATH="${HOME}/.claude/memory/adaptive-context.db"
|
|
38
|
+
|
|
39
|
+
# Parse screenshot key components
|
|
40
|
+
IFS='/' read -r PROJECT COMPONENT VIEWPORT STATE VARIANT <<< "$SCREENSHOT_KEY"
|
|
41
|
+
|
|
42
|
+
if [ -z "$PROJECT" ] || [ -z "$COMPONENT" ] || [ -z "$VIEWPORT" ] || [ -z "$STATE" ] || [ -z "$VARIANT" ]; then
|
|
43
|
+
echo "Error: Invalid screenshot key format. Expected: project/component/viewport/state/variant" >&2
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Get current screenshot from SQLite (if not explicitly provided)
|
|
48
|
+
if [ -z "$CURRENT_FILE" ]; then
|
|
49
|
+
CURRENT_PATH=$(sqlite3 "$DB_PATH" \
|
|
50
|
+
"SELECT file_path FROM webapp_screenshots WHERE screenshot_key = '${SCREENSHOT_KEY}' AND baseline = 0 ORDER BY captured_at DESC LIMIT 1" 2>/dev/null)
|
|
51
|
+
|
|
52
|
+
if [ -z "$CURRENT_PATH" ]; then
|
|
53
|
+
echo "Error: No current screenshot found for key: $SCREENSHOT_KEY" >&2
|
|
54
|
+
echo "Hint: Run capture-screenshot.sh first to create a capture" >&2
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
else
|
|
58
|
+
CURRENT_PATH="$CURRENT_FILE"
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# Verify current screenshot exists
|
|
62
|
+
if [ ! -f "$CURRENT_PATH" ]; then
|
|
63
|
+
echo "Error: Current screenshot file not found: $CURRENT_PATH" >&2
|
|
64
|
+
exit 1
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# Create baseline directory structure
|
|
68
|
+
BASELINE_DIR=".screenshots/baselines/${PROJECT}/${COMPONENT}/${VIEWPORT}/${STATE}"
|
|
69
|
+
mkdir -p "$BASELINE_DIR"
|
|
70
|
+
BASELINE_PATH="${BASELINE_DIR}/${VARIANT}.png"
|
|
71
|
+
|
|
72
|
+
echo "Setting baseline:" >&2
|
|
73
|
+
echo " Source: $CURRENT_PATH" >&2
|
|
74
|
+
echo " Baseline: $BASELINE_PATH" >&2
|
|
75
|
+
|
|
76
|
+
# Check if baseline already exists
|
|
77
|
+
if [ -f "$BASELINE_PATH" ]; then
|
|
78
|
+
echo "Warning: Baseline already exists at $BASELINE_PATH" >&2
|
|
79
|
+
echo "This will overwrite the existing baseline. Continue? (y/n)" >&2
|
|
80
|
+
read -r CONFIRM
|
|
81
|
+
if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then
|
|
82
|
+
echo "Aborted" >&2
|
|
83
|
+
exit 1
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
# Archive old baseline
|
|
87
|
+
ARCHIVE_DIR=".screenshots/archive/$(date +%Y-%m)"
|
|
88
|
+
ARCHIVE_PATH="${ARCHIVE_DIR}/${PROJECT}/${COMPONENT}/${VIEWPORT}/${STATE}/${VARIANT}_$(date +%Y%m%d%H%M%S).png"
|
|
89
|
+
mkdir -p "$(dirname "$ARCHIVE_PATH")"
|
|
90
|
+
cp "$BASELINE_PATH" "$ARCHIVE_PATH"
|
|
91
|
+
echo " Archived: $ARCHIVE_PATH" >&2
|
|
92
|
+
|
|
93
|
+
# Get old hash for audit log
|
|
94
|
+
OLD_FILE_HASH=$(sha256sum "$BASELINE_PATH" | awk '{print $1}')
|
|
95
|
+
else
|
|
96
|
+
OLD_FILE_HASH=""
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
# Copy to baselines directory (remove timestamp from filename)
|
|
100
|
+
cp "$CURRENT_PATH" "$BASELINE_PATH"
|
|
101
|
+
|
|
102
|
+
# Calculate file hash
|
|
103
|
+
FILE_HASH=$(sha256sum "$BASELINE_PATH" | awk '{print $1}')
|
|
104
|
+
|
|
105
|
+
# Get metadata from current screenshot
|
|
106
|
+
METADATA=$(sqlite3 "$DB_PATH" \
|
|
107
|
+
"SELECT metadata FROM webapp_screenshots WHERE file_path = '${CURRENT_PATH}' LIMIT 1" 2>/dev/null || echo '{}')
|
|
108
|
+
|
|
109
|
+
TASK_ID=$(sqlite3 "$DB_PATH" \
|
|
110
|
+
"SELECT task_id FROM webapp_screenshots WHERE file_path = '${CURRENT_PATH}' LIMIT 1" 2>/dev/null || echo '')
|
|
111
|
+
|
|
112
|
+
AGENT_ID=$(sqlite3 "$DB_PATH" \
|
|
113
|
+
"SELECT agent_id FROM webapp_screenshots WHERE file_path = '${CURRENT_PATH}' LIMIT 1" 2>/dev/null || echo '')
|
|
114
|
+
|
|
115
|
+
# Update SQLite (set as baseline)
|
|
116
|
+
# First check if baseline entry already exists
|
|
117
|
+
BASELINE_EXISTS=$(sqlite3 "$DB_PATH" \
|
|
118
|
+
"SELECT COUNT(*) FROM webapp_screenshots WHERE screenshot_key = '${SCREENSHOT_KEY}' AND baseline = 1" 2>/dev/null || echo "0")
|
|
119
|
+
|
|
120
|
+
if [ "$BASELINE_EXISTS" -gt 0 ]; then
|
|
121
|
+
# Update existing baseline
|
|
122
|
+
sqlite3 "$DB_PATH" <<EOF
|
|
123
|
+
UPDATE webapp_screenshots
|
|
124
|
+
SET file_path = '${BASELINE_PATH}',
|
|
125
|
+
file_hash = 'sha256:${FILE_HASH}',
|
|
126
|
+
captured_at = $(date +%s),
|
|
127
|
+
task_id = '${TASK_ID}',
|
|
128
|
+
agent_id = '${AGENT_ID}',
|
|
129
|
+
metadata = '${METADATA}'
|
|
130
|
+
WHERE screenshot_key = '${SCREENSHOT_KEY}' AND baseline = 1;
|
|
131
|
+
EOF
|
|
132
|
+
ACTION="updated"
|
|
133
|
+
else
|
|
134
|
+
# Insert new baseline entry
|
|
135
|
+
sqlite3 "$DB_PATH" <<EOF
|
|
136
|
+
INSERT INTO webapp_screenshots (
|
|
137
|
+
screenshot_key, project, component, viewport, state, variant,
|
|
138
|
+
file_path, file_hash, baseline, captured_at, task_id, agent_id, metadata
|
|
139
|
+
) VALUES (
|
|
140
|
+
'${SCREENSHOT_KEY}',
|
|
141
|
+
'${PROJECT}',
|
|
142
|
+
'${COMPONENT}',
|
|
143
|
+
'${VIEWPORT}',
|
|
144
|
+
'${STATE}',
|
|
145
|
+
'${VARIANT}',
|
|
146
|
+
'${BASELINE_PATH}',
|
|
147
|
+
'sha256:${FILE_HASH}',
|
|
148
|
+
1,
|
|
149
|
+
$(date +%s),
|
|
150
|
+
'${TASK_ID}',
|
|
151
|
+
'${AGENT_ID}',
|
|
152
|
+
'${METADATA}'
|
|
153
|
+
);
|
|
154
|
+
EOF
|
|
155
|
+
ACTION="created"
|
|
156
|
+
fi
|
|
157
|
+
|
|
158
|
+
# Insert audit log entry
|
|
159
|
+
REASON_ESCAPED=$(echo "$REASON" | sed "s/'/''/g") # Escape single quotes for SQL
|
|
160
|
+
sqlite3 "$DB_PATH" <<EOF
|
|
161
|
+
INSERT INTO screenshot_audit_log (
|
|
162
|
+
screenshot_key, action, reason, old_file_hash, new_file_hash, approved_by, created_at, task_id
|
|
163
|
+
) VALUES (
|
|
164
|
+
'${SCREENSHOT_KEY}',
|
|
165
|
+
'${ACTION}',
|
|
166
|
+
'${REASON_ESCAPED}',
|
|
167
|
+
${OLD_FILE_HASH:+'sha256:$OLD_FILE_HASH'}${OLD_FILE_HASH:-NULL},
|
|
168
|
+
'sha256:${FILE_HASH}',
|
|
169
|
+
'${AGENT_ID:-system}',
|
|
170
|
+
$(date +%s),
|
|
171
|
+
'${TASK_ID}'
|
|
172
|
+
);
|
|
173
|
+
EOF
|
|
174
|
+
|
|
175
|
+
# Clear Redis baseline cache
|
|
176
|
+
redis-cli del "screenshot:baseline:${SCREENSHOT_KEY}" > /dev/null 2>&1 || \
|
|
177
|
+
echo "Warning: Failed to clear Redis cache" >&2
|
|
178
|
+
|
|
179
|
+
# Cache new baseline hash (TTL: 24 hours)
|
|
180
|
+
redis-cli setex "screenshot:baseline:${SCREENSHOT_KEY}" 86400 "sha256:${FILE_HASH}" > /dev/null 2>&1
|
|
181
|
+
|
|
182
|
+
# Output result
|
|
183
|
+
cat <<EOF | jq '.'
|
|
184
|
+
{
|
|
185
|
+
"status": "baseline-set",
|
|
186
|
+
"action": "${ACTION}",
|
|
187
|
+
"screenshot_key": "${SCREENSHOT_KEY}",
|
|
188
|
+
"baseline_path": "${BASELINE_PATH}",
|
|
189
|
+
"file_hash": "sha256:${FILE_HASH}",
|
|
190
|
+
"reason": "${REASON}",
|
|
191
|
+
"archived_previous": ${OLD_FILE_HASH:+true}${OLD_FILE_HASH:-false},
|
|
192
|
+
"created_at": $(date +%s)
|
|
193
|
+
}
|
|
194
|
+
EOF
|
|
195
|
+
|
|
196
|
+
echo "✅ Baseline ${ACTION}: $SCREENSHOT_KEY" >&2
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Webapp Testing Skill - Test Suite
|
|
3
|
+
# Purpose: Validate webapp-testing skill functionality
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-.." && pwd)"
|
|
9
|
+
cd "$PROJECT_ROOT"
|
|
10
|
+
|
|
11
|
+
# Colors for output
|
|
12
|
+
RED='\033[0;31m'
|
|
13
|
+
GREEN='\033[0;32m'
|
|
14
|
+
YELLOW='\033[1;33m'
|
|
15
|
+
NC='\033[0m' # No Color
|
|
16
|
+
|
|
17
|
+
TESTS_PASSED=0
|
|
18
|
+
TESTS_FAILED=0
|
|
19
|
+
TESTS_SKIPPED=0
|
|
20
|
+
|
|
21
|
+
# Test result tracking
|
|
22
|
+
test_result() {
|
|
23
|
+
local TEST_NAME="$1"
|
|
24
|
+
local STATUS="$2"
|
|
25
|
+
local MESSAGE="$3"
|
|
26
|
+
|
|
27
|
+
case "$STATUS" in
|
|
28
|
+
PASS)
|
|
29
|
+
echo -e "${GREEN}✓${NC} $TEST_NAME"
|
|
30
|
+
TESTS_PASSED=$((TESTS_PASSED + 1))
|
|
31
|
+
;;
|
|
32
|
+
FAIL)
|
|
33
|
+
echo -e "${RED}✗${NC} $TEST_NAME: $MESSAGE"
|
|
34
|
+
TESTS_FAILED=$((TESTS_FAILED + 1))
|
|
35
|
+
;;
|
|
36
|
+
SKIP)
|
|
37
|
+
echo -e "${YELLOW}⊘${NC} $TEST_NAME: $MESSAGE"
|
|
38
|
+
TESTS_SKIPPED=$((TESTS_SKIPPED + 1))
|
|
39
|
+
;;
|
|
40
|
+
esac
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
echo "=========================================="
|
|
44
|
+
echo "Webapp Testing Skill - Test Suite"
|
|
45
|
+
echo "=========================================="
|
|
46
|
+
echo ""
|
|
47
|
+
|
|
48
|
+
# Test 1: Storage Initialization
|
|
49
|
+
echo "Test 1: Storage Initialization"
|
|
50
|
+
if "$SCRIPT_DIR/init-storage.sh" --force >/dev/null 2>&1; then
|
|
51
|
+
if [ -d ".screenshots/baselines" ] && [ -d ".screenshots/current" ]; then
|
|
52
|
+
test_result "Storage initialization" "PASS"
|
|
53
|
+
else
|
|
54
|
+
test_result "Storage initialization" "FAIL" "Directories not created"
|
|
55
|
+
fi
|
|
56
|
+
else
|
|
57
|
+
test_result "Storage initialization" "FAIL" "init-storage.sh failed"
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
# Test 2: SQLite Schema Validation
|
|
61
|
+
echo "Test 2: SQLite Schema Validation"
|
|
62
|
+
DB_PATH="${HOME}/.claude/memory/adaptive-context.db"
|
|
63
|
+
TABLE_COUNT=$(sqlite3 "$DB_PATH" \
|
|
64
|
+
"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name IN ('webapp_screenshots', 'screenshot_audit_log');" 2>/dev/null)
|
|
65
|
+
|
|
66
|
+
if [ "$TABLE_COUNT" -eq 2 ]; then
|
|
67
|
+
test_result "SQLite schema creation" "PASS"
|
|
68
|
+
else
|
|
69
|
+
test_result "SQLite schema creation" "FAIL" "Expected 2 tables, found $TABLE_COUNT"
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
# Test 3: Playwright Availability
|
|
73
|
+
echo "Test 3: Playwright Availability"
|
|
74
|
+
if command -v npx >/dev/null 2>&1 && npx playwright --version >/dev/null 2>&1; then
|
|
75
|
+
test_result "Playwright installation" "PASS"
|
|
76
|
+
else
|
|
77
|
+
test_result "Playwright installation" "SKIP" "Playwright not installed (run: npx playwright install chromium)"
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# Test 4: Node Dependencies Check
|
|
81
|
+
echo "Test 4: Node Dependencies Check"
|
|
82
|
+
NODE_DEPS_MISSING=0
|
|
83
|
+
for PKG in playwright pngjs pixelmatch; do
|
|
84
|
+
if ! node -e "require('$PKG')" 2>/dev/null; then
|
|
85
|
+
test_result "$PKG dependency" "SKIP" "Not installed (run: npm install $PKG)"
|
|
86
|
+
NODE_DEPS_MISSING=1
|
|
87
|
+
else
|
|
88
|
+
test_result "$PKG dependency" "PASS"
|
|
89
|
+
fi
|
|
90
|
+
done
|
|
91
|
+
|
|
92
|
+
# Test 5: Redis Connectivity
|
|
93
|
+
echo "Test 5: Redis Connectivity"
|
|
94
|
+
if redis-cli ping >/dev/null 2>&1; then
|
|
95
|
+
test_result "Redis connectivity" "PASS"
|
|
96
|
+
else
|
|
97
|
+
test_result "Redis connectivity" "SKIP" "Redis not running"
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# Test 6: Screenshot Capture (requires test server)
|
|
101
|
+
echo "Test 6: Screenshot Capture (Integration Test)"
|
|
102
|
+
TEST_URL="https://example.com" # Use public URL for testing
|
|
103
|
+
TASK_ID="test-$(date +%s)"
|
|
104
|
+
AGENT_ID="test-agent"
|
|
105
|
+
|
|
106
|
+
if [ "$NODE_DEPS_MISSING" -eq 0 ]; then
|
|
107
|
+
CAPTURE_RESULT=$("$SCRIPT_DIR/capture-screenshot.sh" \
|
|
108
|
+
--project "test-project" \
|
|
109
|
+
--component "test-component" \
|
|
110
|
+
--viewport "800x600" \
|
|
111
|
+
--state "default" \
|
|
112
|
+
--variant "light-mode" \
|
|
113
|
+
--url "$TEST_URL" \
|
|
114
|
+
--task-id "$TASK_ID" \
|
|
115
|
+
--agent-id "$AGENT_ID" 2>&1)
|
|
116
|
+
|
|
117
|
+
if [ $? -eq 0 ] && echo "$CAPTURE_RESULT" | jq -e '.screenshot_key' >/dev/null 2>&1; then
|
|
118
|
+
SCREENSHOT_KEY=$(echo "$CAPTURE_RESULT" | jq -r '.screenshot_key')
|
|
119
|
+
test_result "Screenshot capture" "PASS"
|
|
120
|
+
else
|
|
121
|
+
test_result "Screenshot capture" "FAIL" "Capture failed or invalid output"
|
|
122
|
+
fi
|
|
123
|
+
else
|
|
124
|
+
test_result "Screenshot capture" "SKIP" "Node dependencies missing"
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
# Test 7: Baseline Setting
|
|
128
|
+
echo "Test 7: Baseline Setting"
|
|
129
|
+
if [ -n "$SCREENSHOT_KEY" ]; then
|
|
130
|
+
BASELINE_RESULT=$("$SCRIPT_DIR/set-baseline.sh" \
|
|
131
|
+
--screenshot-key "$SCREENSHOT_KEY" \
|
|
132
|
+
--reason "Test baseline" 2>&1)
|
|
133
|
+
|
|
134
|
+
if [ $? -eq 0 ] && echo "$BASELINE_RESULT" | jq -e '.status' >/dev/null 2>&1; then
|
|
135
|
+
test_result "Baseline setting" "PASS"
|
|
136
|
+
else
|
|
137
|
+
test_result "Baseline setting" "FAIL" "set-baseline.sh failed"
|
|
138
|
+
fi
|
|
139
|
+
else
|
|
140
|
+
test_result "Baseline setting" "SKIP" "No screenshot to baseline"
|
|
141
|
+
fi
|
|
142
|
+
|
|
143
|
+
# Test 8: Screenshot Comparison
|
|
144
|
+
echo "Test 8: Screenshot Comparison"
|
|
145
|
+
if [ -n "$SCREENSHOT_KEY" ]; then
|
|
146
|
+
# Capture second screenshot for comparison
|
|
147
|
+
CAPTURE2_RESULT=$("$SCRIPT_DIR/capture-screenshot.sh" \
|
|
148
|
+
--project "test-project" \
|
|
149
|
+
--component "test-component" \
|
|
150
|
+
--viewport "800x600" \
|
|
151
|
+
--state "default" \
|
|
152
|
+
--variant "light-mode" \
|
|
153
|
+
--url "$TEST_URL" \
|
|
154
|
+
--task-id "$TASK_ID" \
|
|
155
|
+
--agent-id "$AGENT_ID" 2>&1)
|
|
156
|
+
|
|
157
|
+
if [ $? -eq 0 ]; then
|
|
158
|
+
COMPARE_RESULT=$("$SCRIPT_DIR/compare-screenshots.sh" \
|
|
159
|
+
--screenshot-key "$SCREENSHOT_KEY" \
|
|
160
|
+
--task-id "$TASK_ID" \
|
|
161
|
+
--threshold 0.95 2>&1)
|
|
162
|
+
|
|
163
|
+
if [ $? -eq 0 ] && echo "$COMPARE_RESULT" | jq -e '.similarity_score' >/dev/null 2>&1; then
|
|
164
|
+
SIMILARITY=$(echo "$COMPARE_RESULT" | jq -r '.similarity_score')
|
|
165
|
+
if (( $(echo "$SIMILARITY >= 0.95" | bc -l) )); then
|
|
166
|
+
test_result "Screenshot comparison" "PASS"
|
|
167
|
+
else
|
|
168
|
+
test_result "Screenshot comparison" "FAIL" "Low similarity: $SIMILARITY"
|
|
169
|
+
fi
|
|
170
|
+
else
|
|
171
|
+
test_result "Screenshot comparison" "FAIL" "compare-screenshots.sh failed"
|
|
172
|
+
fi
|
|
173
|
+
else
|
|
174
|
+
test_result "Screenshot comparison" "SKIP" "Second capture failed"
|
|
175
|
+
fi
|
|
176
|
+
else
|
|
177
|
+
test_result "Screenshot comparison" "SKIP" "No screenshot to compare"
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
# Test 9: SQLite Data Persistence
|
|
181
|
+
echo "Test 9: SQLite Data Persistence"
|
|
182
|
+
SCREENSHOT_COUNT=$(sqlite3 "$DB_PATH" \
|
|
183
|
+
"SELECT COUNT(*) FROM webapp_screenshots WHERE project = 'test-project';" 2>/dev/null)
|
|
184
|
+
|
|
185
|
+
if [ "$SCREENSHOT_COUNT" -gt 0 ]; then
|
|
186
|
+
test_result "SQLite data persistence" "PASS"
|
|
187
|
+
else
|
|
188
|
+
test_result "SQLite data persistence" "FAIL" "No test screenshots in database"
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
# Test 10: Redis Queue Integration
|
|
192
|
+
echo "Test 10: Redis Queue Integration"
|
|
193
|
+
if [ -n "$TASK_ID" ]; then
|
|
194
|
+
QUEUE_LENGTH=$(redis-cli llen "screenshot:queue:${TASK_ID}" 2>/dev/null || echo "0")
|
|
195
|
+
if [ "$QUEUE_LENGTH" -gt 0 ]; then
|
|
196
|
+
test_result "Redis queue integration" "PASS"
|
|
197
|
+
else
|
|
198
|
+
test_result "Redis queue integration" "SKIP" "Redis queue empty (may have been processed)"
|
|
199
|
+
fi
|
|
200
|
+
else
|
|
201
|
+
test_result "Redis queue integration" "SKIP" "No task ID available"
|
|
202
|
+
fi
|
|
203
|
+
|
|
204
|
+
# Cleanup test data
|
|
205
|
+
echo ""
|
|
206
|
+
echo "Cleaning up test data..."
|
|
207
|
+
if [ -n "$SCREENSHOT_KEY" ]; then
|
|
208
|
+
sqlite3 "$DB_PATH" "DELETE FROM webapp_screenshots WHERE project = 'test-project';" 2>/dev/null
|
|
209
|
+
sqlite3 "$DB_PATH" "DELETE FROM screenshot_audit_log WHERE screenshot_key LIKE 'test-project/%';" 2>/dev/null
|
|
210
|
+
rm -rf .screenshots/baselines/test-project 2>/dev/null
|
|
211
|
+
rm -rf .screenshots/current/test-project 2>/dev/null
|
|
212
|
+
rm -rf .screenshots/diffs/"$TASK_ID" 2>/dev/null
|
|
213
|
+
redis-cli del "screenshot:queue:${TASK_ID}" >/dev/null 2>&1
|
|
214
|
+
echo "✓ Test data cleaned"
|
|
215
|
+
fi
|
|
216
|
+
|
|
217
|
+
# Summary
|
|
218
|
+
echo ""
|
|
219
|
+
echo "=========================================="
|
|
220
|
+
echo "Test Summary"
|
|
221
|
+
echo "=========================================="
|
|
222
|
+
echo -e "${GREEN}Passed:${NC} $TESTS_PASSED"
|
|
223
|
+
echo -e "${RED}Failed:${NC} $TESTS_FAILED"
|
|
224
|
+
echo -e "${YELLOW}Skipped:${NC} $TESTS_SKIPPED"
|
|
225
|
+
echo ""
|
|
226
|
+
|
|
227
|
+
if [ "$TESTS_FAILED" -eq 0 ]; then
|
|
228
|
+
echo -e "${GREEN}✓ All tests passed${NC}"
|
|
229
|
+
exit 0
|
|
230
|
+
else
|
|
231
|
+
echo -e "${RED}✗ Some tests failed${NC}"
|
|
232
|
+
exit 1
|
|
233
|
+
fi
|
package/README.md
CHANGED
|
@@ -9,16 +9,28 @@ A production-ready AI agent orchestration system with autonomous self-correcting
|
|
|
9
9
|
## 🚀 Quick Start
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
# Install
|
|
12
|
+
# 1. Install package (automatically initializes CFN files)
|
|
13
13
|
npm install claude-flow-novice
|
|
14
14
|
|
|
15
|
-
#
|
|
15
|
+
# 2. Activate CFN instructions for CLI agents
|
|
16
|
+
cp CFN-CLAUDE.md CLAUDE.md
|
|
17
|
+
|
|
18
|
+
# 3. Execute CFN Loop for complex features
|
|
16
19
|
npx cfn-loop "Implement JWT authentication system" --mode=standard
|
|
17
20
|
|
|
18
21
|
# Or spawn agents directly
|
|
19
22
|
npx cfn-spawn backend-dev --task-id auth-task
|
|
20
23
|
```
|
|
21
24
|
|
|
25
|
+
**What happens on install**:
|
|
26
|
+
- Copies 23 agents to `.claude/agents/cfn-dev-team/`
|
|
27
|
+
- Copies 43 skills to `.claude/skills/cfn-*/`
|
|
28
|
+
- Copies 7 hooks to `.claude/hooks/cfn-*`
|
|
29
|
+
- Copies 45+ commands to `.claude/commands/cfn/`
|
|
30
|
+
- Copies `CFN-CLAUDE.md` reference file
|
|
31
|
+
|
|
32
|
+
**Important**: CLI-spawned agents read instructions from `CLAUDE.md` in your project root. Copy `CFN-CLAUDE.md` → `CLAUDE.md` to activate CFN workflows.
|
|
33
|
+
|
|
22
34
|
## ✨ What Makes CFN v3 Different
|
|
23
35
|
|
|
24
36
|
**Self-Correcting Workflows** - Automatic iteration until quality gates met (≥0.75 confidence, ≥0.90 consensus)
|
|
@@ -410,6 +422,43 @@ cfn-redis # Redis coordination utilities
|
|
|
410
422
|
# Hook pipeline orchestration
|
|
411
423
|
```
|
|
412
424
|
|
|
425
|
+
### Complexity Analysis Tools
|
|
426
|
+
|
|
427
|
+
**Built-in Code Quality Monitoring**
|
|
428
|
+
|
|
429
|
+
**Simple Complexity Analyzer** (~23ms)
|
|
430
|
+
- Fast bash script analyzer
|
|
431
|
+
- Counts decision points (if/loops/case)
|
|
432
|
+
- Ratings: Simple (<10) → Very Complex (≥40)
|
|
433
|
+
|
|
434
|
+
**Per-Function Analyzer**
|
|
435
|
+
- Function-level complexity breakdown
|
|
436
|
+
- Identifies specific refactor targets
|
|
437
|
+
- Detailed reporting per method
|
|
438
|
+
|
|
439
|
+
**Lizard (Professional Multi-Language)**
|
|
440
|
+
- Auto-installed during npm install
|
|
441
|
+
- Supports 20+ languages (JS/TS/Python/Java/Go/etc)
|
|
442
|
+
- Industry-standard McCabe complexity metrics
|
|
443
|
+
|
|
444
|
+
**Automated Monitoring**
|
|
445
|
+
- Triggers on files >200 lines during post-edit
|
|
446
|
+
- Warning at complexity 30-39
|
|
447
|
+
- Critical at complexity ≥40 (auto-spawns refactor agent)
|
|
448
|
+
|
|
449
|
+
```bash
|
|
450
|
+
# Quick analysis
|
|
451
|
+
./tools/simple-complexity.sh script.sh
|
|
452
|
+
|
|
453
|
+
# Function-level breakdown
|
|
454
|
+
./tools/calculate-complexity.sh script.sh
|
|
455
|
+
|
|
456
|
+
# Multi-language professional analysis
|
|
457
|
+
lizard src/module.ts --CCN 30
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
**See:** `readme/logs-tools.md` for complete documentation
|
|
461
|
+
|
|
413
462
|
### Templates & Patterns
|
|
414
463
|
|
|
415
464
|
- Agent creation templates (simple, standard, advanced)
|