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.
Files changed (564) hide show
  1. package/AGENTS.md +103 -0
  2. package/README.FLOW.md +237 -0
  3. package/README.md +153 -94
  4. package/agents/brainstormer.agent.md +71 -0
  5. package/agents/code-reviewer.agent.md +128 -0
  6. package/agents/database-admin.agent.md +91 -0
  7. package/agents/debugger.agent.md +128 -0
  8. package/agents/docs-manager.agent.md +121 -0
  9. package/agents/fullstack-developer.agent.md +96 -0
  10. package/agents/git-manager.agent.md +392 -0
  11. package/agents/mcp-manager.agent.md +93 -0
  12. package/agents/planner.agent.md +94 -0
  13. package/agents/project-manager.agent.md +124 -0
  14. package/agents/researcher.agent.md +32 -0
  15. package/agents/scout-external.agent.md +141 -0
  16. package/agents/scout.agent.md +107 -0
  17. package/agents/tester.agent.md +106 -0
  18. package/agents/ui-ux-designer.agent.md +225 -0
  19. package/collections/ck-core.collection.yml +30 -0
  20. package/collections/ck-development-rules.collection.yml +18 -0
  21. package/collections/ck-documentation.collection.yml +18 -0
  22. package/collections/ck-git-workflow.collection.yml +18 -0
  23. package/collections/ck-orchestration.collection.yml +22 -0
  24. package/collections/ck-ui-design.collection.yml +18 -0
  25. package/docs/README.md +85 -0
  26. package/docs/copilot-processing-flow.md +128 -0
  27. package/instructions/ck-backend.instructions.md +48 -0
  28. package/instructions/ck-development.instructions.md +40 -0
  29. package/instructions/ck-frontend-design-pro.instructions.md +58 -0
  30. package/instructions/ck-frontend.instructions.md +44 -0
  31. package/instructions/ck-google-adk-python.instructions.md +242 -0
  32. package/instructions/ck-research.instructions.md +167 -0
  33. package/instructions/ck-testing.instructions.md +36 -0
  34. package/package.json +9 -2
  35. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-01-restructure-folders.md +183 -0
  36. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-02-convert-agents.md +206 -0
  37. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-03-convert-commands-to-prompts.md +284 -0
  38. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-04-convert-skills-to-instructions.md +349 -0
  39. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-05-create-collections.md +320 -0
  40. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-06-update-cli-build-scripts.md +450 -0
  41. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-07-update-documentation.md +407 -0
  42. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/plan.md +136 -0
  43. package/prompts/ck-ask.prompt.md +57 -0
  44. package/prompts/ck-bootstrap-auto-fast.prompt.md +108 -0
  45. package/prompts/ck-bootstrap-auto-parallel.prompt.md +66 -0
  46. package/prompts/ck-bootstrap-auto.prompt.md +114 -0
  47. package/prompts/ck-bootstrap.prompt.md +136 -0
  48. package/prompts/ck-brainstorm.prompt.md +68 -0
  49. package/prompts/ck-ck-help.prompt.md +114 -0
  50. package/prompts/ck-code-auto.prompt.md +171 -0
  51. package/prompts/ck-code-no-test.prompt.md +159 -0
  52. package/prompts/ck-code-parallel.prompt.md +56 -0
  53. package/prompts/ck-code.prompt.md +177 -0
  54. package/prompts/ck-coding-level.prompt.md +54 -0
  55. package/prompts/ck-cook-auto-fast.prompt.md +26 -0
  56. package/prompts/ck-cook-auto-parallel.prompt.md +49 -0
  57. package/prompts/ck-cook-auto.prompt.md +15 -0
  58. package/prompts/ck-cook.prompt.md +96 -0
  59. package/prompts/ck-debug.prompt.md +14 -0
  60. package/prompts/ck-design-3d.prompt.md +84 -0
  61. package/prompts/ck-design-describe.prompt.md +24 -0
  62. package/prompts/ck-design-fast.prompt.md +32 -0
  63. package/prompts/ck-design-good.prompt.md +36 -0
  64. package/prompts/ck-design-screenshot.prompt.md +35 -0
  65. package/prompts/ck-design-video.prompt.md +35 -0
  66. package/prompts/ck-docs-init.prompt.md +27 -0
  67. package/prompts/ck-docs-summarize.prompt.md +23 -0
  68. package/prompts/ck-docs-update.prompt.md +36 -0
  69. package/prompts/ck-fix-ci.prompt.md +18 -0
  70. package/prompts/ck-fix-fast.prompt.md +18 -0
  71. package/prompts/ck-fix-hard.prompt.md +36 -0
  72. package/prompts/ck-fix-logs.prompt.md +27 -0
  73. package/prompts/ck-fix-parallel.prompt.md +54 -0
  74. package/prompts/ck-fix-test.prompt.md +19 -0
  75. package/prompts/ck-fix-types.prompt.md +11 -0
  76. package/prompts/ck-fix-ui.prompt.md +49 -0
  77. package/prompts/ck-fix.prompt.md +44 -0
  78. package/prompts/ck-git-cm.prompt.md +8 -0
  79. package/prompts/ck-git-cp.prompt.md +7 -0
  80. package/prompts/ck-git-merge.prompt.md +41 -0
  81. package/prompts/ck-git-pr.prompt.md +49 -0
  82. package/prompts/ck-kanban.prompt.md +77 -0
  83. package/prompts/ck-plan-archive.prompt.md +58 -0
  84. package/prompts/ck-plan-ci.prompt.md +34 -0
  85. package/prompts/ck-plan-cro.prompt.md +66 -0
  86. package/prompts/ck-plan-fast.prompt.md +67 -0
  87. package/prompts/ck-plan-hard.prompt.md +89 -0
  88. package/prompts/ck-plan-parallel.prompt.md +126 -0
  89. package/prompts/ck-plan-two.prompt.md +43 -0
  90. package/prompts/ck-plan-validate.prompt.md +118 -0
  91. package/prompts/ck-plan.prompt.md +29 -1
  92. package/prompts/ck-preview.prompt.md +65 -0
  93. package/prompts/ck-review-codebase.prompt.md +44 -0
  94. package/prompts/ck-scout-ext.prompt.md +35 -0
  95. package/prompts/ck-scout.prompt.md +25 -0
  96. package/prompts/ck-skill-add.prompt.md +36 -0
  97. package/prompts/ck-skill-create.prompt.md +29 -0
  98. package/prompts/ck-skill-fix-logs.prompt.md +22 -0
  99. package/prompts/ck-skill-optimize-auto.prompt.md +25 -0
  100. package/prompts/ck-skill-optimize.prompt.md +34 -0
  101. package/prompts/ck-skill-plan.prompt.md +46 -0
  102. package/prompts/ck-test-ui.prompt.md +92 -0
  103. package/prompts/ck-test.prompt.md +10 -0
  104. package/prompts/ck-use-mcp.prompt.md +27 -0
  105. package/prompts/ck-watzup.prompt.md +11 -0
  106. package/prompts/ck-worktree.prompt.md +127 -0
  107. package/rules/README.agents.md +55 -0
  108. package/rules/README.collections.md +78 -0
  109. package/rules/README.copilot-instructions.md +66 -0
  110. package/rules/README.instructions.md +73 -0
  111. package/rules/README.md +39 -0
  112. package/rules/README.prompts.md +76 -0
  113. package/rules/README.skills.md +71 -0
  114. package/skills/ck-ai-artist/SKILL.md +73 -0
  115. package/skills/ck-ai-artist/references/advanced-techniques.md +184 -0
  116. package/skills/ck-ai-artist/references/domain-code.md +66 -0
  117. package/skills/ck-ai-artist/references/domain-data.md +72 -0
  118. package/skills/ck-ai-artist/references/domain-marketing.md +66 -0
  119. package/skills/ck-ai-artist/references/domain-patterns.md +33 -0
  120. package/skills/ck-ai-artist/references/domain-writing.md +68 -0
  121. package/skills/ck-ai-artist/references/image-prompting.md +141 -0
  122. package/skills/ck-ai-artist/references/llm-prompting.md +165 -0
  123. package/skills/ck-ai-artist/references/nano-banana.md +59 -0
  124. package/skills/ck-ai-artist/references/reasoning-techniques.md +201 -0
  125. package/skills/ck-backend-development/SKILL.md +93 -0
  126. package/skills/ck-backend-development/references/backend-api-design.md +495 -0
  127. package/skills/ck-backend-development/references/backend-architecture.md +454 -0
  128. package/skills/ck-backend-development/references/backend-authentication.md +338 -0
  129. package/skills/ck-backend-development/references/backend-code-quality.md +659 -0
  130. package/skills/ck-backend-development/references/backend-debugging.md +904 -0
  131. package/skills/ck-backend-development/references/backend-devops.md +494 -0
  132. package/skills/ck-backend-development/references/backend-mindset.md +387 -0
  133. package/skills/ck-backend-development/references/backend-performance.md +397 -0
  134. package/skills/ck-backend-development/references/backend-security.md +290 -0
  135. package/skills/ck-backend-development/references/backend-technologies.md +256 -0
  136. package/skills/ck-backend-development/references/backend-testing.md +429 -0
  137. package/skills/ck-better-auth/SKILL.md +202 -0
  138. package/skills/ck-better-auth/references/advanced-features.md +553 -0
  139. package/skills/ck-better-auth/references/database-integration.md +577 -0
  140. package/skills/ck-better-auth/references/email-password-auth.md +416 -0
  141. package/skills/ck-better-auth/references/oauth-providers.md +430 -0
  142. package/skills/ck-better-auth/scripts/.coverage +0 -0
  143. package/skills/ck-better-auth/scripts/better_auth_init.py +521 -0
  144. package/skills/ck-better-auth/scripts/requirements.txt +15 -0
  145. package/skills/ck-better-auth/scripts/tests/.coverage +0 -0
  146. package/skills/ck-better-auth/scripts/tests/test_better_auth_init.py +421 -0
  147. package/skills/ck-chrome-devtools/SKILL.md +470 -0
  148. package/skills/ck-chrome-devtools/references/cdp-domains.md +694 -0
  149. package/skills/ck-chrome-devtools/references/performance-guide.md +940 -0
  150. package/skills/ck-chrome-devtools/references/puppeteer-reference.md +953 -0
  151. package/skills/ck-chrome-devtools/scripts/README.md +272 -0
  152. package/skills/ck-chrome-devtools/scripts/__tests__/selector.test.js +210 -0
  153. package/skills/ck-chrome-devtools/scripts/aria-snapshot.js +362 -0
  154. package/skills/ck-chrome-devtools/scripts/click.js +83 -0
  155. package/skills/ck-chrome-devtools/scripts/console.js +79 -0
  156. package/skills/ck-chrome-devtools/scripts/evaluate.js +53 -0
  157. package/skills/ck-chrome-devtools/scripts/fill.js +76 -0
  158. package/skills/ck-chrome-devtools/scripts/inject-auth.js +229 -0
  159. package/skills/ck-chrome-devtools/scripts/install-deps.sh +181 -0
  160. package/skills/ck-chrome-devtools/scripts/install.sh +83 -0
  161. package/skills/ck-chrome-devtools/scripts/lib/browser.js +318 -0
  162. package/skills/ck-chrome-devtools/scripts/lib/selector.js +178 -0
  163. package/skills/ck-chrome-devtools/scripts/navigate.js +54 -0
  164. package/skills/ck-chrome-devtools/scripts/network.js +106 -0
  165. package/skills/ck-chrome-devtools/scripts/package-lock.json +1589 -0
  166. package/skills/ck-chrome-devtools/scripts/package.json +16 -0
  167. package/skills/ck-chrome-devtools/scripts/performance.js +149 -0
  168. package/skills/ck-chrome-devtools/scripts/screenshot.js +198 -0
  169. package/skills/ck-chrome-devtools/scripts/select-ref.js +131 -0
  170. package/skills/ck-chrome-devtools/scripts/snapshot.js +135 -0
  171. package/skills/ck-code-review/SKILL.md +110 -53
  172. package/skills/ck-code-review/references/code-review-reception.md +182 -49
  173. package/skills/ck-code-review/references/requesting-code-review.md +105 -0
  174. package/skills/ck-code-review/references/verification-before-completion.md +111 -58
  175. package/skills/ck-databases/SKILL.md +231 -0
  176. package/skills/ck-databases/references/mongodb-aggregation.md +447 -0
  177. package/skills/ck-databases/references/mongodb-atlas.md +465 -0
  178. package/skills/ck-databases/references/mongodb-crud.md +408 -0
  179. package/skills/ck-databases/references/mongodb-indexing.md +442 -0
  180. package/skills/ck-databases/references/postgresql-administration.md +594 -0
  181. package/skills/ck-databases/references/postgresql-performance.md +527 -0
  182. package/skills/ck-databases/references/postgresql-psql-cli.md +467 -0
  183. package/skills/ck-databases/references/postgresql-queries.md +475 -0
  184. package/skills/ck-databases/scripts/.coverage +0 -0
  185. package/skills/ck-databases/scripts/db_backup.py +502 -0
  186. package/skills/ck-databases/scripts/db_migrate.py +425 -0
  187. package/skills/ck-databases/scripts/db_performance_check.py +456 -0
  188. package/skills/ck-databases/scripts/requirements.txt +20 -0
  189. package/skills/ck-databases/scripts/tests/coverage-db.json +1 -0
  190. package/skills/ck-databases/scripts/tests/requirements.txt +4 -0
  191. package/skills/ck-databases/scripts/tests/test_db_backup.py +340 -0
  192. package/skills/ck-databases/scripts/tests/test_db_migrate.py +277 -0
  193. package/skills/ck-databases/scripts/tests/test_db_performance_check.py +370 -0
  194. package/skills/ck-debugging/SKILL.md +55 -43
  195. package/skills/ck-debugging/references/defense-in-depth.md +124 -0
  196. package/skills/ck-debugging/references/root-cause-tracing.md +100 -43
  197. package/skills/ck-debugging/references/systematic-debugging.md +80 -52
  198. package/skills/ck-debugging/references/verification.md +101 -52
  199. package/skills/ck-debugging/scripts/find-polluter.sh +63 -0
  200. package/skills/ck-debugging/scripts/find-polluter.test.md +102 -0
  201. package/skills/ck-devops/.env.example +76 -0
  202. package/skills/ck-devops/SKILL.md +283 -0
  203. package/skills/ck-devops/references/browser-rendering.md +305 -0
  204. package/skills/ck-devops/references/cloudflare-d1-kv.md +123 -0
  205. package/skills/ck-devops/references/cloudflare-platform.md +271 -0
  206. package/skills/ck-devops/references/cloudflare-r2-storage.md +280 -0
  207. package/skills/ck-devops/references/cloudflare-workers-advanced.md +312 -0
  208. package/skills/ck-devops/references/cloudflare-workers-apis.md +309 -0
  209. package/skills/ck-devops/references/cloudflare-workers-basics.md +418 -0
  210. package/skills/ck-devops/references/docker-basics.md +297 -0
  211. package/skills/ck-devops/references/docker-compose.md +292 -0
  212. package/skills/ck-devops/references/gcloud-platform.md +297 -0
  213. package/skills/ck-devops/references/gcloud-services.md +304 -0
  214. package/skills/ck-devops/scripts/cloudflare_deploy.py +269 -0
  215. package/skills/ck-devops/scripts/docker_optimize.py +331 -0
  216. package/skills/ck-devops/scripts/requirements.txt +20 -0
  217. package/skills/ck-devops/scripts/tests/requirements.txt +3 -0
  218. package/skills/ck-devops/scripts/tests/test_cloudflare_deploy.py +285 -0
  219. package/skills/ck-devops/scripts/tests/test_docker_optimize.py +436 -0
  220. package/skills/ck-docs-seeker/.env.example +15 -0
  221. package/skills/ck-docs-seeker/SKILL.md +70 -65
  222. package/skills/ck-docs-seeker/package.json +25 -0
  223. package/skills/ck-docs-seeker/references/advanced.md +79 -0
  224. package/skills/ck-docs-seeker/references/context7-patterns.md +68 -0
  225. package/skills/ck-docs-seeker/references/errors.md +68 -0
  226. package/skills/ck-docs-seeker/scripts/analyze-llms-txt.js +211 -0
  227. package/skills/ck-docs-seeker/scripts/detect-topic.js +172 -0
  228. package/skills/ck-docs-seeker/scripts/fetch-docs.js +213 -0
  229. package/skills/ck-docs-seeker/scripts/tests/run-tests.js +72 -0
  230. package/skills/ck-docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
  231. package/skills/ck-docs-seeker/scripts/tests/test-detect-topic.js +112 -0
  232. package/skills/ck-docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
  233. package/skills/ck-docs-seeker/scripts/utils/env-loader.js +94 -0
  234. package/skills/ck-docs-seeker/workflows/library-search.md +87 -0
  235. package/skills/ck-docs-seeker/workflows/repo-analysis.md +91 -0
  236. package/skills/ck-docs-seeker/workflows/topic-search.md +77 -0
  237. package/skills/ck-frontend-design/SKILL.md +79 -0
  238. package/skills/ck-frontend-design/references/analysis-best-practices.md +80 -0
  239. package/skills/ck-frontend-design/references/analysis-prompts.md +141 -0
  240. package/skills/ck-frontend-design/references/analysis-techniques.md +118 -0
  241. package/skills/ck-frontend-design/references/animejs.md +396 -0
  242. package/skills/ck-frontend-design/references/design-extraction-overview.md +71 -0
  243. package/skills/ck-frontend-design/references/extraction-best-practices.md +141 -0
  244. package/skills/ck-frontend-design/references/extraction-output-templates.md +162 -0
  245. package/skills/ck-frontend-design/references/extraction-prompts.md +127 -0
  246. package/skills/ck-frontend-design/references/technical-accessibility.md +119 -0
  247. package/skills/ck-frontend-design/references/technical-best-practices.md +97 -0
  248. package/skills/ck-frontend-design/references/technical-optimization.md +44 -0
  249. package/skills/ck-frontend-design/references/technical-overview.md +90 -0
  250. package/skills/ck-frontend-design/references/technical-workflows.md +150 -0
  251. package/skills/ck-frontend-design/references/visual-analysis-overview.md +95 -0
  252. package/skills/ck-frontend-development/SKILL.md +399 -0
  253. package/skills/ck-frontend-development/resources/common-patterns.md +331 -0
  254. package/skills/ck-frontend-development/resources/complete-examples.md +872 -0
  255. package/skills/ck-frontend-development/resources/component-patterns.md +502 -0
  256. package/skills/ck-frontend-development/resources/data-fetching.md +767 -0
  257. package/skills/ck-frontend-development/resources/file-organization.md +502 -0
  258. package/skills/ck-frontend-development/resources/loading-and-error-states.md +501 -0
  259. package/skills/ck-frontend-development/resources/performance.md +406 -0
  260. package/skills/ck-frontend-development/resources/routing-guide.md +364 -0
  261. package/skills/ck-frontend-development/resources/styling-guide.md +428 -0
  262. package/skills/ck-frontend-development/resources/typescript-standards.md +418 -0
  263. package/skills/ck-markdown-novel-viewer/SKILL.md +190 -0
  264. package/skills/ck-markdown-novel-viewer/assets/directory-browser.css +215 -0
  265. package/skills/ck-markdown-novel-viewer/assets/favicon.png +0 -0
  266. package/skills/ck-markdown-novel-viewer/assets/novel-theme.css +818 -0
  267. package/skills/ck-markdown-novel-viewer/assets/reader.js +262 -0
  268. package/skills/ck-markdown-novel-viewer/assets/template.html +80 -0
  269. package/skills/ck-markdown-novel-viewer/package.json +15 -0
  270. package/skills/ck-markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
  271. package/skills/ck-markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +272 -0
  272. package/skills/ck-markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
  273. package/skills/ck-markdown-novel-viewer/scripts/lib/port-finder.cjs +48 -0
  274. package/skills/ck-markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
  275. package/skills/ck-markdown-novel-viewer/scripts/server.cjs +411 -0
  276. package/skills/ck-markdown-novel-viewer/scripts/tests/server.test.cjs +283 -0
  277. package/skills/ck-markdown-novel-viewer/tests/dashboard-assets.test.cjs +340 -0
  278. package/skills/ck-markdown-novel-viewer/tests/dashboard-renderer.test.cjs +404 -0
  279. package/skills/ck-markdown-novel-viewer/tests/http-server.test.cjs +271 -0
  280. package/skills/ck-markdown-novel-viewer/tests/run-tests.cjs +51 -0
  281. package/skills/ck-markdown-novel-viewer/tests/test-framework.cjs +154 -0
  282. package/skills/ck-markdown-novel-viewer/tests/verify-xss.cjs +90 -0
  283. package/skills/ck-mcp-builder/LICENSE.txt +202 -0
  284. package/skills/ck-mcp-builder/SKILL.md +327 -0
  285. package/skills/ck-mcp-builder/reference/evaluation.md +602 -0
  286. package/skills/ck-mcp-builder/reference/mcp_best_practices.md +915 -0
  287. package/skills/ck-mcp-builder/reference/node_mcp_server.md +916 -0
  288. package/skills/ck-mcp-builder/reference/python_mcp_server.md +752 -0
  289. package/skills/ck-mcp-builder/scripts/connections.py +151 -0
  290. package/skills/ck-mcp-builder/scripts/evaluation.py +373 -0
  291. package/skills/ck-mcp-builder/scripts/example_evaluation.xml +22 -0
  292. package/skills/ck-mcp-builder/scripts/requirements.txt +2 -0
  293. package/skills/ck-mcp-management/README.md +219 -0
  294. package/skills/ck-mcp-management/SKILL.md +209 -0
  295. package/skills/ck-mcp-management/assets/tools.json +3146 -0
  296. package/skills/ck-mcp-management/references/configuration.md +114 -0
  297. package/skills/ck-mcp-management/references/gemini-cli-integration.md +215 -0
  298. package/skills/ck-mcp-management/references/mcp-protocol.md +116 -0
  299. package/skills/ck-mcp-management/scripts/.env.example +10 -0
  300. package/skills/ck-mcp-management/scripts/cli.ts +195 -0
  301. package/skills/ck-mcp-management/scripts/dist/analyze-tools.js +70 -0
  302. package/skills/ck-mcp-management/scripts/dist/cli.js +160 -0
  303. package/skills/ck-mcp-management/scripts/dist/mcp-client.js +183 -0
  304. package/skills/ck-mcp-management/scripts/mcp-client.ts +230 -0
  305. package/skills/ck-mcp-management/scripts/package.json +20 -0
  306. package/skills/ck-mcp-management/scripts/tsconfig.json +15 -0
  307. package/skills/ck-media-processing/SKILL.md +90 -0
  308. package/skills/ck-media-processing/references/common-workflows.md +132 -0
  309. package/skills/ck-media-processing/references/ffmpeg-encoding.md +358 -0
  310. package/skills/ck-media-processing/references/ffmpeg-filters.md +503 -0
  311. package/skills/ck-media-processing/references/ffmpeg-streaming.md +403 -0
  312. package/skills/ck-media-processing/references/format-compatibility.md +375 -0
  313. package/skills/ck-media-processing/references/imagemagick-batch.md +612 -0
  314. package/skills/ck-media-processing/references/imagemagick-editing.md +623 -0
  315. package/skills/ck-media-processing/references/rmbg-background-removal.md +66 -0
  316. package/skills/ck-media-processing/references/troubleshooting.md +109 -0
  317. package/skills/ck-media-processing/scripts/README.md +111 -0
  318. package/skills/ck-media-processing/scripts/batch-remove-background.sh +124 -0
  319. package/skills/ck-media-processing/scripts/batch_resize.py +342 -0
  320. package/skills/ck-media-processing/scripts/media_convert.py +311 -0
  321. package/skills/ck-media-processing/scripts/remove-background.sh +96 -0
  322. package/skills/ck-media-processing/scripts/remove-bg-node.js +158 -0
  323. package/skills/ck-media-processing/scripts/requirements.txt +24 -0
  324. package/skills/ck-media-processing/scripts/tests/.coverage +0 -0
  325. package/skills/ck-media-processing/scripts/tests/requirements.txt +2 -0
  326. package/skills/ck-media-processing/scripts/tests/test_batch_resize.py +372 -0
  327. package/skills/ck-media-processing/scripts/tests/test_media_convert.py +259 -0
  328. package/skills/ck-media-processing/scripts/tests/test_video_optimize.py +397 -0
  329. package/skills/ck-media-processing/scripts/video_optimize.py +414 -0
  330. package/skills/ck-mobile-development/SKILL.md +210 -0
  331. package/skills/ck-mobile-development/references/mobile-android.md +604 -0
  332. package/skills/ck-mobile-development/references/mobile-best-practices.md +545 -0
  333. package/skills/ck-mobile-development/references/mobile-debugging.md +1089 -0
  334. package/skills/ck-mobile-development/references/mobile-frameworks.md +465 -0
  335. package/skills/ck-mobile-development/references/mobile-ios.md +496 -0
  336. package/skills/ck-mobile-development/references/mobile-mindset.md +544 -0
  337. package/skills/ck-payment-integration/README.md +185 -0
  338. package/skills/ck-payment-integration/SKILL.md +116 -0
  339. package/skills/ck-payment-integration/references/polar/benefits.md +396 -0
  340. package/skills/ck-payment-integration/references/polar/best-practices.md +482 -0
  341. package/skills/ck-payment-integration/references/polar/checkouts.md +266 -0
  342. package/skills/ck-payment-integration/references/polar/overview.md +184 -0
  343. package/skills/ck-payment-integration/references/polar/products.md +244 -0
  344. package/skills/ck-payment-integration/references/polar/sdk.md +436 -0
  345. package/skills/ck-payment-integration/references/polar/subscriptions.md +340 -0
  346. package/skills/ck-payment-integration/references/polar/webhooks.md +405 -0
  347. package/skills/ck-payment-integration/references/sepay/api.md +140 -0
  348. package/skills/ck-payment-integration/references/sepay/best-practices.md +337 -0
  349. package/skills/ck-payment-integration/references/sepay/overview.md +138 -0
  350. package/skills/ck-payment-integration/references/sepay/qr-codes.md +228 -0
  351. package/skills/ck-payment-integration/references/sepay/sdk.md +213 -0
  352. package/skills/ck-payment-integration/references/sepay/webhooks.md +208 -0
  353. package/skills/ck-payment-integration/scripts/.env.example +20 -0
  354. package/skills/ck-payment-integration/scripts/checkout-helper.js +244 -0
  355. package/skills/ck-payment-integration/scripts/package.json +17 -0
  356. package/skills/ck-payment-integration/scripts/polar-webhook-verify.js +202 -0
  357. package/skills/ck-payment-integration/scripts/sepay-webhook-verify.js +193 -0
  358. package/skills/ck-payment-integration/scripts/test-scripts.js +237 -0
  359. package/skills/ck-planning/SKILL.md +79 -49
  360. package/skills/ck-planning/references/codebase-understanding.md +62 -0
  361. package/skills/ck-planning/references/output-standards.md +127 -0
  362. package/skills/ck-planning/references/plan-organization.md +122 -60
  363. package/skills/ck-planning/references/research-phase.md +49 -56
  364. package/skills/ck-planning/references/solution-design.md +61 -63
  365. package/skills/ck-problem-solving/SKILL.md +95 -0
  366. package/skills/ck-problem-solving/references/attribution.md +69 -0
  367. package/skills/ck-problem-solving/references/collision-zone-thinking.md +79 -0
  368. package/skills/ck-problem-solving/references/inversion-exercise.md +91 -0
  369. package/skills/ck-problem-solving/references/meta-pattern-recognition.md +87 -0
  370. package/skills/ck-problem-solving/references/scale-game.md +95 -0
  371. package/skills/ck-problem-solving/references/simplification-cascades.md +80 -0
  372. package/skills/ck-problem-solving/references/when-stuck.md +72 -0
  373. package/skills/ck-repomix/SKILL.md +247 -0
  374. package/skills/ck-repomix/references/configuration.md +211 -0
  375. package/skills/ck-repomix/references/usage-patterns.md +232 -0
  376. package/skills/ck-repomix/scripts/.coverage +0 -0
  377. package/skills/ck-repomix/scripts/README.md +179 -0
  378. package/skills/ck-repomix/scripts/repomix_batch.py +455 -0
  379. package/skills/ck-repomix/scripts/repos.example.json +15 -0
  380. package/skills/ck-repomix/scripts/requirements.txt +15 -0
  381. package/skills/ck-repomix/scripts/tests/test_repomix_batch.py +531 -0
  382. package/skills/ck-sequential-thinking/.env.example +8 -0
  383. package/skills/ck-sequential-thinking/README.md +183 -0
  384. package/skills/ck-sequential-thinking/SKILL.md +14 -2
  385. package/skills/ck-sequential-thinking/package.json +31 -0
  386. package/skills/ck-sequential-thinking/references/advanced-strategies.md +79 -0
  387. package/skills/ck-sequential-thinking/references/advanced-techniques.md +2 -14
  388. package/skills/ck-sequential-thinking/references/core-patterns.md +8 -0
  389. package/skills/ck-sequential-thinking/references/examples-api.md +88 -0
  390. package/skills/ck-sequential-thinking/references/examples-architecture.md +94 -0
  391. package/skills/ck-sequential-thinking/references/examples-debug.md +90 -0
  392. package/skills/ck-sequential-thinking/scripts/format-thought.js +159 -0
  393. package/skills/ck-sequential-thinking/scripts/process-thought.js +236 -0
  394. package/skills/ck-sequential-thinking/tests/format-thought.test.js +133 -0
  395. package/skills/ck-sequential-thinking/tests/process-thought.test.js +215 -0
  396. package/skills/ck-shopify/README.md +66 -0
  397. package/skills/ck-shopify/SKILL.md +319 -0
  398. package/skills/ck-shopify/references/app-development.md +470 -0
  399. package/skills/ck-shopify/references/extensions.md +493 -0
  400. package/skills/ck-shopify/references/themes.md +498 -0
  401. package/skills/ck-shopify/scripts/.coverage +0 -0
  402. package/skills/ck-shopify/scripts/requirements.txt +19 -0
  403. package/skills/ck-shopify/scripts/shopify_init.py +423 -0
  404. package/skills/ck-shopify/scripts/tests/.coverage +0 -0
  405. package/skills/ck-shopify/scripts/tests/test_shopify_init.py +385 -0
  406. package/skills/ck-skill-creator/LICENSE.txt +202 -0
  407. package/skills/ck-skill-creator/SKILL.md +265 -0
  408. package/skills/ck-skill-creator/scripts/init_skill.py +303 -0
  409. package/skills/ck-skill-creator/scripts/package_skill.py +110 -0
  410. package/skills/ck-skill-creator/scripts/quick_validate.py +65 -0
  411. package/skills/ck-threejs/SKILL.md +87 -0
  412. package/skills/ck-threejs/references/01-getting-started.md +177 -0
  413. package/skills/ck-threejs/references/02-loaders.md +169 -0
  414. package/skills/ck-threejs/references/03-textures.md +170 -0
  415. package/skills/ck-threejs/references/04-cameras.md +195 -0
  416. package/skills/ck-threejs/references/05-lights.md +183 -0
  417. package/skills/ck-threejs/references/06-animations.md +214 -0
  418. package/skills/ck-threejs/references/07-math.md +260 -0
  419. package/skills/ck-threejs/references/08-interaction.md +267 -0
  420. package/skills/ck-threejs/references/09-postprocessing.md +240 -0
  421. package/skills/ck-threejs/references/10-controls.md +259 -0
  422. package/skills/ck-threejs/references/11-materials-advanced.md +270 -0
  423. package/skills/ck-threejs/references/12-performance.md +269 -0
  424. package/skills/ck-threejs/references/13-node-materials.md +298 -0
  425. package/skills/ck-threejs/references/14-physics-vr.md +304 -0
  426. package/skills/ck-threejs/references/15-specialized-loaders.md +333 -0
  427. package/skills/ck-threejs/references/16-webgpu.md +302 -0
  428. package/skills/ck-ui-styling/LICENSE.txt +202 -0
  429. package/skills/ck-ui-styling/SKILL.md +319 -0
  430. package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  431. package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  432. package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  433. package/skills/ck-ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
  434. package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  435. package/skills/ck-ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
  436. package/skills/ck-ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
  437. package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  438. package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  439. package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  440. package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  441. package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  442. package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  443. package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  444. package/skills/ck-ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
  445. package/skills/ck-ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
  446. package/skills/ck-ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
  447. package/skills/ck-ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
  448. package/skills/ck-ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
  449. package/skills/ck-ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
  450. package/skills/ck-ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
  451. package/skills/ck-ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
  452. package/skills/ck-ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
  453. package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  454. package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  455. package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  456. package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  457. package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  458. package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  459. package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  460. package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  461. package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  462. package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  463. package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  464. package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  465. package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  466. package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  467. package/skills/ck-ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
  468. package/skills/ck-ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
  469. package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  470. package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  471. package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  472. package/skills/ck-ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
  473. package/skills/ck-ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
  474. package/skills/ck-ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
  475. package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  476. package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  477. package/skills/ck-ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
  478. package/skills/ck-ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  479. package/skills/ck-ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
  480. package/skills/ck-ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
  481. package/skills/ck-ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
  482. package/skills/ck-ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
  483. package/skills/ck-ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
  484. package/skills/ck-ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
  485. package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  486. package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  487. package/skills/ck-ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
  488. package/skills/ck-ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
  489. package/skills/ck-ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
  490. package/skills/ck-ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  491. package/skills/ck-ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
  492. package/skills/ck-ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
  493. package/skills/ck-ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  494. package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  495. package/skills/ck-ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
  496. package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  497. package/skills/ck-ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
  498. package/skills/ck-ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  499. package/skills/ck-ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  500. package/skills/ck-ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
  501. package/skills/ck-ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
  502. package/skills/ck-ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
  503. package/skills/ck-ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
  504. package/skills/ck-ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
  505. package/skills/ck-ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  506. package/skills/ck-ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
  507. package/skills/ck-ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
  508. package/skills/ck-ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
  509. package/skills/ck-ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
  510. package/skills/ck-ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  511. package/skills/ck-ui-styling/references/canvas-design-system.md +320 -0
  512. package/skills/ck-ui-styling/references/shadcn-accessibility.md +471 -0
  513. package/skills/ck-ui-styling/references/shadcn-components.md +424 -0
  514. package/skills/ck-ui-styling/references/shadcn-theming.md +373 -0
  515. package/skills/ck-ui-styling/references/tailwind-customization.md +483 -0
  516. package/skills/ck-ui-styling/references/tailwind-responsive.md +382 -0
  517. package/skills/ck-ui-styling/references/tailwind-utilities.md +455 -0
  518. package/skills/ck-ui-styling/scripts/.coverage +0 -0
  519. package/skills/ck-ui-styling/scripts/requirements.txt +17 -0
  520. package/skills/ck-ui-styling/scripts/shadcn_add.py +292 -0
  521. package/skills/ck-ui-styling/scripts/tailwind_config_gen.py +456 -0
  522. package/skills/ck-ui-styling/scripts/tests/coverage-ui.json +1 -0
  523. package/skills/ck-ui-styling/scripts/tests/requirements.txt +3 -0
  524. package/skills/ck-ui-styling/scripts/tests/test_shadcn_add.py +266 -0
  525. package/skills/ck-ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
  526. package/skills/ck-ui-ux-pro-max/SKILL.md +227 -0
  527. package/skills/ck-ui-ux-pro-max/data/charts.csv +26 -0
  528. package/skills/ck-ui-ux-pro-max/data/colors.csv +97 -0
  529. package/skills/ck-ui-ux-pro-max/data/landing.csv +31 -0
  530. package/skills/ck-ui-ux-pro-max/data/products.csv +97 -0
  531. package/skills/ck-ui-ux-pro-max/data/prompts.csv +24 -0
  532. package/skills/ck-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  533. package/skills/ck-ui-ux-pro-max/data/stacks/html-tailwind.csv +51 -0
  534. package/skills/ck-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  535. package/skills/ck-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  536. package/skills/ck-ui-ux-pro-max/data/stacks/react.csv +54 -0
  537. package/skills/ck-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  538. package/skills/ck-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  539. package/skills/ck-ui-ux-pro-max/data/stacks/vue.csv +50 -0
  540. package/skills/ck-ui-ux-pro-max/data/styles.csv +59 -0
  541. package/skills/ck-ui-ux-pro-max/data/typography.csv +58 -0
  542. package/skills/ck-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  543. package/skills/ck-ui-ux-pro-max/scripts/core.py +236 -0
  544. package/skills/ck-ui-ux-pro-max/scripts/search.py +76 -0
  545. package/skills/ck-web-frameworks/SKILL.md +322 -0
  546. package/skills/ck-web-frameworks/references/nextjs-app-router.md +465 -0
  547. package/skills/ck-web-frameworks/references/nextjs-data-fetching.md +459 -0
  548. package/skills/ck-web-frameworks/references/nextjs-optimization.md +511 -0
  549. package/skills/ck-web-frameworks/references/nextjs-server-components.md +495 -0
  550. package/skills/ck-web-frameworks/references/remix-icon-integration.md +603 -0
  551. package/skills/ck-web-frameworks/references/turborepo-caching.md +551 -0
  552. package/skills/ck-web-frameworks/references/turborepo-pipelines.md +517 -0
  553. package/skills/ck-web-frameworks/references/turborepo-setup.md +542 -0
  554. package/skills/ck-web-frameworks/scripts/.coverage +0 -0
  555. package/skills/ck-web-frameworks/scripts/__init__.py +0 -0
  556. package/skills/ck-web-frameworks/scripts/nextjs_init.py +547 -0
  557. package/skills/ck-web-frameworks/scripts/requirements.txt +16 -0
  558. package/skills/ck-web-frameworks/scripts/tests/coverage-web.json +1 -0
  559. package/skills/ck-web-frameworks/scripts/tests/requirements.txt +3 -0
  560. package/skills/ck-web-frameworks/scripts/tests/test_nextjs_init.py +319 -0
  561. package/skills/ck-web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -0
  562. package/skills/ck-web-frameworks/scripts/turborepo_migrate.py +394 -0
  563. package/src/commands/init.js +61 -30
  564. package/src/utils/paths.js +35 -4
@@ -0,0 +1,213 @@
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('https');
9
+ const { loadEnv } = require('./utils/env-loader');
10
+ const { detectTopic } = require('./detect-topic');
11
+
12
+ // Load environment
13
+ const env = loadEnv();
14
+ const DEBUG = env.DEBUG === 'true';
15
+ const API_KEY = env.CONTEXT7_API_KEY;
16
+
17
+ /**
18
+ * Make HTTPS GET request
19
+ * @param {string} url - URL to fetch
20
+ * @returns {Promise<string>} Response body
21
+ */
22
+ function httpsGet(url) {
23
+ return new Promise((resolve, reject) => {
24
+ const options = {
25
+ headers: API_KEY ? { 'Authorization': `Bearer ${API_KEY}` } : {},
26
+ };
27
+
28
+ https.get(url, options, (res) => {
29
+ let data = '';
30
+
31
+ res.on('data', (chunk) => {
32
+ data += chunk;
33
+ });
34
+
35
+ res.on('end', () => {
36
+ if (res.statusCode === 200) {
37
+ resolve(data);
38
+ } else if (res.statusCode === 404) {
39
+ resolve(null);
40
+ } else {
41
+ reject(new Error(`HTTP ${res.statusCode}: ${data}`));
42
+ }
43
+ });
44
+ }).on('error', reject);
45
+ });
46
+ }
47
+
48
+ /**
49
+ * Construct context7.com URL
50
+ * @param {string} library - Library name (e.g., "next.js", "shadcn/ui")
51
+ * @param {string} topic - Optional topic keyword
52
+ * @returns {string} context7.com URL
53
+ */
54
+ function buildContext7Url(library, topic = null) {
55
+ // Determine if GitHub repo or website
56
+ let basePath;
57
+
58
+ if (library.includes('/')) {
59
+ // GitHub repo format: org/repo
60
+ const [org, repo] = library.split('/');
61
+ basePath = `${org}/${repo}`;
62
+ } else {
63
+ // Try common patterns
64
+ const normalized = library.toLowerCase().replace(/[^a-z0-9-]/g, '');
65
+ basePath = `websites/${normalized}`;
66
+ }
67
+
68
+ const baseUrl = `https://context7.com/${basePath}/llms.txt`;
69
+
70
+ if (topic) {
71
+ return `${baseUrl}?topic=${encodeURIComponent(topic)}`;
72
+ }
73
+
74
+ return baseUrl;
75
+ }
76
+
77
+ /**
78
+ * Try multiple URL variations for a library
79
+ * @param {string} library - Library name
80
+ * @param {string} topic - Optional topic
81
+ * @returns {Promise<Array>} Array of URLs to try
82
+ */
83
+ async function getUrlVariations(library, topic = null) {
84
+ const urls = [];
85
+
86
+ // Known repo mappings
87
+ const knownRepos = {
88
+ 'next.js': 'vercel/next.js',
89
+ 'nextjs': 'vercel/next.js',
90
+ 'remix': 'remix-run/remix',
91
+ 'astro': 'withastro/astro',
92
+ 'shadcn': 'shadcn-ui/ui',
93
+ 'shadcn/ui': 'shadcn-ui/ui',
94
+ 'better-auth': 'better-auth/better-auth',
95
+ };
96
+
97
+ const normalized = library.toLowerCase();
98
+ const repo = knownRepos[normalized] || library;
99
+
100
+ // Primary: Try with topic if available
101
+ if (topic) {
102
+ urls.push(buildContext7Url(repo, topic));
103
+ }
104
+
105
+ // Fallback: Try without topic
106
+ urls.push(buildContext7Url(repo));
107
+
108
+ return urls;
109
+ }
110
+
111
+ /**
112
+ * Fetch documentation from context7.com
113
+ * @param {string} query - User query
114
+ * @returns {Promise<Object>} Documentation result
115
+ */
116
+ async function fetchDocs(query) {
117
+ const topicInfo = detectTopic(query);
118
+
119
+ if (DEBUG) {
120
+ console.error('[DEBUG] Topic detection result:', topicInfo);
121
+ }
122
+
123
+ let urls = [];
124
+
125
+ if (topicInfo && topicInfo.isTopicSpecific) {
126
+ // Topic-specific search
127
+ urls = await getUrlVariations(topicInfo.library, topicInfo.topic);
128
+
129
+ if (DEBUG) {
130
+ console.error('[DEBUG] Topic-specific URLs:', urls);
131
+ }
132
+ } else {
133
+ // Extract library from general query
134
+ const libraryMatch = query.match(/(?:documentation|docs|guide) (?:for )?(.+)/i);
135
+ if (libraryMatch) {
136
+ const library = libraryMatch[1].trim();
137
+ urls = await getUrlVariations(library);
138
+
139
+ if (DEBUG) {
140
+ console.error('[DEBUG] General library URLs:', urls);
141
+ }
142
+ }
143
+ }
144
+
145
+ // Try each URL
146
+ for (const url of urls) {
147
+ if (DEBUG) {
148
+ console.error(`[DEBUG] Trying URL: ${url}`);
149
+ }
150
+
151
+ try {
152
+ const content = await httpsGet(url);
153
+
154
+ if (content) {
155
+ return {
156
+ success: true,
157
+ source: 'context7.com',
158
+ url,
159
+ content,
160
+ topicSpecific: url.includes('?topic='),
161
+ };
162
+ }
163
+ } catch (error) {
164
+ if (DEBUG) {
165
+ console.error(`[DEBUG] Failed to fetch ${url}:`, error.message);
166
+ }
167
+ }
168
+ }
169
+
170
+ // No URL worked
171
+ return {
172
+ success: false,
173
+ source: 'context7.com',
174
+ error: 'Documentation not found on context7.com',
175
+ urls,
176
+ suggestion: 'Try repository analysis or web search',
177
+ };
178
+ }
179
+
180
+ /**
181
+ * CLI entry point
182
+ */
183
+ async function main() {
184
+ const args = process.argv.slice(2);
185
+
186
+ if (args.length === 0) {
187
+ console.error('Usage: node fetch-docs.js "<user query>"');
188
+ process.exit(1);
189
+ }
190
+
191
+ const query = args.join(' ');
192
+
193
+ try {
194
+ const result = await fetchDocs(query);
195
+ console.log(JSON.stringify(result, null, 2));
196
+ process.exit(result.success ? 0 : 1);
197
+ } catch (error) {
198
+ console.error('Error:', error.message);
199
+ process.exit(1);
200
+ }
201
+ }
202
+
203
+ // Run if called directly
204
+ if (require.main === module) {
205
+ main();
206
+ }
207
+
208
+ module.exports = {
209
+ fetchDocs,
210
+ buildContext7Url,
211
+ getUrlVariations,
212
+ httpsGet,
213
+ };
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Test runner - runs all tests
5
+ */
6
+
7
+ const { spawn } = require('child_process');
8
+ const path = require('path');
9
+
10
+ const tests = [
11
+ 'test-detect-topic.js',
12
+ 'test-fetch-docs.js',
13
+ 'test-analyze-llms.js',
14
+ ];
15
+
16
+ let totalPassed = 0;
17
+ let totalFailed = 0;
18
+
19
+ function runTest(testFile) {
20
+ return new Promise((resolve, reject) => {
21
+ console.log(`\n${'='.repeat(60)}`);
22
+ console.log(`Running: ${testFile}`);
23
+ console.log('='.repeat(60));
24
+
25
+ const testPath = path.join(__dirname, testFile);
26
+ const proc = spawn('node', [testPath], {
27
+ stdio: 'inherit',
28
+ });
29
+
30
+ proc.on('close', (code) => {
31
+ if (code === 0) {
32
+ resolve();
33
+ } else {
34
+ reject(new Error(`Test failed: ${testFile}`));
35
+ }
36
+ });
37
+
38
+ proc.on('error', reject);
39
+ });
40
+ }
41
+
42
+ async function runAllTests() {
43
+ console.log('Running all docs-seeker tests...');
44
+
45
+ let failedTests = [];
46
+
47
+ for (const test of tests) {
48
+ try {
49
+ await runTest(test);
50
+ } catch (error) {
51
+ failedTests.push(test);
52
+ }
53
+ }
54
+
55
+ console.log(`\n${'='.repeat(60)}`);
56
+ console.log('All Tests Summary');
57
+ console.log('='.repeat(60));
58
+ console.log(`Total test files: ${tests.length}`);
59
+ console.log(`Passed: ${tests.length - failedTests.length}`);
60
+ console.log(`Failed: ${failedTests.length}`);
61
+
62
+ if (failedTests.length > 0) {
63
+ console.log('\nFailed tests:');
64
+ failedTests.forEach((test) => console.log(` - ${test}`));
65
+ process.exit(1);
66
+ } else {
67
+ console.log('\n✓ All tests passed!');
68
+ process.exit(0);
69
+ }
70
+ }
71
+
72
+ runAllTests();
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Tests for analyze-llms-txt.js
5
+ */
6
+
7
+ const {
8
+ analyzeLlmsTxt,
9
+ parseUrls,
10
+ groupByPriority,
11
+ categorizeUrl,
12
+ suggestAgentDistribution,
13
+ } = require('../analyze-llms-txt');
14
+
15
+ // Test counter
16
+ let passed = 0;
17
+ let failed = 0;
18
+
19
+ function assert(condition, message) {
20
+ if (condition) {
21
+ console.log(`✓ ${message}`);
22
+ passed++;
23
+ } else {
24
+ console.error(`✗ ${message}`);
25
+ failed++;
26
+ }
27
+ }
28
+
29
+ function assertEqual(actual, expected, message) {
30
+ if (actual === expected) {
31
+ console.log(`✓ ${message}`);
32
+ passed++;
33
+ } else {
34
+ console.error(`✗ ${message}`);
35
+ console.error(` Expected: ${expected}`);
36
+ console.error(` Actual: ${actual}`);
37
+ failed++;
38
+ }
39
+ }
40
+
41
+ console.log('Running analyze-llms-txt.js tests...\n');
42
+
43
+ // Test categorizeUrl
44
+ console.log('## Testing categorizeUrl()');
45
+ assertEqual(categorizeUrl('https://docs.example.com/getting-started'), 'critical', 'Categorize getting-started as critical');
46
+ assertEqual(categorizeUrl('https://docs.example.com/guide/routing'), 'important', 'Categorize routing guide as important');
47
+ assertEqual(categorizeUrl('https://docs.example.com/advanced/internals'), 'supplementary', 'Categorize internals as supplementary');
48
+ assertEqual(categorizeUrl('https://docs.example.com/api-reference'), 'important', 'Categorize API reference as important');
49
+
50
+ // Test parseUrls
51
+ console.log('\n## Testing parseUrls()');
52
+
53
+ const sampleContent = `# Documentation
54
+ https://docs.example.com/getting-started
55
+ https://docs.example.com/guide
56
+ # Comment line
57
+ https://docs.example.com/api-reference
58
+
59
+ https://docs.example.com/advanced
60
+ `;
61
+
62
+ const urls = parseUrls(sampleContent);
63
+ assertEqual(urls.length, 4, 'Parse 4 URLs from content');
64
+ assert(urls[0].includes('getting-started'), 'First URL is getting-started');
65
+
66
+ const emptyContent = '';
67
+ const emptyUrls = parseUrls(emptyContent);
68
+ assertEqual(emptyUrls.length, 0, 'Empty content returns 0 URLs');
69
+
70
+ // Test groupByPriority
71
+ console.log('\n## Testing groupByPriority()');
72
+
73
+ const testUrls = [
74
+ 'https://docs.example.com/getting-started',
75
+ 'https://docs.example.com/guide/routing',
76
+ 'https://docs.example.com/advanced/internals',
77
+ 'https://docs.example.com/installation',
78
+ ];
79
+
80
+ const grouped = groupByPriority(testUrls);
81
+ assert(grouped.critical.length >= 2, 'Has critical URLs');
82
+ assert(grouped.important.length >= 1, 'Has important URLs');
83
+ assert(grouped.supplementary.length >= 1, 'Has supplementary URLs');
84
+
85
+ // Test suggestAgentDistribution
86
+ console.log('\n## Testing suggestAgentDistribution()');
87
+
88
+ const dist1 = suggestAgentDistribution(2);
89
+ assertEqual(dist1.agentCount, 1, 'Suggest 1 agent for 2 URLs');
90
+ assertEqual(dist1.strategy, 'single', 'Strategy is single for few URLs');
91
+
92
+ const dist2 = suggestAgentDistribution(8);
93
+ assert(dist2.agentCount >= 3 && dist2.agentCount <= 5, 'Suggest 3-5 agents for 8 URLs');
94
+ assertEqual(dist2.strategy, 'parallel', 'Strategy is parallel for medium URLs');
95
+
96
+ const dist3 = suggestAgentDistribution(15);
97
+ assertEqual(dist3.agentCount, 7, 'Suggest 7 agents for 15 URLs');
98
+
99
+ const dist4 = suggestAgentDistribution(25);
100
+ assertEqual(dist4.agentCount, 7, 'Suggest 7 agents for 25 URLs');
101
+ assertEqual(dist4.strategy, 'phased', 'Strategy is phased for many URLs');
102
+ assertEqual(dist4.phases, 2, 'Use 2 phases for large sets');
103
+
104
+ // Test analyzeLlmsTxt
105
+ console.log('\n## Testing analyzeLlmsTxt()');
106
+
107
+ const analysis = analyzeLlmsTxt(sampleContent);
108
+ assertEqual(analysis.totalUrls, 4, 'Analysis counts 4 URLs');
109
+ assert(analysis.grouped, 'Analysis includes grouped URLs');
110
+ assert(analysis.distribution, 'Analysis includes distribution suggestion');
111
+ assert(analysis.summary, 'Analysis includes summary');
112
+
113
+ // Summary
114
+ console.log('\n## Test Summary');
115
+ console.log(`Passed: ${passed}`);
116
+ console.log(`Failed: ${failed}`);
117
+ console.log(`Total: ${passed + failed}`);
118
+
119
+ process.exit(failed > 0 ? 1 : 0);
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Tests for detect-topic.js
5
+ */
6
+
7
+ const { detectTopic, normalizeTopic, normalizeLibrary } = require('../detect-topic');
8
+
9
+ // Test counter
10
+ let passed = 0;
11
+ let failed = 0;
12
+
13
+ function assert(condition, message) {
14
+ if (condition) {
15
+ console.log(`✓ ${message}`);
16
+ passed++;
17
+ } else {
18
+ console.error(`✗ ${message}`);
19
+ failed++;
20
+ }
21
+ }
22
+
23
+ function assertEqual(actual, expected, message) {
24
+ if (actual === expected) {
25
+ console.log(`✓ ${message}`);
26
+ passed++;
27
+ } else {
28
+ console.error(`✗ ${message}`);
29
+ console.error(` Expected: ${expected}`);
30
+ console.error(` Actual: ${actual}`);
31
+ failed++;
32
+ }
33
+ }
34
+
35
+ console.log('Running detect-topic.js tests...\n');
36
+
37
+ // Test normalizeTopic
38
+ console.log('## Testing normalizeTopic()');
39
+ assertEqual(normalizeTopic('date picker'), 'date', 'Normalize multi-word topic');
40
+ assertEqual(normalizeTopic('OAuth'), 'oauth', 'Normalize OAuth');
41
+ assertEqual(normalizeTopic('Server-Side'), 'server', 'Normalize Server-Side');
42
+ assertEqual(normalizeTopic('caching'), 'caching', 'Normalize caching');
43
+
44
+ // Test normalizeLibrary
45
+ console.log('\n## Testing normalizeLibrary()');
46
+ assertEqual(normalizeLibrary('Next.js'), 'next.js', 'Normalize Next.js');
47
+ assertEqual(normalizeLibrary('shadcn/ui'), 'shadcn/ui', 'Normalize shadcn/ui');
48
+ assertEqual(normalizeLibrary('Better Auth'), 'better-auth', 'Normalize Better Auth');
49
+
50
+ // Test topic-specific queries
51
+ console.log('\n## Testing topic-specific queries');
52
+
53
+ const topicQuery1 = detectTopic('How do I use date picker in shadcn/ui?');
54
+ assert(topicQuery1 !== null, 'Detect topic-specific query 1');
55
+ assert(topicQuery1.isTopicSpecific === true, 'Query 1 is topic-specific');
56
+ assertEqual(topicQuery1.topic, 'date', 'Query 1 topic is "date"');
57
+ assertEqual(topicQuery1.library, 'shadcn/ui', 'Query 1 library is "shadcn/ui"');
58
+
59
+ const topicQuery2 = detectTopic('Next.js caching strategies');
60
+ assert(topicQuery2 !== null, 'Detect topic-specific query 2');
61
+ assert(topicQuery2 && topicQuery2.isTopicSpecific === true, 'Query 2 is topic-specific');
62
+ if (topicQuery2) {
63
+ assertEqual(topicQuery2.topic, 'caching', 'Query 2 topic is "caching"');
64
+ assertEqual(topicQuery2.library, 'next.js', 'Query 2 library is "next.js"');
65
+ }
66
+
67
+ const topicQuery3 = detectTopic('Better Auth OAuth setup');
68
+ assert(topicQuery3 !== null, 'Detect topic-specific query 3');
69
+ assert(topicQuery3.isTopicSpecific === true, 'Query 3 is topic-specific');
70
+
71
+ const topicQuery4 = detectTopic('Using authentication with Better Auth');
72
+ assert(topicQuery4 !== null, 'Detect topic-specific query 4');
73
+ assert(topicQuery4.isTopicSpecific === true, 'Query 4 is topic-specific');
74
+
75
+ const topicQuery5 = detectTopic('Implement routing in Next.js');
76
+ assert(topicQuery5 !== null, 'Detect topic-specific query 5');
77
+ assert(topicQuery5.isTopicSpecific === true, 'Query 5 is topic-specific');
78
+
79
+ // Test general queries
80
+ console.log('\n## Testing general queries');
81
+
82
+ const generalQuery1 = detectTopic('Documentation for Next.js');
83
+ assert(generalQuery1 === null, 'Detect general query 1 (returns null)');
84
+
85
+ const generalQuery2 = detectTopic('Astro getting started');
86
+ assert(generalQuery2 === null, 'Detect general query 2 (returns null)');
87
+
88
+ const generalQuery3 = detectTopic('How to use Better Auth');
89
+ assert(generalQuery3 === null, 'Detect general query 3 (returns null)');
90
+
91
+ const generalQuery4 = detectTopic('Next.js API reference');
92
+ assert(generalQuery4 === null, 'Detect general query 4 (returns null)');
93
+
94
+ // Test edge cases
95
+ console.log('\n## Testing edge cases');
96
+
97
+ const edgeCase1 = detectTopic('');
98
+ assert(edgeCase1 === null, 'Empty string returns null');
99
+
100
+ const edgeCase2 = detectTopic(null);
101
+ assert(edgeCase2 === null, 'Null returns null');
102
+
103
+ const edgeCase3 = detectTopic('Random text without pattern');
104
+ assert(edgeCase3 === null, 'Non-matching query returns null');
105
+
106
+ // Summary
107
+ console.log('\n## Test Summary');
108
+ console.log(`Passed: ${passed}`);
109
+ console.log(`Failed: ${failed}`);
110
+ console.log(`Total: ${passed + failed}`);
111
+
112
+ process.exit(failed > 0 ? 1 : 0);
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Tests for fetch-docs.js
5
+ */
6
+
7
+ const { buildContext7Url, getUrlVariations } = require('../fetch-docs');
8
+
9
+ // Test counter
10
+ let passed = 0;
11
+ let failed = 0;
12
+
13
+ function assert(condition, message) {
14
+ if (condition) {
15
+ console.log(`✓ ${message}`);
16
+ passed++;
17
+ } else {
18
+ console.error(`✗ ${message}`);
19
+ failed++;
20
+ }
21
+ }
22
+
23
+ function assertEqual(actual, expected, message) {
24
+ if (actual === expected) {
25
+ console.log(`✓ ${message}`);
26
+ passed++;
27
+ } else {
28
+ console.error(`✗ ${message}`);
29
+ console.error(` Expected: ${expected}`);
30
+ console.error(` Actual: ${actual}`);
31
+ failed++;
32
+ }
33
+ }
34
+
35
+ console.log('Running fetch-docs.js tests...\n');
36
+
37
+ // Test buildContext7Url
38
+ console.log('## Testing buildContext7Url()');
39
+
40
+ assertEqual(
41
+ buildContext7Url('vercel/next.js'),
42
+ 'https://context7.com/vercel/next.js/llms.txt',
43
+ 'Build URL for GitHub repo'
44
+ );
45
+
46
+ assertEqual(
47
+ buildContext7Url('vercel/next.js', 'cache'),
48
+ 'https://context7.com/vercel/next.js/llms.txt?topic=cache',
49
+ 'Build URL with topic parameter'
50
+ );
51
+
52
+ assertEqual(
53
+ buildContext7Url('shadcn-ui/ui', 'date'),
54
+ 'https://context7.com/shadcn-ui/ui/llms.txt?topic=date',
55
+ 'Build URL for shadcn with topic'
56
+ );
57
+
58
+ // Test getUrlVariations
59
+ console.log('\n## Testing getUrlVariations()');
60
+
61
+ async function testUrlVariations() {
62
+ const urls1 = await getUrlVariations('next.js', 'cache');
63
+ assert(urls1.length >= 2, 'Returns multiple URL variations with topic');
64
+ assert(urls1[0].includes('?topic=cache'), 'First URL has topic parameter');
65
+ assert(!urls1[1].includes('?topic='), 'Second URL has no topic parameter');
66
+
67
+ const urls2 = await getUrlVariations('shadcn/ui');
68
+ assert(urls2.length >= 1, 'Returns URL variations without topic');
69
+ assert(!urls2[0].includes('?topic='), 'URL has no topic parameter');
70
+
71
+ const urls3 = await getUrlVariations('astro', 'routing');
72
+ assert(urls3.length >= 2, 'Returns variations for known library');
73
+ assertEqual(urls3[0], 'https://context7.com/withastro/astro/llms.txt?topic=routing', 'Maps Astro correctly');
74
+ }
75
+
76
+ testUrlVariations().then(() => {
77
+ // Summary
78
+ console.log('\n## Test Summary');
79
+ console.log(`Passed: ${passed}`);
80
+ console.log(`Failed: ${failed}`);
81
+ console.log(`Total: ${passed + failed}`);
82
+
83
+ process.exit(failed > 0 ? 1 : 0);
84
+ });
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Environment variable loader for docs-seeker skill
5
+ * Respects order: process.env > skill/.env > skills/.env > %USERPROFILE%/.claude/.env
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+
11
+ /**
12
+ * Parse .env file content into key-value pairs
13
+ * @param {string} content - .env file content
14
+ * @returns {Object} Parsed environment variables
15
+ */
16
+ function parseEnvFile(content) {
17
+ const env = {};
18
+ const lines = content.split('\n');
19
+
20
+ for (const line of lines) {
21
+ // Skip comments and empty lines
22
+ if (!line || line.trim().startsWith('#')) continue;
23
+
24
+ const match = line.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/);
25
+ if (match) {
26
+ const key = match[1];
27
+ let value = match[2].trim();
28
+
29
+ // Remove quotes if present
30
+ if ((value.startsWith('"') && value.endsWith('"')) ||
31
+ (value.startsWith("'") && value.endsWith("'"))) {
32
+ value = value.slice(1, -1);
33
+ }
34
+
35
+ env[key] = value;
36
+ }
37
+ }
38
+
39
+ return env;
40
+ }
41
+
42
+ /**
43
+ * Load environment variables from .env files in priority order
44
+ * Priority: process.env > skill/.env > skills/.env > %USERPROFILE%/.claude/.env
45
+ * @returns {Object} Merged environment variables
46
+ */
47
+ function loadEnv() {
48
+ const skillDir = path.resolve(__dirname, '../..');
49
+ const skillsDir = path.resolve(skillDir, '..');
50
+ const claudeDir = path.resolve(skillsDir, '..');
51
+
52
+ const envPaths = [
53
+ path.join(claudeDir, '.env'), // Lowest priority
54
+ path.join(skillsDir, '.env'),
55
+ path.join(skillDir, '.env'), // Highest priority (file)
56
+ ];
57
+
58
+ let mergedEnv = {};
59
+
60
+ // Load .env files in order (lowest to highest priority)
61
+ for (const envPath of envPaths) {
62
+ if (fs.existsSync(envPath)) {
63
+ try {
64
+ const content = fs.readFileSync(envPath, 'utf8');
65
+ const parsed = parseEnvFile(content);
66
+ mergedEnv = { ...mergedEnv, ...parsed };
67
+ } catch (error) {
68
+ // Silently skip unreadable files
69
+ }
70
+ }
71
+ }
72
+
73
+ // process.env has highest priority
74
+ mergedEnv = { ...mergedEnv, ...process.env };
75
+
76
+ return mergedEnv;
77
+ }
78
+
79
+ /**
80
+ * Get environment variable with fallback
81
+ * @param {string} key - Environment variable key
82
+ * @param {string} defaultValue - Default value if not found
83
+ * @returns {string} Environment variable value
84
+ */
85
+ function getEnv(key, defaultValue = '') {
86
+ const env = loadEnv();
87
+ return env[key] || defaultValue;
88
+ }
89
+
90
+ module.exports = {
91
+ loadEnv,
92
+ getEnv,
93
+ parseEnvFile,
94
+ };