claude-flow-novice 2.15.2 → 2.15.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/.claude/commands/cfn-loop-cli.md +16 -2
- package/.claude/commands/switch-api.md +31 -10
- package/.claude/hooks/cfn-BACKUP_USAGE.md +243 -243
- package/.claude/hooks/cfn-invoke-security-validation.sh +69 -69
- package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
- package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
- package/.claude/hooks/cfn-post-edit.config.json +44 -44
- package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
- package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/.claude/skills/cfn-redis-coordination/get-context.sh +145 -112
- package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
- package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
- package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
- package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/.claude/skills/cfn-transparency-middleware/test-integration.sh +161 -161
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
- package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
- package/README.md +116 -475
- package/claude-assets/agents/cfn-dev-team/README.md +103 -0
- package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
- package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
- package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
- package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
- package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
- package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
- package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
- package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
- package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
- package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/claude-assets/commands/cfn-loop-cli.md +16 -2
- package/claude-assets/commands/switch-api.md +31 -10
- package/claude-assets/hooks/cfn-BACKUP_USAGE.md +243 -243
- package/claude-assets/hooks/cfn-invoke-security-validation.sh +69 -69
- package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
- package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
- package/claude-assets/hooks/cfn-post-edit.config.json +44 -44
- package/claude-assets/hooks/cfn-post-execution/memory-cleanup.sh +19 -19
- package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/claude-assets/hooks/cfn-pre-execution/memory-check.sh +19 -19
- package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
- package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
- package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +543 -572
- package/claude-assets/skills/agent-lifecycle/simple-audit.sh +57 -30
- package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
- package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
- package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
- package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
- package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
- package/claude-assets/skills/bootstrap/database-connection.md +464 -0
- package/claude-assets/skills/bootstrap/error-handling.md +580 -0
- package/claude-assets/skills/bootstrap/file-operations.md +699 -0
- package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
- package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/claude-assets/skills/cfn-automatic-memory-persistence/persist-agent-output.sh +48 -48
- package/claude-assets/skills/cfn-automatic-memory-persistence/query-agent-history.sh +34 -34
- package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
- package/claude-assets/skills/cfn-deliverable-validation/confidence-calculator.sh +261 -261
- package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
- package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
- package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
- package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
- package/claude-assets/skills/cfn-expert-update/update-expert.sh +345 -345
- package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
- package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
- package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
- package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
- package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
- package/claude-assets/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
- package/claude-assets/skills/cfn-intervention-detector/detect-intervention.sh +110 -110
- package/claude-assets/skills/cfn-intervention-orchestrator/execute-intervention.sh +58 -58
- package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
- package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
- package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
- package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
- package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
- package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
- package/claude-assets/skills/cfn-loop2-output-processing/process-validator-output.sh +275 -275
- package/claude-assets/skills/cfn-memory-management/check-memory.sh +159 -159
- package/claude-assets/skills/cfn-memory-management/cleanup-memory.sh +196 -196
- package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +325 -325
- package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
- package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
- package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
- package/claude-assets/skills/cfn-playbook-auto-update/auto-update-playbook.sh +85 -85
- package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
- package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
- package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
- package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/claude-assets/skills/cfn-redis-coordination/get-context.sh +145 -112
- package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
- package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
- package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/claude-assets/skills/cfn-scope-simplifier/simplify-scope.sh +67 -67
- package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
- package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
- package/claude-assets/skills/cfn-specialist-injection/recommend-specialist.sh +56 -56
- package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/claude-assets/skills/cfn-standardized-error-handling/capture-agent-error.sh +86 -86
- package/claude-assets/skills/cfn-standardized-error-handling/test-error-handling.sh +165 -165
- package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
- package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
- package/claude-assets/skills/cfn-task-config-init/initialize-config.sh +264 -264
- package/claude-assets/skills/cfn-task-decomposition/task-decomposer.sh +278 -278
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
- package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
- package/claude-assets/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
- package/claude-assets/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
- package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/claude-assets/skills/cfn-transparency-middleware/test-integration.sh +161 -161
- package/claude-assets/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
- package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
- package/claude-assets/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
- package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
- package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
- package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
- package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
- package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
- package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
- package/claude-assets/skills/cfn-utilities/test.sh +317 -0
- package/claude-assets/skills/docker-build/SKILL.md +96 -203
- package/claude-assets/skills/docker-build/build.sh +73 -73
- package/claude-assets/skills/integration/agent-handoff.sh +492 -0
- package/claude-assets/skills/integration/file-operations.sh +414 -0
- package/claude-assets/skills/json-validation/SKILL.md +431 -0
- package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
- package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
- package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
- package/claude-assets/skills/workflow-codification/APPROVAL_WORKFLOW.md +806 -0
- package/claude-assets/skills/workflow-codification/COST_TRACKING.md +637 -0
- package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
- package/claude-assets/skills/workflow-codification/EDGE_CASE_TRACKING.md +404 -0
- package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
- package/claude-assets/skills/workflow-codification/README_PHASE4.md +457 -0
- package/claude-assets/skills/workflow-codification/SKILL.md +110 -0
- package/claude-assets/skills/workflow-codification/analyze-patterns.sh +899 -0
- package/claude-assets/skills/workflow-codification/approval-workflow.sh +514 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
- package/claude-assets/skills/workflow-codification/generate-skill-update.sh +525 -0
- package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
- package/claude-assets/skills/workflow-codification/review-skill.sh +643 -0
- package/claude-assets/skills/workflow-codification/templates/email-notification.txt +114 -0
- package/claude-assets/skills/workflow-codification/templates/slack-notification.md +85 -0
- package/claude-assets/skills/workflow-codification/test-integration.sh +296 -0
- package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh +486 -0
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
- package/claude-assets/skills/workflow-codification/track-edge-case.sh +290 -0
- package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
- package/dist/ace/ace-curator.js +10 -2
- package/dist/ace/ace-curator.js.map +1 -1
- package/dist/ace/ace-generator.js +4 -0
- package/dist/ace/ace-generator.js.map +1 -1
- package/dist/ace/ace-reflector.js +1 -1
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/ace/context-injection.js +24 -2
- package/dist/ace/context-injection.js.map +1 -1
- package/dist/agents/agent-loader.js +146 -165
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/agents/task-agent-integration.js +1 -1
- package/dist/agents/task-agent-integration.js.map +1 -1
- package/dist/api/health-endpoints.js +390 -0
- package/dist/api/health-endpoints.js.map +1 -0
- package/dist/cli/agent-executor.js +4 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +89 -1
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +130 -37
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/config-manager.js +91 -109
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/skill-cache-validator.js +412 -0
- package/dist/cli/skill-cache-validator.js.map +1 -0
- package/dist/cli/skill-cli.js +991 -0
- package/dist/cli/skill-cli.js.map +1 -0
- package/dist/cli/skill-execution-logger.js +284 -0
- package/dist/cli/skill-execution-logger.js.map +1 -0
- package/dist/cli/skill-loader.js +457 -0
- package/dist/cli/skill-loader.js.map +1 -0
- package/dist/coordination/event-bus.js +2 -2
- package/dist/coordination/event-bus.js.map +1 -1
- package/dist/coordination/fleet-manager.js +1 -1
- package/dist/coordination/fleet-manager.js.map +1 -1
- package/dist/coordination/index.js +23 -9
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/types/fleet-manager.types.js.map +1 -1
- package/dist/db/migration-manager.js +483 -0
- package/dist/db/migration-manager.js.map +1 -0
- package/dist/db/skills-query.js +535 -0
- package/dist/db/skills-query.js.map +1 -0
- package/dist/integration/DatabaseHandoff.js +507 -0
- package/dist/integration/DatabaseHandoff.js.map +1 -0
- package/dist/integration/StandardAdapter.js +291 -0
- package/dist/integration/StandardAdapter.js.map +1 -0
- package/dist/jobs/edge-case-analyzer.js +367 -0
- package/dist/jobs/edge-case-analyzer.js.map +1 -0
- package/dist/jobs/promotion-sla-enforcer.js +288 -0
- package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
- package/dist/lib/agent-output-parser.js +518 -0
- package/dist/lib/agent-output-parser.js.map +1 -0
- package/dist/lib/agent-output-validator.js +950 -0
- package/dist/lib/agent-output-validator.js.map +1 -0
- package/dist/lib/agent-workspace.js +281 -0
- package/dist/lib/agent-workspace.js.map +1 -0
- package/dist/lib/artifact-registry.js +443 -0
- package/dist/lib/artifact-registry.js.map +1 -0
- package/dist/lib/atomic-file-writer.js +377 -0
- package/dist/lib/atomic-file-writer.js.map +1 -0
- package/dist/lib/backup-manager.js +779 -0
- package/dist/lib/backup-manager.js.map +1 -0
- package/dist/lib/checkpoint-manager.js +837 -0
- package/dist/lib/checkpoint-manager.js.map +1 -0
- package/dist/lib/circuit-breaker.js +340 -0
- package/dist/lib/circuit-breaker.js.map +1 -0
- package/dist/lib/completion-signal-handler.js +243 -0
- package/dist/lib/completion-signal-handler.js.map +1 -0
- package/dist/lib/config-manager.js +312 -0
- package/dist/lib/config-manager.js.map +1 -0
- package/dist/lib/config-migrator.js +386 -0
- package/dist/lib/config-migrator.js.map +1 -0
- package/dist/lib/config-validator.js +687 -0
- package/dist/lib/config-validator.js.map +1 -0
- package/dist/lib/correlation-cache.js +311 -0
- package/dist/lib/correlation-cache.js.map +1 -0
- package/dist/lib/correlation.js +263 -0
- package/dist/lib/correlation.js.map +1 -0
- package/dist/lib/database-service/connection-pool-manager.js +520 -0
- package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
- package/dist/lib/database-service/correlation.js +329 -0
- package/dist/lib/database-service/correlation.js.map +1 -0
- package/dist/lib/database-service/errors.js +120 -0
- package/dist/lib/database-service/errors.js.map +1 -0
- package/dist/lib/database-service/index.js +168 -0
- package/dist/lib/database-service/index.js.map +1 -0
- package/dist/lib/database-service/postgres-adapter.js +526 -0
- package/dist/lib/database-service/postgres-adapter.js.map +1 -0
- package/dist/lib/database-service/redis-adapter.js +360 -0
- package/dist/lib/database-service/redis-adapter.js.map +1 -0
- package/dist/lib/database-service/sqlite-adapter.js +544 -0
- package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
- package/dist/lib/database-service/transaction-manager.js +773 -0
- package/dist/lib/database-service/transaction-manager.js.map +1 -0
- package/dist/lib/database-service/types.js +23 -0
- package/dist/lib/database-service/types.js.map +1 -0
- package/dist/lib/deadlock-resolver.js +292 -0
- package/dist/lib/deadlock-resolver.js.map +1 -0
- package/dist/lib/distributed-lock.js +451 -0
- package/dist/lib/distributed-lock.js.map +1 -0
- package/dist/lib/edge-case-deduplicator.js +227 -0
- package/dist/lib/edge-case-deduplicator.js.map +1 -0
- package/dist/lib/encryption-manager.js +322 -0
- package/dist/lib/encryption-manager.js.map +1 -0
- package/dist/lib/error-aggregator.js +234 -0
- package/dist/lib/error-aggregator.js.map +1 -0
- package/dist/lib/errors.js +287 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/file-lock-manager.js +578 -0
- package/dist/lib/file-lock-manager.js.map +1 -0
- package/dist/lib/file-operations.js +367 -0
- package/dist/lib/file-operations.js.map +1 -0
- package/dist/lib/idempotent-write.js +237 -0
- package/dist/lib/idempotent-write.js.map +1 -0
- package/dist/lib/integration-schema-validator.js +522 -0
- package/dist/lib/integration-schema-validator.js.map +1 -0
- package/dist/lib/lock-health-monitor.js +298 -0
- package/dist/lib/lock-health-monitor.js.map +1 -0
- package/dist/lib/log-shipper.js +422 -0
- package/dist/lib/log-shipper.js.map +1 -0
- package/dist/lib/logging.js +146 -0
- package/dist/lib/logging.js.map +1 -0
- package/dist/lib/message-deduplicator.js +439 -0
- package/dist/lib/message-deduplicator.js.map +1 -0
- package/dist/lib/multi-system-query.js +604 -0
- package/dist/lib/multi-system-query.js.map +1 -0
- package/dist/lib/orphan-detector.js +332 -0
- package/dist/lib/orphan-detector.js.map +1 -0
- package/dist/lib/password-generator.js +166 -0
- package/dist/lib/password-generator.js.map +1 -0
- package/dist/lib/path-validator.js +429 -0
- package/dist/lib/path-validator.js.map +1 -0
- package/dist/lib/query-translator.js +905 -0
- package/dist/lib/query-translator.js.map +1 -0
- package/dist/lib/queue-recovery.js +469 -0
- package/dist/lib/queue-recovery.js.map +1 -0
- package/dist/lib/redis-queue-manager.js +512 -0
- package/dist/lib/redis-queue-manager.js.map +1 -0
- package/dist/lib/reflection-archiver.js +272 -0
- package/dist/lib/reflection-archiver.js.map +1 -0
- package/dist/lib/retry-manager.js +453 -0
- package/dist/lib/retry-manager.js.map +1 -0
- package/dist/lib/retry.js +262 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/schema-transform.js +695 -0
- package/dist/lib/schema-transform.js.map +1 -0
- package/dist/lib/schema-validator.js +491 -0
- package/dist/lib/schema-validator.js.map +1 -0
- package/dist/lib/skill-cache.js +297 -0
- package/dist/lib/skill-cache.js.map +1 -0
- package/dist/lib/skill-content-manager.js +337 -0
- package/dist/lib/skill-content-manager.js.map +1 -0
- package/dist/lib/skill-frontmatter-parser.js +237 -0
- package/dist/lib/skill-frontmatter-parser.js.map +1 -0
- package/dist/lib/skill-git-integration.js +275 -0
- package/dist/lib/skill-git-integration.js.map +1 -0
- package/dist/lib/skill-markdown-validator.js +396 -0
- package/dist/lib/skill-markdown-validator.js.map +1 -0
- package/dist/lib/skill-output-parser.js +312 -0
- package/dist/lib/skill-output-parser.js.map +1 -0
- package/dist/lib/unified-query-api.js +467 -0
- package/dist/lib/unified-query-api.js.map +1 -0
- package/dist/middleware/auth-middleware.js +350 -0
- package/dist/middleware/auth-middleware.js.map +1 -0
- package/dist/middleware/schema-validation.js +347 -0
- package/dist/middleware/schema-validation.js.map +1 -0
- package/dist/providers/anthropic-provider.js +1 -1
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/provider-factory.js +2 -2
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/services/edge-case-analyzer.js +321 -0
- package/dist/services/edge-case-analyzer.js.map +1 -0
- package/dist/services/edge-case-deduplicator.js +266 -0
- package/dist/services/edge-case-deduplicator.js.map +1 -0
- package/dist/services/edge-case-detector.js +337 -0
- package/dist/services/edge-case-detector.js.map +1 -0
- package/dist/services/edge-case-tracker.js +547 -0
- package/dist/services/edge-case-tracker.js.map +1 -0
- package/dist/services/health-check-system.js +586 -0
- package/dist/services/health-check-system.js.map +1 -0
- package/dist/services/metrics-logger.js +412 -0
- package/dist/services/metrics-logger.js.map +1 -0
- package/dist/services/patch-generator.js +378 -0
- package/dist/services/patch-generator.js.map +1 -0
- package/dist/services/patch-validator.js +337 -0
- package/dist/services/patch-validator.js.map +1 -0
- package/dist/services/performance-monitor.js +811 -0
- package/dist/services/performance-monitor.js.map +1 -0
- package/dist/services/promotion-pipeline.js +918 -0
- package/dist/services/promotion-pipeline.js.map +1 -0
- package/dist/services/promotion-validator.js +394 -0
- package/dist/services/promotion-validator.js.map +1 -0
- package/dist/services/reflection-logger.js +388 -0
- package/dist/services/reflection-logger.js.map +1 -0
- package/dist/services/skill-deployment.js +472 -0
- package/dist/services/skill-deployment.js.map +1 -0
- package/dist/services/skill-loader.js +427 -0
- package/dist/services/skill-loader.js.map +1 -0
- package/dist/services/skill-promotion.js +372 -0
- package/dist/services/skill-promotion.js.map +1 -0
- package/dist/services/skill-validator.js +454 -0
- package/dist/services/skill-validator.js.map +1 -0
- package/dist/services/skill-versioning.js +244 -0
- package/dist/services/skill-versioning.js.map +1 -0
- package/dist/services/workspace-supervisor.js +597 -0
- package/dist/services/workspace-supervisor.js.map +1 -0
- package/dist/types/agent-output.js +44 -0
- package/dist/types/agent-output.js.map +1 -0
- package/dist/types/config.js +28 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/edge-case.js +45 -0
- package/dist/types/edge-case.js.map +1 -0
- package/package.json +201 -176
- package/readme/README.md +19 -4
- package/scripts/artifact-cleanup.sh +392 -0
- package/scripts/backup-cleanup.sh +627 -0
- package/scripts/cleanup-workspaces.sh +412 -0
- package/scripts/cleanup-yaml-configs.sh +141 -0
- package/scripts/deploy-approved-skills.sh +263 -0
- package/scripts/deploy-production.sh +355 -355
- package/scripts/docker-playwright-fix.sh +311 -311
- package/scripts/docker-rebuild-all-agents.sh +127 -127
- package/scripts/health-check.sh +447 -0
- package/scripts/log-aggregator.sh +554 -0
- package/scripts/log-monitor.sh +629 -0
- package/scripts/manage-agent-workspaces.sh +434 -0
- package/scripts/memory-leak-prevention.sh +305 -305
- package/scripts/migrate-artifacts.sh +563 -0
- package/scripts/migrate-schema.sh +533 -0
- package/scripts/migrate-yaml-to-json.sh +465 -0
- package/scripts/promote-staged-skills.sh +423 -0
- package/scripts/run-marketing-tests.sh +42 -42
- package/scripts/update_paths.sh +46 -46
- package/scripts/verify-no-secrets.sh +88 -35
- package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
- package/README.md.backup_before_replace +0 -781
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: database-connection
|
|
3
|
+
category: foundation
|
|
4
|
+
team: foundation
|
|
5
|
+
approval_level: auto
|
|
6
|
+
approval_criteria:
|
|
7
|
+
max_commands: 15
|
|
8
|
+
test_coverage: n/a # Documentation-only skill with example patterns
|
|
9
|
+
no_external_calls: true
|
|
10
|
+
tags: [sqlite, database, foundation]
|
|
11
|
+
version: 1.0.0
|
|
12
|
+
owner: cfn-core
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Database Connection - Bootstrap Skill
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
Core patterns for SQLite database connections, query execution, and error handling. This skill is loaded before any database-driven skills and provides foundational database access patterns.
|
|
19
|
+
|
|
20
|
+
## SQLite Connection Patterns
|
|
21
|
+
|
|
22
|
+
### Basic Connection Pattern
|
|
23
|
+
```bash
|
|
24
|
+
#!/bin/bash
|
|
25
|
+
set -euo pipefail
|
|
26
|
+
|
|
27
|
+
DB_PATH="${1:-./data/skills.db}"
|
|
28
|
+
|
|
29
|
+
# Verify database exists and is readable
|
|
30
|
+
if [[ ! -f "$DB_PATH" ]]; then
|
|
31
|
+
echo "ERROR: Database not found at $DB_PATH" >&2
|
|
32
|
+
exit 1
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
if [[ ! -r "$DB_PATH" ]]; then
|
|
36
|
+
echo "ERROR: Database not readable at $DB_PATH" >&2
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Test connection
|
|
41
|
+
if ! sqlite3 "$DB_PATH" "SELECT 1;" &>/dev/null; then
|
|
42
|
+
echo "ERROR: Cannot connect to database at $DB_PATH" >&2
|
|
43
|
+
exit 1
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
echo "Connected to database: $DB_PATH"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Safe Query Execution
|
|
50
|
+
```bash
|
|
51
|
+
# Execute query with error handling
|
|
52
|
+
execute_query() {
|
|
53
|
+
local db_path="$1"
|
|
54
|
+
local query="$2"
|
|
55
|
+
local error_msg="${3:-Query execution failed}"
|
|
56
|
+
|
|
57
|
+
local result
|
|
58
|
+
if ! result=$(sqlite3 "$db_path" "$query" 2>&1); then
|
|
59
|
+
echo "ERROR: $error_msg" >&2
|
|
60
|
+
echo "Query: $query" >&2
|
|
61
|
+
echo "Details: $result" >&2
|
|
62
|
+
return 1
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
echo "$result"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# Usage
|
|
69
|
+
RESULT=$(execute_query "$DB_PATH" "SELECT COUNT(*) FROM skills;" "Failed to count skills")
|
|
70
|
+
echo "Total skills: $RESULT"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Parameterized Queries (SQL Injection Prevention)
|
|
74
|
+
|
|
75
|
+
**⚠️ CRITICAL SECURITY WARNING:**
|
|
76
|
+
|
|
77
|
+
The `${var//\'/\'\'}` pattern shown below has **significant limitations** and should **NOT** be used in production:
|
|
78
|
+
|
|
79
|
+
1. **Only protects single-quoted strings** - Does not work in comments, identifiers, or different quoting contexts
|
|
80
|
+
2. **Can be bypassed** - Multi-layered attacks or concatenation can still succeed
|
|
81
|
+
3. **Not true parameterization** - SQLite CLI has no prepared statement support
|
|
82
|
+
4. **Limited threat model** - Only acceptable for **controlled bootstrap scenarios** with trusted input
|
|
83
|
+
|
|
84
|
+
**Recommended Alternatives for Production:**
|
|
85
|
+
|
|
86
|
+
1. **Use languages with parameterized queries**: Python `sqlite3`, Node.js `better-sqlite3`, or similar
|
|
87
|
+
2. **Strict input validation**: Whitelist allowed values, reject everything else
|
|
88
|
+
3. **Safe wrapper libraries**: Delegate all DB operations to audited security libraries
|
|
89
|
+
4. **Minimize bash DB access**: Use bash only for orchestration, not data manipulation
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# UNSAFE - DO NOT USE IN PRODUCTION
|
|
93
|
+
SKILL_NAME="malicious'; DROP TABLE skills; --"
|
|
94
|
+
sqlite3 "$DB_PATH" "SELECT * FROM skills WHERE name = '$SKILL_NAME';" # VULNERABLE
|
|
95
|
+
|
|
96
|
+
# CONSTRAINED BOOTSTRAP ONLY - NOT PRODUCTION SAFE
|
|
97
|
+
# Only use when:
|
|
98
|
+
# - Input is from trusted sources (config files, not user input)
|
|
99
|
+
# - Operating in controlled bootstrap environment
|
|
100
|
+
# - Alternative languages not available
|
|
101
|
+
safe_query_by_name() {
|
|
102
|
+
local db_path="$1"
|
|
103
|
+
local skill_name="$2"
|
|
104
|
+
|
|
105
|
+
# LIMITATION: Only protects when embedded in single-quoted SQL
|
|
106
|
+
# DOES NOT protect against: comments (--), identifiers, or complex attacks
|
|
107
|
+
local escaped_name="${skill_name//\'/\'\'}"
|
|
108
|
+
|
|
109
|
+
sqlite3 "$db_path" "SELECT * FROM skills WHERE name = '$escaped_name';"
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
# PRODUCTION RECOMMENDATION: Use Python/Node.js instead
|
|
113
|
+
# Example (Python):
|
|
114
|
+
# import sqlite3
|
|
115
|
+
# conn = sqlite3.connect(db_path)
|
|
116
|
+
# cursor = conn.execute("SELECT * FROM skills WHERE name = ?", (skill_name,))
|
|
117
|
+
# result = cursor.fetchone()
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Query Execution Patterns
|
|
121
|
+
|
|
122
|
+
### Single Value Retrieval
|
|
123
|
+
```bash
|
|
124
|
+
get_skill_count() {
|
|
125
|
+
local db_path="$1"
|
|
126
|
+
sqlite3 "$db_path" "SELECT COUNT(*) FROM skills;"
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
COUNT=$(get_skill_count "$DB_PATH")
|
|
130
|
+
echo "Skills in database: $COUNT"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Multiple Row Processing
|
|
134
|
+
```bash
|
|
135
|
+
list_all_skills() {
|
|
136
|
+
local db_path="$1"
|
|
137
|
+
|
|
138
|
+
# Use -csv or -json for structured output
|
|
139
|
+
sqlite3 -csv "$db_path" "SELECT id, name, category FROM skills ORDER BY name;"
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
# Process line by line
|
|
143
|
+
while IFS=',' read -r id name category; do
|
|
144
|
+
echo "Skill: $name (ID: $id, Category: $category)"
|
|
145
|
+
done < <(list_all_skills "$DB_PATH")
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### JSON Output Processing
|
|
149
|
+
```bash
|
|
150
|
+
get_skills_json() {
|
|
151
|
+
local db_path="$1"
|
|
152
|
+
|
|
153
|
+
# SQLite 3.33+ supports JSON output
|
|
154
|
+
sqlite3 -json "$db_path" "SELECT * FROM skills LIMIT 10;"
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
# Parse JSON with jq
|
|
158
|
+
SKILLS_JSON=$(get_skills_json "$DB_PATH")
|
|
159
|
+
echo "$SKILLS_JSON" | jq -r '.[] | .name'
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Error Handling
|
|
163
|
+
|
|
164
|
+
### Connection Timeout
|
|
165
|
+
```bash
|
|
166
|
+
connect_with_timeout() {
|
|
167
|
+
local db_path="$1"
|
|
168
|
+
local timeout="${2:-5}"
|
|
169
|
+
|
|
170
|
+
# Set busy timeout (milliseconds)
|
|
171
|
+
sqlite3 "$db_path" "PRAGMA busy_timeout = $((timeout * 1000)); SELECT 1;" || {
|
|
172
|
+
echo "ERROR: Connection timeout after ${timeout}s" >&2
|
|
173
|
+
return 1
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Transaction Management
|
|
179
|
+
```bash
|
|
180
|
+
execute_transaction() {
|
|
181
|
+
local db_path="$1"
|
|
182
|
+
shift
|
|
183
|
+
local queries=("$@")
|
|
184
|
+
|
|
185
|
+
{
|
|
186
|
+
echo "BEGIN TRANSACTION;"
|
|
187
|
+
for query in "${queries[@]}"; do
|
|
188
|
+
echo "$query"
|
|
189
|
+
done
|
|
190
|
+
echo "COMMIT;"
|
|
191
|
+
} | sqlite3 "$db_path" || {
|
|
192
|
+
echo "ROLLBACK;" | sqlite3 "$db_path"
|
|
193
|
+
echo "ERROR: Transaction failed and rolled back" >&2
|
|
194
|
+
return 1
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
# Usage
|
|
199
|
+
execute_transaction "$DB_PATH" \
|
|
200
|
+
"INSERT INTO skills (name, category) VALUES ('test1', 'test');" \
|
|
201
|
+
"INSERT INTO skills (name, category) VALUES ('test2', 'test');"
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Database Lock Handling
|
|
205
|
+
```bash
|
|
206
|
+
wait_for_unlock() {
|
|
207
|
+
local db_path="$1"
|
|
208
|
+
local max_attempts="${2:-10}"
|
|
209
|
+
local attempt=0
|
|
210
|
+
|
|
211
|
+
while ((attempt < max_attempts)); do
|
|
212
|
+
if sqlite3 "$db_path" "SELECT 1;" &>/dev/null; then
|
|
213
|
+
return 0
|
|
214
|
+
fi
|
|
215
|
+
|
|
216
|
+
((attempt++))
|
|
217
|
+
echo "Database locked, waiting... (attempt $attempt/$max_attempts)" >&2
|
|
218
|
+
sleep 0.5
|
|
219
|
+
done
|
|
220
|
+
|
|
221
|
+
echo "ERROR: Database remains locked after $max_attempts attempts" >&2
|
|
222
|
+
return 1
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Database Validation
|
|
227
|
+
|
|
228
|
+
### SQL Identifier Validation (Injection Prevention)
|
|
229
|
+
```bash
|
|
230
|
+
# SQL INJECTION PROTECTION: Validate identifier before interpolation
|
|
231
|
+
validate_sql_identifier() {
|
|
232
|
+
local identifier="$1"
|
|
233
|
+
local identifier_type="${2:-identifier}"
|
|
234
|
+
|
|
235
|
+
# Strict validation: only allow safe SQL identifiers
|
|
236
|
+
# Pattern: starts with letter/underscore, contains only alphanumeric/underscore
|
|
237
|
+
if [[ ! "$identifier" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
|
|
238
|
+
echo "ERROR: Invalid $identifier_type '$identifier' - must match ^[a-zA-Z_][a-zA-Z0-9_]*$" >&2
|
|
239
|
+
return 1
|
|
240
|
+
fi
|
|
241
|
+
|
|
242
|
+
return 0
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Schema Verification
|
|
247
|
+
```bash
|
|
248
|
+
verify_table_exists() {
|
|
249
|
+
local db_path="$1"
|
|
250
|
+
local table_name="$2"
|
|
251
|
+
|
|
252
|
+
# SQL INJECTION PREVENTION: Validate table name before query
|
|
253
|
+
validate_sql_identifier "$table_name" "table name" || return 1
|
|
254
|
+
|
|
255
|
+
# Safe to use validated table name (no interpolation risk)
|
|
256
|
+
local count
|
|
257
|
+
count=$(sqlite3 "$db_path" \
|
|
258
|
+
"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table_name';")
|
|
259
|
+
|
|
260
|
+
if [[ "$count" -eq 0 ]]; then
|
|
261
|
+
echo "ERROR: Table '$table_name' does not exist" >&2
|
|
262
|
+
return 1
|
|
263
|
+
fi
|
|
264
|
+
|
|
265
|
+
return 0
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
# Verify required tables
|
|
269
|
+
for table in skills categories approvals; do
|
|
270
|
+
verify_table_exists "$DB_PATH" "$table" || exit 1
|
|
271
|
+
done
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Column Verification
|
|
275
|
+
```bash
|
|
276
|
+
verify_columns() {
|
|
277
|
+
local db_path="$1"
|
|
278
|
+
local table_name="$2"
|
|
279
|
+
shift 2
|
|
280
|
+
local required_columns=("$@")
|
|
281
|
+
|
|
282
|
+
# SQL INJECTION PREVENTION: Validate table name before PRAGMA
|
|
283
|
+
validate_sql_identifier "$table_name" "table name" || return 1
|
|
284
|
+
|
|
285
|
+
# Safe to use validated table name in PRAGMA
|
|
286
|
+
local existing_columns
|
|
287
|
+
existing_columns=$(sqlite3 "$db_path" "PRAGMA table_info($table_name);" | cut -d'|' -f2)
|
|
288
|
+
|
|
289
|
+
for col in "${required_columns[@]}"; do
|
|
290
|
+
# SQL INJECTION PREVENTION: Validate column name
|
|
291
|
+
validate_sql_identifier "$col" "column name" || return 1
|
|
292
|
+
|
|
293
|
+
if ! echo "$existing_columns" | grep -q "^${col}$"; then
|
|
294
|
+
echo "ERROR: Column '$col' missing from table '$table_name'" >&2
|
|
295
|
+
return 1
|
|
296
|
+
fi
|
|
297
|
+
done
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
# Usage
|
|
301
|
+
verify_columns "$DB_PATH" "skills" id name category content hash
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## Performance Optimization
|
|
305
|
+
|
|
306
|
+
### Index Usage
|
|
307
|
+
```bash
|
|
308
|
+
# Check if query uses indexes
|
|
309
|
+
explain_query() {
|
|
310
|
+
local db_path="$1"
|
|
311
|
+
local query="$2"
|
|
312
|
+
|
|
313
|
+
sqlite3 "$db_path" "EXPLAIN QUERY PLAN $query"
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
# Verify index usage
|
|
317
|
+
PLAN=$(explain_query "$DB_PATH" "SELECT * FROM skills WHERE name = 'test';")
|
|
318
|
+
if ! echo "$PLAN" | grep -q "USING INDEX"; then
|
|
319
|
+
echo "WARNING: Query does not use index" >&2
|
|
320
|
+
fi
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Sequential Query Pattern (Recommended)
|
|
324
|
+
```bash
|
|
325
|
+
# ⚠️ NOTE: True connection pooling is NOT supported by sqlite3 CLI
|
|
326
|
+
# The sqlite3 CLI tool opens a new connection for each invocation
|
|
327
|
+
|
|
328
|
+
# RECOMMENDED: Use sequential sqlite3 invocations for bootstrap scripts
|
|
329
|
+
# Each query gets its own connection - this is safe and reliable
|
|
330
|
+
|
|
331
|
+
# Query 1
|
|
332
|
+
result1=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM skills;")
|
|
333
|
+
|
|
334
|
+
# Query 2
|
|
335
|
+
result2=$(sqlite3 "$DB_PATH" "SELECT name FROM skills WHERE id = 1;")
|
|
336
|
+
|
|
337
|
+
# Query 3
|
|
338
|
+
result3=$(sqlite3 "$DB_PATH" "SELECT category FROM skills WHERE active = 1;")
|
|
339
|
+
|
|
340
|
+
# This pattern is:
|
|
341
|
+
# - ✅ Reliable: No process lifetime or FD management issues
|
|
342
|
+
# - ✅ Safe: Each connection is isolated and properly closed
|
|
343
|
+
# - ✅ Simple: No complex error handling required
|
|
344
|
+
# - ✅ Performant: Adequate for bootstrap scenarios (< 100 queries)
|
|
345
|
+
|
|
346
|
+
# For high-throughput scenarios (> 100 queries/sec), use:
|
|
347
|
+
# - Python sqlite3 module with connection pooling
|
|
348
|
+
# - Node.js better-sqlite3 with persistent connections
|
|
349
|
+
# - Go database/sql with connection pool management
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**⚠️ REMOVED PATTERN (UNSAFE):**
|
|
353
|
+
The previous "connection pooling" pattern using process substitution and file descriptors was:
|
|
354
|
+
- **Experimental**: Not production-ready
|
|
355
|
+
- **Unreliable**: Process lifetime and FD management issues
|
|
356
|
+
- **Unsafe**: No proper error handling for connection state
|
|
357
|
+
- **Misleading**: Gave false impression of true connection pooling
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
# ❌ DO NOT USE - Removed for safety
|
|
361
|
+
# exec 3< <(sqlite3 "$DB_PATH") # Unreliable process lifetime
|
|
362
|
+
# read -r -u 3 result # No error handling
|
|
363
|
+
# exec 3<&- # Unsafe FD management
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
## Test-Driven Patterns
|
|
367
|
+
|
|
368
|
+
### Database Test Setup
|
|
369
|
+
```bash
|
|
370
|
+
setup_test_db() {
|
|
371
|
+
local test_db="/tmp/test-skills-$$.db"
|
|
372
|
+
|
|
373
|
+
sqlite3 "$test_db" <<EOF
|
|
374
|
+
CREATE TABLE skills (
|
|
375
|
+
id INTEGER PRIMARY KEY,
|
|
376
|
+
name TEXT UNIQUE NOT NULL,
|
|
377
|
+
category TEXT NOT NULL,
|
|
378
|
+
content TEXT,
|
|
379
|
+
hash TEXT
|
|
380
|
+
);
|
|
381
|
+
EOF
|
|
382
|
+
|
|
383
|
+
echo "$test_db"
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
# Usage in tests
|
|
387
|
+
TEST_DB=$(setup_test_db)
|
|
388
|
+
trap "rm -f '$TEST_DB'" EXIT
|
|
389
|
+
|
|
390
|
+
# Run tests...
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Query Result Validation
|
|
394
|
+
```bash
|
|
395
|
+
assert_query_result() {
|
|
396
|
+
local db_path="$1"
|
|
397
|
+
local query="$2"
|
|
398
|
+
local expected="$3"
|
|
399
|
+
|
|
400
|
+
local actual
|
|
401
|
+
actual=$(sqlite3 "$db_path" "$query")
|
|
402
|
+
|
|
403
|
+
if [[ "$actual" != "$expected" ]]; then
|
|
404
|
+
echo "ASSERTION FAILED" >&2
|
|
405
|
+
echo " Query: $query" >&2
|
|
406
|
+
echo " Expected: $expected" >&2
|
|
407
|
+
echo " Actual: $actual" >&2
|
|
408
|
+
return 1
|
|
409
|
+
fi
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
# Usage
|
|
413
|
+
assert_query_result "$TEST_DB" "SELECT COUNT(*) FROM skills;" "0"
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## Security Considerations
|
|
417
|
+
|
|
418
|
+
### Read-Only Connections
|
|
419
|
+
```bash
|
|
420
|
+
# Open database in read-only mode
|
|
421
|
+
sqlite3 "file:${DB_PATH}?mode=ro" "SELECT * FROM skills;"
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### Prevent Arbitrary SQL
|
|
425
|
+
```bash
|
|
426
|
+
# Whitelist allowed operations
|
|
427
|
+
execute_safe_query() {
|
|
428
|
+
local db_path="$1"
|
|
429
|
+
local operation="$2"
|
|
430
|
+
shift 2
|
|
431
|
+
|
|
432
|
+
case "$operation" in
|
|
433
|
+
count)
|
|
434
|
+
sqlite3 "$db_path" "SELECT COUNT(*) FROM skills;"
|
|
435
|
+
;;
|
|
436
|
+
list)
|
|
437
|
+
sqlite3 "$db_path" "SELECT name FROM skills ORDER BY name;"
|
|
438
|
+
;;
|
|
439
|
+
get)
|
|
440
|
+
# SQL INJECTION PREVENTION: Escape single quotes (SQLite standard)
|
|
441
|
+
# Replaces ' with '' to prevent SQL injection attacks
|
|
442
|
+
# For production deployments, use centralized escape_sql_string()
|
|
443
|
+
# from .claude/skills/workflow-codification/lib/security-utils.sh
|
|
444
|
+
local skill_name="${1//\'/\'\'}"
|
|
445
|
+
sqlite3 "$db_path" "SELECT * FROM skills WHERE name = '$skill_name';"
|
|
446
|
+
;;
|
|
447
|
+
*)
|
|
448
|
+
echo "ERROR: Invalid operation: $operation" >&2
|
|
449
|
+
return 1
|
|
450
|
+
;;
|
|
451
|
+
esac
|
|
452
|
+
}
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
## Success Criteria
|
|
456
|
+
|
|
457
|
+
- ✅ Database connectivity verified before operations
|
|
458
|
+
- ✅ SQL injection prevention via proper escaping
|
|
459
|
+
- ✅ Transaction support with rollback on failure
|
|
460
|
+
- ✅ Lock handling with timeout
|
|
461
|
+
- ✅ Schema validation before queries
|
|
462
|
+
- ✅ Error messages include context and details
|
|
463
|
+
- ✅ Read-only mode support for safe operations
|
|
464
|
+
- ✅ Test database setup patterns included
|