@macpaw/cctk 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/License +21 -0
- package/README.md +142 -0
- package/bin/index.js +5 -0
- package/dist/index.js +1 -0
- package/package.json +65 -0
- package/templates/claude/agents/brainstormer.md +113 -0
- package/templates/claude/agents/code-reviewer.md +157 -0
- package/templates/claude/agents/copywriter.md +110 -0
- package/templates/claude/agents/database-admin.md +92 -0
- package/templates/claude/agents/debugger.md +137 -0
- package/templates/claude/agents/docs-manager.md +208 -0
- package/templates/claude/agents/fullstack-developer.md +95 -0
- package/templates/claude/agents/git-manager.md +394 -0
- package/templates/claude/agents/journal-writer.md +113 -0
- package/templates/claude/agents/mcp-manager.md +89 -0
- package/templates/claude/agents/planner.md +108 -0
- package/templates/claude/agents/project-manager.md +125 -0
- package/templates/claude/agents/registry.json +304 -0
- package/templates/claude/agents/researcher.md +37 -0
- package/templates/claude/agents/scout-external.md +140 -0
- package/templates/claude/agents/scout.md +106 -0
- package/templates/claude/agents/tester.md +105 -0
- package/templates/claude/agents/ui-ux-designer.md +208 -0
- package/templates/claude/commands/ask.md +56 -0
- package/templates/claude/commands/bootstrap/auto/fast.md +106 -0
- package/templates/claude/commands/bootstrap/auto/parallel.md +64 -0
- package/templates/claude/commands/bootstrap/auto.md +110 -0
- package/templates/claude/commands/bootstrap.md +130 -0
- package/templates/claude/commands/brainstorm.md +75 -0
- package/templates/claude/commands/code/auto.md +198 -0
- package/templates/claude/commands/code/no-test.md +172 -0
- package/templates/claude/commands/code/parallel.md +100 -0
- package/templates/claude/commands/code.md +197 -0
- package/templates/claude/commands/coding-level.md +37 -0
- package/templates/claude/commands/content/cro.md +41 -0
- package/templates/claude/commands/content/enhance.md +12 -0
- package/templates/claude/commands/content/fast.md +11 -0
- package/templates/claude/commands/content/good.md +14 -0
- package/templates/claude/commands/cook/auto/fast.md +26 -0
- package/templates/claude/commands/cook/auto/parallel.md +49 -0
- package/templates/claude/commands/cook/auto.md +15 -0
- package/templates/claude/commands/cook.md +101 -0
- package/templates/claude/commands/debug.md +13 -0
- package/templates/claude/commands/docs/init.md +37 -0
- package/templates/claude/commands/docs/summarize.md +22 -0
- package/templates/claude/commands/docs/update.md +78 -0
- package/templates/claude/commands/fix/ci.md +17 -0
- package/templates/claude/commands/fix/fast.md +18 -0
- package/templates/claude/commands/fix/hard.md +35 -0
- package/templates/claude/commands/fix/logs.md +26 -0
- package/templates/claude/commands/fix/parallel.md +54 -0
- package/templates/claude/commands/fix/test.md +20 -0
- package/templates/claude/commands/fix/types.md +9 -0
- package/templates/claude/commands/fix/ui.md +33 -0
- package/templates/claude/commands/fix.md +43 -0
- package/templates/claude/commands/git/cm.md +5 -0
- package/templates/claude/commands/git/cp.md +4 -0
- package/templates/claude/commands/git/merge.md +40 -0
- package/templates/claude/commands/git/pr.md +50 -0
- package/templates/claude/commands/journal.md +7 -0
- package/templates/claude/commands/kanban.md +99 -0
- package/templates/claude/commands/plan/archive.md +57 -0
- package/templates/claude/commands/plan/ci.md +33 -0
- package/templates/claude/commands/plan/cro.md +67 -0
- package/templates/claude/commands/plan/fast.md +66 -0
- package/templates/claude/commands/plan/hard.md +92 -0
- package/templates/claude/commands/plan/parallel.md +129 -0
- package/templates/claude/commands/plan/two.md +45 -0
- package/templates/claude/commands/plan/validate.md +117 -0
- package/templates/claude/commands/plan.md +30 -0
- package/templates/claude/commands/preview.md +87 -0
- package/templates/claude/commands/registry.json +313 -0
- package/templates/claude/commands/review/codebase/parallel.md +122 -0
- package/templates/claude/commands/review/codebase.md +47 -0
- package/templates/claude/commands/scout/ext.md +35 -0
- package/templates/claude/commands/scout.md +28 -0
- package/templates/claude/commands/skill/add.md +36 -0
- package/templates/claude/commands/skill/create.md +29 -0
- package/templates/claude/commands/skill/fix-logs.md +22 -0
- package/templates/claude/commands/skill/optimize/auto.md +25 -0
- package/templates/claude/commands/skill/optimize.md +34 -0
- package/templates/claude/commands/skill/plan.md +45 -0
- package/templates/claude/commands/test/ui.md +91 -0
- package/templates/claude/commands/test.md +8 -0
- package/templates/claude/commands/use-mcp.md +34 -0
- package/templates/claude/commands/watzup.md +8 -0
- package/templates/claude/commands/worktree.md +126 -0
- package/templates/claude/hooks/dev-rules-reminder.cjs +258 -0
- package/templates/claude/hooks/docs/README.md +42 -0
- package/templates/claude/hooks/lib/cctk-config-utils.cjs +751 -0
- package/templates/claude/hooks/lib/cctk-paths.cjs +106 -0
- package/templates/claude/hooks/lib/context-tracker.cjs +346 -0
- package/templates/claude/hooks/privacy-block.cjs +289 -0
- package/templates/claude/hooks/registry.json +77 -0
- package/templates/claude/hooks/scout-block/broad-pattern-detector.cjs +293 -0
- package/templates/claude/hooks/scout-block/error-formatter.cjs +156 -0
- package/templates/claude/hooks/scout-block/path-extractor.cjs +359 -0
- package/templates/claude/hooks/scout-block/pattern-matcher.cjs +184 -0
- package/templates/claude/hooks/scout-block/vendor/ignore.js +626 -0
- package/templates/claude/hooks/scout-block.cjs +167 -0
- package/templates/claude/hooks/session-end.cjs +35 -0
- package/templates/claude/hooks/session-init.cjs +214 -0
- package/templates/claude/hooks/subagent-init.cjs +161 -0
- package/templates/claude/hooks/write-compact-marker.cjs +153 -0
- package/templates/claude/output-styles/coding-level-1.md +148 -0
- package/templates/claude/output-styles/coding-level-2.md +159 -0
- package/templates/claude/output-styles/coding-level-3.md +91 -0
- package/templates/claude/scripts/README.md +33 -0
- package/templates/claude/scripts/generate-catalogs.cjs +318 -0
- package/templates/claude/scripts/registry.json +48 -0
- package/templates/claude/scripts/set-active-plan.cjs +45 -0
- package/templates/claude/scripts/validate-docs.cjs +447 -0
- package/templates/claude/scripts/worktree.cjs +658 -0
- package/templates/claude/skills/README.md +112 -0
- package/templates/claude/skills/ai-artist/SKILL.md +75 -0
- package/templates/claude/skills/ai-artist/references/advanced-techniques.md +184 -0
- package/templates/claude/skills/ai-artist/references/domain-code.md +66 -0
- package/templates/claude/skills/ai-artist/references/domain-data.md +72 -0
- package/templates/claude/skills/ai-artist/references/domain-marketing.md +66 -0
- package/templates/claude/skills/ai-artist/references/domain-patterns.md +33 -0
- package/templates/claude/skills/ai-artist/references/domain-writing.md +68 -0
- package/templates/claude/skills/ai-artist/references/image-prompting.md +141 -0
- package/templates/claude/skills/ai-artist/references/llm-prompting.md +165 -0
- package/templates/claude/skills/ai-artist/references/nano-banana.md +59 -0
- package/templates/claude/skills/ai-artist/references/reasoning-techniques.md +201 -0
- package/templates/claude/skills/backend-development/SKILL.md +95 -0
- package/templates/claude/skills/backend-development/references/backend-api-design.md +495 -0
- package/templates/claude/skills/backend-development/references/backend-architecture.md +454 -0
- package/templates/claude/skills/backend-development/references/backend-authentication.md +338 -0
- package/templates/claude/skills/backend-development/references/backend-code-quality.md +659 -0
- package/templates/claude/skills/backend-development/references/backend-debugging.md +904 -0
- package/templates/claude/skills/backend-development/references/backend-devops.md +494 -0
- package/templates/claude/skills/backend-development/references/backend-mindset.md +387 -0
- package/templates/claude/skills/backend-development/references/backend-performance.md +397 -0
- package/templates/claude/skills/backend-development/references/backend-security.md +290 -0
- package/templates/claude/skills/backend-development/references/backend-technologies.md +256 -0
- package/templates/claude/skills/backend-development/references/backend-testing.md +429 -0
- package/templates/claude/skills/better-auth/SKILL.md +204 -0
- package/templates/claude/skills/better-auth/references/advanced-features.md +553 -0
- package/templates/claude/skills/better-auth/references/database-integration.md +577 -0
- package/templates/claude/skills/better-auth/references/email-password-auth.md +416 -0
- package/templates/claude/skills/better-auth/references/oauth-providers.md +430 -0
- package/templates/claude/skills/better-auth/scripts/better_auth_init.py +521 -0
- package/templates/claude/skills/chrome-devtools/SKILL.md +473 -0
- package/templates/claude/skills/chrome-devtools/references/cdp-domains.md +694 -0
- package/templates/claude/skills/chrome-devtools/references/performance-guide.md +940 -0
- package/templates/claude/skills/chrome-devtools/references/puppeteer-reference.md +953 -0
- package/templates/claude/skills/chrome-devtools/scripts/README.md +288 -0
- package/templates/claude/skills/chrome-devtools/scripts/aria-snapshot.js +368 -0
- package/templates/claude/skills/chrome-devtools/scripts/click.js +92 -0
- package/templates/claude/skills/chrome-devtools/scripts/console.js +85 -0
- package/templates/claude/skills/chrome-devtools/scripts/evaluate.js +59 -0
- package/templates/claude/skills/chrome-devtools/scripts/fill.js +84 -0
- package/templates/claude/skills/chrome-devtools/scripts/inject-auth.js +247 -0
- package/templates/claude/skills/chrome-devtools/scripts/install-deps.sh +11 -0
- package/templates/claude/skills/chrome-devtools/scripts/install.sh +36 -0
- package/templates/claude/skills/chrome-devtools/scripts/lib/browser.js +335 -0
- package/templates/claude/skills/chrome-devtools/scripts/lib/selector.js +183 -0
- package/templates/claude/skills/chrome-devtools/scripts/navigate.js +60 -0
- package/templates/claude/skills/chrome-devtools/scripts/network.js +113 -0
- package/templates/claude/skills/chrome-devtools/scripts/package.json +16 -0
- package/templates/claude/skills/chrome-devtools/scripts/performance.js +159 -0
- package/templates/claude/skills/chrome-devtools/scripts/screenshot.js +212 -0
- package/templates/claude/skills/chrome-devtools/scripts/select-ref.js +151 -0
- package/templates/claude/skills/chrome-devtools/scripts/snapshot.js +143 -0
- package/templates/claude/skills/chrome-devtools/scripts/ws-debug.js +47 -0
- package/templates/claude/skills/chrome-devtools/scripts/ws-full-debug.js +115 -0
- package/templates/claude/skills/claude-code/references/advanced-features.md +399 -0
- package/templates/claude/skills/claude-code/references/agent-skills.md +399 -0
- package/templates/claude/skills/claude-code/references/api-reference.md +498 -0
- package/templates/claude/skills/claude-code/references/best-practices.md +447 -0
- package/templates/claude/skills/claude-code/references/cicd-integration.md +428 -0
- package/templates/claude/skills/claude-code/references/common-workflows.md +107 -0
- package/templates/claude/skills/claude-code/references/configuration.md +480 -0
- package/templates/claude/skills/claude-code/references/enterprise-features.md +472 -0
- package/templates/claude/skills/claude-code/references/getting-started.md +244 -0
- package/templates/claude/skills/claude-code/references/hooks-and-plugins.md +444 -0
- package/templates/claude/skills/claude-code/references/hooks-comprehensive.md +622 -0
- package/templates/claude/skills/claude-code/references/ide-integration.md +316 -0
- package/templates/claude/skills/claude-code/references/mcp-integration.md +386 -0
- package/templates/claude/skills/claude-code/references/slash-commands.md +460 -0
- package/templates/claude/skills/claude-code/references/troubleshooting.md +455 -0
- package/templates/claude/skills/claude-code/skill.md +60 -0
- package/templates/claude/skills/code-review/SKILL.md +143 -0
- package/templates/claude/skills/code-review/references/code-review-reception.md +209 -0
- package/templates/claude/skills/code-review/references/requesting-code-review.md +105 -0
- package/templates/claude/skills/code-review/references/verification-before-completion.md +139 -0
- package/templates/claude/skills/context-engineering/SKILL.md +86 -0
- package/templates/claude/skills/context-engineering/references/context-compression.md +84 -0
- package/templates/claude/skills/context-engineering/references/context-degradation.md +93 -0
- package/templates/claude/skills/context-engineering/references/context-fundamentals.md +75 -0
- package/templates/claude/skills/context-engineering/references/context-optimization.md +82 -0
- package/templates/claude/skills/context-engineering/references/evaluation.md +89 -0
- package/templates/claude/skills/context-engineering/references/memory-systems.md +88 -0
- package/templates/claude/skills/context-engineering/references/multi-agent-patterns.md +90 -0
- package/templates/claude/skills/context-engineering/references/project-development.md +97 -0
- package/templates/claude/skills/context-engineering/references/tool-design.md +86 -0
- package/templates/claude/skills/context-engineering/scripts/compression_evaluator.py +329 -0
- package/templates/claude/skills/context-engineering/scripts/context_analyzer.py +294 -0
- package/templates/claude/skills/databases/SKILL.md +232 -0
- package/templates/claude/skills/databases/references/mongodb-aggregation.md +447 -0
- package/templates/claude/skills/databases/references/mongodb-atlas.md +465 -0
- package/templates/claude/skills/databases/references/mongodb-crud.md +408 -0
- package/templates/claude/skills/databases/references/mongodb-indexing.md +442 -0
- package/templates/claude/skills/databases/references/postgresql-administration.md +594 -0
- package/templates/claude/skills/databases/references/postgresql-performance.md +527 -0
- package/templates/claude/skills/databases/references/postgresql-psql-cli.md +467 -0
- package/templates/claude/skills/databases/references/postgresql-queries.md +475 -0
- package/templates/claude/skills/databases/scripts/db_backup.py +502 -0
- package/templates/claude/skills/databases/scripts/db_migrate.py +414 -0
- package/templates/claude/skills/databases/scripts/db_performance_check.py +445 -0
- package/templates/claude/skills/debugging/SKILL.md +84 -0
- package/templates/claude/skills/debugging/references/defense-in-depth.md +124 -0
- package/templates/claude/skills/debugging/references/root-cause-tracing.md +122 -0
- package/templates/claude/skills/debugging/references/systematic-debugging.md +102 -0
- package/templates/claude/skills/debugging/references/verification.md +123 -0
- package/templates/claude/skills/debugging/scripts/find-polluter.sh +63 -0
- package/templates/claude/skills/debugging/scripts/find-polluter.test.md +102 -0
- package/templates/claude/skills/devops/SKILL.md +293 -0
- package/templates/claude/skills/devops/references/browser-rendering.md +305 -0
- package/templates/claude/skills/devops/references/cloudflare-d1-kv.md +123 -0
- package/templates/claude/skills/devops/references/cloudflare-platform.md +271 -0
- package/templates/claude/skills/devops/references/cloudflare-r2-storage.md +280 -0
- package/templates/claude/skills/devops/references/cloudflare-workers-advanced.md +312 -0
- package/templates/claude/skills/devops/references/cloudflare-workers-apis.md +309 -0
- package/templates/claude/skills/devops/references/cloudflare-workers-basics.md +418 -0
- package/templates/claude/skills/devops/references/docker-basics.md +297 -0
- package/templates/claude/skills/devops/references/docker-compose.md +292 -0
- package/templates/claude/skills/devops/references/gcloud-platform.md +307 -0
- package/templates/claude/skills/devops/references/gcloud-services.md +304 -0
- package/templates/claude/skills/devops/scripts/cloudflare_deploy.py +269 -0
- package/templates/claude/skills/devops/scripts/docker_optimize.py +320 -0
- package/templates/claude/skills/docs-seeker/SKILL.md +95 -0
- package/templates/claude/skills/docs-seeker/package.json +24 -0
- package/templates/claude/skills/docs-seeker/references/advanced.md +78 -0
- package/templates/claude/skills/docs-seeker/references/context7-patterns.md +68 -0
- package/templates/claude/skills/docs-seeker/references/errors.md +68 -0
- package/templates/claude/skills/docs-seeker/scripts/analyze-llms-txt.js +245 -0
- package/templates/claude/skills/docs-seeker/scripts/detect-topic.js +172 -0
- package/templates/claude/skills/docs-seeker/scripts/fetch-docs.js +212 -0
- package/templates/claude/skills/docs-seeker/workflows/library-search.md +87 -0
- package/templates/claude/skills/docs-seeker/workflows/repo-analysis.md +91 -0
- package/templates/claude/skills/docs-seeker/workflows/topic-search.md +77 -0
- package/templates/claude/skills/frontend-design/SKILL.md +85 -0
- package/templates/claude/skills/frontend-design/references/analysis-best-practices.md +80 -0
- package/templates/claude/skills/frontend-design/references/analysis-prompts.md +141 -0
- package/templates/claude/skills/frontend-design/references/analysis-techniques.md +118 -0
- package/templates/claude/skills/frontend-design/references/animejs.md +396 -0
- package/templates/claude/skills/frontend-design/references/design-extraction-overview.md +71 -0
- package/templates/claude/skills/frontend-design/references/extraction-best-practices.md +141 -0
- package/templates/claude/skills/frontend-design/references/extraction-output-templates.md +162 -0
- package/templates/claude/skills/frontend-design/references/extraction-prompts.md +127 -0
- package/templates/claude/skills/frontend-design/references/technical-accessibility.md +119 -0
- package/templates/claude/skills/frontend-design/references/technical-best-practices.md +97 -0
- package/templates/claude/skills/frontend-design/references/technical-optimization.md +44 -0
- package/templates/claude/skills/frontend-design/references/technical-overview.md +90 -0
- package/templates/claude/skills/frontend-design/references/technical-workflows.md +150 -0
- package/templates/claude/skills/frontend-design/references/visual-analysis-overview.md +95 -0
- package/templates/claude/skills/frontend-development/SKILL.md +399 -0
- package/templates/claude/skills/frontend-development/resources/common-patterns.md +331 -0
- package/templates/claude/skills/frontend-development/resources/complete-examples.md +872 -0
- package/templates/claude/skills/frontend-development/resources/component-patterns.md +502 -0
- package/templates/claude/skills/frontend-development/resources/data-fetching.md +767 -0
- package/templates/claude/skills/frontend-development/resources/file-organization.md +502 -0
- package/templates/claude/skills/frontend-development/resources/loading-and-error-states.md +501 -0
- package/templates/claude/skills/frontend-development/resources/performance.md +406 -0
- package/templates/claude/skills/frontend-development/resources/routing-guide.md +364 -0
- package/templates/claude/skills/frontend-development/resources/styling-guide.md +428 -0
- package/templates/claude/skills/frontend-development/resources/typescript-standards.md +418 -0
- package/templates/claude/skills/markdown-novel-viewer/SKILL.md +272 -0
- package/templates/claude/skills/markdown-novel-viewer/assets/directory-browser.css +215 -0
- package/templates/claude/skills/markdown-novel-viewer/assets/favicon.png +0 -0
- package/templates/claude/skills/markdown-novel-viewer/assets/novel-theme.css +872 -0
- package/templates/claude/skills/markdown-novel-viewer/assets/reader.js +378 -0
- package/templates/claude/skills/markdown-novel-viewer/assets/template.html +85 -0
- package/templates/claude/skills/markdown-novel-viewer/package.json +15 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +335 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/lib/port-finder.cjs +49 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
- package/templates/claude/skills/markdown-novel-viewer/scripts/server.cjs +398 -0
- package/templates/claude/skills/mcp-builder/SKILL.md +328 -0
- package/templates/claude/skills/mcp-builder/reference/evaluation.md +602 -0
- package/templates/claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/templates/claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
- package/templates/claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
- package/templates/claude/skills/mcp-builder/scripts/connections.py +151 -0
- package/templates/claude/skills/mcp-builder/scripts/evaluation.py +381 -0
- package/templates/claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/templates/claude/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/templates/claude/skills/mcp-management/README.md +219 -0
- package/templates/claude/skills/mcp-management/SKILL.md +209 -0
- package/templates/claude/skills/mcp-management/assets/tools.json +3146 -0
- package/templates/claude/skills/mcp-management/references/configuration.md +114 -0
- package/templates/claude/skills/mcp-management/references/gemini-cli-integration.md +209 -0
- package/templates/claude/skills/mcp-management/references/mcp-protocol.md +116 -0
- package/templates/claude/skills/mcp-management/scripts/.env.example +10 -0
- package/templates/claude/skills/mcp-management/scripts/cli.ts +202 -0
- package/templates/claude/skills/mcp-management/scripts/mcp-client.ts +247 -0
- package/templates/claude/skills/mcp-management/scripts/package.json +20 -0
- package/templates/claude/skills/mcp-management/scripts/tsconfig.json +15 -0
- package/templates/claude/skills/media-processing/SKILL.md +91 -0
- package/templates/claude/skills/media-processing/references/common-workflows.md +132 -0
- package/templates/claude/skills/media-processing/references/ffmpeg-encoding.md +358 -0
- package/templates/claude/skills/media-processing/references/ffmpeg-filters.md +503 -0
- package/templates/claude/skills/media-processing/references/ffmpeg-streaming.md +395 -0
- package/templates/claude/skills/media-processing/references/format-compatibility.md +375 -0
- package/templates/claude/skills/media-processing/references/imagemagick-batch.md +612 -0
- package/templates/claude/skills/media-processing/references/imagemagick-editing.md +623 -0
- package/templates/claude/skills/media-processing/references/rmbg-background-removal.md +66 -0
- package/templates/claude/skills/media-processing/references/troubleshooting.md +109 -0
- package/templates/claude/skills/media-processing/scripts/README.md +102 -0
- package/templates/claude/skills/media-processing/scripts/batch-remove-background.sh +124 -0
- package/templates/claude/skills/media-processing/scripts/batch_resize.py +342 -0
- package/templates/claude/skills/media-processing/scripts/media_convert.py +311 -0
- package/templates/claude/skills/media-processing/scripts/remove-background.sh +96 -0
- package/templates/claude/skills/media-processing/scripts/remove-bg-node.js +181 -0
- package/templates/claude/skills/mermaidjs-v11/SKILL.md +115 -0
- package/templates/claude/skills/mermaidjs-v11/references/cli-usage.md +228 -0
- package/templates/claude/skills/mermaidjs-v11/references/configuration.md +232 -0
- package/templates/claude/skills/mermaidjs-v11/references/diagram-types.md +315 -0
- package/templates/claude/skills/mermaidjs-v11/references/examples.md +344 -0
- package/templates/claude/skills/mermaidjs-v11/references/integration.md +310 -0
- package/templates/claude/skills/planning/SKILL.md +115 -0
- package/templates/claude/skills/planning/references/codebase-understanding.md +62 -0
- package/templates/claude/skills/planning/references/output-standards.md +127 -0
- package/templates/claude/skills/planning/references/plan-organization.md +150 -0
- package/templates/claude/skills/planning/references/research-phase.md +49 -0
- package/templates/claude/skills/planning/references/solution-design.md +63 -0
- package/templates/claude/skills/plans-kanban/SKILL.md +157 -0
- package/templates/claude/skills/plans-kanban/assets/dashboard-template.html +119 -0
- package/templates/claude/skills/plans-kanban/assets/dashboard.css +1594 -0
- package/templates/claude/skills/plans-kanban/assets/dashboard.js +659 -0
- package/templates/claude/skills/plans-kanban/assets/favicon.png +0 -0
- package/templates/claude/skills/plans-kanban/package.json +13 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/dashboard-renderer.cjs +941 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/http-server.cjs +310 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/plan-metadata-extractor.cjs +489 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/plan-parser.cjs +194 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/plan-scanner.cjs +277 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/port-finder.cjs +49 -0
- package/templates/claude/skills/plans-kanban/scripts/lib/process-mgr.cjs +128 -0
- package/templates/claude/skills/plans-kanban/scripts/server.cjs +249 -0
- package/templates/claude/skills/problem-solving/SKILL.md +96 -0
- package/templates/claude/skills/problem-solving/references/attribution.md +69 -0
- package/templates/claude/skills/problem-solving/references/collision-zone-thinking.md +79 -0
- package/templates/claude/skills/problem-solving/references/inversion-exercise.md +91 -0
- package/templates/claude/skills/problem-solving/references/meta-pattern-recognition.md +87 -0
- package/templates/claude/skills/problem-solving/references/scale-game.md +95 -0
- package/templates/claude/skills/problem-solving/references/simplification-cascades.md +80 -0
- package/templates/claude/skills/problem-solving/references/when-stuck.md +72 -0
- package/templates/claude/skills/registry.json +258 -0
- package/templates/claude/skills/repomix/SKILL.md +247 -0
- package/templates/claude/skills/repomix/references/configuration.md +211 -0
- package/templates/claude/skills/repomix/references/usage-patterns.md +232 -0
- package/templates/claude/skills/repomix/scripts/README.md +179 -0
- package/templates/claude/skills/repomix/scripts/repomix_batch.py +455 -0
- package/templates/claude/skills/repomix/scripts/repos.example.json +15 -0
- package/templates/claude/skills/research/SKILL.md +168 -0
- package/templates/claude/skills/sequential-thinking/.env.example +8 -0
- package/templates/claude/skills/sequential-thinking/README.md +183 -0
- package/templates/claude/skills/sequential-thinking/SKILL.md +94 -0
- package/templates/claude/skills/sequential-thinking/package.json +31 -0
- package/templates/claude/skills/sequential-thinking/references/advanced-strategies.md +79 -0
- package/templates/claude/skills/sequential-thinking/references/advanced-techniques.md +76 -0
- package/templates/claude/skills/sequential-thinking/references/core-patterns.md +95 -0
- package/templates/claude/skills/sequential-thinking/references/examples-api.md +88 -0
- package/templates/claude/skills/sequential-thinking/references/examples-architecture.md +94 -0
- package/templates/claude/skills/sequential-thinking/references/examples-debug.md +90 -0
- package/templates/claude/skills/sequential-thinking/scripts/format-thought.js +182 -0
- package/templates/claude/skills/sequential-thinking/scripts/process-thought.js +252 -0
- package/templates/claude/skills/skill-creator/LICENSE.txt +202 -0
- package/templates/claude/skills/skill-creator/SKILL.md +266 -0
- package/templates/claude/skills/skill-creator/references/agent-skills-spec.md +51 -0
- package/templates/claude/skills/skill-creator/scripts/encoding_utils.py +21 -0
- package/templates/claude/skills/skill-creator/scripts/init_skill.py +304 -0
- package/templates/claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/claude/skills/skill-creator/scripts/quick_validate.py +66 -0
- package/templates/claude/skills/template-skill/SKILL.md +6 -0
- package/templates/claude/skills/vitest/SKILL.md +595 -0
- package/templates/claude/skills/vitest/references/async-patterns.md +82 -0
- package/templates/claude/skills/vitest/references/mock-patterns.md +78 -0
- package/templates/claude/skills/vitest/references/monorepo-setup.md +185 -0
- package/templates/claude/skills/vitest/references/turborepo-setup.md +332 -0
- package/templates/claude/skills/web-frameworks/SKILL.md +324 -0
- package/templates/claude/skills/web-frameworks/references/nextjs-app-router.md +465 -0
- package/templates/claude/skills/web-frameworks/references/nextjs-data-fetching.md +459 -0
- package/templates/claude/skills/web-frameworks/references/nextjs-optimization.md +511 -0
- package/templates/claude/skills/web-frameworks/references/nextjs-server-components.md +495 -0
- package/templates/claude/skills/web-frameworks/references/remix-icon-integration.md +603 -0
- package/templates/claude/skills/web-frameworks/references/turborepo-caching.md +551 -0
- package/templates/claude/skills/web-frameworks/references/turborepo-pipelines.md +517 -0
- package/templates/claude/skills/web-frameworks/references/turborepo-setup.md +542 -0
- package/templates/claude/skills/web-frameworks/scripts/nextjs_init.py +547 -0
- package/templates/claude/skills/web-frameworks/scripts/turborepo_migrate.py +394 -0
- package/templates/claude/workflows/development-rules.md +40 -0
- package/templates/claude/workflows/documentation-management.md +121 -0
- package/templates/claude/workflows/orchestration-protocol.md +16 -0
- package/templates/claude/workflows/primary-workflow.md +45 -0
- package/templates/claude/workflows/registry.json +37 -0
- package/templates/common/.cct.json +41 -0
- package/templates/common/.cctkignore +22 -0
- package/templates/common/.env.example +39 -0
- package/templates/common/.mcp.json.example +16 -0
- package/templates/common/metadata.json +15 -0
- package/templates/common/settings.json +79 -0
- package/templates/common/statusline.cjs +271 -0
- package/templates/config/.repomixignore +22 -0
- package/templates/config/AGENTS.md +55 -0
- package/templates/config/CLAUDE.md +87 -0
- package/templates/plans/bug-fix-template.md +69 -0
- package/templates/plans/feature-implementation-template.md +84 -0
- package/templates/plans/refactor-template.md +82 -0
- package/templates/plans/template-usage-guide.md +58 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* llms.txt Analyzer Script
|
|
5
|
+
* Parses llms.txt content and categorizes URLs for optimal agent distribution
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const DEBUG = process.env.DEBUG === 'true';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* URL priority categories
|
|
12
|
+
*/
|
|
13
|
+
const PRIORITY_KEYWORDS = {
|
|
14
|
+
critical: [
|
|
15
|
+
'getting-started',
|
|
16
|
+
'quick-start',
|
|
17
|
+
'quickstart',
|
|
18
|
+
'introduction',
|
|
19
|
+
'intro',
|
|
20
|
+
'overview',
|
|
21
|
+
'installation',
|
|
22
|
+
'install',
|
|
23
|
+
'setup',
|
|
24
|
+
'basics',
|
|
25
|
+
'core-concepts',
|
|
26
|
+
'fundamentals',
|
|
27
|
+
],
|
|
28
|
+
supplementary: [
|
|
29
|
+
'advanced',
|
|
30
|
+
'internals',
|
|
31
|
+
'migration',
|
|
32
|
+
'migrate',
|
|
33
|
+
'troubleshooting',
|
|
34
|
+
'troubleshoot',
|
|
35
|
+
'faq',
|
|
36
|
+
'frequently-asked',
|
|
37
|
+
'changelog',
|
|
38
|
+
'contributing',
|
|
39
|
+
'contribute',
|
|
40
|
+
],
|
|
41
|
+
important: [
|
|
42
|
+
'guide',
|
|
43
|
+
'tutorial',
|
|
44
|
+
'example',
|
|
45
|
+
'api-reference',
|
|
46
|
+
'api',
|
|
47
|
+
'reference',
|
|
48
|
+
'configuration',
|
|
49
|
+
'config',
|
|
50
|
+
'routing',
|
|
51
|
+
'route',
|
|
52
|
+
'data-fetching',
|
|
53
|
+
'authentication',
|
|
54
|
+
'auth',
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Categorize URL by priority
|
|
60
|
+
* @param {string} url - Documentation URL
|
|
61
|
+
* @returns {string} Priority level (critical/important/supplementary)
|
|
62
|
+
*/
|
|
63
|
+
function categorizeUrl(url) {
|
|
64
|
+
const urlLower = url.toLowerCase();
|
|
65
|
+
|
|
66
|
+
// Check in priority order: critical first, then supplementary, then important
|
|
67
|
+
// This ensures specific keywords (advanced, internals) are caught before generic ones
|
|
68
|
+
const priorities = ['critical', 'supplementary', 'important'];
|
|
69
|
+
|
|
70
|
+
for (const priority of priorities) {
|
|
71
|
+
const keywords = PRIORITY_KEYWORDS[priority];
|
|
72
|
+
|
|
73
|
+
for (const keyword of keywords) {
|
|
74
|
+
if (urlLower.includes(keyword)) {
|
|
75
|
+
return priority;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return 'important'; // Default
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Parse llms.txt content to extract URLs
|
|
85
|
+
* @param {string} content - llms.txt content
|
|
86
|
+
* @returns {Array<string>} Array of URLs
|
|
87
|
+
*/
|
|
88
|
+
function parseUrls(content) {
|
|
89
|
+
if (!content || typeof content !== 'string') {
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const urls = [];
|
|
94
|
+
const lines = content.split('\n');
|
|
95
|
+
|
|
96
|
+
for (const line of lines) {
|
|
97
|
+
const trimmed = line.trim();
|
|
98
|
+
|
|
99
|
+
// Skip comments and empty lines
|
|
100
|
+
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
101
|
+
|
|
102
|
+
// Extract URLs (look for http/https)
|
|
103
|
+
const urlMatch = trimmed.match(/https?:\/\/[^\s<>"]+/i);
|
|
104
|
+
|
|
105
|
+
if (urlMatch) {
|
|
106
|
+
urls.push(urlMatch[0]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return urls;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Group URLs by priority
|
|
115
|
+
* @param {Array<string>} urls - Array of URLs
|
|
116
|
+
* @returns {Object} URLs grouped by priority
|
|
117
|
+
*/
|
|
118
|
+
function groupByPriority(urls) {
|
|
119
|
+
const groups = {
|
|
120
|
+
critical: [],
|
|
121
|
+
important: [],
|
|
122
|
+
supplementary: [],
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
for (const url of urls) {
|
|
126
|
+
const priority = categorizeUrl(url);
|
|
127
|
+
|
|
128
|
+
groups[priority].push(url);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return groups;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Suggest optimal agent distribution
|
|
136
|
+
* @param {number} urlCount - Total number of URLs
|
|
137
|
+
* @returns {Object} Agent distribution suggestion
|
|
138
|
+
*/
|
|
139
|
+
function suggestAgentDistribution(urlCount) {
|
|
140
|
+
if (urlCount <= 3) {
|
|
141
|
+
return {
|
|
142
|
+
agentCount: 1,
|
|
143
|
+
strategy: 'single',
|
|
144
|
+
urlsPerAgent: urlCount,
|
|
145
|
+
description: 'Single agent can handle all URLs',
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (urlCount <= 10) {
|
|
149
|
+
const agents = Math.min(Math.ceil(urlCount / 2), 5);
|
|
150
|
+
|
|
151
|
+
return {
|
|
152
|
+
agentCount: agents,
|
|
153
|
+
strategy: 'parallel',
|
|
154
|
+
urlsPerAgent: Math.ceil(urlCount / agents),
|
|
155
|
+
description: `Deploy ${agents} agents in parallel`,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (urlCount <= 20) {
|
|
159
|
+
return {
|
|
160
|
+
agentCount: 7,
|
|
161
|
+
strategy: 'parallel',
|
|
162
|
+
urlsPerAgent: Math.ceil(urlCount / 7),
|
|
163
|
+
description: 'Deploy 7 agents with balanced workload',
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return {
|
|
168
|
+
agentCount: 7,
|
|
169
|
+
strategy: 'phased',
|
|
170
|
+
urlsPerAgent: Math.ceil(urlCount / 7),
|
|
171
|
+
phases: 2,
|
|
172
|
+
description: 'Use two-phase approach: critical first, then important',
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Analyze llms.txt content
|
|
178
|
+
* @param {string} content - llms.txt content
|
|
179
|
+
* @returns {Object} Analysis result
|
|
180
|
+
*/
|
|
181
|
+
function analyzeLlmsTxt(content) {
|
|
182
|
+
const urls = parseUrls(content);
|
|
183
|
+
const grouped = groupByPriority(urls);
|
|
184
|
+
const distribution = suggestAgentDistribution(urls.length);
|
|
185
|
+
|
|
186
|
+
return {
|
|
187
|
+
totalUrls: urls.length,
|
|
188
|
+
urls,
|
|
189
|
+
grouped,
|
|
190
|
+
distribution,
|
|
191
|
+
summary: {
|
|
192
|
+
critical: grouped.critical.length,
|
|
193
|
+
important: grouped.important.length,
|
|
194
|
+
supplementary: grouped.supplementary.length,
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* CLI entry point
|
|
201
|
+
*/
|
|
202
|
+
function main() {
|
|
203
|
+
const args = process.argv.slice(2);
|
|
204
|
+
|
|
205
|
+
if (args.length === 0) {
|
|
206
|
+
console.error('Usage: node analyze-llms-txt.js <content-file-or-stdin>');
|
|
207
|
+
console.error('Or pipe content: cat llms.txt | node analyze-llms-txt.js');
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const fs = require('node:fs');
|
|
212
|
+
let content;
|
|
213
|
+
|
|
214
|
+
if (args[0] === '-') {
|
|
215
|
+
// Read from stdin
|
|
216
|
+
content = fs.readFileSync(0, 'utf8');
|
|
217
|
+
} else {
|
|
218
|
+
// Read from file
|
|
219
|
+
const filePath = args[0];
|
|
220
|
+
|
|
221
|
+
if (!fs.existsSync(filePath)) {
|
|
222
|
+
console.error(`Error: File not found: ${filePath}`);
|
|
223
|
+
process.exit(1);
|
|
224
|
+
}
|
|
225
|
+
content = fs.readFileSync(filePath, 'utf8');
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const result = analyzeLlmsTxt(content);
|
|
229
|
+
|
|
230
|
+
console.log(JSON.stringify(result, null, 2));
|
|
231
|
+
process.exit(0);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Run if called directly
|
|
235
|
+
if (require.main === module) {
|
|
236
|
+
main();
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
module.exports = {
|
|
240
|
+
analyzeLlmsTxt,
|
|
241
|
+
parseUrls,
|
|
242
|
+
groupByPriority,
|
|
243
|
+
categorizeUrl,
|
|
244
|
+
suggestAgentDistribution,
|
|
245
|
+
};
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Topic Detection Script
|
|
5
|
+
* Analyzes user queries to extract library name and topic keywords
|
|
6
|
+
* Returns null for general queries, topic info for specific queries
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const DEBUG = process.env.DEBUG === 'true';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Topic-specific query patterns
|
|
13
|
+
*/
|
|
14
|
+
const TOPIC_PATTERNS = [
|
|
15
|
+
// "How do I use X in Y?"
|
|
16
|
+
/how (?:do i|to|can i) (?:use|implement|add|setup|configure) (?:the )?(.+?) (?:in|with|for) (.+)/i,
|
|
17
|
+
|
|
18
|
+
// "Y X strategies/patterns" - e.g., "Next.js caching strategies"
|
|
19
|
+
/(.+?) (.+?) (?:strategies|patterns|techniques|methods|approaches)/i,
|
|
20
|
+
|
|
21
|
+
// "X Y documentation" or "Y X docs"
|
|
22
|
+
/(.+?) (.+?) (?:documentation|docs|guide|tutorial)/i,
|
|
23
|
+
|
|
24
|
+
// "Using X with Y"
|
|
25
|
+
/using (.+?) (?:with|in|for) (.+)/i,
|
|
26
|
+
|
|
27
|
+
// "Y X guide/implementation/setup"
|
|
28
|
+
/(.+?) (.+?) (?:guide|implementation|setup|configuration)/i,
|
|
29
|
+
|
|
30
|
+
// "Implement X in Y"
|
|
31
|
+
/implement(?:ing)? (.+?) (?:in|with|for|using) (.+)/i,
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* General library query patterns (non-topic specific)
|
|
36
|
+
*/
|
|
37
|
+
const GENERAL_PATTERNS = [
|
|
38
|
+
/(?:documentation|docs) for (.+)/i,
|
|
39
|
+
/(.+?) (?:getting started|quick ?start|introduction)/i,
|
|
40
|
+
/(?:how to use|learn) (.+)/i,
|
|
41
|
+
/(.+?) (?:api reference|overview|basics)/i,
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Normalize topic keyword
|
|
46
|
+
* @param {string} topic - Raw topic string
|
|
47
|
+
* @returns {string} Normalized topic keyword
|
|
48
|
+
*/
|
|
49
|
+
function normalizeTopic(topic) {
|
|
50
|
+
return topic
|
|
51
|
+
.toLowerCase()
|
|
52
|
+
.trim()
|
|
53
|
+
.replaceAll(/[^a-z0-9\s-]/g, '') // Remove special chars
|
|
54
|
+
.replaceAll(/\s+/g, '-') // Replace spaces with hyphens
|
|
55
|
+
.split('-')[0] // Take first word for multi-word topics
|
|
56
|
+
.slice(0, 20); // Limit length
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Normalize library name
|
|
61
|
+
* @param {string} library - Raw library string
|
|
62
|
+
* @returns {string} Normalized library name
|
|
63
|
+
*/
|
|
64
|
+
function normalizeLibrary(library) {
|
|
65
|
+
return library
|
|
66
|
+
.toLowerCase()
|
|
67
|
+
.trim()
|
|
68
|
+
.replaceAll(/[^a-z0-9\s\-\/\.]/g, '')
|
|
69
|
+
.replaceAll(/\s+/g, '-');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Detect if query is topic-specific or general
|
|
74
|
+
* @param {string} query - User query
|
|
75
|
+
* @returns {Object|null} Topic info or null for general query
|
|
76
|
+
*/
|
|
77
|
+
function detectTopic(query) {
|
|
78
|
+
if (!query || typeof query !== 'string') {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const trimmedQuery = query.trim();
|
|
83
|
+
|
|
84
|
+
// Check general patterns first
|
|
85
|
+
for (const pattern of GENERAL_PATTERNS) {
|
|
86
|
+
const match = trimmedQuery.match(pattern);
|
|
87
|
+
|
|
88
|
+
if (match) {
|
|
89
|
+
if (DEBUG) console.error('[DEBUG] Matched general pattern, no topic');
|
|
90
|
+
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Check topic-specific patterns
|
|
96
|
+
for (const [i, pattern] of TOPIC_PATTERNS.entries()) {
|
|
97
|
+
const match = trimmedQuery.match(pattern);
|
|
98
|
+
|
|
99
|
+
if (match) {
|
|
100
|
+
const [, term1, term2] = match;
|
|
101
|
+
|
|
102
|
+
// Determine which is library and which is topic based on pattern
|
|
103
|
+
let topic;
|
|
104
|
+
let library;
|
|
105
|
+
|
|
106
|
+
// Pattern 0: "How do I use X in Y?" -> X is topic, Y is library
|
|
107
|
+
// Pattern 1: "Y X strategies" -> X is topic, Y is library
|
|
108
|
+
// Pattern 2-5: X is topic, Y is library in most cases
|
|
109
|
+
|
|
110
|
+
// For pattern 1 (strategies/patterns), term1 is library, term2 is topic
|
|
111
|
+
if (i === 1) {
|
|
112
|
+
topic = normalizeTopic(term2);
|
|
113
|
+
library = normalizeLibrary(term1);
|
|
114
|
+
} else {
|
|
115
|
+
// For other patterns, term1 is topic, term2 is library
|
|
116
|
+
topic = normalizeTopic(term1);
|
|
117
|
+
library = normalizeLibrary(term2);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (DEBUG) {
|
|
121
|
+
console.error('[DEBUG] Matched topic pattern');
|
|
122
|
+
console.error('[DEBUG] Topic:', topic);
|
|
123
|
+
console.error('[DEBUG] Library:', library);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return {
|
|
127
|
+
query: trimmedQuery,
|
|
128
|
+
topic,
|
|
129
|
+
library,
|
|
130
|
+
isTopicSpecific: true,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (DEBUG) console.error('[DEBUG] No pattern matched, treating as general');
|
|
136
|
+
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* CLI entry point
|
|
142
|
+
*/
|
|
143
|
+
function main() {
|
|
144
|
+
const args = process.argv.slice(2);
|
|
145
|
+
|
|
146
|
+
if (args.length === 0) {
|
|
147
|
+
console.error('Usage: node detect-topic.js "<user query>"');
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const query = args.join(' ');
|
|
152
|
+
const result = detectTopic(query);
|
|
153
|
+
|
|
154
|
+
if (result) {
|
|
155
|
+
console.log(JSON.stringify(result, null, 2));
|
|
156
|
+
process.exit(0);
|
|
157
|
+
} else {
|
|
158
|
+
console.log(JSON.stringify({ isTopicSpecific: false }, null, 2));
|
|
159
|
+
process.exit(0);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Run if called directly
|
|
164
|
+
if (require.main === module) {
|
|
165
|
+
main();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
module.exports = {
|
|
169
|
+
detectTopic,
|
|
170
|
+
normalizeTopic,
|
|
171
|
+
normalizeLibrary,
|
|
172
|
+
};
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Documentation Fetcher Script
|
|
5
|
+
* Fetches documentation from context7.com with topic support and fallback chain
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const https = require('node:https');
|
|
9
|
+
const { detectTopic } = require('./detect-topic');
|
|
10
|
+
|
|
11
|
+
const DEBUG = process.env.DEBUG === 'true';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Make HTTPS GET request
|
|
15
|
+
* @param {string} url - URL to fetch
|
|
16
|
+
* @returns {Promise<string>} Response body
|
|
17
|
+
*/
|
|
18
|
+
function httpsGet(url) {
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
https
|
|
21
|
+
.get(url, (res) => {
|
|
22
|
+
let data = '';
|
|
23
|
+
|
|
24
|
+
res.on('data', (chunk) => {
|
|
25
|
+
data += chunk;
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
res.on('end', () => {
|
|
29
|
+
if (res.statusCode === 200) {
|
|
30
|
+
resolve(data);
|
|
31
|
+
} else if (res.statusCode === 404) {
|
|
32
|
+
resolve(null);
|
|
33
|
+
} else {
|
|
34
|
+
reject(new Error(`HTTP ${res.statusCode}: ${data}`));
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
})
|
|
38
|
+
.on('error', reject);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Construct context7.com URL
|
|
44
|
+
* @param {string} library - Library name (e.g., "next.js", "shadcn/ui")
|
|
45
|
+
* @param {string} topic - Optional topic keyword
|
|
46
|
+
* @returns {string} context7.com URL
|
|
47
|
+
*/
|
|
48
|
+
function buildContext7Url(library, topic = null) {
|
|
49
|
+
// Determine if GitHub repo or website
|
|
50
|
+
let basePath;
|
|
51
|
+
|
|
52
|
+
if (library.includes('/')) {
|
|
53
|
+
// GitHub repo format: org/repo
|
|
54
|
+
const [org, repo] = library.split('/');
|
|
55
|
+
|
|
56
|
+
basePath = `${org}/${repo}`;
|
|
57
|
+
} else {
|
|
58
|
+
// Try common patterns
|
|
59
|
+
const normalized = library.toLowerCase().replaceAll(/[^a-z0-9-]/g, '');
|
|
60
|
+
|
|
61
|
+
basePath = `websites/${normalized}`;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const baseUrl = `https://context7.com/${basePath}/llms.txt`;
|
|
65
|
+
|
|
66
|
+
if (topic) {
|
|
67
|
+
return `${baseUrl}?topic=${encodeURIComponent(topic)}`;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return baseUrl;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Try multiple URL variations for a library
|
|
75
|
+
* @param {string} library - Library name
|
|
76
|
+
* @param {string} topic - Optional topic
|
|
77
|
+
* @returns {Promise<Array>} Array of URLs to try
|
|
78
|
+
*/
|
|
79
|
+
async function getUrlVariations(library, topic = null) {
|
|
80
|
+
const urls = [];
|
|
81
|
+
|
|
82
|
+
// Known repo mappings
|
|
83
|
+
const knownRepos = {
|
|
84
|
+
'next.js': 'vercel/next.js',
|
|
85
|
+
nextjs: 'vercel/next.js',
|
|
86
|
+
remix: 'remix-run/remix',
|
|
87
|
+
astro: 'withastro/astro',
|
|
88
|
+
shadcn: 'shadcn-ui/ui',
|
|
89
|
+
'shadcn/ui': 'shadcn-ui/ui',
|
|
90
|
+
'better-auth': 'better-auth/better-auth',
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const normalized = library.toLowerCase();
|
|
94
|
+
const repo = knownRepos[normalized] || library;
|
|
95
|
+
|
|
96
|
+
// Primary: Try with topic if available
|
|
97
|
+
if (topic) {
|
|
98
|
+
urls.push(buildContext7Url(repo, topic));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Fallback: Try without topic
|
|
102
|
+
urls.push(buildContext7Url(repo));
|
|
103
|
+
|
|
104
|
+
return urls;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Fetch documentation from context7.com
|
|
109
|
+
* @param {string} query - User query
|
|
110
|
+
* @returns {Promise<Object>} Documentation result
|
|
111
|
+
*/
|
|
112
|
+
async function fetchDocs(query) {
|
|
113
|
+
const topicInfo = detectTopic(query);
|
|
114
|
+
|
|
115
|
+
if (DEBUG) {
|
|
116
|
+
console.error('[DEBUG] Topic detection result:', topicInfo);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
let urls = [];
|
|
120
|
+
|
|
121
|
+
if (topicInfo && topicInfo.isTopicSpecific) {
|
|
122
|
+
// Topic-specific search
|
|
123
|
+
urls = await getUrlVariations(topicInfo.library, topicInfo.topic);
|
|
124
|
+
|
|
125
|
+
if (DEBUG) {
|
|
126
|
+
console.error('[DEBUG] Topic-specific URLs:', urls);
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
// Extract library from general query
|
|
130
|
+
const libraryMatch = query.match(/(?:documentation|docs|guide) (?:for )?(.+)/i);
|
|
131
|
+
|
|
132
|
+
if (libraryMatch) {
|
|
133
|
+
const library = libraryMatch[1].trim();
|
|
134
|
+
|
|
135
|
+
urls = await getUrlVariations(library);
|
|
136
|
+
|
|
137
|
+
if (DEBUG) {
|
|
138
|
+
console.error('[DEBUG] General library URLs:', urls);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Try each URL
|
|
144
|
+
for (const url of urls) {
|
|
145
|
+
if (DEBUG) {
|
|
146
|
+
console.error(`[DEBUG] Trying URL: ${url}`);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
const content = await httpsGet(url);
|
|
151
|
+
|
|
152
|
+
if (content) {
|
|
153
|
+
return {
|
|
154
|
+
success: true,
|
|
155
|
+
source: 'context7.com',
|
|
156
|
+
url,
|
|
157
|
+
content,
|
|
158
|
+
topicSpecific: url.includes('?topic='),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
} catch (error) {
|
|
162
|
+
if (DEBUG) {
|
|
163
|
+
console.error(`[DEBUG] Failed to fetch ${url}:`, error.message);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// No URL worked
|
|
169
|
+
return {
|
|
170
|
+
success: false,
|
|
171
|
+
source: 'context7.com',
|
|
172
|
+
error: 'Documentation not found on context7.com',
|
|
173
|
+
urls,
|
|
174
|
+
suggestion: 'Try repository analysis or web search',
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* CLI entry point
|
|
180
|
+
*/
|
|
181
|
+
async function main() {
|
|
182
|
+
const args = process.argv.slice(2);
|
|
183
|
+
|
|
184
|
+
if (args.length === 0) {
|
|
185
|
+
console.error('Usage: node fetch-docs.js "<user query>"');
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const query = args.join(' ');
|
|
190
|
+
|
|
191
|
+
try {
|
|
192
|
+
const result = await fetchDocs(query);
|
|
193
|
+
|
|
194
|
+
console.log(JSON.stringify(result, null, 2));
|
|
195
|
+
process.exit(result.success ? 0 : 1);
|
|
196
|
+
} catch (error) {
|
|
197
|
+
console.error('Error:', error.message);
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Run if called directly
|
|
203
|
+
if (require.main === module) {
|
|
204
|
+
main();
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
module.exports = {
|
|
208
|
+
fetchDocs,
|
|
209
|
+
buildContext7Url,
|
|
210
|
+
getUrlVariations,
|
|
211
|
+
httpsGet,
|
|
212
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# General Library Documentation Search
|
|
2
|
+
|
|
3
|
+
**Use when:** User asks about entire library/framework
|
|
4
|
+
|
|
5
|
+
**Speed:** ⚡⚡ Moderate (30-60s)
|
|
6
|
+
**Token usage:** 🟡 Medium
|
|
7
|
+
**Accuracy:** 📚 Comprehensive
|
|
8
|
+
|
|
9
|
+
## Trigger Patterns
|
|
10
|
+
|
|
11
|
+
- "Documentation for [LIBRARY]"
|
|
12
|
+
- "[LIBRARY] getting started"
|
|
13
|
+
- "How to use [LIBRARY]"
|
|
14
|
+
- "[LIBRARY] API reference"
|
|
15
|
+
|
|
16
|
+
## Workflow (Script-First)
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# STEP 1: Execute detect-topic.js script
|
|
20
|
+
node scripts/detect-topic.js "<user query>"
|
|
21
|
+
# Returns: {"isTopicSpecific": false} for general queries
|
|
22
|
+
|
|
23
|
+
# STEP 2: Execute fetch-docs.js script (handles URL construction)
|
|
24
|
+
node scripts/fetch-docs.js "<user query>"
|
|
25
|
+
# Script constructs context7.com URL automatically
|
|
26
|
+
# Script handles GitHub/website URL patterns
|
|
27
|
+
# Returns: llms.txt content with 5-20+ URLs
|
|
28
|
+
|
|
29
|
+
# STEP 3: Execute analyze-llms-txt.js script
|
|
30
|
+
cat llms.txt | node scripts/analyze-llms-txt.js -
|
|
31
|
+
# Groups URLs: critical, important, supplementary
|
|
32
|
+
# Recommends: agent distribution strategy
|
|
33
|
+
# Returns: {totalUrls, grouped, distribution}
|
|
34
|
+
|
|
35
|
+
# STEP 4: Deploy agents based on script recommendation
|
|
36
|
+
# - 1-3 URLs: Single agent or direct WebFetch
|
|
37
|
+
# - 4-10 URLs: Deploy 3-5 Explorer agents
|
|
38
|
+
# - 11+ URLs: Deploy 7 agents or phased approach
|
|
39
|
+
|
|
40
|
+
# STEP 5: Aggregate and present
|
|
41
|
+
# Synthesize findings: installation, concepts, API, examples
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
**Astro framework:**
|
|
47
|
+
```bash
|
|
48
|
+
# Execute scripts (no manual URL construction)
|
|
49
|
+
node scripts/detect-topic.js "Documentation for Astro"
|
|
50
|
+
# {"isTopicSpecific": false}
|
|
51
|
+
|
|
52
|
+
node scripts/fetch-docs.js "Documentation for Astro"
|
|
53
|
+
# Script fetches: context7.com/withastro/astro/llms.txt
|
|
54
|
+
# Returns: llms.txt with 8 URLs
|
|
55
|
+
|
|
56
|
+
node scripts/analyze-llms-txt.js < llms.txt
|
|
57
|
+
# {totalUrls: 8, distribution: "3-agents", grouped: {...}}
|
|
58
|
+
|
|
59
|
+
# Deploy 3 Explorer agents as recommended:
|
|
60
|
+
# Agent 1: Getting started, installation, setup
|
|
61
|
+
# Agent 2: Core concepts, components, layouts
|
|
62
|
+
# Agent 3: Configuration, API reference
|
|
63
|
+
|
|
64
|
+
# Aggregate and present comprehensive report
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Agent Distribution
|
|
68
|
+
|
|
69
|
+
**1-3 URLs:** Single agent
|
|
70
|
+
**4-10 URLs:** 3-5 agents (2-3 URLs each)
|
|
71
|
+
**11-20 URLs:** 7 agents (balanced)
|
|
72
|
+
**21+ URLs:** Two-phase (critical first, then important)
|
|
73
|
+
|
|
74
|
+
## Known Libraries
|
|
75
|
+
|
|
76
|
+
- Next.js: `vercel/next.js`
|
|
77
|
+
- Astro: `withastro/astro`
|
|
78
|
+
- Remix: `remix-run/remix`
|
|
79
|
+
- shadcn/ui: `shadcn-ui/ui`
|
|
80
|
+
- Better Auth: `better-auth/better-auth`
|
|
81
|
+
|
|
82
|
+
## Fallback
|
|
83
|
+
|
|
84
|
+
Scripts handle fallback automatically:
|
|
85
|
+
1. `fetch-docs.js` tries context7.com
|
|
86
|
+
2. If 404, script suggests WebSearch for llms.txt
|
|
87
|
+
3. If still unavailable: [Repository Analysis](./repo-analysis.md)
|