cokit-cli 1.0.4 → 1.0.5
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/package.json +1 -1
- package/templates/repo/.github/instructions/ck-backend.instructions.md +28 -15
- package/templates/repo/.github/instructions/ck-development.instructions.md +15 -0
- package/templates/repo/.github/instructions/ck-frontend-design-pro.instructions.md +58 -0
- package/templates/repo/.github/instructions/ck-frontend.instructions.md +20 -7
- package/templates/repo/.github/instructions/ck-google-adk-python.instructions.md +242 -0
- package/templates/repo/.github/instructions/ck-research.instructions.md +167 -0
- package/templates/repo/.github/instructions/ck-testing.instructions.md +18 -13
- package/templates/repo/.github/prompts/ck-ask.prompt.md +57 -0
- package/templates/repo/.github/prompts/ck-bootstrap-auto-fast.prompt.md +108 -0
- package/templates/repo/.github/prompts/ck-bootstrap-auto-parallel.prompt.md +66 -0
- package/templates/repo/.github/prompts/ck-bootstrap-auto.prompt.md +114 -0
- package/templates/repo/.github/prompts/ck-bootstrap.prompt.md +136 -0
- package/templates/repo/.github/prompts/ck-brainstorm.prompt.md +68 -0
- package/templates/repo/.github/prompts/ck-ck-help.prompt.md +114 -0
- package/templates/repo/.github/prompts/ck-code-auto.prompt.md +171 -0
- package/templates/repo/.github/prompts/ck-code-no-test.prompt.md +159 -0
- package/templates/repo/.github/prompts/ck-code-parallel.prompt.md +56 -0
- package/templates/repo/.github/prompts/ck-code.prompt.md +167 -18
- package/templates/repo/.github/prompts/ck-coding-level.prompt.md +54 -0
- package/templates/repo/.github/prompts/ck-cook-auto-fast.prompt.md +26 -0
- package/templates/repo/.github/prompts/ck-cook-auto-parallel.prompt.md +49 -0
- package/templates/repo/.github/prompts/ck-cook-auto.prompt.md +15 -0
- package/templates/repo/.github/prompts/ck-cook.prompt.md +96 -0
- package/templates/repo/.github/prompts/ck-debug.prompt.md +14 -0
- package/templates/repo/.github/prompts/ck-design-3d.prompt.md +84 -0
- package/templates/repo/.github/prompts/ck-design-describe.prompt.md +24 -0
- package/templates/repo/.github/prompts/ck-design-fast.prompt.md +32 -0
- package/templates/repo/.github/prompts/ck-design-good.prompt.md +36 -0
- package/templates/repo/.github/prompts/ck-design-screenshot.prompt.md +35 -0
- package/templates/repo/.github/prompts/ck-design-video.prompt.md +35 -0
- package/templates/repo/.github/prompts/ck-docs-init.prompt.md +27 -0
- package/templates/repo/.github/prompts/ck-docs-summarize.prompt.md +23 -0
- package/templates/repo/.github/prompts/ck-docs-update.prompt.md +36 -0
- package/templates/repo/.github/prompts/ck-fix-ci.prompt.md +18 -0
- package/templates/repo/.github/prompts/ck-fix-fast.prompt.md +18 -0
- package/templates/repo/.github/prompts/ck-fix-hard.prompt.md +36 -0
- package/templates/repo/.github/prompts/ck-fix-logs.prompt.md +27 -0
- package/templates/repo/.github/prompts/ck-fix-parallel.prompt.md +54 -0
- package/templates/repo/.github/prompts/ck-fix-test.prompt.md +19 -0
- package/templates/repo/.github/prompts/ck-fix-types.prompt.md +11 -0
- package/templates/repo/.github/prompts/ck-fix-ui.prompt.md +49 -0
- package/templates/repo/.github/prompts/ck-fix.prompt.md +36 -16
- package/templates/repo/.github/prompts/ck-git-cm.prompt.md +8 -0
- package/templates/repo/.github/prompts/ck-git-cp.prompt.md +7 -0
- package/templates/repo/.github/prompts/ck-git-merge.prompt.md +41 -0
- package/templates/repo/.github/prompts/ck-git-pr.prompt.md +49 -0
- package/templates/repo/.github/prompts/ck-kanban.prompt.md +77 -0
- package/templates/repo/.github/prompts/ck-plan-archive.prompt.md +58 -0
- package/templates/repo/.github/prompts/ck-plan-ci.prompt.md +34 -0
- package/templates/repo/.github/prompts/ck-plan-cro.prompt.md +66 -0
- package/templates/repo/.github/prompts/ck-plan-fast.prompt.md +67 -0
- package/templates/repo/.github/prompts/ck-plan-hard.prompt.md +89 -0
- package/templates/repo/.github/prompts/ck-plan-parallel.prompt.md +126 -0
- package/templates/repo/.github/prompts/ck-plan-two.prompt.md +43 -0
- package/templates/repo/.github/prompts/ck-plan-validate.prompt.md +118 -0
- package/templates/repo/.github/prompts/ck-plan.prompt.md +29 -25
- package/templates/repo/.github/prompts/ck-preview.prompt.md +65 -0
- package/templates/repo/.github/prompts/ck-review-codebase.prompt.md +44 -0
- package/templates/repo/.github/prompts/ck-scout-ext.prompt.md +35 -0
- package/templates/repo/.github/prompts/ck-scout.prompt.md +25 -0
- package/templates/repo/.github/prompts/ck-skill-add.prompt.md +36 -0
- package/templates/repo/.github/prompts/ck-skill-create.prompt.md +29 -0
- package/templates/repo/.github/prompts/ck-skill-fix-logs.prompt.md +22 -0
- package/templates/repo/.github/prompts/ck-skill-optimize-auto.prompt.md +25 -0
- package/templates/repo/.github/prompts/ck-skill-optimize.prompt.md +34 -0
- package/templates/repo/.github/prompts/ck-skill-plan.prompt.md +46 -0
- package/templates/repo/.github/prompts/ck-test-ui.prompt.md +92 -0
- package/templates/repo/.github/prompts/ck-test.prompt.md +6 -19
- package/templates/repo/.github/prompts/ck-use-mcp.prompt.md +27 -0
- package/templates/repo/.github/prompts/ck-watzup.prompt.md +11 -0
- package/templates/repo/.github/prompts/ck-worktree.prompt.md +127 -0
- package/templates/repo/.github/skills/ck-ai-artist/SKILL.md +73 -0
- package/templates/repo/.github/skills/ck-ai-artist/references/advanced-techniques.md +184 -0
- package/templates/repo/.github/skills/ck-ai-artist/references/domain-code.md +66 -0
- package/templates/repo/.github/skills/ck-ai-artist/references/domain-data.md +72 -0
- package/templates/repo/.github/skills/ck-ai-artist/references/domain-marketing.md +66 -0
- package/templates/repo/.github/skills/ck-ai-artist/references/domain-patterns.md +33 -0
- package/templates/repo/.github/skills/ck-ai-artist/references/domain-writing.md +68 -0
- package/templates/repo/.github/skills/ck-ai-artist/references/image-prompting.md +141 -0
- package/templates/repo/.github/skills/ck-ai-artist/references/llm-prompting.md +165 -0
- package/templates/repo/.github/skills/ck-ai-artist/references/nano-banana.md +59 -0
- package/templates/repo/.github/skills/ck-ai-artist/references/reasoning-techniques.md +201 -0
- package/templates/repo/.github/skills/ck-backend-development/SKILL.md +93 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-api-design.md +495 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-architecture.md +454 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-authentication.md +338 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-code-quality.md +659 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-debugging.md +904 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-devops.md +494 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-mindset.md +387 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-performance.md +397 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-security.md +290 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-technologies.md +256 -0
- package/templates/repo/.github/skills/ck-backend-development/references/backend-testing.md +429 -0
- package/templates/repo/.github/skills/ck-better-auth/SKILL.md +202 -0
- package/templates/repo/.github/skills/ck-better-auth/references/advanced-features.md +553 -0
- package/templates/repo/.github/skills/ck-better-auth/references/database-integration.md +577 -0
- package/templates/repo/.github/skills/ck-better-auth/references/email-password-auth.md +416 -0
- package/templates/repo/.github/skills/ck-better-auth/references/oauth-providers.md +430 -0
- package/templates/repo/.github/skills/ck-better-auth/scripts/.coverage +0 -0
- package/templates/repo/.github/skills/ck-better-auth/scripts/better_auth_init.py +521 -0
- package/templates/repo/.github/skills/ck-better-auth/scripts/requirements.txt +15 -0
- package/templates/repo/.github/skills/ck-better-auth/scripts/tests/.coverage +0 -0
- package/templates/repo/.github/skills/ck-better-auth/scripts/tests/test_better_auth_init.py +421 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/SKILL.md +470 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/references/cdp-domains.md +694 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/references/performance-guide.md +940 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/references/puppeteer-reference.md +953 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/README.md +272 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/__tests__/selector.test.js +210 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/aria-snapshot.js +362 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/click.js +83 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/console.js +79 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/evaluate.js +53 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/fill.js +76 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/inject-auth.js +229 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/install-deps.sh +181 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/install.sh +83 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/lib/browser.js +318 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/lib/selector.js +178 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/navigate.js +54 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/network.js +106 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/package-lock.json +1589 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/package.json +16 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/performance.js +149 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/screenshot.js +198 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/select-ref.js +131 -0
- package/templates/repo/.github/skills/ck-chrome-devtools/scripts/snapshot.js +135 -0
- package/templates/repo/.github/skills/ck-code-review/SKILL.md +130 -33
- package/templates/repo/.github/skills/ck-code-review/references/code-review-reception.md +209 -0
- package/templates/repo/.github/skills/ck-code-review/references/requesting-code-review.md +105 -0
- package/templates/repo/.github/skills/ck-code-review/references/verification-before-completion.md +139 -0
- package/templates/repo/.github/skills/ck-databases/SKILL.md +231 -0
- package/templates/repo/.github/skills/ck-databases/references/mongodb-aggregation.md +447 -0
- package/templates/repo/.github/skills/ck-databases/references/mongodb-atlas.md +465 -0
- package/templates/repo/.github/skills/ck-databases/references/mongodb-crud.md +408 -0
- package/templates/repo/.github/skills/ck-databases/references/mongodb-indexing.md +442 -0
- package/templates/repo/.github/skills/ck-databases/references/postgresql-administration.md +594 -0
- package/templates/repo/.github/skills/ck-databases/references/postgresql-performance.md +527 -0
- package/templates/repo/.github/skills/ck-databases/references/postgresql-psql-cli.md +467 -0
- package/templates/repo/.github/skills/ck-databases/references/postgresql-queries.md +475 -0
- package/templates/repo/.github/skills/ck-databases/scripts/.coverage +0 -0
- package/templates/repo/.github/skills/ck-databases/scripts/db_backup.py +502 -0
- package/templates/repo/.github/skills/ck-databases/scripts/db_migrate.py +425 -0
- package/templates/repo/.github/skills/ck-databases/scripts/db_performance_check.py +456 -0
- package/templates/repo/.github/skills/ck-databases/scripts/requirements.txt +20 -0
- package/templates/repo/.github/skills/ck-databases/scripts/tests/coverage-db.json +1 -0
- package/templates/repo/.github/skills/ck-databases/scripts/tests/requirements.txt +4 -0
- package/templates/repo/.github/skills/ck-databases/scripts/tests/test_db_backup.py +340 -0
- package/templates/repo/.github/skills/ck-databases/scripts/tests/test_db_migrate.py +277 -0
- package/templates/repo/.github/skills/ck-databases/scripts/tests/test_db_performance_check.py +370 -0
- package/templates/repo/.github/skills/ck-debugging/SKILL.md +70 -22
- package/templates/repo/.github/skills/ck-debugging/references/defense-in-depth.md +124 -0
- package/templates/repo/.github/skills/ck-debugging/references/root-cause-tracing.md +122 -0
- package/templates/repo/.github/skills/ck-debugging/references/systematic-debugging.md +102 -0
- package/templates/repo/.github/skills/ck-debugging/references/verification.md +123 -0
- package/templates/repo/.github/skills/ck-debugging/scripts/find-polluter.sh +63 -0
- package/templates/repo/.github/skills/ck-debugging/scripts/find-polluter.test.md +102 -0
- package/templates/repo/.github/skills/ck-devops/.env.example +76 -0
- package/templates/repo/.github/skills/ck-devops/SKILL.md +283 -0
- package/templates/repo/.github/skills/ck-devops/references/browser-rendering.md +305 -0
- package/templates/repo/.github/skills/ck-devops/references/cloudflare-d1-kv.md +123 -0
- package/templates/repo/.github/skills/ck-devops/references/cloudflare-platform.md +271 -0
- package/templates/repo/.github/skills/ck-devops/references/cloudflare-r2-storage.md +280 -0
- package/templates/repo/.github/skills/ck-devops/references/cloudflare-workers-advanced.md +312 -0
- package/templates/repo/.github/skills/ck-devops/references/cloudflare-workers-apis.md +309 -0
- package/templates/repo/.github/skills/ck-devops/references/cloudflare-workers-basics.md +418 -0
- package/templates/repo/.github/skills/ck-devops/references/docker-basics.md +297 -0
- package/templates/repo/.github/skills/ck-devops/references/docker-compose.md +292 -0
- package/templates/repo/.github/skills/ck-devops/references/gcloud-platform.md +297 -0
- package/templates/repo/.github/skills/ck-devops/references/gcloud-services.md +304 -0
- package/templates/repo/.github/skills/ck-devops/scripts/cloudflare_deploy.py +269 -0
- package/templates/repo/.github/skills/ck-devops/scripts/docker_optimize.py +331 -0
- package/templates/repo/.github/skills/ck-devops/scripts/requirements.txt +20 -0
- package/templates/repo/.github/skills/ck-devops/scripts/tests/requirements.txt +3 -0
- package/templates/repo/.github/skills/ck-devops/scripts/tests/test_cloudflare_deploy.py +285 -0
- package/templates/repo/.github/skills/ck-devops/scripts/tests/test_docker_optimize.py +436 -0
- package/templates/repo/.github/skills/ck-docs-seeker/.env.example +15 -0
- package/templates/repo/.github/skills/ck-docs-seeker/SKILL.md +96 -0
- package/templates/repo/.github/skills/ck-docs-seeker/package.json +25 -0
- package/templates/repo/.github/skills/ck-docs-seeker/references/advanced.md +79 -0
- package/templates/repo/.github/skills/ck-docs-seeker/references/context7-patterns.md +68 -0
- package/templates/repo/.github/skills/ck-docs-seeker/references/errors.md +68 -0
- package/templates/repo/.github/skills/ck-docs-seeker/references/search-patterns.md +93 -0
- package/templates/repo/.github/skills/ck-docs-seeker/references/source-evaluation.md +77 -0
- package/templates/repo/.github/skills/ck-docs-seeker/scripts/analyze-llms-txt.js +211 -0
- package/templates/repo/.github/skills/ck-docs-seeker/scripts/detect-topic.js +172 -0
- package/templates/repo/.github/skills/ck-docs-seeker/scripts/fetch-docs.js +213 -0
- package/templates/repo/.github/skills/ck-docs-seeker/scripts/tests/run-tests.js +72 -0
- package/templates/repo/.github/skills/ck-docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
- package/templates/repo/.github/skills/ck-docs-seeker/scripts/tests/test-detect-topic.js +112 -0
- package/templates/repo/.github/skills/ck-docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
- package/templates/repo/.github/skills/ck-docs-seeker/scripts/utils/env-loader.js +94 -0
- package/templates/repo/.github/skills/ck-docs-seeker/workflows/library-search.md +87 -0
- package/templates/repo/.github/skills/ck-docs-seeker/workflows/repo-analysis.md +91 -0
- package/templates/repo/.github/skills/ck-docs-seeker/workflows/topic-search.md +77 -0
- package/templates/repo/.github/skills/ck-frontend-design/SKILL.md +79 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/analysis-best-practices.md +80 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/analysis-prompts.md +141 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/analysis-techniques.md +118 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/animejs.md +396 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/design-extraction-overview.md +71 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/extraction-best-practices.md +141 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/extraction-output-templates.md +162 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/extraction-prompts.md +127 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/technical-accessibility.md +119 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/technical-best-practices.md +97 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/technical-optimization.md +44 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/technical-overview.md +90 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/technical-workflows.md +150 -0
- package/templates/repo/.github/skills/ck-frontend-design/references/visual-analysis-overview.md +95 -0
- package/templates/repo/.github/skills/ck-frontend-development/SKILL.md +399 -0
- package/templates/repo/.github/skills/ck-frontend-development/resources/common-patterns.md +331 -0
- package/templates/repo/.github/skills/ck-frontend-development/resources/complete-examples.md +872 -0
- package/templates/repo/.github/skills/ck-frontend-development/resources/component-patterns.md +502 -0
- package/templates/repo/.github/skills/ck-frontend-development/resources/data-fetching.md +767 -0
- package/templates/repo/.github/skills/ck-frontend-development/resources/file-organization.md +502 -0
- package/templates/repo/.github/skills/ck-frontend-development/resources/loading-and-error-states.md +501 -0
- package/templates/repo/.github/skills/ck-frontend-development/resources/performance.md +406 -0
- package/templates/repo/.github/skills/ck-frontend-development/resources/routing-guide.md +364 -0
- package/templates/repo/.github/skills/ck-frontend-development/resources/styling-guide.md +428 -0
- package/templates/repo/.github/skills/ck-frontend-development/resources/typescript-standards.md +418 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/SKILL.md +190 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/assets/directory-browser.css +215 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/assets/favicon.png +0 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/assets/novel-theme.css +818 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/assets/reader.js +262 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/assets/template.html +80 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/package.json +15 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +272 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/scripts/lib/port-finder.cjs +48 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/scripts/server.cjs +411 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/scripts/tests/server.test.cjs +283 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/tests/dashboard-assets.test.cjs +340 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/tests/dashboard-renderer.test.cjs +404 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/tests/http-server.test.cjs +271 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/tests/run-tests.cjs +51 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/tests/test-framework.cjs +154 -0
- package/templates/repo/.github/skills/ck-markdown-novel-viewer/tests/verify-xss.cjs +90 -0
- package/templates/repo/.github/skills/ck-mcp-builder/LICENSE.txt +202 -0
- package/templates/repo/.github/skills/ck-mcp-builder/SKILL.md +327 -0
- package/templates/repo/.github/skills/ck-mcp-builder/reference/evaluation.md +602 -0
- package/templates/repo/.github/skills/ck-mcp-builder/reference/mcp_best_practices.md +915 -0
- package/templates/repo/.github/skills/ck-mcp-builder/reference/node_mcp_server.md +916 -0
- package/templates/repo/.github/skills/ck-mcp-builder/reference/python_mcp_server.md +752 -0
- package/templates/repo/.github/skills/ck-mcp-builder/scripts/connections.py +151 -0
- package/templates/repo/.github/skills/ck-mcp-builder/scripts/evaluation.py +373 -0
- package/templates/repo/.github/skills/ck-mcp-builder/scripts/example_evaluation.xml +22 -0
- package/templates/repo/.github/skills/ck-mcp-builder/scripts/requirements.txt +2 -0
- package/templates/repo/.github/skills/ck-mcp-management/README.md +219 -0
- package/templates/repo/.github/skills/ck-mcp-management/SKILL.md +209 -0
- package/templates/repo/.github/skills/ck-mcp-management/assets/tools.json +3146 -0
- package/templates/repo/.github/skills/ck-mcp-management/references/configuration.md +114 -0
- package/templates/repo/.github/skills/ck-mcp-management/references/gemini-cli-integration.md +215 -0
- package/templates/repo/.github/skills/ck-mcp-management/references/mcp-protocol.md +116 -0
- package/templates/repo/.github/skills/ck-mcp-management/scripts/.env.example +10 -0
- package/templates/repo/.github/skills/ck-mcp-management/scripts/cli.ts +195 -0
- package/templates/repo/.github/skills/ck-mcp-management/scripts/dist/analyze-tools.js +70 -0
- package/templates/repo/.github/skills/ck-mcp-management/scripts/dist/cli.js +160 -0
- package/templates/repo/.github/skills/ck-mcp-management/scripts/dist/mcp-client.js +183 -0
- package/templates/repo/.github/skills/ck-mcp-management/scripts/mcp-client.ts +230 -0
- package/templates/repo/.github/skills/ck-mcp-management/scripts/package.json +20 -0
- package/templates/repo/.github/skills/ck-mcp-management/scripts/tsconfig.json +15 -0
- package/templates/repo/.github/skills/ck-media-processing/SKILL.md +90 -0
- package/templates/repo/.github/skills/ck-media-processing/references/common-workflows.md +132 -0
- package/templates/repo/.github/skills/ck-media-processing/references/ffmpeg-encoding.md +358 -0
- package/templates/repo/.github/skills/ck-media-processing/references/ffmpeg-filters.md +503 -0
- package/templates/repo/.github/skills/ck-media-processing/references/ffmpeg-streaming.md +403 -0
- package/templates/repo/.github/skills/ck-media-processing/references/format-compatibility.md +375 -0
- package/templates/repo/.github/skills/ck-media-processing/references/imagemagick-batch.md +612 -0
- package/templates/repo/.github/skills/ck-media-processing/references/imagemagick-editing.md +623 -0
- package/templates/repo/.github/skills/ck-media-processing/references/rmbg-background-removal.md +66 -0
- package/templates/repo/.github/skills/ck-media-processing/references/troubleshooting.md +109 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/README.md +111 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/batch-remove-background.sh +124 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/batch_resize.py +342 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/media_convert.py +311 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/remove-background.sh +96 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/remove-bg-node.js +158 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/requirements.txt +24 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/tests/.coverage +0 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/tests/requirements.txt +2 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/tests/test_batch_resize.py +372 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/tests/test_media_convert.py +259 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/tests/test_video_optimize.py +397 -0
- package/templates/repo/.github/skills/ck-media-processing/scripts/video_optimize.py +414 -0
- package/templates/repo/.github/skills/ck-mobile-development/SKILL.md +210 -0
- package/templates/repo/.github/skills/ck-mobile-development/references/mobile-android.md +604 -0
- package/templates/repo/.github/skills/ck-mobile-development/references/mobile-best-practices.md +545 -0
- package/templates/repo/.github/skills/ck-mobile-development/references/mobile-debugging.md +1089 -0
- package/templates/repo/.github/skills/ck-mobile-development/references/mobile-frameworks.md +465 -0
- package/templates/repo/.github/skills/ck-mobile-development/references/mobile-ios.md +496 -0
- package/templates/repo/.github/skills/ck-mobile-development/references/mobile-mindset.md +544 -0
- package/templates/repo/.github/skills/ck-payment-integration/README.md +185 -0
- package/templates/repo/.github/skills/ck-payment-integration/SKILL.md +116 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/polar/benefits.md +396 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/polar/best-practices.md +482 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/polar/checkouts.md +266 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/polar/overview.md +184 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/polar/products.md +244 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/polar/sdk.md +436 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/polar/subscriptions.md +340 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/polar/webhooks.md +405 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/sepay/api.md +140 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/sepay/best-practices.md +337 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/sepay/overview.md +138 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/sepay/qr-codes.md +228 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/sepay/sdk.md +213 -0
- package/templates/repo/.github/skills/ck-payment-integration/references/sepay/webhooks.md +208 -0
- package/templates/repo/.github/skills/ck-payment-integration/scripts/.env.example +20 -0
- package/templates/repo/.github/skills/ck-payment-integration/scripts/checkout-helper.js +244 -0
- package/templates/repo/.github/skills/ck-payment-integration/scripts/package.json +17 -0
- package/templates/repo/.github/skills/ck-payment-integration/scripts/polar-webhook-verify.js +202 -0
- package/templates/repo/.github/skills/ck-payment-integration/scripts/sepay-webhook-verify.js +193 -0
- package/templates/repo/.github/skills/ck-payment-integration/scripts/test-scripts.js +237 -0
- package/templates/repo/.github/skills/ck-planning/SKILL.md +112 -0
- package/templates/repo/.github/skills/ck-planning/references/codebase-understanding.md +62 -0
- package/templates/repo/.github/skills/ck-planning/references/output-standards.md +127 -0
- package/templates/repo/.github/skills/ck-planning/references/plan-organization.md +150 -0
- package/templates/repo/.github/skills/ck-planning/references/research-phase.md +49 -0
- package/templates/repo/.github/skills/ck-planning/references/solution-design.md +63 -0
- package/templates/repo/.github/skills/ck-problem-solving/SKILL.md +95 -0
- package/templates/repo/.github/skills/ck-problem-solving/references/attribution.md +69 -0
- package/templates/repo/.github/skills/ck-problem-solving/references/collision-zone-thinking.md +79 -0
- package/templates/repo/.github/skills/ck-problem-solving/references/inversion-exercise.md +91 -0
- package/templates/repo/.github/skills/ck-problem-solving/references/meta-pattern-recognition.md +87 -0
- package/templates/repo/.github/skills/ck-problem-solving/references/scale-game.md +95 -0
- package/templates/repo/.github/skills/ck-problem-solving/references/simplification-cascades.md +80 -0
- package/templates/repo/.github/skills/ck-problem-solving/references/when-stuck.md +72 -0
- package/templates/repo/.github/skills/ck-repomix/SKILL.md +247 -0
- package/templates/repo/.github/skills/ck-repomix/references/configuration.md +211 -0
- package/templates/repo/.github/skills/ck-repomix/references/usage-patterns.md +232 -0
- package/templates/repo/.github/skills/ck-repomix/scripts/.coverage +0 -0
- package/templates/repo/.github/skills/ck-repomix/scripts/README.md +179 -0
- package/templates/repo/.github/skills/ck-repomix/scripts/repomix_batch.py +455 -0
- package/templates/repo/.github/skills/ck-repomix/scripts/repos.example.json +15 -0
- package/templates/repo/.github/skills/ck-repomix/scripts/requirements.txt +15 -0
- package/templates/repo/.github/skills/ck-repomix/scripts/tests/test_repomix_batch.py +531 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/.env.example +8 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/README.md +183 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/SKILL.md +92 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/package.json +31 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/references/advanced-strategies.md +79 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/references/advanced-techniques.md +76 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/references/core-patterns.md +95 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/references/examples-api.md +88 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/references/examples-architecture.md +94 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/references/examples-debug.md +90 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/scripts/format-thought.js +159 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/scripts/process-thought.js +236 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/tests/format-thought.test.js +133 -0
- package/templates/repo/.github/skills/ck-sequential-thinking/tests/process-thought.test.js +215 -0
- package/templates/repo/.github/skills/ck-shopify/README.md +66 -0
- package/templates/repo/.github/skills/ck-shopify/SKILL.md +319 -0
- package/templates/repo/.github/skills/ck-shopify/references/app-development.md +470 -0
- package/templates/repo/.github/skills/ck-shopify/references/extensions.md +493 -0
- package/templates/repo/.github/skills/ck-shopify/references/themes.md +498 -0
- package/templates/repo/.github/skills/ck-shopify/scripts/.coverage +0 -0
- package/templates/repo/.github/skills/ck-shopify/scripts/requirements.txt +19 -0
- package/templates/repo/.github/skills/ck-shopify/scripts/shopify_init.py +423 -0
- package/templates/repo/.github/skills/ck-shopify/scripts/tests/.coverage +0 -0
- package/templates/repo/.github/skills/ck-shopify/scripts/tests/test_shopify_init.py +385 -0
- package/templates/repo/.github/skills/ck-skill-creator/LICENSE.txt +202 -0
- package/templates/repo/.github/skills/ck-skill-creator/SKILL.md +265 -0
- package/templates/repo/.github/skills/ck-skill-creator/scripts/init_skill.py +303 -0
- package/templates/repo/.github/skills/ck-skill-creator/scripts/package_skill.py +110 -0
- package/templates/repo/.github/skills/ck-skill-creator/scripts/quick_validate.py +65 -0
- package/templates/repo/.github/skills/ck-threejs/SKILL.md +87 -0
- package/templates/repo/.github/skills/ck-threejs/references/01-getting-started.md +177 -0
- package/templates/repo/.github/skills/ck-threejs/references/02-loaders.md +169 -0
- package/templates/repo/.github/skills/ck-threejs/references/03-textures.md +170 -0
- package/templates/repo/.github/skills/ck-threejs/references/04-cameras.md +195 -0
- package/templates/repo/.github/skills/ck-threejs/references/05-lights.md +183 -0
- package/templates/repo/.github/skills/ck-threejs/references/06-animations.md +214 -0
- package/templates/repo/.github/skills/ck-threejs/references/07-math.md +260 -0
- package/templates/repo/.github/skills/ck-threejs/references/08-interaction.md +267 -0
- package/templates/repo/.github/skills/ck-threejs/references/09-postprocessing.md +240 -0
- package/templates/repo/.github/skills/ck-threejs/references/10-controls.md +259 -0
- package/templates/repo/.github/skills/ck-threejs/references/11-materials-advanced.md +270 -0
- package/templates/repo/.github/skills/ck-threejs/references/12-performance.md +269 -0
- package/templates/repo/.github/skills/ck-threejs/references/13-node-materials.md +298 -0
- package/templates/repo/.github/skills/ck-threejs/references/14-physics-vr.md +304 -0
- package/templates/repo/.github/skills/ck-threejs/references/15-specialized-loaders.md +333 -0
- package/templates/repo/.github/skills/ck-threejs/references/16-webgpu.md +302 -0
- package/templates/repo/.github/skills/ck-ui-styling/LICENSE.txt +202 -0
- package/templates/repo/.github/skills/ck-ui-styling/SKILL.md +319 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/templates/repo/.github/skills/ck-ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/references/canvas-design-system.md +320 -0
- package/templates/repo/.github/skills/ck-ui-styling/references/shadcn-accessibility.md +471 -0
- package/templates/repo/.github/skills/ck-ui-styling/references/shadcn-components.md +424 -0
- package/templates/repo/.github/skills/ck-ui-styling/references/shadcn-theming.md +373 -0
- package/templates/repo/.github/skills/ck-ui-styling/references/tailwind-customization.md +483 -0
- package/templates/repo/.github/skills/ck-ui-styling/references/tailwind-responsive.md +382 -0
- package/templates/repo/.github/skills/ck-ui-styling/references/tailwind-utilities.md +455 -0
- package/templates/repo/.github/skills/ck-ui-styling/scripts/.coverage +0 -0
- package/templates/repo/.github/skills/ck-ui-styling/scripts/requirements.txt +17 -0
- package/templates/repo/.github/skills/ck-ui-styling/scripts/shadcn_add.py +292 -0
- package/templates/repo/.github/skills/ck-ui-styling/scripts/tailwind_config_gen.py +456 -0
- package/templates/repo/.github/skills/ck-ui-styling/scripts/tests/coverage-ui.json +1 -0
- package/templates/repo/.github/skills/ck-ui-styling/scripts/tests/requirements.txt +3 -0
- package/templates/repo/.github/skills/ck-ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/templates/repo/.github/skills/ck-ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/SKILL.md +227 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/charts.csv +26 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/colors.csv +97 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/landing.csv +31 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/products.csv +97 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/prompts.csv +24 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/stacks/html-tailwind.csv +51 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/styles.csv +59 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/typography.csv +58 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/scripts/core.py +236 -0
- package/templates/repo/.github/skills/ck-ui-ux-pro-max/scripts/search.py +76 -0
- package/templates/repo/.github/skills/ck-web-frameworks/SKILL.md +322 -0
- package/templates/repo/.github/skills/ck-web-frameworks/references/nextjs-app-router.md +465 -0
- package/templates/repo/.github/skills/ck-web-frameworks/references/nextjs-data-fetching.md +459 -0
- package/templates/repo/.github/skills/ck-web-frameworks/references/nextjs-optimization.md +511 -0
- package/templates/repo/.github/skills/ck-web-frameworks/references/nextjs-server-components.md +495 -0
- package/templates/repo/.github/skills/ck-web-frameworks/references/remix-icon-integration.md +603 -0
- package/templates/repo/.github/skills/ck-web-frameworks/references/turborepo-caching.md +551 -0
- package/templates/repo/.github/skills/ck-web-frameworks/references/turborepo-pipelines.md +517 -0
- package/templates/repo/.github/skills/ck-web-frameworks/references/turborepo-setup.md +542 -0
- package/templates/repo/.github/skills/ck-web-frameworks/scripts/.coverage +0 -0
- package/templates/repo/.github/skills/ck-web-frameworks/scripts/__init__.py +0 -0
- package/templates/repo/.github/skills/ck-web-frameworks/scripts/nextjs_init.py +547 -0
- package/templates/repo/.github/skills/ck-web-frameworks/scripts/requirements.txt +16 -0
- package/templates/repo/.github/skills/ck-web-frameworks/scripts/tests/coverage-web.json +1 -0
- package/templates/repo/.github/skills/ck-web-frameworks/scripts/tests/requirements.txt +3 -0
- package/templates/repo/.github/skills/ck-web-frameworks/scripts/tests/test_nextjs_init.py +319 -0
- package/templates/repo/.github/skills/ck-web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -0
- package/templates/repo/.github/skills/ck-web-frameworks/scripts/turborepo_migrate.py +394 -0
- package/templates/repo/.github/prompts/ck-docs.prompt.md +0 -23
- package/templates/repo/.github/prompts/ck-review.prompt.md +0 -24
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"""Tests for db_performance_check.py"""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import sys
|
|
5
|
+
from datetime import datetime
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from unittest.mock import Mock, patch, MagicMock
|
|
8
|
+
|
|
9
|
+
import pytest
|
|
10
|
+
|
|
11
|
+
# Add parent directory to path
|
|
12
|
+
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
13
|
+
|
|
14
|
+
from db_performance_check import (
|
|
15
|
+
SlowQuery, IndexRecommendation, PerformanceReport, PerformanceAnalyzer
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@pytest.fixture
|
|
20
|
+
def mock_mongo_client():
|
|
21
|
+
"""Mock MongoDB client."""
|
|
22
|
+
mock_client = MagicMock()
|
|
23
|
+
mock_db = MagicMock()
|
|
24
|
+
mock_client.get_default_database.return_value = mock_db
|
|
25
|
+
mock_client.server_info.return_value = {}
|
|
26
|
+
return mock_client, mock_db
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@pytest.fixture
|
|
30
|
+
def mock_postgres_conn():
|
|
31
|
+
"""Mock PostgreSQL connection."""
|
|
32
|
+
mock_conn = MagicMock()
|
|
33
|
+
mock_cursor = MagicMock()
|
|
34
|
+
mock_conn.cursor.return_value.__enter__.return_value = mock_cursor
|
|
35
|
+
return mock_conn, mock_cursor
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class TestSlowQuery:
|
|
39
|
+
"""Test SlowQuery dataclass."""
|
|
40
|
+
|
|
41
|
+
def test_slow_query_creation(self):
|
|
42
|
+
"""Test creating slow query object."""
|
|
43
|
+
query = SlowQuery(
|
|
44
|
+
query="SELECT * FROM users",
|
|
45
|
+
execution_time_ms=150.5,
|
|
46
|
+
count=10
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
assert query.query == "SELECT * FROM users"
|
|
50
|
+
assert query.execution_time_ms == 150.5
|
|
51
|
+
assert query.count == 10
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class TestIndexRecommendation:
|
|
55
|
+
"""Test IndexRecommendation dataclass."""
|
|
56
|
+
|
|
57
|
+
def test_recommendation_creation(self):
|
|
58
|
+
"""Test creating index recommendation."""
|
|
59
|
+
rec = IndexRecommendation(
|
|
60
|
+
collection_or_table="users",
|
|
61
|
+
fields=["email"],
|
|
62
|
+
reason="Frequently queried field",
|
|
63
|
+
estimated_benefit="High"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
assert rec.collection_or_table == "users"
|
|
67
|
+
assert rec.fields == ["email"]
|
|
68
|
+
assert rec.reason == "Frequently queried field"
|
|
69
|
+
assert rec.estimated_benefit == "High"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class TestPerformanceReport:
|
|
73
|
+
"""Test PerformanceReport dataclass."""
|
|
74
|
+
|
|
75
|
+
def test_report_creation(self):
|
|
76
|
+
"""Test creating performance report."""
|
|
77
|
+
report = PerformanceReport(
|
|
78
|
+
database_type="mongodb",
|
|
79
|
+
database_name="testdb",
|
|
80
|
+
timestamp=datetime.now(),
|
|
81
|
+
slow_queries=[],
|
|
82
|
+
index_recommendations=[],
|
|
83
|
+
database_metrics={}
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
assert report.database_type == "mongodb"
|
|
87
|
+
assert report.database_name == "testdb"
|
|
88
|
+
assert isinstance(report.slow_queries, list)
|
|
89
|
+
assert isinstance(report.index_recommendations, list)
|
|
90
|
+
assert isinstance(report.database_metrics, dict)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class TestPerformanceAnalyzer:
|
|
94
|
+
"""Test PerformanceAnalyzer class."""
|
|
95
|
+
|
|
96
|
+
def test_init(self):
|
|
97
|
+
"""Test analyzer initialization."""
|
|
98
|
+
analyzer = PerformanceAnalyzer("mongodb", "mongodb://localhost", 100)
|
|
99
|
+
|
|
100
|
+
assert analyzer.db_type == "mongodb"
|
|
101
|
+
assert analyzer.connection_string == "mongodb://localhost"
|
|
102
|
+
assert analyzer.threshold_ms == 100
|
|
103
|
+
|
|
104
|
+
@patch('db_performance_check.MongoClient')
|
|
105
|
+
def test_connect_mongodb(self, mock_client_class, mock_mongo_client):
|
|
106
|
+
"""Test MongoDB connection."""
|
|
107
|
+
mock_client, mock_db = mock_mongo_client
|
|
108
|
+
mock_client_class.return_value = mock_client
|
|
109
|
+
|
|
110
|
+
analyzer = PerformanceAnalyzer("mongodb", "mongodb://localhost")
|
|
111
|
+
result = analyzer.connect()
|
|
112
|
+
|
|
113
|
+
assert result is True
|
|
114
|
+
assert analyzer.client == mock_client
|
|
115
|
+
assert analyzer.db == mock_db
|
|
116
|
+
|
|
117
|
+
@patch('db_performance_check.psycopg2')
|
|
118
|
+
def test_connect_postgres(self, mock_psycopg2, mock_postgres_conn):
|
|
119
|
+
"""Test PostgreSQL connection."""
|
|
120
|
+
mock_conn, mock_cursor = mock_postgres_conn
|
|
121
|
+
mock_psycopg2.connect.return_value = mock_conn
|
|
122
|
+
|
|
123
|
+
analyzer = PerformanceAnalyzer("postgres", "postgresql://localhost")
|
|
124
|
+
result = analyzer.connect()
|
|
125
|
+
|
|
126
|
+
assert result is True
|
|
127
|
+
assert analyzer.conn == mock_conn
|
|
128
|
+
|
|
129
|
+
def test_connect_unsupported_db(self):
|
|
130
|
+
"""Test connection with unsupported database type."""
|
|
131
|
+
analyzer = PerformanceAnalyzer("unsupported", "connection_string")
|
|
132
|
+
result = analyzer.connect()
|
|
133
|
+
|
|
134
|
+
assert result is False
|
|
135
|
+
|
|
136
|
+
@patch('db_performance_check.MongoClient')
|
|
137
|
+
def test_analyze_mongodb(self, mock_client_class, mock_mongo_client):
|
|
138
|
+
"""Test MongoDB performance analysis."""
|
|
139
|
+
mock_client, mock_db = mock_mongo_client
|
|
140
|
+
mock_client_class.return_value = mock_client
|
|
141
|
+
|
|
142
|
+
# Mock profiling
|
|
143
|
+
mock_db.command.side_effect = [
|
|
144
|
+
{"was": 0}, # profile -1 (get status)
|
|
145
|
+
{}, # profile 1 (enable)
|
|
146
|
+
]
|
|
147
|
+
|
|
148
|
+
# Mock slow queries
|
|
149
|
+
mock_profile_cursor = MagicMock()
|
|
150
|
+
mock_profile_cursor.sort.return_value = [
|
|
151
|
+
{
|
|
152
|
+
"command": {"find": "users"},
|
|
153
|
+
"millis": 150,
|
|
154
|
+
"ns": "testdb.users",
|
|
155
|
+
"planSummary": "COLLSCAN"
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
mock_db.system.profile.find.return_value = mock_profile_cursor
|
|
159
|
+
|
|
160
|
+
# Mock collections
|
|
161
|
+
mock_db.list_collection_names.return_value = ["users", "orders"]
|
|
162
|
+
|
|
163
|
+
# Mock collection stats
|
|
164
|
+
mock_coll = MagicMock()
|
|
165
|
+
mock_coll.aggregate.return_value = [{"storageStats": {}}]
|
|
166
|
+
mock_coll.list_indexes.return_value = [{"name": "_id_"}]
|
|
167
|
+
mock_coll.find.return_value.limit.return_value = [
|
|
168
|
+
{"_id": 1, "name": "Alice", "email": "alice@example.com"}
|
|
169
|
+
]
|
|
170
|
+
mock_db.__getitem__.return_value = mock_coll
|
|
171
|
+
|
|
172
|
+
# Mock server status and db stats
|
|
173
|
+
mock_client.admin.command.return_value = {
|
|
174
|
+
"connections": {"current": 10},
|
|
175
|
+
"opcounters": {"query": 1000}
|
|
176
|
+
}
|
|
177
|
+
mock_db.command.return_value = {
|
|
178
|
+
"dataSize": 1024 * 1024 * 100,
|
|
179
|
+
"indexSize": 1024 * 1024 * 10,
|
|
180
|
+
"collections": 5
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
analyzer = PerformanceAnalyzer("mongodb", "mongodb://localhost")
|
|
184
|
+
analyzer.connect()
|
|
185
|
+
|
|
186
|
+
report = analyzer.analyze()
|
|
187
|
+
|
|
188
|
+
assert report is not None
|
|
189
|
+
assert report.database_type == "mongodb"
|
|
190
|
+
assert isinstance(report.slow_queries, list)
|
|
191
|
+
assert isinstance(report.index_recommendations, list)
|
|
192
|
+
assert isinstance(report.database_metrics, dict)
|
|
193
|
+
|
|
194
|
+
@patch('db_performance_check.psycopg2')
|
|
195
|
+
def test_analyze_postgres(self, mock_psycopg2, mock_postgres_conn):
|
|
196
|
+
"""Test PostgreSQL performance analysis."""
|
|
197
|
+
mock_conn, mock_cursor = mock_postgres_conn
|
|
198
|
+
mock_psycopg2.connect.return_value = mock_conn
|
|
199
|
+
|
|
200
|
+
# Mock cursor results
|
|
201
|
+
mock_cursor.fetchone.side_effect = [
|
|
202
|
+
{"has_extension": True}, # pg_stat_statements check
|
|
203
|
+
{"connections": 10, "commits": 1000, "rollbacks": 5}, # stats
|
|
204
|
+
{"db_size": 1024 * 1024 * 500}, # database size
|
|
205
|
+
{"cache_hit_ratio": 0.95} # cache hit ratio
|
|
206
|
+
]
|
|
207
|
+
|
|
208
|
+
mock_cursor.fetchall.side_effect = [
|
|
209
|
+
# Slow queries
|
|
210
|
+
[
|
|
211
|
+
{
|
|
212
|
+
"query": "SELECT * FROM users",
|
|
213
|
+
"mean_exec_time": 150.5,
|
|
214
|
+
"calls": 100,
|
|
215
|
+
"total_exec_time": 15050
|
|
216
|
+
}
|
|
217
|
+
],
|
|
218
|
+
# Sequential scans
|
|
219
|
+
[
|
|
220
|
+
{
|
|
221
|
+
"schemaname": "public",
|
|
222
|
+
"tablename": "users",
|
|
223
|
+
"seq_scan": 5000,
|
|
224
|
+
"seq_tup_read": 500000,
|
|
225
|
+
"idx_scan": 100
|
|
226
|
+
}
|
|
227
|
+
],
|
|
228
|
+
# Unused indexes
|
|
229
|
+
[]
|
|
230
|
+
]
|
|
231
|
+
|
|
232
|
+
analyzer = PerformanceAnalyzer("postgres", "postgresql://localhost")
|
|
233
|
+
analyzer.connect()
|
|
234
|
+
|
|
235
|
+
report = analyzer.analyze()
|
|
236
|
+
|
|
237
|
+
assert report is not None
|
|
238
|
+
assert report.database_type == "postgres"
|
|
239
|
+
assert len(report.slow_queries) > 0
|
|
240
|
+
assert len(report.index_recommendations) > 0
|
|
241
|
+
|
|
242
|
+
def test_print_report(self, capsys):
|
|
243
|
+
"""Test report printing."""
|
|
244
|
+
analyzer = PerformanceAnalyzer("mongodb", "mongodb://localhost")
|
|
245
|
+
|
|
246
|
+
report = PerformanceReport(
|
|
247
|
+
database_type="mongodb",
|
|
248
|
+
database_name="testdb",
|
|
249
|
+
timestamp=datetime.now(),
|
|
250
|
+
slow_queries=[
|
|
251
|
+
SlowQuery(
|
|
252
|
+
query="db.users.find({age: {$gte: 18}})",
|
|
253
|
+
execution_time_ms=150.5,
|
|
254
|
+
count=10,
|
|
255
|
+
collection_or_table="users"
|
|
256
|
+
)
|
|
257
|
+
],
|
|
258
|
+
index_recommendations=[
|
|
259
|
+
IndexRecommendation(
|
|
260
|
+
collection_or_table="users",
|
|
261
|
+
fields=["age"],
|
|
262
|
+
reason="Frequently queried field",
|
|
263
|
+
estimated_benefit="High"
|
|
264
|
+
)
|
|
265
|
+
],
|
|
266
|
+
database_metrics={
|
|
267
|
+
"connections": 10,
|
|
268
|
+
"database_size_mb": 100.5
|
|
269
|
+
}
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
analyzer.print_report(report)
|
|
273
|
+
|
|
274
|
+
captured = capsys.readouterr()
|
|
275
|
+
assert "Database Performance Report" in captured.out
|
|
276
|
+
assert "testdb" in captured.out
|
|
277
|
+
assert "150.5ms" in captured.out
|
|
278
|
+
assert "users" in captured.out
|
|
279
|
+
|
|
280
|
+
def test_save_report(self, tmp_path):
|
|
281
|
+
"""Test saving report to JSON."""
|
|
282
|
+
analyzer = PerformanceAnalyzer("mongodb", "mongodb://localhost")
|
|
283
|
+
|
|
284
|
+
report = PerformanceReport(
|
|
285
|
+
database_type="mongodb",
|
|
286
|
+
database_name="testdb",
|
|
287
|
+
timestamp=datetime.now(),
|
|
288
|
+
slow_queries=[],
|
|
289
|
+
index_recommendations=[],
|
|
290
|
+
database_metrics={}
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
output_file = tmp_path / "report.json"
|
|
294
|
+
analyzer.save_report(report, str(output_file))
|
|
295
|
+
|
|
296
|
+
assert output_file.exists()
|
|
297
|
+
|
|
298
|
+
with open(output_file) as f:
|
|
299
|
+
data = json.load(f)
|
|
300
|
+
assert data["database_type"] == "mongodb"
|
|
301
|
+
assert data["database_name"] == "testdb"
|
|
302
|
+
|
|
303
|
+
def test_disconnect(self):
|
|
304
|
+
"""Test disconnection."""
|
|
305
|
+
analyzer = PerformanceAnalyzer("mongodb", "mongodb://localhost")
|
|
306
|
+
|
|
307
|
+
# Mock client and connection
|
|
308
|
+
analyzer.client = MagicMock()
|
|
309
|
+
analyzer.conn = MagicMock()
|
|
310
|
+
|
|
311
|
+
analyzer.disconnect()
|
|
312
|
+
|
|
313
|
+
analyzer.client.close.assert_called_once()
|
|
314
|
+
analyzer.conn.close.assert_called_once()
|
|
315
|
+
|
|
316
|
+
@patch('db_performance_check.MongoClient')
|
|
317
|
+
def test_analyze_error_handling(self, mock_client_class, mock_mongo_client):
|
|
318
|
+
"""Test error handling during analysis."""
|
|
319
|
+
mock_client, mock_db = mock_mongo_client
|
|
320
|
+
mock_client_class.return_value = mock_client
|
|
321
|
+
|
|
322
|
+
# Simulate error
|
|
323
|
+
mock_db.command.side_effect = Exception("Database error")
|
|
324
|
+
|
|
325
|
+
analyzer = PerformanceAnalyzer("mongodb", "mongodb://localhost")
|
|
326
|
+
analyzer.connect()
|
|
327
|
+
|
|
328
|
+
report = analyzer.analyze()
|
|
329
|
+
|
|
330
|
+
assert report is None
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
class TestIntegration:
|
|
334
|
+
"""Integration tests."""
|
|
335
|
+
|
|
336
|
+
@patch('db_performance_check.MongoClient')
|
|
337
|
+
def test_full_mongodb_workflow(self, mock_client_class, mock_mongo_client, tmp_path):
|
|
338
|
+
"""Test complete MongoDB analysis workflow."""
|
|
339
|
+
mock_client, mock_db = mock_mongo_client
|
|
340
|
+
mock_client_class.return_value = mock_client
|
|
341
|
+
|
|
342
|
+
# Setup mocks
|
|
343
|
+
mock_db.command.return_value = {"was": 0}
|
|
344
|
+
mock_db.system.profile.find.return_value.sort.return_value = []
|
|
345
|
+
mock_db.list_collection_names.return_value = []
|
|
346
|
+
mock_client.admin.command.return_value = {
|
|
347
|
+
"connections": {"current": 10},
|
|
348
|
+
"opcounters": {"query": 1000}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
analyzer = PerformanceAnalyzer("mongodb", "mongodb://localhost", 100)
|
|
352
|
+
|
|
353
|
+
# Connect
|
|
354
|
+
assert analyzer.connect() is True
|
|
355
|
+
|
|
356
|
+
# Analyze
|
|
357
|
+
report = analyzer.analyze()
|
|
358
|
+
assert report is not None
|
|
359
|
+
|
|
360
|
+
# Save report
|
|
361
|
+
output_file = tmp_path / "report.json"
|
|
362
|
+
analyzer.save_report(report, str(output_file))
|
|
363
|
+
assert output_file.exists()
|
|
364
|
+
|
|
365
|
+
# Disconnect
|
|
366
|
+
analyzer.disconnect()
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
if __name__ == "__main__":
|
|
370
|
+
pytest.main([__file__, "-v"])
|
|
@@ -1,34 +1,82 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: debugging
|
|
3
|
-
description: Systematic debugging
|
|
2
|
+
name: 'ck-debugging'
|
|
3
|
+
description: 'Systematic debugging framework ensuring root cause investigation before fixes. Includes four-phase debugging process, backward call stack tracing, multi-layer validation, and verification protocols. Use when encountering bugs, test failures, unexpected behavior, performance issues, or before claiming work complete. Prevents random fixes, masks over symptoms, and false completion claims.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Debugging
|
|
6
|
+
# Debugging
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Comprehensive debugging framework combining systematic investigation, root cause tracing, defense-in-depth validation, and verification protocols.
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Core Principle
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
- Code isn't working as expected
|
|
14
|
-
- User asks to "fix" something
|
|
12
|
+
**NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST**
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
Random fixes waste time and create new bugs. Find the root cause, fix at source, validate at every layer, verify before claiming success.
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
## When to Use
|
|
19
17
|
|
|
20
|
-
|
|
18
|
+
**Always use for:** Test failures, bugs, unexpected behavior, performance issues, build failures, integration problems, before claiming work complete
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
2. **Reproduce** - Can you trigger the issue?
|
|
24
|
-
3. **Isolate** - Where does it fail?
|
|
25
|
-
4. **Root Cause** - Why does it fail?
|
|
26
|
-
5. **Fix** - Make minimal change
|
|
27
|
-
6. **Verify** - Test the fix works
|
|
20
|
+
**Especially when:** Under time pressure, "quick fix" seems obvious, tried multiple fixes, don't fully understand issue, about to claim success
|
|
28
21
|
|
|
29
|
-
##
|
|
22
|
+
## The Four Techniques
|
|
30
23
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
24
|
+
### 1. Systematic Debugging (`references/systematic-debugging.md`)
|
|
25
|
+
|
|
26
|
+
Four-phase framework ensuring proper investigation:
|
|
27
|
+
- Phase 1: Root Cause Investigation (read errors, reproduce, check changes, gather evidence)
|
|
28
|
+
- Phase 2: Pattern Analysis (find working examples, compare, identify differences)
|
|
29
|
+
- Phase 3: Hypothesis and Testing (form theory, test minimally, verify)
|
|
30
|
+
- Phase 4: Implementation (create test, fix once, verify)
|
|
31
|
+
|
|
32
|
+
**Key rule:** Complete each phase before proceeding. No fixes without Phase 1.
|
|
33
|
+
|
|
34
|
+
**Load when:** Any bug/issue requiring investigation and fix
|
|
35
|
+
|
|
36
|
+
### 2. Root Cause Tracing (`references/root-cause-tracing.md`)
|
|
37
|
+
|
|
38
|
+
Trace bugs backward through call stack to find original trigger.
|
|
39
|
+
|
|
40
|
+
**Technique:** When error appears deep in execution, trace backward level-by-level until finding source where invalid data originated. Fix at source, not at symptom.
|
|
41
|
+
|
|
42
|
+
**Includes:** `scripts/find-polluter.sh` for bisecting test pollution
|
|
43
|
+
|
|
44
|
+
**Load when:** Error deep in call stack, unclear where invalid data originated
|
|
45
|
+
|
|
46
|
+
### 3. Defense-in-Depth (`references/defense-in-depth.md`)
|
|
47
|
+
|
|
48
|
+
Validate at every layer data passes through. Make bugs impossible.
|
|
49
|
+
|
|
50
|
+
**Four layers:** Entry validation → Business logic → Environment guards → Debug instrumentation
|
|
51
|
+
|
|
52
|
+
**Load when:** After finding root cause, need to add comprehensive validation
|
|
53
|
+
|
|
54
|
+
### 4. Verification (`references/verification.md`)
|
|
55
|
+
|
|
56
|
+
Run verification commands and confirm output before claiming success.
|
|
57
|
+
|
|
58
|
+
**Iron law:** NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
|
|
59
|
+
|
|
60
|
+
Run the command. Read the output. Then claim the result.
|
|
61
|
+
|
|
62
|
+
**Load when:** About to claim work complete, fixed, or passing
|
|
63
|
+
|
|
64
|
+
## Quick Reference
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
Bug → systematic-debugging.md (Phase 1-4)
|
|
68
|
+
Error deep in stack? → root-cause-tracing.md (trace backward)
|
|
69
|
+
Found root cause? → defense-in-depth.md (add layers)
|
|
70
|
+
About to claim success? → verification.md (verify first)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Red Flags
|
|
74
|
+
|
|
75
|
+
Stop and follow process if thinking:
|
|
76
|
+
- "Quick fix for now, investigate later"
|
|
77
|
+
- "Just try changing X and see if it works"
|
|
78
|
+
- "It's probably X, let me fix that"
|
|
79
|
+
- "Should work now" / "Seems fixed"
|
|
80
|
+
- "Tests pass, we're done"
|
|
81
|
+
|
|
82
|
+
**All mean:** Return to systematic process.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Defense-in-Depth Validation
|
|
2
|
+
|
|
3
|
+
Validate at every layer data passes through to make bugs impossible.
|
|
4
|
+
|
|
5
|
+
## Core Principle
|
|
6
|
+
|
|
7
|
+
**Validate at EVERY layer data passes through. Make bug structurally impossible.**
|
|
8
|
+
|
|
9
|
+
When fix bug caused by invalid data, adding validation at one place feels sufficient. But single check can be bypassed by different code paths, refactoring, or mocks.
|
|
10
|
+
|
|
11
|
+
## Why Multiple Layers
|
|
12
|
+
|
|
13
|
+
Single validation: "We fixed bug"
|
|
14
|
+
Multiple layers: "We made bug impossible"
|
|
15
|
+
|
|
16
|
+
Different layers catch different cases:
|
|
17
|
+
- Entry validation catches most bugs
|
|
18
|
+
- Business logic catches edge cases
|
|
19
|
+
- Environment guards prevent context-specific dangers
|
|
20
|
+
- Debug logging helps when other layers fail
|
|
21
|
+
|
|
22
|
+
## The Four Layers
|
|
23
|
+
|
|
24
|
+
### Layer 1: Entry Point Validation
|
|
25
|
+
**Purpose:** Reject obviously invalid input at API boundary
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
function createProject(name: string, workingDirectory: string) {
|
|
29
|
+
if (!workingDirectory || workingDirectory.trim() === '') {
|
|
30
|
+
throw new Error('workingDirectory cannot be empty');
|
|
31
|
+
}
|
|
32
|
+
if (!existsSync(workingDirectory)) {
|
|
33
|
+
throw new Error(`workingDirectory does not exist: ${workingDirectory}`);
|
|
34
|
+
}
|
|
35
|
+
if (!statSync(workingDirectory).isDirectory()) {
|
|
36
|
+
throw new Error(`workingDirectory is not a directory: ${workingDirectory}`);
|
|
37
|
+
}
|
|
38
|
+
// proceed
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Layer 2: Business Logic Validation
|
|
43
|
+
**Purpose:** Ensure data makes sense for this operation
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
function initializeWorkspace(projectDir: string, sessionId: string) {
|
|
47
|
+
if (!projectDir) {
|
|
48
|
+
throw new Error('projectDir required for workspace initialization');
|
|
49
|
+
}
|
|
50
|
+
// proceed
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Layer 3: Environment Guards
|
|
55
|
+
**Purpose:** Prevent dangerous operations in specific contexts
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
async function gitInit(directory: string) {
|
|
59
|
+
// In tests, refuse git init outside temp directories
|
|
60
|
+
if (process.env.NODE_ENV === 'test') {
|
|
61
|
+
const normalized = normalize(resolve(directory));
|
|
62
|
+
const tmpDir = normalize(resolve(tmpdir()));
|
|
63
|
+
|
|
64
|
+
if (!normalized.startsWith(tmpDir)) {
|
|
65
|
+
throw new Error(
|
|
66
|
+
`Refusing git init outside temp dir during tests: ${directory}`
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// proceed
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Layer 4: Debug Instrumentation
|
|
75
|
+
**Purpose:** Capture context for forensics
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
async function gitInit(directory: string) {
|
|
79
|
+
const stack = new Error().stack;
|
|
80
|
+
logger.debug('About to git init', {
|
|
81
|
+
directory,
|
|
82
|
+
cwd: process.cwd(),
|
|
83
|
+
stack,
|
|
84
|
+
});
|
|
85
|
+
// proceed
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Applying the Pattern
|
|
90
|
+
|
|
91
|
+
When find bug:
|
|
92
|
+
|
|
93
|
+
1. **Trace data flow** - Where does bad value originate? Where used?
|
|
94
|
+
2. **Map all checkpoints** - List every point data passes through
|
|
95
|
+
3. **Add validation at each layer** - Entry, business, environment, debug
|
|
96
|
+
4. **Test each layer** - Try to bypass layer 1, verify layer 2 catches it
|
|
97
|
+
|
|
98
|
+
## Example from Real Session
|
|
99
|
+
|
|
100
|
+
Bug: Empty `projectDir` caused `git init` in source code
|
|
101
|
+
|
|
102
|
+
**Data flow:**
|
|
103
|
+
1. Test setup → empty string
|
|
104
|
+
2. `Project.create(name, '')`
|
|
105
|
+
3. `WorkspaceManager.createWorkspace('')`
|
|
106
|
+
4. `git init` runs in `process.cwd()`
|
|
107
|
+
|
|
108
|
+
**Four layers added:**
|
|
109
|
+
- Layer 1: `Project.create()` validates not empty/exists/writable
|
|
110
|
+
- Layer 2: `WorkspaceManager` validates projectDir not empty
|
|
111
|
+
- Layer 3: `WorktreeManager` refuses git init outside tmpdir in tests
|
|
112
|
+
- Layer 4: Stack trace logging before git init
|
|
113
|
+
|
|
114
|
+
**Result:** All 1847 tests passed, bug impossible to reproduce
|
|
115
|
+
|
|
116
|
+
## Key Insight
|
|
117
|
+
|
|
118
|
+
All four layers were necessary. During testing, each layer caught bugs others missed:
|
|
119
|
+
- Different code paths bypassed entry validation
|
|
120
|
+
- Mocks bypassed business logic checks
|
|
121
|
+
- Edge cases on different platforms needed environment guards
|
|
122
|
+
- Debug logging identified structural misuse
|
|
123
|
+
|
|
124
|
+
**Don't stop at one validation point.** Add checks at every layer.
|