cokit-cli 1.0.1 → 1.0.2
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/AGENTS.md +103 -0
- package/README.FLOW.md +237 -0
- package/README.md +153 -94
- package/agents/brainstormer.agent.md +71 -0
- package/agents/code-reviewer.agent.md +128 -0
- package/agents/database-admin.agent.md +91 -0
- package/agents/debugger.agent.md +128 -0
- package/agents/docs-manager.agent.md +121 -0
- package/agents/fullstack-developer.agent.md +96 -0
- package/agents/git-manager.agent.md +392 -0
- package/agents/mcp-manager.agent.md +93 -0
- package/agents/planner.agent.md +94 -0
- package/agents/project-manager.agent.md +124 -0
- package/agents/researcher.agent.md +32 -0
- package/agents/scout-external.agent.md +141 -0
- package/agents/scout.agent.md +107 -0
- package/agents/tester.agent.md +106 -0
- package/agents/ui-ux-designer.agent.md +225 -0
- package/collections/ck-core.collection.yml +30 -0
- package/collections/ck-development-rules.collection.yml +18 -0
- package/collections/ck-documentation.collection.yml +18 -0
- package/collections/ck-git-workflow.collection.yml +18 -0
- package/collections/ck-orchestration.collection.yml +22 -0
- package/collections/ck-ui-design.collection.yml +18 -0
- package/docs/README.md +85 -0
- package/docs/copilot-processing-flow.md +128 -0
- package/instructions/ck-backend.instructions.md +48 -0
- package/instructions/ck-development.instructions.md +40 -0
- package/instructions/ck-frontend-design-pro.instructions.md +58 -0
- package/instructions/ck-frontend.instructions.md +44 -0
- package/instructions/ck-google-adk-python.instructions.md +242 -0
- package/instructions/ck-research.instructions.md +167 -0
- package/instructions/ck-testing.instructions.md +36 -0
- package/package.json +9 -2
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-01-restructure-folders.md +183 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-02-convert-agents.md +206 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-03-convert-commands-to-prompts.md +284 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-04-convert-skills-to-instructions.md +349 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-05-create-collections.md +320 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-06-update-cli-build-scripts.md +450 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-07-update-documentation.md +407 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/plan.md +136 -0
- package/prompts/ck-ask.prompt.md +57 -0
- package/prompts/ck-bootstrap-auto-fast.prompt.md +108 -0
- package/prompts/ck-bootstrap-auto-parallel.prompt.md +66 -0
- package/prompts/ck-bootstrap-auto.prompt.md +114 -0
- package/prompts/ck-bootstrap.prompt.md +136 -0
- package/prompts/ck-brainstorm.prompt.md +68 -0
- package/prompts/ck-ck-help.prompt.md +114 -0
- package/prompts/ck-code-auto.prompt.md +171 -0
- package/prompts/ck-code-no-test.prompt.md +159 -0
- package/prompts/ck-code-parallel.prompt.md +56 -0
- package/prompts/ck-code.prompt.md +177 -0
- package/prompts/ck-coding-level.prompt.md +54 -0
- package/prompts/ck-cook-auto-fast.prompt.md +26 -0
- package/prompts/ck-cook-auto-parallel.prompt.md +49 -0
- package/prompts/ck-cook-auto.prompt.md +15 -0
- package/prompts/ck-cook.prompt.md +96 -0
- package/prompts/ck-debug.prompt.md +14 -0
- package/prompts/ck-design-3d.prompt.md +84 -0
- package/prompts/ck-design-describe.prompt.md +24 -0
- package/prompts/ck-design-fast.prompt.md +32 -0
- package/prompts/ck-design-good.prompt.md +36 -0
- package/prompts/ck-design-screenshot.prompt.md +35 -0
- package/prompts/ck-design-video.prompt.md +35 -0
- package/prompts/ck-docs-init.prompt.md +27 -0
- package/prompts/ck-docs-summarize.prompt.md +23 -0
- package/prompts/ck-docs-update.prompt.md +36 -0
- package/prompts/ck-fix-ci.prompt.md +18 -0
- package/prompts/ck-fix-fast.prompt.md +18 -0
- package/prompts/ck-fix-hard.prompt.md +36 -0
- package/prompts/ck-fix-logs.prompt.md +27 -0
- package/prompts/ck-fix-parallel.prompt.md +54 -0
- package/prompts/ck-fix-test.prompt.md +19 -0
- package/prompts/ck-fix-types.prompt.md +11 -0
- package/prompts/ck-fix-ui.prompt.md +49 -0
- package/prompts/ck-fix.prompt.md +44 -0
- package/prompts/ck-git-cm.prompt.md +8 -0
- package/prompts/ck-git-cp.prompt.md +7 -0
- package/prompts/ck-git-merge.prompt.md +41 -0
- package/prompts/ck-git-pr.prompt.md +49 -0
- package/prompts/ck-kanban.prompt.md +77 -0
- package/prompts/ck-plan-archive.prompt.md +58 -0
- package/prompts/ck-plan-ci.prompt.md +34 -0
- package/prompts/ck-plan-cro.prompt.md +66 -0
- package/prompts/ck-plan-fast.prompt.md +67 -0
- package/prompts/ck-plan-hard.prompt.md +89 -0
- package/prompts/ck-plan-parallel.prompt.md +126 -0
- package/prompts/ck-plan-two.prompt.md +43 -0
- package/prompts/ck-plan-validate.prompt.md +118 -0
- package/prompts/ck-plan.prompt.md +29 -1
- package/prompts/ck-preview.prompt.md +65 -0
- package/prompts/ck-review-codebase.prompt.md +44 -0
- package/prompts/ck-scout-ext.prompt.md +35 -0
- package/prompts/ck-scout.prompt.md +25 -0
- package/prompts/ck-skill-add.prompt.md +36 -0
- package/prompts/ck-skill-create.prompt.md +29 -0
- package/prompts/ck-skill-fix-logs.prompt.md +22 -0
- package/prompts/ck-skill-optimize-auto.prompt.md +25 -0
- package/prompts/ck-skill-optimize.prompt.md +34 -0
- package/prompts/ck-skill-plan.prompt.md +46 -0
- package/prompts/ck-test-ui.prompt.md +92 -0
- package/prompts/ck-test.prompt.md +10 -0
- package/prompts/ck-use-mcp.prompt.md +27 -0
- package/prompts/ck-watzup.prompt.md +11 -0
- package/prompts/ck-worktree.prompt.md +127 -0
- package/rules/README.agents.md +55 -0
- package/rules/README.collections.md +78 -0
- package/rules/README.copilot-instructions.md +66 -0
- package/rules/README.instructions.md +73 -0
- package/rules/README.md +39 -0
- package/rules/README.prompts.md +76 -0
- package/rules/README.skills.md +71 -0
- package/skills/ck-ai-artist/SKILL.md +73 -0
- package/skills/ck-ai-artist/references/advanced-techniques.md +184 -0
- package/skills/ck-ai-artist/references/domain-code.md +66 -0
- package/skills/ck-ai-artist/references/domain-data.md +72 -0
- package/skills/ck-ai-artist/references/domain-marketing.md +66 -0
- package/skills/ck-ai-artist/references/domain-patterns.md +33 -0
- package/skills/ck-ai-artist/references/domain-writing.md +68 -0
- package/skills/ck-ai-artist/references/image-prompting.md +141 -0
- package/skills/ck-ai-artist/references/llm-prompting.md +165 -0
- package/skills/ck-ai-artist/references/nano-banana.md +59 -0
- package/skills/ck-ai-artist/references/reasoning-techniques.md +201 -0
- package/skills/ck-backend-development/SKILL.md +93 -0
- package/skills/ck-backend-development/references/backend-api-design.md +495 -0
- package/skills/ck-backend-development/references/backend-architecture.md +454 -0
- package/skills/ck-backend-development/references/backend-authentication.md +338 -0
- package/skills/ck-backend-development/references/backend-code-quality.md +659 -0
- package/skills/ck-backend-development/references/backend-debugging.md +904 -0
- package/skills/ck-backend-development/references/backend-devops.md +494 -0
- package/skills/ck-backend-development/references/backend-mindset.md +387 -0
- package/skills/ck-backend-development/references/backend-performance.md +397 -0
- package/skills/ck-backend-development/references/backend-security.md +290 -0
- package/skills/ck-backend-development/references/backend-technologies.md +256 -0
- package/skills/ck-backend-development/references/backend-testing.md +429 -0
- package/skills/ck-better-auth/SKILL.md +202 -0
- package/skills/ck-better-auth/references/advanced-features.md +553 -0
- package/skills/ck-better-auth/references/database-integration.md +577 -0
- package/skills/ck-better-auth/references/email-password-auth.md +416 -0
- package/skills/ck-better-auth/references/oauth-providers.md +430 -0
- package/skills/ck-better-auth/scripts/.coverage +0 -0
- package/skills/ck-better-auth/scripts/better_auth_init.py +521 -0
- package/skills/ck-better-auth/scripts/requirements.txt +15 -0
- package/skills/ck-better-auth/scripts/tests/.coverage +0 -0
- package/skills/ck-better-auth/scripts/tests/test_better_auth_init.py +421 -0
- package/skills/ck-chrome-devtools/SKILL.md +470 -0
- package/skills/ck-chrome-devtools/references/cdp-domains.md +694 -0
- package/skills/ck-chrome-devtools/references/performance-guide.md +940 -0
- package/skills/ck-chrome-devtools/references/puppeteer-reference.md +953 -0
- package/skills/ck-chrome-devtools/scripts/README.md +272 -0
- package/skills/ck-chrome-devtools/scripts/__tests__/selector.test.js +210 -0
- package/skills/ck-chrome-devtools/scripts/aria-snapshot.js +362 -0
- package/skills/ck-chrome-devtools/scripts/click.js +83 -0
- package/skills/ck-chrome-devtools/scripts/console.js +79 -0
- package/skills/ck-chrome-devtools/scripts/evaluate.js +53 -0
- package/skills/ck-chrome-devtools/scripts/fill.js +76 -0
- package/skills/ck-chrome-devtools/scripts/inject-auth.js +229 -0
- package/skills/ck-chrome-devtools/scripts/install-deps.sh +181 -0
- package/skills/ck-chrome-devtools/scripts/install.sh +83 -0
- package/skills/ck-chrome-devtools/scripts/lib/browser.js +318 -0
- package/skills/ck-chrome-devtools/scripts/lib/selector.js +178 -0
- package/skills/ck-chrome-devtools/scripts/navigate.js +54 -0
- package/skills/ck-chrome-devtools/scripts/network.js +106 -0
- package/skills/ck-chrome-devtools/scripts/package-lock.json +1589 -0
- package/skills/ck-chrome-devtools/scripts/package.json +16 -0
- package/skills/ck-chrome-devtools/scripts/performance.js +149 -0
- package/skills/ck-chrome-devtools/scripts/screenshot.js +198 -0
- package/skills/ck-chrome-devtools/scripts/select-ref.js +131 -0
- package/skills/ck-chrome-devtools/scripts/snapshot.js +135 -0
- package/skills/ck-code-review/SKILL.md +110 -53
- package/skills/ck-code-review/references/code-review-reception.md +182 -49
- package/skills/ck-code-review/references/requesting-code-review.md +105 -0
- package/skills/ck-code-review/references/verification-before-completion.md +111 -58
- package/skills/ck-databases/SKILL.md +231 -0
- package/skills/ck-databases/references/mongodb-aggregation.md +447 -0
- package/skills/ck-databases/references/mongodb-atlas.md +465 -0
- package/skills/ck-databases/references/mongodb-crud.md +408 -0
- package/skills/ck-databases/references/mongodb-indexing.md +442 -0
- package/skills/ck-databases/references/postgresql-administration.md +594 -0
- package/skills/ck-databases/references/postgresql-performance.md +527 -0
- package/skills/ck-databases/references/postgresql-psql-cli.md +467 -0
- package/skills/ck-databases/references/postgresql-queries.md +475 -0
- package/skills/ck-databases/scripts/.coverage +0 -0
- package/skills/ck-databases/scripts/db_backup.py +502 -0
- package/skills/ck-databases/scripts/db_migrate.py +425 -0
- package/skills/ck-databases/scripts/db_performance_check.py +456 -0
- package/skills/ck-databases/scripts/requirements.txt +20 -0
- package/skills/ck-databases/scripts/tests/coverage-db.json +1 -0
- package/skills/ck-databases/scripts/tests/requirements.txt +4 -0
- package/skills/ck-databases/scripts/tests/test_db_backup.py +340 -0
- package/skills/ck-databases/scripts/tests/test_db_migrate.py +277 -0
- package/skills/ck-databases/scripts/tests/test_db_performance_check.py +370 -0
- package/skills/ck-debugging/SKILL.md +55 -43
- package/skills/ck-debugging/references/defense-in-depth.md +124 -0
- package/skills/ck-debugging/references/root-cause-tracing.md +100 -43
- package/skills/ck-debugging/references/systematic-debugging.md +80 -52
- package/skills/ck-debugging/references/verification.md +101 -52
- package/skills/ck-debugging/scripts/find-polluter.sh +63 -0
- package/skills/ck-debugging/scripts/find-polluter.test.md +102 -0
- package/skills/ck-devops/.env.example +76 -0
- package/skills/ck-devops/SKILL.md +283 -0
- package/skills/ck-devops/references/browser-rendering.md +305 -0
- package/skills/ck-devops/references/cloudflare-d1-kv.md +123 -0
- package/skills/ck-devops/references/cloudflare-platform.md +271 -0
- package/skills/ck-devops/references/cloudflare-r2-storage.md +280 -0
- package/skills/ck-devops/references/cloudflare-workers-advanced.md +312 -0
- package/skills/ck-devops/references/cloudflare-workers-apis.md +309 -0
- package/skills/ck-devops/references/cloudflare-workers-basics.md +418 -0
- package/skills/ck-devops/references/docker-basics.md +297 -0
- package/skills/ck-devops/references/docker-compose.md +292 -0
- package/skills/ck-devops/references/gcloud-platform.md +297 -0
- package/skills/ck-devops/references/gcloud-services.md +304 -0
- package/skills/ck-devops/scripts/cloudflare_deploy.py +269 -0
- package/skills/ck-devops/scripts/docker_optimize.py +331 -0
- package/skills/ck-devops/scripts/requirements.txt +20 -0
- package/skills/ck-devops/scripts/tests/requirements.txt +3 -0
- package/skills/ck-devops/scripts/tests/test_cloudflare_deploy.py +285 -0
- package/skills/ck-devops/scripts/tests/test_docker_optimize.py +436 -0
- package/skills/ck-docs-seeker/.env.example +15 -0
- package/skills/ck-docs-seeker/SKILL.md +70 -65
- package/skills/ck-docs-seeker/package.json +25 -0
- package/skills/ck-docs-seeker/references/advanced.md +79 -0
- package/skills/ck-docs-seeker/references/context7-patterns.md +68 -0
- package/skills/ck-docs-seeker/references/errors.md +68 -0
- package/skills/ck-docs-seeker/scripts/analyze-llms-txt.js +211 -0
- package/skills/ck-docs-seeker/scripts/detect-topic.js +172 -0
- package/skills/ck-docs-seeker/scripts/fetch-docs.js +213 -0
- package/skills/ck-docs-seeker/scripts/tests/run-tests.js +72 -0
- package/skills/ck-docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
- package/skills/ck-docs-seeker/scripts/tests/test-detect-topic.js +112 -0
- package/skills/ck-docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
- package/skills/ck-docs-seeker/scripts/utils/env-loader.js +94 -0
- package/skills/ck-docs-seeker/workflows/library-search.md +87 -0
- package/skills/ck-docs-seeker/workflows/repo-analysis.md +91 -0
- package/skills/ck-docs-seeker/workflows/topic-search.md +77 -0
- package/skills/ck-frontend-design/SKILL.md +79 -0
- package/skills/ck-frontend-design/references/analysis-best-practices.md +80 -0
- package/skills/ck-frontend-design/references/analysis-prompts.md +141 -0
- package/skills/ck-frontend-design/references/analysis-techniques.md +118 -0
- package/skills/ck-frontend-design/references/animejs.md +396 -0
- package/skills/ck-frontend-design/references/design-extraction-overview.md +71 -0
- package/skills/ck-frontend-design/references/extraction-best-practices.md +141 -0
- package/skills/ck-frontend-design/references/extraction-output-templates.md +162 -0
- package/skills/ck-frontend-design/references/extraction-prompts.md +127 -0
- package/skills/ck-frontend-design/references/technical-accessibility.md +119 -0
- package/skills/ck-frontend-design/references/technical-best-practices.md +97 -0
- package/skills/ck-frontend-design/references/technical-optimization.md +44 -0
- package/skills/ck-frontend-design/references/technical-overview.md +90 -0
- package/skills/ck-frontend-design/references/technical-workflows.md +150 -0
- package/skills/ck-frontend-design/references/visual-analysis-overview.md +95 -0
- package/skills/ck-frontend-development/SKILL.md +399 -0
- package/skills/ck-frontend-development/resources/common-patterns.md +331 -0
- package/skills/ck-frontend-development/resources/complete-examples.md +872 -0
- package/skills/ck-frontend-development/resources/component-patterns.md +502 -0
- package/skills/ck-frontend-development/resources/data-fetching.md +767 -0
- package/skills/ck-frontend-development/resources/file-organization.md +502 -0
- package/skills/ck-frontend-development/resources/loading-and-error-states.md +501 -0
- package/skills/ck-frontend-development/resources/performance.md +406 -0
- package/skills/ck-frontend-development/resources/routing-guide.md +364 -0
- package/skills/ck-frontend-development/resources/styling-guide.md +428 -0
- package/skills/ck-frontend-development/resources/typescript-standards.md +418 -0
- package/skills/ck-markdown-novel-viewer/SKILL.md +190 -0
- package/skills/ck-markdown-novel-viewer/assets/directory-browser.css +215 -0
- package/skills/ck-markdown-novel-viewer/assets/favicon.png +0 -0
- package/skills/ck-markdown-novel-viewer/assets/novel-theme.css +818 -0
- package/skills/ck-markdown-novel-viewer/assets/reader.js +262 -0
- package/skills/ck-markdown-novel-viewer/assets/template.html +80 -0
- package/skills/ck-markdown-novel-viewer/package.json +15 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +272 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/port-finder.cjs +48 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
- package/skills/ck-markdown-novel-viewer/scripts/server.cjs +411 -0
- package/skills/ck-markdown-novel-viewer/scripts/tests/server.test.cjs +283 -0
- package/skills/ck-markdown-novel-viewer/tests/dashboard-assets.test.cjs +340 -0
- package/skills/ck-markdown-novel-viewer/tests/dashboard-renderer.test.cjs +404 -0
- package/skills/ck-markdown-novel-viewer/tests/http-server.test.cjs +271 -0
- package/skills/ck-markdown-novel-viewer/tests/run-tests.cjs +51 -0
- package/skills/ck-markdown-novel-viewer/tests/test-framework.cjs +154 -0
- package/skills/ck-markdown-novel-viewer/tests/verify-xss.cjs +90 -0
- package/skills/ck-mcp-builder/LICENSE.txt +202 -0
- package/skills/ck-mcp-builder/SKILL.md +327 -0
- package/skills/ck-mcp-builder/reference/evaluation.md +602 -0
- package/skills/ck-mcp-builder/reference/mcp_best_practices.md +915 -0
- package/skills/ck-mcp-builder/reference/node_mcp_server.md +916 -0
- package/skills/ck-mcp-builder/reference/python_mcp_server.md +752 -0
- package/skills/ck-mcp-builder/scripts/connections.py +151 -0
- package/skills/ck-mcp-builder/scripts/evaluation.py +373 -0
- package/skills/ck-mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/ck-mcp-builder/scripts/requirements.txt +2 -0
- package/skills/ck-mcp-management/README.md +219 -0
- package/skills/ck-mcp-management/SKILL.md +209 -0
- package/skills/ck-mcp-management/assets/tools.json +3146 -0
- package/skills/ck-mcp-management/references/configuration.md +114 -0
- package/skills/ck-mcp-management/references/gemini-cli-integration.md +215 -0
- package/skills/ck-mcp-management/references/mcp-protocol.md +116 -0
- package/skills/ck-mcp-management/scripts/.env.example +10 -0
- package/skills/ck-mcp-management/scripts/cli.ts +195 -0
- package/skills/ck-mcp-management/scripts/dist/analyze-tools.js +70 -0
- package/skills/ck-mcp-management/scripts/dist/cli.js +160 -0
- package/skills/ck-mcp-management/scripts/dist/mcp-client.js +183 -0
- package/skills/ck-mcp-management/scripts/mcp-client.ts +230 -0
- package/skills/ck-mcp-management/scripts/package.json +20 -0
- package/skills/ck-mcp-management/scripts/tsconfig.json +15 -0
- package/skills/ck-media-processing/SKILL.md +90 -0
- package/skills/ck-media-processing/references/common-workflows.md +132 -0
- package/skills/ck-media-processing/references/ffmpeg-encoding.md +358 -0
- package/skills/ck-media-processing/references/ffmpeg-filters.md +503 -0
- package/skills/ck-media-processing/references/ffmpeg-streaming.md +403 -0
- package/skills/ck-media-processing/references/format-compatibility.md +375 -0
- package/skills/ck-media-processing/references/imagemagick-batch.md +612 -0
- package/skills/ck-media-processing/references/imagemagick-editing.md +623 -0
- package/skills/ck-media-processing/references/rmbg-background-removal.md +66 -0
- package/skills/ck-media-processing/references/troubleshooting.md +109 -0
- package/skills/ck-media-processing/scripts/README.md +111 -0
- package/skills/ck-media-processing/scripts/batch-remove-background.sh +124 -0
- package/skills/ck-media-processing/scripts/batch_resize.py +342 -0
- package/skills/ck-media-processing/scripts/media_convert.py +311 -0
- package/skills/ck-media-processing/scripts/remove-background.sh +96 -0
- package/skills/ck-media-processing/scripts/remove-bg-node.js +158 -0
- package/skills/ck-media-processing/scripts/requirements.txt +24 -0
- package/skills/ck-media-processing/scripts/tests/.coverage +0 -0
- package/skills/ck-media-processing/scripts/tests/requirements.txt +2 -0
- package/skills/ck-media-processing/scripts/tests/test_batch_resize.py +372 -0
- package/skills/ck-media-processing/scripts/tests/test_media_convert.py +259 -0
- package/skills/ck-media-processing/scripts/tests/test_video_optimize.py +397 -0
- package/skills/ck-media-processing/scripts/video_optimize.py +414 -0
- package/skills/ck-mobile-development/SKILL.md +210 -0
- package/skills/ck-mobile-development/references/mobile-android.md +604 -0
- package/skills/ck-mobile-development/references/mobile-best-practices.md +545 -0
- package/skills/ck-mobile-development/references/mobile-debugging.md +1089 -0
- package/skills/ck-mobile-development/references/mobile-frameworks.md +465 -0
- package/skills/ck-mobile-development/references/mobile-ios.md +496 -0
- package/skills/ck-mobile-development/references/mobile-mindset.md +544 -0
- package/skills/ck-payment-integration/README.md +185 -0
- package/skills/ck-payment-integration/SKILL.md +116 -0
- package/skills/ck-payment-integration/references/polar/benefits.md +396 -0
- package/skills/ck-payment-integration/references/polar/best-practices.md +482 -0
- package/skills/ck-payment-integration/references/polar/checkouts.md +266 -0
- package/skills/ck-payment-integration/references/polar/overview.md +184 -0
- package/skills/ck-payment-integration/references/polar/products.md +244 -0
- package/skills/ck-payment-integration/references/polar/sdk.md +436 -0
- package/skills/ck-payment-integration/references/polar/subscriptions.md +340 -0
- package/skills/ck-payment-integration/references/polar/webhooks.md +405 -0
- package/skills/ck-payment-integration/references/sepay/api.md +140 -0
- package/skills/ck-payment-integration/references/sepay/best-practices.md +337 -0
- package/skills/ck-payment-integration/references/sepay/overview.md +138 -0
- package/skills/ck-payment-integration/references/sepay/qr-codes.md +228 -0
- package/skills/ck-payment-integration/references/sepay/sdk.md +213 -0
- package/skills/ck-payment-integration/references/sepay/webhooks.md +208 -0
- package/skills/ck-payment-integration/scripts/.env.example +20 -0
- package/skills/ck-payment-integration/scripts/checkout-helper.js +244 -0
- package/skills/ck-payment-integration/scripts/package.json +17 -0
- package/skills/ck-payment-integration/scripts/polar-webhook-verify.js +202 -0
- package/skills/ck-payment-integration/scripts/sepay-webhook-verify.js +193 -0
- package/skills/ck-payment-integration/scripts/test-scripts.js +237 -0
- package/skills/ck-planning/SKILL.md +79 -49
- package/skills/ck-planning/references/codebase-understanding.md +62 -0
- package/skills/ck-planning/references/output-standards.md +127 -0
- package/skills/ck-planning/references/plan-organization.md +122 -60
- package/skills/ck-planning/references/research-phase.md +49 -56
- package/skills/ck-planning/references/solution-design.md +61 -63
- package/skills/ck-problem-solving/SKILL.md +95 -0
- package/skills/ck-problem-solving/references/attribution.md +69 -0
- package/skills/ck-problem-solving/references/collision-zone-thinking.md +79 -0
- package/skills/ck-problem-solving/references/inversion-exercise.md +91 -0
- package/skills/ck-problem-solving/references/meta-pattern-recognition.md +87 -0
- package/skills/ck-problem-solving/references/scale-game.md +95 -0
- package/skills/ck-problem-solving/references/simplification-cascades.md +80 -0
- package/skills/ck-problem-solving/references/when-stuck.md +72 -0
- package/skills/ck-repomix/SKILL.md +247 -0
- package/skills/ck-repomix/references/configuration.md +211 -0
- package/skills/ck-repomix/references/usage-patterns.md +232 -0
- package/skills/ck-repomix/scripts/.coverage +0 -0
- package/skills/ck-repomix/scripts/README.md +179 -0
- package/skills/ck-repomix/scripts/repomix_batch.py +455 -0
- package/skills/ck-repomix/scripts/repos.example.json +15 -0
- package/skills/ck-repomix/scripts/requirements.txt +15 -0
- package/skills/ck-repomix/scripts/tests/test_repomix_batch.py +531 -0
- package/skills/ck-sequential-thinking/.env.example +8 -0
- package/skills/ck-sequential-thinking/README.md +183 -0
- package/skills/ck-sequential-thinking/SKILL.md +14 -2
- package/skills/ck-sequential-thinking/package.json +31 -0
- package/skills/ck-sequential-thinking/references/advanced-strategies.md +79 -0
- package/skills/ck-sequential-thinking/references/advanced-techniques.md +2 -14
- package/skills/ck-sequential-thinking/references/core-patterns.md +8 -0
- package/skills/ck-sequential-thinking/references/examples-api.md +88 -0
- package/skills/ck-sequential-thinking/references/examples-architecture.md +94 -0
- package/skills/ck-sequential-thinking/references/examples-debug.md +90 -0
- package/skills/ck-sequential-thinking/scripts/format-thought.js +159 -0
- package/skills/ck-sequential-thinking/scripts/process-thought.js +236 -0
- package/skills/ck-sequential-thinking/tests/format-thought.test.js +133 -0
- package/skills/ck-sequential-thinking/tests/process-thought.test.js +215 -0
- package/skills/ck-shopify/README.md +66 -0
- package/skills/ck-shopify/SKILL.md +319 -0
- package/skills/ck-shopify/references/app-development.md +470 -0
- package/skills/ck-shopify/references/extensions.md +493 -0
- package/skills/ck-shopify/references/themes.md +498 -0
- package/skills/ck-shopify/scripts/.coverage +0 -0
- package/skills/ck-shopify/scripts/requirements.txt +19 -0
- package/skills/ck-shopify/scripts/shopify_init.py +423 -0
- package/skills/ck-shopify/scripts/tests/.coverage +0 -0
- package/skills/ck-shopify/scripts/tests/test_shopify_init.py +385 -0
- package/skills/ck-skill-creator/LICENSE.txt +202 -0
- package/skills/ck-skill-creator/SKILL.md +265 -0
- package/skills/ck-skill-creator/scripts/init_skill.py +303 -0
- package/skills/ck-skill-creator/scripts/package_skill.py +110 -0
- package/skills/ck-skill-creator/scripts/quick_validate.py +65 -0
- package/skills/ck-threejs/SKILL.md +87 -0
- package/skills/ck-threejs/references/01-getting-started.md +177 -0
- package/skills/ck-threejs/references/02-loaders.md +169 -0
- package/skills/ck-threejs/references/03-textures.md +170 -0
- package/skills/ck-threejs/references/04-cameras.md +195 -0
- package/skills/ck-threejs/references/05-lights.md +183 -0
- package/skills/ck-threejs/references/06-animations.md +214 -0
- package/skills/ck-threejs/references/07-math.md +260 -0
- package/skills/ck-threejs/references/08-interaction.md +267 -0
- package/skills/ck-threejs/references/09-postprocessing.md +240 -0
- package/skills/ck-threejs/references/10-controls.md +259 -0
- package/skills/ck-threejs/references/11-materials-advanced.md +270 -0
- package/skills/ck-threejs/references/12-performance.md +269 -0
- package/skills/ck-threejs/references/13-node-materials.md +298 -0
- package/skills/ck-threejs/references/14-physics-vr.md +304 -0
- package/skills/ck-threejs/references/15-specialized-loaders.md +333 -0
- package/skills/ck-threejs/references/16-webgpu.md +302 -0
- package/skills/ck-ui-styling/LICENSE.txt +202 -0
- package/skills/ck-ui-styling/SKILL.md +319 -0
- package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/ck-ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/references/canvas-design-system.md +320 -0
- package/skills/ck-ui-styling/references/shadcn-accessibility.md +471 -0
- package/skills/ck-ui-styling/references/shadcn-components.md +424 -0
- package/skills/ck-ui-styling/references/shadcn-theming.md +373 -0
- package/skills/ck-ui-styling/references/tailwind-customization.md +483 -0
- package/skills/ck-ui-styling/references/tailwind-responsive.md +382 -0
- package/skills/ck-ui-styling/references/tailwind-utilities.md +455 -0
- package/skills/ck-ui-styling/scripts/.coverage +0 -0
- package/skills/ck-ui-styling/scripts/requirements.txt +17 -0
- package/skills/ck-ui-styling/scripts/shadcn_add.py +292 -0
- package/skills/ck-ui-styling/scripts/tailwind_config_gen.py +456 -0
- package/skills/ck-ui-styling/scripts/tests/coverage-ui.json +1 -0
- package/skills/ck-ui-styling/scripts/tests/requirements.txt +3 -0
- package/skills/ck-ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/skills/ck-ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
- package/skills/ck-ui-ux-pro-max/SKILL.md +227 -0
- package/skills/ck-ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ck-ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ck-ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ck-ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ck-ui-ux-pro-max/data/prompts.csv +24 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/html-tailwind.csv +51 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ck-ui-ux-pro-max/data/styles.csv +59 -0
- package/skills/ck-ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ck-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ck-ui-ux-pro-max/scripts/core.py +236 -0
- package/skills/ck-ui-ux-pro-max/scripts/search.py +76 -0
- package/skills/ck-web-frameworks/SKILL.md +322 -0
- package/skills/ck-web-frameworks/references/nextjs-app-router.md +465 -0
- package/skills/ck-web-frameworks/references/nextjs-data-fetching.md +459 -0
- package/skills/ck-web-frameworks/references/nextjs-optimization.md +511 -0
- package/skills/ck-web-frameworks/references/nextjs-server-components.md +495 -0
- package/skills/ck-web-frameworks/references/remix-icon-integration.md +603 -0
- package/skills/ck-web-frameworks/references/turborepo-caching.md +551 -0
- package/skills/ck-web-frameworks/references/turborepo-pipelines.md +517 -0
- package/skills/ck-web-frameworks/references/turborepo-setup.md +542 -0
- package/skills/ck-web-frameworks/scripts/.coverage +0 -0
- package/skills/ck-web-frameworks/scripts/__init__.py +0 -0
- package/skills/ck-web-frameworks/scripts/nextjs_init.py +547 -0
- package/skills/ck-web-frameworks/scripts/requirements.txt +16 -0
- package/skills/ck-web-frameworks/scripts/tests/coverage-web.json +1 -0
- package/skills/ck-web-frameworks/scripts/tests/requirements.txt +3 -0
- package/skills/ck-web-frameworks/scripts/tests/test_nextjs_init.py +319 -0
- package/skills/ck-web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -0
- package/skills/ck-web-frameworks/scripts/turborepo_migrate.py +394 -0
- package/src/commands/init.js +61 -30
- package/src/utils/paths.js +35 -4
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Tests for docker-optimize.py
|
|
3
|
+
|
|
4
|
+
Run with: pytest test_docker_optimize.py -v
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
import json
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
import sys
|
|
11
|
+
|
|
12
|
+
# Add parent directory to path for imports
|
|
13
|
+
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
14
|
+
|
|
15
|
+
from docker_optimize import DockerfileAnalyzer
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@pytest.fixture
|
|
19
|
+
def temp_dockerfile(tmp_path):
|
|
20
|
+
"""Create temporary Dockerfile"""
|
|
21
|
+
dockerfile = tmp_path / "Dockerfile"
|
|
22
|
+
return dockerfile
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def write_dockerfile(filepath, content):
|
|
26
|
+
"""Helper to write Dockerfile content"""
|
|
27
|
+
with open(filepath, 'w') as f:
|
|
28
|
+
f.write(content)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class TestDockerfileAnalyzerInit:
|
|
32
|
+
"""Test DockerfileAnalyzer initialization"""
|
|
33
|
+
|
|
34
|
+
def test_init(self, temp_dockerfile):
|
|
35
|
+
write_dockerfile(temp_dockerfile, "FROM node:20\n")
|
|
36
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
37
|
+
|
|
38
|
+
assert analyzer.dockerfile_path == temp_dockerfile
|
|
39
|
+
assert analyzer.verbose is False
|
|
40
|
+
assert analyzer.lines == []
|
|
41
|
+
assert analyzer.issues == []
|
|
42
|
+
assert analyzer.suggestions == []
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class TestLoadDockerfile:
|
|
46
|
+
"""Test Dockerfile loading"""
|
|
47
|
+
|
|
48
|
+
def test_load_success(self, temp_dockerfile):
|
|
49
|
+
content = "FROM node:20\nWORKDIR /app\n"
|
|
50
|
+
write_dockerfile(temp_dockerfile, content)
|
|
51
|
+
|
|
52
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
53
|
+
result = analyzer.load_dockerfile()
|
|
54
|
+
|
|
55
|
+
assert result is True
|
|
56
|
+
assert len(analyzer.lines) == 2
|
|
57
|
+
|
|
58
|
+
def test_load_nonexistent(self, tmp_path):
|
|
59
|
+
analyzer = DockerfileAnalyzer(tmp_path / "nonexistent")
|
|
60
|
+
|
|
61
|
+
with pytest.raises(FileNotFoundError):
|
|
62
|
+
analyzer.load_dockerfile()
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class TestAnalyzeBaseImage:
|
|
66
|
+
"""Test base image analysis"""
|
|
67
|
+
|
|
68
|
+
def test_latest_tag(self, temp_dockerfile):
|
|
69
|
+
write_dockerfile(temp_dockerfile, "FROM node:latest\n")
|
|
70
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
71
|
+
analyzer.load_dockerfile()
|
|
72
|
+
analyzer.analyze_base_image()
|
|
73
|
+
|
|
74
|
+
assert len(analyzer.issues) == 1
|
|
75
|
+
assert analyzer.issues[0]['category'] == 'base_image'
|
|
76
|
+
assert 'latest' in analyzer.issues[0]['message']
|
|
77
|
+
|
|
78
|
+
def test_no_tag(self, temp_dockerfile):
|
|
79
|
+
write_dockerfile(temp_dockerfile, "FROM node\n")
|
|
80
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
81
|
+
analyzer.load_dockerfile()
|
|
82
|
+
analyzer.analyze_base_image()
|
|
83
|
+
|
|
84
|
+
assert len(analyzer.issues) == 1
|
|
85
|
+
assert 'no tag' in analyzer.issues[0]['message']
|
|
86
|
+
|
|
87
|
+
def test_specific_tag(self, temp_dockerfile):
|
|
88
|
+
write_dockerfile(temp_dockerfile, "FROM node:20-alpine\n")
|
|
89
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
90
|
+
analyzer.load_dockerfile()
|
|
91
|
+
analyzer.analyze_base_image()
|
|
92
|
+
|
|
93
|
+
# Should have no issues with specific tag
|
|
94
|
+
base_image_issues = [i for i in analyzer.issues if i['category'] == 'base_image']
|
|
95
|
+
assert len(base_image_issues) == 0
|
|
96
|
+
|
|
97
|
+
def test_non_alpine_suggestion(self, temp_dockerfile):
|
|
98
|
+
write_dockerfile(temp_dockerfile, "FROM node:20\n")
|
|
99
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
100
|
+
analyzer.load_dockerfile()
|
|
101
|
+
analyzer.analyze_base_image()
|
|
102
|
+
|
|
103
|
+
assert len(analyzer.suggestions) >= 1
|
|
104
|
+
assert any('Alpine' in s['message'] for s in analyzer.suggestions)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class TestAnalyzeMultiStage:
|
|
108
|
+
"""Test multi-stage build analysis"""
|
|
109
|
+
|
|
110
|
+
def test_single_stage_with_build_tools(self, temp_dockerfile):
|
|
111
|
+
content = """
|
|
112
|
+
FROM node:20
|
|
113
|
+
WORKDIR /app
|
|
114
|
+
COPY package.json .
|
|
115
|
+
RUN npm install
|
|
116
|
+
COPY . .
|
|
117
|
+
CMD ["node", "server.js"]
|
|
118
|
+
"""
|
|
119
|
+
write_dockerfile(temp_dockerfile, content)
|
|
120
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
121
|
+
analyzer.load_dockerfile()
|
|
122
|
+
analyzer.analyze_multi_stage()
|
|
123
|
+
|
|
124
|
+
assert len(analyzer.issues) == 1
|
|
125
|
+
assert analyzer.issues[0]['category'] == 'optimization'
|
|
126
|
+
assert 'multi-stage' in analyzer.issues[0]['message'].lower()
|
|
127
|
+
|
|
128
|
+
def test_multi_stage_no_issues(self, temp_dockerfile):
|
|
129
|
+
content = """
|
|
130
|
+
FROM node:20 AS build
|
|
131
|
+
WORKDIR /app
|
|
132
|
+
COPY package.json .
|
|
133
|
+
RUN npm install
|
|
134
|
+
COPY . .
|
|
135
|
+
RUN npm run build
|
|
136
|
+
|
|
137
|
+
FROM node:20-alpine
|
|
138
|
+
WORKDIR /app
|
|
139
|
+
COPY --from=build /app/dist ./dist
|
|
140
|
+
CMD ["node", "dist/server.js"]
|
|
141
|
+
"""
|
|
142
|
+
write_dockerfile(temp_dockerfile, content)
|
|
143
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
144
|
+
analyzer.load_dockerfile()
|
|
145
|
+
analyzer.analyze_multi_stage()
|
|
146
|
+
|
|
147
|
+
multi_stage_issues = [i for i in analyzer.issues if i['category'] == 'optimization']
|
|
148
|
+
assert len(multi_stage_issues) == 0
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class TestAnalyzeLayerCaching:
|
|
152
|
+
"""Test layer caching analysis"""
|
|
153
|
+
|
|
154
|
+
def test_source_before_dependencies(self, temp_dockerfile):
|
|
155
|
+
content = """
|
|
156
|
+
FROM node:20
|
|
157
|
+
WORKDIR /app
|
|
158
|
+
COPY . .
|
|
159
|
+
RUN npm install
|
|
160
|
+
"""
|
|
161
|
+
write_dockerfile(temp_dockerfile, content)
|
|
162
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
163
|
+
analyzer.load_dockerfile()
|
|
164
|
+
analyzer.analyze_layer_caching()
|
|
165
|
+
|
|
166
|
+
assert len(analyzer.issues) == 1
|
|
167
|
+
assert analyzer.issues[0]['category'] == 'caching'
|
|
168
|
+
|
|
169
|
+
def test_correct_order(self, temp_dockerfile):
|
|
170
|
+
content = """
|
|
171
|
+
FROM node:20
|
|
172
|
+
WORKDIR /app
|
|
173
|
+
COPY package.json .
|
|
174
|
+
RUN npm install
|
|
175
|
+
COPY . .
|
|
176
|
+
"""
|
|
177
|
+
write_dockerfile(temp_dockerfile, content)
|
|
178
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
179
|
+
analyzer.load_dockerfile()
|
|
180
|
+
analyzer.analyze_layer_caching()
|
|
181
|
+
|
|
182
|
+
caching_issues = [i for i in analyzer.issues if i['category'] == 'caching']
|
|
183
|
+
assert len(caching_issues) == 0
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
class TestAnalyzeSecurity:
|
|
187
|
+
"""Test security analysis"""
|
|
188
|
+
|
|
189
|
+
def test_no_user_instruction(self, temp_dockerfile):
|
|
190
|
+
content = """
|
|
191
|
+
FROM node:20
|
|
192
|
+
WORKDIR /app
|
|
193
|
+
COPY . .
|
|
194
|
+
CMD ["node", "server.js"]
|
|
195
|
+
"""
|
|
196
|
+
write_dockerfile(temp_dockerfile, content)
|
|
197
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
198
|
+
analyzer.load_dockerfile()
|
|
199
|
+
analyzer.analyze_security()
|
|
200
|
+
|
|
201
|
+
assert len(analyzer.issues) >= 1
|
|
202
|
+
security_issues = [i for i in analyzer.issues if i['category'] == 'security']
|
|
203
|
+
assert any('root' in i['message'] for i in security_issues)
|
|
204
|
+
|
|
205
|
+
def test_with_user_instruction(self, temp_dockerfile):
|
|
206
|
+
content = """
|
|
207
|
+
FROM node:20
|
|
208
|
+
WORKDIR /app
|
|
209
|
+
COPY . .
|
|
210
|
+
USER node
|
|
211
|
+
CMD ["node", "server.js"]
|
|
212
|
+
"""
|
|
213
|
+
write_dockerfile(temp_dockerfile, content)
|
|
214
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
215
|
+
analyzer.load_dockerfile()
|
|
216
|
+
analyzer.analyze_security()
|
|
217
|
+
|
|
218
|
+
# Should not have root user issue
|
|
219
|
+
root_issues = [i for i in analyzer.issues
|
|
220
|
+
if i['category'] == 'security' and 'root' in i['message']]
|
|
221
|
+
assert len(root_issues) == 0
|
|
222
|
+
|
|
223
|
+
def test_detect_secrets(self, temp_dockerfile):
|
|
224
|
+
content = """
|
|
225
|
+
FROM node:20
|
|
226
|
+
ENV API_KEY=secret123
|
|
227
|
+
ENV PASSWORD=mypassword
|
|
228
|
+
"""
|
|
229
|
+
write_dockerfile(temp_dockerfile, content)
|
|
230
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
231
|
+
analyzer.load_dockerfile()
|
|
232
|
+
analyzer.analyze_security()
|
|
233
|
+
|
|
234
|
+
secret_issues = [i for i in analyzer.issues
|
|
235
|
+
if i['category'] == 'security' and 'secret' in i['message'].lower()]
|
|
236
|
+
assert len(secret_issues) >= 1
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
class TestAnalyzeAptCache:
|
|
240
|
+
"""Test apt cache cleanup analysis"""
|
|
241
|
+
|
|
242
|
+
def test_apt_without_cleanup(self, temp_dockerfile):
|
|
243
|
+
content = """
|
|
244
|
+
FROM ubuntu:22.04
|
|
245
|
+
RUN apt-get update && apt-get install -y curl
|
|
246
|
+
"""
|
|
247
|
+
write_dockerfile(temp_dockerfile, content)
|
|
248
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
249
|
+
analyzer.load_dockerfile()
|
|
250
|
+
analyzer.analyze_apt_cache()
|
|
251
|
+
|
|
252
|
+
assert len(analyzer.suggestions) >= 1
|
|
253
|
+
assert any('apt cache' in s['message'] for s in analyzer.suggestions)
|
|
254
|
+
|
|
255
|
+
def test_apt_with_cleanup(self, temp_dockerfile):
|
|
256
|
+
content = """
|
|
257
|
+
FROM ubuntu:22.04
|
|
258
|
+
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
|
|
259
|
+
"""
|
|
260
|
+
write_dockerfile(temp_dockerfile, content)
|
|
261
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
262
|
+
analyzer.load_dockerfile()
|
|
263
|
+
analyzer.analyze_apt_cache()
|
|
264
|
+
|
|
265
|
+
apt_suggestions = [s for s in analyzer.suggestions if 'apt cache' in s['message']]
|
|
266
|
+
assert len(apt_suggestions) == 0
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
class TestAnalyzeCombineRun:
|
|
270
|
+
"""Test RUN command combination analysis"""
|
|
271
|
+
|
|
272
|
+
def test_consecutive_runs(self, temp_dockerfile):
|
|
273
|
+
content = """
|
|
274
|
+
FROM node:20
|
|
275
|
+
RUN apt-get update
|
|
276
|
+
RUN apt-get install -y curl
|
|
277
|
+
RUN apt-get clean
|
|
278
|
+
"""
|
|
279
|
+
write_dockerfile(temp_dockerfile, content)
|
|
280
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
281
|
+
analyzer.load_dockerfile()
|
|
282
|
+
analyzer.analyze_combine_run()
|
|
283
|
+
|
|
284
|
+
assert len(analyzer.suggestions) >= 1
|
|
285
|
+
assert any('consecutive' in s['message'] for s in analyzer.suggestions)
|
|
286
|
+
|
|
287
|
+
def test_non_consecutive_runs(self, temp_dockerfile):
|
|
288
|
+
content = """
|
|
289
|
+
FROM node:20
|
|
290
|
+
RUN apt-get update
|
|
291
|
+
COPY package.json .
|
|
292
|
+
RUN npm install
|
|
293
|
+
"""
|
|
294
|
+
write_dockerfile(temp_dockerfile, content)
|
|
295
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
296
|
+
analyzer.load_dockerfile()
|
|
297
|
+
analyzer.analyze_combine_run()
|
|
298
|
+
|
|
299
|
+
consecutive_suggestions = [s for s in analyzer.suggestions
|
|
300
|
+
if 'consecutive' in s['message']]
|
|
301
|
+
assert len(consecutive_suggestions) == 0
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
class TestAnalyzeWorkdir:
|
|
305
|
+
"""Test WORKDIR analysis"""
|
|
306
|
+
|
|
307
|
+
def test_no_workdir(self, temp_dockerfile):
|
|
308
|
+
content = """
|
|
309
|
+
FROM node:20
|
|
310
|
+
COPY . /app
|
|
311
|
+
CMD ["node", "/app/server.js"]
|
|
312
|
+
"""
|
|
313
|
+
write_dockerfile(temp_dockerfile, content)
|
|
314
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
315
|
+
analyzer.load_dockerfile()
|
|
316
|
+
analyzer.analyze_workdir()
|
|
317
|
+
|
|
318
|
+
assert len(analyzer.suggestions) >= 1
|
|
319
|
+
assert any('WORKDIR' in s['message'] for s in analyzer.suggestions)
|
|
320
|
+
|
|
321
|
+
def test_with_workdir(self, temp_dockerfile):
|
|
322
|
+
content = """
|
|
323
|
+
FROM node:20
|
|
324
|
+
WORKDIR /app
|
|
325
|
+
COPY . .
|
|
326
|
+
CMD ["node", "server.js"]
|
|
327
|
+
"""
|
|
328
|
+
write_dockerfile(temp_dockerfile, content)
|
|
329
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
330
|
+
analyzer.load_dockerfile()
|
|
331
|
+
analyzer.analyze_workdir()
|
|
332
|
+
|
|
333
|
+
workdir_suggestions = [s for s in analyzer.suggestions if 'WORKDIR' in s['message']]
|
|
334
|
+
assert len(workdir_suggestions) == 0
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
class TestFullAnalyze:
|
|
338
|
+
"""Test complete analysis"""
|
|
339
|
+
|
|
340
|
+
def test_analyze_poor_dockerfile(self, temp_dockerfile):
|
|
341
|
+
content = """
|
|
342
|
+
FROM node:latest
|
|
343
|
+
COPY . .
|
|
344
|
+
RUN npm install
|
|
345
|
+
CMD ["node", "server.js"]
|
|
346
|
+
"""
|
|
347
|
+
write_dockerfile(temp_dockerfile, content)
|
|
348
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
349
|
+
results = analyzer.analyze()
|
|
350
|
+
|
|
351
|
+
assert 'dockerfile' in results
|
|
352
|
+
assert 'total_lines' in results
|
|
353
|
+
assert 'issues' in results
|
|
354
|
+
assert 'suggestions' in results
|
|
355
|
+
assert 'summary' in results
|
|
356
|
+
|
|
357
|
+
# Should have multiple issues and suggestions
|
|
358
|
+
assert results['summary']['warnings'] > 0
|
|
359
|
+
assert results['summary']['suggestions'] > 0
|
|
360
|
+
|
|
361
|
+
def test_analyze_good_dockerfile(self, temp_dockerfile):
|
|
362
|
+
content = """
|
|
363
|
+
FROM node:20-alpine AS build
|
|
364
|
+
WORKDIR /app
|
|
365
|
+
COPY package.json .
|
|
366
|
+
RUN npm ci --only=production
|
|
367
|
+
COPY . .
|
|
368
|
+
RUN npm run build
|
|
369
|
+
|
|
370
|
+
FROM node:20-alpine
|
|
371
|
+
WORKDIR /app
|
|
372
|
+
COPY --from=build /app/dist ./dist
|
|
373
|
+
COPY --from=build /app/node_modules ./node_modules
|
|
374
|
+
USER node
|
|
375
|
+
EXPOSE 3000
|
|
376
|
+
CMD ["node", "dist/server.js"]
|
|
377
|
+
"""
|
|
378
|
+
write_dockerfile(temp_dockerfile, content)
|
|
379
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
380
|
+
results = analyzer.analyze()
|
|
381
|
+
|
|
382
|
+
# Should have minimal issues
|
|
383
|
+
assert results['summary']['errors'] == 0
|
|
384
|
+
# May have some suggestions, but fewer issues overall
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
class TestPrintResults:
|
|
388
|
+
"""Test results printing"""
|
|
389
|
+
|
|
390
|
+
def test_print_results(self, temp_dockerfile, capsys):
|
|
391
|
+
content = "FROM node:latest\n"
|
|
392
|
+
write_dockerfile(temp_dockerfile, content)
|
|
393
|
+
|
|
394
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
395
|
+
results = analyzer.analyze()
|
|
396
|
+
analyzer.print_results(results)
|
|
397
|
+
|
|
398
|
+
captured = capsys.readouterr()
|
|
399
|
+
assert "Dockerfile Analysis" in captured.out
|
|
400
|
+
assert "Summary:" in captured.out
|
|
401
|
+
assert "ISSUES:" in captured.out or "SUGGESTIONS:" in captured.out
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
class TestIntegration:
|
|
405
|
+
"""Integration tests"""
|
|
406
|
+
|
|
407
|
+
def test_full_analysis_workflow(self, temp_dockerfile):
|
|
408
|
+
content = """
|
|
409
|
+
FROM python:3.11
|
|
410
|
+
COPY . /app
|
|
411
|
+
RUN pip install -r /app/requirements.txt
|
|
412
|
+
ENV API_KEY=secret
|
|
413
|
+
CMD ["python", "/app/app.py"]
|
|
414
|
+
"""
|
|
415
|
+
write_dockerfile(temp_dockerfile, content)
|
|
416
|
+
|
|
417
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile, verbose=True)
|
|
418
|
+
results = analyzer.analyze()
|
|
419
|
+
|
|
420
|
+
# Verify all expected checks ran
|
|
421
|
+
assert len(analyzer.issues) > 0
|
|
422
|
+
assert len(analyzer.suggestions) > 0
|
|
423
|
+
|
|
424
|
+
# Should flag multiple categories
|
|
425
|
+
categories = {i['category'] for i in analyzer.issues}
|
|
426
|
+
assert 'security' in categories
|
|
427
|
+
|
|
428
|
+
# Verify summary calculations
|
|
429
|
+
total_findings = (results['summary']['errors'] +
|
|
430
|
+
results['summary']['warnings'] +
|
|
431
|
+
results['summary']['suggestions'])
|
|
432
|
+
assert total_findings > 0
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
if __name__ == "__main__":
|
|
436
|
+
pytest.main([__file__, "-v"])
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Context7 API Configuration (optional)
|
|
2
|
+
# Get your API key from https://context7.com/dashboard/api-keys
|
|
3
|
+
CONTEXT7_API_KEY=
|
|
4
|
+
|
|
5
|
+
# Gemini API Configuration (optional, for ai-multimodal integration)
|
|
6
|
+
# Get your API key from https://aistudio.google.com/app/apikey
|
|
7
|
+
GEMINI_API_KEY=
|
|
8
|
+
|
|
9
|
+
# GitHub Token (optional, for higher rate limits on repository analysis)
|
|
10
|
+
# Create at https://github.com/settings/tokens
|
|
11
|
+
GITHUB_TOKEN=
|
|
12
|
+
|
|
13
|
+
# Output settings
|
|
14
|
+
OUTPUT_FORMAT=json
|
|
15
|
+
DEBUG=false
|
|
@@ -1,91 +1,96 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: docs-seeker
|
|
3
|
-
description:
|
|
2
|
+
name: 'ck-docs-seeker'
|
|
3
|
+
description: 'Search technical documentation using executable scripts to detect query type, fetch from llms.txt sources (context7.com), and analyze results. Use when user needs: (1) Topic-specific documentation (features/components/concepts), (2) Library/framework documentation, (3) GitHub repository analysis, (4) Documentation discovery with automated agent distribution strategy'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Documentation Discovery via Scripts
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
## Overview
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
**Script-first** documentation discovery using llms.txt standard.
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
- Looking for library examples
|
|
14
|
-
- Researching best practices
|
|
15
|
-
- Finding implementation guides
|
|
16
|
-
- Unknown technology referenced
|
|
12
|
+
Execute scripts to handle entire workflow - no manual URL construction needed.
|
|
17
13
|
|
|
18
|
-
##
|
|
14
|
+
## Primary Workflow
|
|
19
15
|
|
|
20
|
-
|
|
16
|
+
**ALWAYS execute scripts in this order:**
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- Best practices?
|
|
18
|
+
```bash
|
|
19
|
+
# 1. DETECT query type (topic-specific vs general)
|
|
20
|
+
node scripts/detect-topic.js "<user query>"
|
|
26
21
|
|
|
27
|
-
|
|
22
|
+
# 2. FETCH documentation using script output
|
|
23
|
+
node scripts/fetch-docs.js "<user query>"
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
3. Stack Overflow (verified answers)
|
|
33
|
-
4. Technical blogs (reputable)
|
|
25
|
+
# 3. ANALYZE results (if multiple URLs returned)
|
|
26
|
+
cat llms.txt | node scripts/analyze-llms-txt.js -
|
|
27
|
+
```
|
|
34
28
|
|
|
35
|
-
|
|
29
|
+
Scripts handle URL construction, fallback chains, and error handling automatically.
|
|
36
30
|
|
|
37
|
-
|
|
38
|
-
- Check source (is it authoritative?)
|
|
39
|
-
- Check version (matches your version?)
|
|
31
|
+
## Scripts
|
|
40
32
|
|
|
41
|
-
|
|
33
|
+
**`detect-topic.js`** - Classify query type
|
|
34
|
+
- Identifies topic-specific vs general queries
|
|
35
|
+
- Extracts library name + topic keyword
|
|
36
|
+
- Returns JSON: `{topic, library, isTopicSpecific}`
|
|
37
|
+
- Zero-token execution
|
|
42
38
|
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
39
|
+
**`fetch-docs.js`** - Retrieve documentation
|
|
40
|
+
- Constructs context7.com URLs automatically
|
|
41
|
+
- Handles fallback: topic → general → error
|
|
42
|
+
- Outputs llms.txt content or error message
|
|
43
|
+
- Zero-token execution
|
|
47
44
|
|
|
48
|
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
45
|
+
**`analyze-llms-txt.js`** - Process llms.txt
|
|
46
|
+
- Categorizes URLs (critical/important/supplementary)
|
|
47
|
+
- Recommends agent distribution (1 agent, 3 agents, 7 agents, phased)
|
|
48
|
+
- Returns JSON with strategy
|
|
49
|
+
- Zero-token execution
|
|
52
50
|
|
|
53
|
-
|
|
54
|
-
- Working code samples
|
|
55
|
-
- Real-world usage
|
|
56
|
-
- Edge case handling
|
|
51
|
+
## Workflow References
|
|
57
52
|
|
|
58
|
-
|
|
53
|
+
**[Topic-Specific Search](./workflows/topic-search.md)** - Fastest path (10-15s)
|
|
59
54
|
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
[library name] documentation
|
|
63
|
-
[library name] [specific feature] example
|
|
64
|
-
[library name] [version] migration guide
|
|
65
|
-
```
|
|
55
|
+
**[General Library Search](./workflows/library-search.md)** - Comprehensive coverage (30-60s)
|
|
66
56
|
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
[service] API reference
|
|
70
|
-
[service] [endpoint] documentation
|
|
71
|
-
[service] authentication guide
|
|
72
|
-
```
|
|
57
|
+
**[Repository Analysis](./workflows/repo-analysis.md)** - Fallback strategy
|
|
73
58
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
[
|
|
77
|
-
|
|
59
|
+
## References
|
|
60
|
+
|
|
61
|
+
**[context7-patterns.md](./references/context7-patterns.md)** - URL patterns, known repositories
|
|
62
|
+
|
|
63
|
+
**[errors.md](./references/errors.md)** - Error handling, fallback strategies
|
|
64
|
+
|
|
65
|
+
**[advanced.md](./references/advanced.md)** - Edge cases, versioning, multi-language
|
|
66
|
+
|
|
67
|
+
## Execution Principles
|
|
68
|
+
|
|
69
|
+
1. **Scripts first** - Execute scripts instead of manual URL construction
|
|
70
|
+
2. **Zero-token overhead** - Scripts run without context loading
|
|
71
|
+
3. **Automatic fallback** - Scripts handle topic → general → error chains
|
|
72
|
+
4. **Progressive disclosure** - Load workflows/references only when needed
|
|
73
|
+
5. **Agent distribution** - Scripts recommend parallel agent strategy
|
|
74
|
+
|
|
75
|
+
## Quick Start
|
|
76
|
+
|
|
77
|
+
**Topic query:** "How do I use date picker in shadcn?"
|
|
78
|
+
```bash
|
|
79
|
+
node scripts/detect-topic.js "<query>" # → {topic, library, isTopicSpecific}
|
|
80
|
+
node scripts/fetch-docs.js "<query>" # → 2-3 URLs
|
|
81
|
+
# Read URLs with WebFetch
|
|
78
82
|
```
|
|
79
83
|
|
|
80
|
-
|
|
84
|
+
**General query:** "Documentation for Next.js"
|
|
85
|
+
```bash
|
|
86
|
+
node scripts/detect-topic.js "<query>" # → {isTopicSpecific: false}
|
|
87
|
+
node scripts/fetch-docs.js "<query>" # → 8+ URLs
|
|
88
|
+
cat llms.txt | node scripts/analyze-llms-txt.js - # → {totalUrls, distribution}
|
|
89
|
+
# Deploy agents per recommendation
|
|
90
|
+
```
|
|
81
91
|
|
|
82
|
-
|
|
83
|
-
- [ ] Information is current?
|
|
84
|
-
- [ ] Version matches?
|
|
85
|
-
- [ ] Examples work?
|
|
92
|
+
## Environment
|
|
86
93
|
|
|
87
|
-
|
|
94
|
+
Scripts load `.env`: `process.env` > > >
|
|
88
95
|
|
|
89
|
-
See
|
|
90
|
-
- `search-patterns.md` - Search strategies
|
|
91
|
-
- `source-evaluation.md` - Evaluating sources
|
|
96
|
+
See `.env.example` for configuration options.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "docs-seeker-scripts",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "Documentation discovery scripts for docs-seeker skill",
|
|
5
|
+
"private": true,
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "node scripts/tests/run-tests.js",
|
|
8
|
+
"test:detect": "node scripts/tests/test-detect-topic.js",
|
|
9
|
+
"test:fetch": "node scripts/tests/test-fetch-docs.js",
|
|
10
|
+
"test:analyze": "node scripts/tests/test-analyze-llms.js"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"documentation",
|
|
14
|
+
"llms.txt",
|
|
15
|
+
"context7",
|
|
16
|
+
"docs-discovery"
|
|
17
|
+
],
|
|
18
|
+
"author": "ClaudeKit",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"dependencies": {},
|
|
21
|
+
"devDependencies": {},
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=14.0.0"
|
|
24
|
+
}
|
|
25
|
+
}
|