thanh-kit 2.5.0 → 2.5.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.
Files changed (766) hide show
  1. package/package.json +1 -1
  2. package/templates/.ck.json +60 -0
  3. package/templates/.ckignore +27 -0
  4. package/templates/.mcp.json.example +23 -0
  5. package/templates/agents/brainstormer.md +18 -2
  6. package/templates/agents/code-reviewer.md +122 -142
  7. package/templates/agents/code-simplifier.md +50 -100
  8. package/templates/agents/debugger.md +27 -11
  9. package/templates/agents/docs-manager.md +100 -38
  10. package/templates/agents/fullstack-developer.md +15 -3
  11. package/templates/agents/git-manager.md +11 -386
  12. package/templates/agents/journal-writer.md +13 -8
  13. package/templates/agents/mcp-manager.md +21 -6
  14. package/templates/agents/planner.md +24 -8
  15. package/templates/agents/project-manager.md +17 -121
  16. package/templates/agents/researcher.md +22 -7
  17. package/templates/agents/tester.md +23 -7
  18. package/templates/agents/ui-ux-designer.md +23 -14
  19. package/templates/hooks/__tests__/ck-config-utils.test.cjs +557 -0
  20. package/templates/hooks/__tests__/descriptive-name.test.cjs +292 -0
  21. package/templates/hooks/__tests__/dev-rules-reminder.test.cjs +336 -0
  22. package/templates/hooks/__tests__/integration/path-resolution.test.cjs +319 -0
  23. package/templates/hooks/__tests__/privacy-block.test.cjs +273 -0
  24. package/templates/hooks/__tests__/session-init.test.cjs +308 -0
  25. package/templates/hooks/__tests__/skill-dedup.test.cjs +527 -0
  26. package/templates/hooks/__tests__/subagent-init.test.cjs +622 -0
  27. package/templates/hooks/__tests__/task-completed-handler.test.cjs +246 -0
  28. package/templates/hooks/__tests__/team-context-inject.test.cjs +804 -0
  29. package/templates/hooks/__tests__/teammate-idle-handler.test.cjs +254 -0
  30. package/templates/hooks/cook-after-plan-reminder.cjs +72 -0
  31. package/templates/hooks/descriptive-name.cjs +47 -0
  32. package/templates/hooks/dev-rules-reminder.cjs +37 -214
  33. package/templates/hooks/lib/__tests__/README.md +240 -0
  34. package/templates/hooks/lib/__tests__/ck-config-utils.test.cjs +613 -1
  35. package/templates/hooks/lib/__tests__/context-builder.test.cjs +468 -0
  36. package/templates/hooks/lib/__tests__/project-detector.test.cjs +754 -0
  37. package/templates/hooks/lib/__tests__/statusline-integration.test.cjs +678 -0
  38. package/templates/hooks/lib/__tests__/statusline.test.cjs +689 -0
  39. package/templates/hooks/lib/ck-config-utils.cjs +146 -21
  40. package/templates/hooks/lib/colors.cjs +95 -0
  41. package/templates/hooks/lib/config-counter.cjs +103 -0
  42. package/templates/hooks/lib/context-builder.cjs +616 -0
  43. package/templates/hooks/lib/git-info-cache.cjs +143 -0
  44. package/templates/hooks/lib/hook-logger.cjs +92 -0
  45. package/templates/hooks/lib/privacy-checker.cjs +297 -0
  46. package/templates/hooks/lib/project-detector.cjs +474 -0
  47. package/templates/hooks/lib/scout-checker.cjs +263 -0
  48. package/templates/hooks/lib/transcript-parser.cjs +181 -0
  49. package/templates/hooks/notifications/discord_notify.sh +17 -4
  50. package/templates/hooks/notifications/docs/discord-hook-setup.md +26 -10
  51. package/templates/hooks/notifications/docs/telegram-hook-setup.md +24 -6
  52. package/templates/hooks/notifications/notify.cjs +0 -0
  53. package/templates/hooks/notifications/send-discord.sh +0 -0
  54. package/templates/hooks/notifications/telegram_notify.sh +17 -4
  55. package/templates/hooks/post-edit-simplify-reminder.cjs +156 -0
  56. package/templates/hooks/privacy-block.cjs +97 -188
  57. package/templates/hooks/scout-block/broad-pattern-detector.cjs +4 -6
  58. package/templates/hooks/scout-block/error-formatter.cjs +0 -0
  59. package/templates/hooks/scout-block/path-extractor.cjs +102 -13
  60. package/templates/hooks/scout-block/pattern-matcher.cjs +16 -1
  61. package/templates/hooks/scout-block/tests/{test-broad-pattern-detector.js → test-broad-pattern-detector.cjs} +1 -61
  62. package/templates/hooks/scout-block/tests/{test-build-command-allowlist.js → test-build-command-allowlist.cjs} +1 -1
  63. package/templates/hooks/scout-block/tests/{test-error-formatter.js → test-error-formatter.cjs} +1 -1
  64. package/templates/hooks/scout-block/tests/{test-full-flow-edge-cases.js → test-full-flow-edge-cases.cjs} +1 -1
  65. package/templates/hooks/scout-block/tests/{test-monorepo-scenarios.js → test-monorepo-scenarios.cjs} +1 -1
  66. package/templates/hooks/scout-block/tests/{test-path-extractor.js → test-path-extractor.cjs} +1 -1
  67. package/templates/hooks/scout-block/tests/{test-pattern-matcher.js → test-pattern-matcher.cjs} +1 -1
  68. package/templates/hooks/scout-block.cjs +100 -87
  69. package/templates/hooks/session-init.cjs +197 -330
  70. package/templates/hooks/skill-dedup.cjs +268 -0
  71. package/templates/hooks/subagent-init.cjs +75 -22
  72. package/templates/hooks/task-completed-handler.cjs +118 -0
  73. package/templates/hooks/team-context-inject.cjs +176 -0
  74. package/templates/hooks/teammate-idle-handler.cjs +121 -0
  75. package/templates/hooks/tests/scout-block/broad-pattern-detector.test.cjs +231 -0
  76. package/templates/hooks/tests/scout-block/fixtures/ckignore-custom.txt +6 -0
  77. package/templates/hooks/tests/scout-block/fixtures/ckignore-default.txt +13 -0
  78. package/templates/hooks/tests/scout-block/fixtures/ckignore-negation.txt +8 -0
  79. package/templates/hooks/tests/scout-block/path-extractor.test.cjs +527 -0
  80. package/templates/hooks/tests/scout-block/pattern-matcher.test.cjs +293 -0
  81. package/templates/hooks/tests/scout-block/scout-checker.test.cjs +741 -0
  82. package/templates/hooks/tests/{test-ckignore.js → test-ckignore.cjs} +0 -0
  83. package/templates/hooks/tests/{test-modularization-hook.js → test-modularization-hook.cjs} +0 -0
  84. package/templates/hooks/tests/{test-privacy-block.js → test-privacy-block.cjs} +1 -1
  85. package/templates/hooks/tests/test-scout-block.cjs +315 -0
  86. package/templates/hooks/usage-context-awareness.cjs +179 -0
  87. package/templates/metadata.json +104 -0
  88. package/templates/scripts/README.md +94 -198
  89. package/templates/scripts/ck-help.py +19 -855
  90. package/templates/scripts/commands_data.yaml +3 -621
  91. package/templates/scripts/fix-shebang-permissions.sh +50 -0
  92. package/templates/scripts/generate_catalogs.py +37 -8
  93. package/templates/scripts/resolve_env.py +0 -0
  94. package/templates/scripts/scan_commands.py +14 -96
  95. package/templates/scripts/scan_skills.py +59 -19
  96. package/templates/scripts/set-active-plan.cjs +8 -3
  97. package/templates/scripts/skills_data.yaml +2 -596
  98. package/templates/scripts/test-ck-help.py +15 -0
  99. package/templates/scripts/test_ck_help.py +139 -0
  100. package/templates/scripts/test_ck_help_integration.py +72 -0
  101. package/templates/scripts/validate-docs.cjs +342 -0
  102. package/templates/scripts/win_compat.py +0 -0
  103. package/templates/scripts/worktree.cjs +4 -652
  104. package/templates/scripts/worktree.test.cjs +5 -330
  105. package/templates/settings.json +104 -239
  106. package/templates/skills/README.md +95 -255
  107. package/templates/skills/THIRD_PARTY_NOTICES.md +405 -0
  108. package/templates/skills/agent-browser/SKILL.md +294 -0
  109. package/templates/skills/agent-browser/references/.gitkeep +0 -0
  110. package/templates/skills/agent-browser/references/agent-browser-vs-chrome-devtools.md +112 -0
  111. package/templates/skills/agent-browser/references/browserbase-cloud-setup.md +161 -0
  112. package/templates/skills/ai-artist/SKILL.md +103 -56
  113. package/templates/skills/ai-artist/data/awesome-prompts.csv +3592 -0
  114. package/templates/skills/ai-artist/data/lighting.csv +19 -0
  115. package/templates/skills/ai-artist/data/nano-banana-templates.csv +17 -0
  116. package/templates/skills/ai-artist/data/platforms.csv +11 -0
  117. package/templates/skills/ai-artist/data/styles.csv +26 -0
  118. package/templates/skills/ai-artist/data/techniques.csv +19 -0
  119. package/templates/skills/ai-artist/data/use-cases.csv +16 -0
  120. package/templates/skills/ai-artist/references/awesome-nano-banana-pro-prompts.md +8575 -0
  121. package/templates/skills/ai-artist/references/nano-banana.md +78 -1
  122. package/templates/skills/ai-artist/references/validation-workflow.md +117 -0
  123. package/templates/skills/ai-artist/scripts/core.py +197 -0
  124. package/templates/skills/ai-artist/scripts/extract_prompts.py +102 -0
  125. package/templates/skills/ai-artist/scripts/generate.py +370 -0
  126. package/templates/skills/ai-artist/scripts/search.py +147 -0
  127. package/templates/skills/ai-multimodal/SKILL.md +4 -3
  128. package/templates/skills/ai-multimodal/scripts/check_setup.py +12 -2
  129. package/templates/skills/ai-multimodal/scripts/document_converter.py +0 -0
  130. package/templates/skills/ai-multimodal/scripts/gemini_batch_process.py +3 -2
  131. package/templates/skills/ai-multimodal/scripts/media_optimizer.py +0 -0
  132. package/templates/skills/ask/SKILL.md +58 -0
  133. package/templates/skills/backend-development/SKILL.md +3 -2
  134. package/templates/skills/better-auth/SKILL.md +3 -2
  135. package/templates/skills/better-auth/scripts/better_auth_init.py +3 -3
  136. package/templates/skills/bootstrap/SKILL.md +101 -0
  137. package/templates/skills/bootstrap/references/shared-phases.md +59 -0
  138. package/templates/skills/bootstrap/references/workflow-auto.md +52 -0
  139. package/templates/skills/bootstrap/references/workflow-fast.md +50 -0
  140. package/templates/skills/bootstrap/references/workflow-full.md +60 -0
  141. package/templates/skills/bootstrap/references/workflow-parallel.md +59 -0
  142. package/templates/skills/brainstorm/SKILL.md +77 -0
  143. package/templates/skills/chrome-devtools/SKILL.md +221 -68
  144. package/templates/skills/chrome-devtools/scripts/README.md +18 -0
  145. package/templates/skills/chrome-devtools/scripts/__tests__/error-handling.test.js +102 -0
  146. package/templates/skills/chrome-devtools/scripts/aria-snapshot.js +2 -1
  147. package/templates/skills/chrome-devtools/scripts/click.js +2 -1
  148. package/templates/skills/chrome-devtools/scripts/connect-chrome.js +146 -0
  149. package/templates/skills/chrome-devtools/scripts/console.js +3 -1
  150. package/templates/skills/chrome-devtools/scripts/evaluate.js +6 -3
  151. package/templates/skills/chrome-devtools/scripts/fill.js +2 -1
  152. package/templates/skills/chrome-devtools/scripts/import-cookies.js +205 -0
  153. package/templates/skills/chrome-devtools/scripts/inject-auth.js +2 -1
  154. package/templates/skills/chrome-devtools/scripts/install-deps.sh +0 -0
  155. package/templates/skills/chrome-devtools/scripts/install.sh +0 -0
  156. package/templates/skills/chrome-devtools/scripts/lib/browser.js +60 -4
  157. package/templates/skills/chrome-devtools/scripts/navigate.js +86 -2
  158. package/templates/skills/chrome-devtools/scripts/network.js +3 -1
  159. package/templates/skills/chrome-devtools/scripts/performance.js +3 -1
  160. package/templates/skills/chrome-devtools/scripts/screenshot.js +2 -1
  161. package/templates/skills/chrome-devtools/scripts/select-ref.js +2 -1
  162. package/templates/skills/chrome-devtools/scripts/snapshot.js +2 -1
  163. package/templates/skills/chrome-devtools/scripts/ws-debug.js +44 -0
  164. package/templates/skills/chrome-devtools/scripts/ws-full-debug.js +107 -0
  165. package/templates/skills/ck-help/SKILL.md +102 -0
  166. package/templates/skills/ck-help/scripts/ck-help.py +1321 -0
  167. package/templates/skills/ck-help/scripts/commands_data.yaml +3 -0
  168. package/templates/skills/ck-help/scripts/skills_data.yaml +593 -0
  169. package/templates/skills/code-review/SKILL.md +97 -93
  170. package/templates/skills/code-review/references/code-review-reception.md +113 -209
  171. package/templates/skills/code-review/references/codebase-scan-workflow.md +29 -0
  172. package/templates/skills/code-review/references/edge-case-scouting.md +119 -0
  173. package/templates/skills/code-review/references/parallel-review-workflow.md +69 -0
  174. package/templates/skills/code-review/references/requesting-code-review.md +115 -104
  175. package/templates/skills/code-review/references/task-management-reviews.md +140 -0
  176. package/templates/skills/code-review/references/verification-before-completion.md +138 -138
  177. package/templates/skills/coding-level/SKILL.md +56 -0
  178. package/templates/skills/common/README.md +120 -0
  179. package/templates/skills/common/api_key_helper.py +411 -0
  180. package/templates/skills/common/api_key_rotator.py +248 -0
  181. package/templates/skills/context-engineering/SKILL.md +108 -0
  182. package/templates/skills/context-engineering/references/context-compression.md +84 -0
  183. package/templates/skills/context-engineering/references/context-degradation.md +93 -0
  184. package/templates/skills/context-engineering/references/context-fundamentals.md +75 -0
  185. package/templates/skills/context-engineering/references/context-optimization.md +82 -0
  186. package/templates/skills/context-engineering/references/evaluation.md +89 -0
  187. package/templates/skills/context-engineering/references/memory-systems.md +88 -0
  188. package/templates/skills/context-engineering/references/multi-agent-patterns.md +90 -0
  189. package/templates/skills/context-engineering/references/project-development.md +97 -0
  190. package/templates/skills/context-engineering/references/runtime-awareness.md +202 -0
  191. package/templates/skills/context-engineering/references/tool-design.md +86 -0
  192. package/templates/skills/context-engineering/scripts/compression_evaluator.py +349 -0
  193. package/templates/skills/context-engineering/scripts/context_analyzer.py +317 -0
  194. package/templates/skills/context-engineering/scripts/tests/test_edge_cases.py +246 -0
  195. package/templates/skills/cook/README.md +86 -0
  196. package/templates/skills/cook/SKILL.md +113 -0
  197. package/templates/skills/cook/references/intent-detection.md +101 -0
  198. package/templates/skills/cook/references/review-cycle.md +75 -0
  199. package/templates/skills/cook/references/subagent-patterns.md +75 -0
  200. package/templates/skills/cook/references/workflow-steps.md +172 -0
  201. package/templates/skills/copywriting/SKILL.md +94 -0
  202. package/templates/skills/copywriting/references/copy-formulas.md +150 -0
  203. package/templates/skills/copywriting/references/cta-patterns.md +168 -0
  204. package/templates/skills/copywriting/references/email-copy.md +193 -0
  205. package/templates/skills/copywriting/references/headline-templates.md +140 -0
  206. package/templates/skills/copywriting/references/landing-page-copy.md +175 -0
  207. package/templates/skills/copywriting/references/power-words.md +189 -0
  208. package/templates/skills/copywriting/references/social-media-copy.md +222 -0
  209. package/templates/skills/copywriting/references/workflow-cro.md +83 -0
  210. package/templates/skills/copywriting/references/workflow-enhance.md +32 -0
  211. package/templates/skills/copywriting/references/workflow-fast.md +29 -0
  212. package/templates/skills/copywriting/references/workflow-good.md +39 -0
  213. package/templates/skills/copywriting/references/writing-styles.md +247 -0
  214. package/templates/skills/copywriting/scripts/extract-writing-styles.py +308 -0
  215. package/templates/skills/copywriting/templates/copy-brief.md +49 -0
  216. package/templates/skills/databases/SKILL.md +7 -155
  217. package/templates/skills/databases/analytics.md +198 -0
  218. package/templates/skills/databases/db-design.md +188 -0
  219. package/templates/skills/databases/incremental-etl.md +213 -0
  220. package/templates/skills/databases/scripts/db_backup.py +0 -0
  221. package/templates/skills/databases/scripts/db_migrate.py +3 -2
  222. package/templates/skills/databases/scripts/db_performance_check.py +3 -2
  223. package/templates/skills/databases/stacks/bigquery.md +231 -0
  224. package/templates/skills/databases/stacks/d1_cloudflare.md +137 -0
  225. package/templates/skills/databases/stacks/mysql.md +216 -0
  226. package/templates/skills/databases/stacks/postgres.md +235 -0
  227. package/templates/skills/databases/stacks/sqlite.md +244 -0
  228. package/templates/skills/databases/transactional.md +176 -0
  229. package/templates/skills/debug/SKILL.md +121 -0
  230. package/templates/skills/debug/references/frontend-verification.md +103 -0
  231. package/templates/skills/debug/references/investigation-methodology.md +101 -0
  232. package/templates/skills/debug/references/log-and-ci-analysis.md +97 -0
  233. package/templates/skills/debug/references/performance-diagnostics.md +113 -0
  234. package/templates/skills/debug/references/reporting-standards.md +122 -0
  235. package/templates/skills/debug/references/task-management-debugging.md +155 -0
  236. package/templates/skills/devops/SKILL.md +65 -253
  237. package/templates/skills/devops/references/kubernetes-basics.md +99 -0
  238. package/templates/skills/devops/references/kubernetes-helm-advanced.md +75 -0
  239. package/templates/skills/devops/references/kubernetes-helm.md +81 -0
  240. package/templates/skills/devops/references/kubernetes-kubectl.md +74 -0
  241. package/templates/skills/devops/references/kubernetes-security-advanced.md +98 -0
  242. package/templates/skills/devops/references/kubernetes-security.md +95 -0
  243. package/templates/skills/devops/references/kubernetes-troubleshooting-advanced.md +74 -0
  244. package/templates/skills/devops/references/kubernetes-troubleshooting.md +49 -0
  245. package/templates/skills/devops/references/kubernetes-workflows-advanced.md +75 -0
  246. package/templates/skills/devops/references/kubernetes-workflows.md +78 -0
  247. package/templates/skills/devops/scripts/cloudflare_deploy.py +0 -0
  248. package/templates/skills/devops/scripts/docker_optimize.py +3 -2
  249. package/templates/skills/docs/SKILL.md +55 -0
  250. package/templates/skills/docs/references/init-workflow.md +32 -0
  251. package/templates/skills/docs/references/summarize-workflow.md +18 -0
  252. package/templates/skills/docs/references/update-workflow.md +59 -0
  253. package/templates/skills/docs-seeker/SKILL.md +3 -2
  254. package/templates/skills/docs-seeker/scripts/analyze-llms-txt.js +0 -0
  255. package/templates/skills/docs-seeker/scripts/detect-topic.js +0 -0
  256. package/templates/skills/docs-seeker/scripts/fetch-docs.js +0 -0
  257. package/templates/skills/docs-seeker/scripts/tests/run-tests.js +0 -0
  258. package/templates/skills/docs-seeker/scripts/tests/test-analyze-llms.js +0 -0
  259. package/templates/skills/docs-seeker/scripts/tests/test-detect-topic.js +0 -0
  260. package/templates/skills/docs-seeker/scripts/tests/test-fetch-docs.js +0 -0
  261. package/templates/skills/docs-seeker/scripts/utils/env-loader.js +0 -0
  262. package/templates/skills/document-skills/docx/SKILL.md +2 -2
  263. package/templates/skills/document-skills/docx/ooxml/scripts/pack.py +0 -0
  264. package/templates/skills/document-skills/docx/ooxml/scripts/unpack.py +0 -0
  265. package/templates/skills/document-skills/docx/ooxml/scripts/validate.py +0 -0
  266. package/templates/skills/document-skills/docx/scripts/document.py +0 -0
  267. package/templates/skills/document-skills/docx/scripts/utilities.py +0 -0
  268. package/templates/skills/document-skills/pdf/SKILL.md +2 -2
  269. package/templates/skills/document-skills/pptx/SKILL.md +2 -2
  270. package/templates/skills/document-skills/pptx/ooxml/scripts/pack.py +0 -0
  271. package/templates/skills/document-skills/pptx/ooxml/scripts/unpack.py +0 -0
  272. package/templates/skills/document-skills/pptx/ooxml/scripts/validate.py +0 -0
  273. package/templates/skills/document-skills/pptx/scripts/inventory.py +0 -0
  274. package/templates/skills/document-skills/pptx/scripts/rearrange.py +0 -0
  275. package/templates/skills/document-skills/pptx/scripts/replace.py +0 -0
  276. package/templates/skills/document-skills/pptx/scripts/thumbnail.py +0 -0
  277. package/templates/skills/document-skills/xlsx/SKILL.md +2 -2
  278. package/templates/skills/document-skills/xlsx/recalc.py +3 -2
  279. package/templates/skills/find-skills/SKILL.md +134 -0
  280. package/templates/skills/fix/SKILL.md +111 -0
  281. package/templates/skills/fix/references/complexity-assessment.md +72 -0
  282. package/templates/skills/fix/references/mode-selection.md +46 -0
  283. package/templates/skills/fix/references/parallel-exploration.md +100 -0
  284. package/templates/skills/fix/references/review-cycle.md +77 -0
  285. package/templates/skills/fix/references/skill-activation-matrix.md +78 -0
  286. package/templates/skills/fix/references/task-orchestration.md +103 -0
  287. package/templates/skills/fix/references/workflow-ci.md +28 -0
  288. package/templates/skills/fix/references/workflow-deep.md +122 -0
  289. package/templates/skills/fix/references/workflow-logs.md +72 -0
  290. package/templates/skills/fix/references/workflow-quick.md +59 -0
  291. package/templates/skills/fix/references/workflow-standard.md +111 -0
  292. package/templates/skills/fix/references/workflow-test.md +75 -0
  293. package/templates/skills/fix/references/workflow-types.md +33 -0
  294. package/templates/skills/fix/references/workflow-ui.md +75 -0
  295. package/templates/skills/frontend-design/SKILL.md +78 -91
  296. package/templates/skills/frontend-design/references/ai-multimodal-overview.md +6 -6
  297. package/templates/skills/frontend-design/references/animejs.md +395 -395
  298. package/templates/skills/frontend-design/references/asset-generation.md +4 -4
  299. package/templates/skills/frontend-design/references/visual-analysis-overview.md +1 -1
  300. package/templates/skills/frontend-design/references/workflow-3d.md +102 -0
  301. package/templates/skills/frontend-design/references/workflow-describe.md +87 -0
  302. package/templates/skills/frontend-design/references/workflow-immersive.md +87 -0
  303. package/templates/skills/frontend-design/references/workflow-quick.md +57 -0
  304. package/templates/skills/frontend-design/references/workflow-screenshot.md +63 -0
  305. package/templates/skills/frontend-design/references/workflow-video.md +74 -0
  306. package/templates/skills/frontend-development/SKILL.md +4 -3
  307. package/templates/skills/git/SKILL.md +114 -0
  308. package/templates/skills/git/references/branch-management.md +88 -0
  309. package/templates/skills/git/references/commit-standards.md +46 -0
  310. package/templates/skills/git/references/gh-cli-guide.md +109 -0
  311. package/templates/skills/git/references/safety-protocols.md +69 -0
  312. package/templates/skills/git/references/workflow-commit.md +58 -0
  313. package/templates/skills/git/references/workflow-merge.md +48 -0
  314. package/templates/skills/git/references/workflow-pr.md +58 -0
  315. package/templates/skills/git/references/workflow-push.md +52 -0
  316. package/templates/skills/gkg/SKILL.md +91 -0
  317. package/templates/skills/gkg/references/cli-commands.md +106 -0
  318. package/templates/skills/gkg/references/http-api.md +102 -0
  319. package/templates/skills/gkg/references/language-support.md +57 -0
  320. package/templates/skills/gkg/references/mcp-tools.md +99 -0
  321. package/templates/skills/google-adk-python/SKILL.md +91 -195
  322. package/templates/skills/google-adk-python/references/agent-types-and-architecture.md +128 -0
  323. package/templates/skills/google-adk-python/references/callbacks-plugins-observability.md +117 -0
  324. package/templates/skills/google-adk-python/references/deployment-cloud-run-vertex-gke.md +138 -0
  325. package/templates/skills/google-adk-python/references/evaluation-testing-cli.md +112 -0
  326. package/templates/skills/google-adk-python/references/multi-agent-and-a2a-protocol.md +145 -0
  327. package/templates/skills/google-adk-python/references/sessions-state-memory-artifacts.md +131 -0
  328. package/templates/skills/google-adk-python/references/tools-and-mcp-integration.md +146 -0
  329. package/templates/skills/install.ps1 +130 -26
  330. package/templates/skills/install.sh +383 -63
  331. package/templates/skills/journal/SKILL.md +11 -0
  332. package/templates/skills/kanban/SKILL.md +99 -0
  333. package/templates/skills/markdown-novel-viewer/SKILL.md +314 -0
  334. package/templates/skills/markdown-novel-viewer/assets/directory-browser.css +215 -0
  335. package/templates/skills/markdown-novel-viewer/assets/favicon.png +0 -0
  336. package/templates/skills/markdown-novel-viewer/assets/novel-theme.css +16 -0
  337. package/templates/skills/markdown-novel-viewer/assets/reader.js +838 -0
  338. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-base.css +54 -0
  339. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-components.css +180 -0
  340. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-content.css +176 -0
  341. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-header.css +217 -0
  342. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-mermaid.css +153 -0
  343. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-overlays.css +202 -0
  344. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-responsive.css +285 -0
  345. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-sidebar.css +359 -0
  346. package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-variables.css +56 -0
  347. package/templates/skills/markdown-novel-viewer/assets/template.html +149 -0
  348. package/templates/skills/markdown-novel-viewer/bun.lock +38 -0
  349. package/templates/skills/markdown-novel-viewer/package.json +15 -0
  350. package/templates/skills/markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
  351. package/templates/skills/markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +335 -0
  352. package/templates/skills/markdown-novel-viewer/scripts/lib/plan-navigator.cjs +571 -0
  353. package/templates/skills/markdown-novel-viewer/scripts/lib/port-finder.cjs +48 -0
  354. package/templates/skills/markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
  355. package/templates/skills/markdown-novel-viewer/scripts/server.cjs +411 -0
  356. package/templates/skills/markdown-novel-viewer/scripts/tests/server.test.cjs +283 -0
  357. package/templates/skills/markdown-novel-viewer/tests/dashboard-assets.test.cjs +340 -0
  358. package/templates/skills/markdown-novel-viewer/tests/dashboard-renderer.test.cjs +404 -0
  359. package/templates/skills/markdown-novel-viewer/tests/http-server.test.cjs +271 -0
  360. package/templates/skills/markdown-novel-viewer/tests/run-tests.cjs +51 -0
  361. package/templates/skills/markdown-novel-viewer/tests/test-framework.cjs +154 -0
  362. package/templates/skills/markdown-novel-viewer/tests/verify-xss.cjs +90 -0
  363. package/templates/skills/mcp-builder/SKILL.md +3 -2
  364. package/templates/skills/mcp-builder/scripts/evaluation.py +9 -1
  365. package/templates/skills/mcp-management/SKILL.md +8 -7
  366. package/templates/skills/mcp-management/references/gemini-cli-integration.md +16 -10
  367. package/templates/skills/mcp-management/scripts/cli.ts +0 -0
  368. package/templates/skills/mcp-management/scripts/dist/analyze-tools.js +0 -0
  369. package/templates/skills/mcp-management/scripts/dist/cli.js +0 -0
  370. package/templates/skills/mcp-management/scripts/dist/mcp-client.js +0 -0
  371. package/templates/skills/mcp-management/scripts/mcp-client.ts +0 -0
  372. package/templates/skills/media-processing/SKILL.md +3 -2
  373. package/templates/skills/media-processing/scripts/batch-remove-background.sh +0 -0
  374. package/templates/skills/media-processing/scripts/batch_resize.py +0 -0
  375. package/templates/skills/media-processing/scripts/media_convert.py +0 -0
  376. package/templates/skills/media-processing/scripts/remove-background.sh +0 -0
  377. package/templates/skills/media-processing/scripts/remove-bg-node.js +0 -0
  378. package/templates/skills/media-processing/scripts/tests/test_batch_resize.py +0 -0
  379. package/templates/skills/media-processing/scripts/tests/test_media_convert.py +0 -0
  380. package/templates/skills/media-processing/scripts/tests/test_video_optimize.py +0 -0
  381. package/templates/skills/media-processing/scripts/video_optimize.py +0 -0
  382. package/templates/skills/mermaidjs-v11/SKILL.md +116 -0
  383. package/templates/skills/mermaidjs-v11/references/cli-usage.md +228 -0
  384. package/templates/skills/mermaidjs-v11/references/configuration.md +232 -0
  385. package/templates/skills/mermaidjs-v11/references/diagram-types.md +315 -0
  386. package/templates/skills/mermaidjs-v11/references/examples.md +344 -0
  387. package/templates/skills/mermaidjs-v11/references/integration.md +310 -0
  388. package/templates/skills/mintlify/SKILL.md +121 -0
  389. package/templates/skills/mintlify/references/ai-features-and-integrations-reference.md +756 -0
  390. package/templates/skills/mintlify/references/api-documentation-components-reference.md +873 -0
  391. package/templates/skills/mintlify/references/deployment-and-continuous-integration-reference.md +674 -0
  392. package/templates/skills/mintlify/references/docs-json-configuration-reference.md +724 -0
  393. package/templates/skills/mintlify/references/mdx-components-reference.md +551 -0
  394. package/templates/skills/mintlify/references/navigation-structure-and-organization-reference.md +775 -0
  395. package/templates/skills/mobile-development/SKILL.md +3 -2
  396. package/templates/skills/payment-integration/README.md +44 -12
  397. package/templates/skills/payment-integration/SKILL.md +82 -97
  398. package/templates/skills/payment-integration/references/creem/api.md +139 -0
  399. package/templates/skills/payment-integration/references/creem/checkouts.md +99 -0
  400. package/templates/skills/payment-integration/references/creem/licensing.md +136 -0
  401. package/templates/skills/payment-integration/references/creem/overview.md +65 -0
  402. package/templates/skills/payment-integration/references/creem/sdk.md +161 -0
  403. package/templates/skills/payment-integration/references/creem/subscriptions.md +129 -0
  404. package/templates/skills/payment-integration/references/creem/webhooks.md +120 -0
  405. package/templates/skills/payment-integration/references/implementation-workflows.md +43 -0
  406. package/templates/skills/payment-integration/references/multi-provider-order-management-patterns.md +821 -0
  407. package/templates/skills/payment-integration/references/paddle/api.md +116 -0
  408. package/templates/skills/payment-integration/references/paddle/best-practices.md +130 -0
  409. package/templates/skills/payment-integration/references/paddle/overview.md +57 -0
  410. package/templates/skills/payment-integration/references/paddle/paddle-js.md +106 -0
  411. package/templates/skills/payment-integration/references/paddle/sdk.md +131 -0
  412. package/templates/skills/payment-integration/references/paddle/subscriptions.md +118 -0
  413. package/templates/skills/payment-integration/references/paddle/webhooks.md +112 -0
  414. package/templates/skills/payment-integration/references/polar/best-practices.md +781 -361
  415. package/templates/skills/payment-integration/references/sepay/best-practices.md +870 -268
  416. package/templates/skills/payment-integration/references/stripe/stripe-best-practices.md +32 -0
  417. package/templates/skills/payment-integration/references/stripe/stripe-cli.md +148 -0
  418. package/templates/skills/payment-integration/references/stripe/stripe-js.md +116 -0
  419. package/templates/skills/payment-integration/references/stripe/stripe-sdks.md +84 -0
  420. package/templates/skills/payment-integration/references/stripe/stripe-upgrade.md +175 -0
  421. package/templates/skills/payment-integration/scripts/checkout-helper.js +0 -0
  422. package/templates/skills/payment-integration/scripts/polar-webhook-verify.js +0 -0
  423. package/templates/skills/payment-integration/scripts/sepay-webhook-verify.js +0 -0
  424. package/templates/skills/payment-integration/scripts/test-scripts.js +0 -0
  425. package/templates/skills/plan/SKILL.md +137 -0
  426. package/templates/skills/plan/references/archive-workflow.md +53 -0
  427. package/templates/skills/{planning → plan}/references/codebase-understanding.md +1 -1
  428. package/templates/skills/{planning → plan}/references/output-standards.md +15 -1
  429. package/templates/skills/{planning → plan}/references/plan-organization.md +12 -19
  430. package/templates/skills/plan/references/red-team-personas.md +69 -0
  431. package/templates/skills/plan/references/red-team-workflow.md +77 -0
  432. package/templates/skills/{planning → plan}/references/research-phase.md +2 -2
  433. package/templates/skills/plan/references/task-management.md +132 -0
  434. package/templates/skills/plan/references/validate-question-framework.md +80 -0
  435. package/templates/skills/plan/references/validate-workflow.md +65 -0
  436. package/templates/skills/plan/references/workflow-modes.md +145 -0
  437. package/templates/skills/plans-kanban/SKILL.md +167 -0
  438. package/templates/skills/plans-kanban/assets/dashboard-template.html +119 -0
  439. package/templates/skills/plans-kanban/assets/dashboard.css +1594 -0
  440. package/templates/skills/plans-kanban/assets/dashboard.js +596 -0
  441. package/templates/skills/plans-kanban/assets/favicon.png +0 -0
  442. package/templates/skills/plans-kanban/package.json +13 -0
  443. package/templates/skills/plans-kanban/scripts/lib/dashboard-renderer.cjs +884 -0
  444. package/templates/skills/plans-kanban/scripts/lib/http-server.cjs +310 -0
  445. package/templates/skills/plans-kanban/scripts/lib/plan-metadata-extractor.cjs +489 -0
  446. package/templates/skills/plans-kanban/scripts/lib/plan-parser.cjs +175 -0
  447. package/templates/skills/plans-kanban/scripts/lib/plan-scanner.cjs +272 -0
  448. package/templates/skills/plans-kanban/scripts/lib/port-finder.cjs +48 -0
  449. package/templates/skills/plans-kanban/scripts/lib/process-mgr.cjs +128 -0
  450. package/templates/skills/plans-kanban/scripts/server.cjs +260 -0
  451. package/templates/skills/preview/SKILL.md +75 -0
  452. package/templates/skills/preview/references/generation-modes.md +95 -0
  453. package/templates/skills/preview/references/view-mode.md +42 -0
  454. package/templates/skills/problem-solving/SKILL.md +3 -2
  455. package/templates/skills/project-management/SKILL.md +122 -0
  456. package/templates/skills/project-management/references/documentation-triggers.md +60 -0
  457. package/templates/skills/project-management/references/hydration-workflow.md +85 -0
  458. package/templates/skills/project-management/references/progress-tracking.md +96 -0
  459. package/templates/skills/project-management/references/reporting-patterns.md +94 -0
  460. package/templates/skills/project-management/references/task-operations.md +85 -0
  461. package/templates/skills/react-best-practices/AGENTS.md +2249 -0
  462. package/templates/skills/react-best-practices/README.md +123 -0
  463. package/templates/skills/react-best-practices/SKILL.md +122 -0
  464. package/templates/skills/react-best-practices/metadata.json +15 -0
  465. package/templates/skills/react-best-practices/rules/_sections.md +46 -0
  466. package/templates/skills/react-best-practices/rules/_template.md +28 -0
  467. package/templates/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  468. package/templates/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  469. package/templates/skills/react-best-practices/rules/async-api-routes.md +38 -0
  470. package/templates/skills/react-best-practices/rules/async-defer-await.md +80 -0
  471. package/templates/skills/react-best-practices/rules/async-dependencies.md +36 -0
  472. package/templates/skills/react-best-practices/rules/async-parallel.md +28 -0
  473. package/templates/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  474. package/templates/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  475. package/templates/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  476. package/templates/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  477. package/templates/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  478. package/templates/skills/react-best-practices/rules/bundle-preload.md +50 -0
  479. package/templates/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  480. package/templates/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  481. package/templates/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  482. package/templates/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  483. package/templates/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  484. package/templates/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  485. package/templates/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  486. package/templates/skills/react-best-practices/rules/js-early-exit.md +50 -0
  487. package/templates/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  488. package/templates/skills/react-best-practices/rules/js-index-maps.md +37 -0
  489. package/templates/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  490. package/templates/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  491. package/templates/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  492. package/templates/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  493. package/templates/skills/react-best-practices/rules/rendering-activity.md +26 -0
  494. package/templates/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  495. package/templates/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  496. package/templates/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  497. package/templates/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  498. package/templates/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  499. package/templates/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  500. package/templates/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  501. package/templates/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  502. package/templates/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  503. package/templates/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  504. package/templates/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  505. package/templates/skills/react-best-practices/rules/rerender-memo.md +44 -0
  506. package/templates/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  507. package/templates/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  508. package/templates/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  509. package/templates/skills/react-best-practices/rules/server-cache-react.md +26 -0
  510. package/templates/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
  511. package/templates/skills/react-best-practices/rules/server-serialization.md +38 -0
  512. package/templates/skills/remotion/SKILL.md +44 -0
  513. package/templates/skills/remotion/rules/3d.md +86 -0
  514. package/templates/skills/remotion/rules/animations.md +29 -0
  515. package/templates/skills/remotion/rules/assets/charts-bar-chart.tsx +173 -0
  516. package/templates/skills/remotion/rules/assets/text-animations-typewriter.tsx +100 -0
  517. package/templates/skills/remotion/rules/assets/text-animations-word-highlight.tsx +108 -0
  518. package/templates/skills/remotion/rules/assets.md +78 -0
  519. package/templates/skills/remotion/rules/audio.md +172 -0
  520. package/templates/skills/remotion/rules/calculate-metadata.md +104 -0
  521. package/templates/skills/remotion/rules/can-decode.md +75 -0
  522. package/templates/skills/remotion/rules/charts.md +58 -0
  523. package/templates/skills/remotion/rules/compositions.md +146 -0
  524. package/templates/skills/remotion/rules/display-captions.md +126 -0
  525. package/templates/skills/remotion/rules/extract-frames.md +229 -0
  526. package/templates/skills/remotion/rules/fonts.md +152 -0
  527. package/templates/skills/remotion/rules/get-audio-duration.md +58 -0
  528. package/templates/skills/remotion/rules/get-video-dimensions.md +68 -0
  529. package/templates/skills/remotion/rules/get-video-duration.md +58 -0
  530. package/templates/skills/remotion/rules/gifs.md +138 -0
  531. package/templates/skills/remotion/rules/images.md +130 -0
  532. package/templates/skills/remotion/rules/import-srt-captions.md +67 -0
  533. package/templates/skills/remotion/rules/lottie.md +68 -0
  534. package/templates/skills/remotion/rules/measuring-dom-nodes.md +35 -0
  535. package/templates/skills/remotion/rules/measuring-text.md +143 -0
  536. package/templates/skills/remotion/rules/sequencing.md +106 -0
  537. package/templates/skills/remotion/rules/tailwind.md +11 -0
  538. package/templates/skills/remotion/rules/text-animations.md +20 -0
  539. package/templates/skills/remotion/rules/timing.md +179 -0
  540. package/templates/skills/remotion/rules/transcribe-captions.md +19 -0
  541. package/templates/skills/remotion/rules/transitions.md +122 -0
  542. package/templates/skills/remotion/rules/trimming.md +53 -0
  543. package/templates/skills/remotion/rules/videos.md +171 -0
  544. package/templates/skills/repomix/SKILL.md +3 -2
  545. package/templates/skills/repomix/scripts/repomix_batch.py +0 -0
  546. package/templates/skills/research/SKILL.md +9 -6
  547. package/templates/skills/scout/SKILL.md +89 -0
  548. package/templates/skills/scout/references/external-scouting.md +140 -0
  549. package/templates/skills/scout/references/internal-scouting.md +119 -0
  550. package/templates/skills/scout/references/task-management-scouting.md +125 -0
  551. package/templates/skills/sequential-thinking/SKILL.md +3 -2
  552. package/templates/skills/sequential-thinking/scripts/format-thought.js +0 -0
  553. package/templates/skills/sequential-thinking/scripts/process-thought.js +0 -0
  554. package/templates/skills/shader/SKILL.md +113 -0
  555. package/templates/skills/shader/references/glsl-cellular-voronoi-worley-noise-patterns.md +142 -0
  556. package/templates/skills/shader/references/glsl-colors-rgb-hsb-gradients-mixing-color-spaces.md +143 -0
  557. package/templates/skills/shader/references/glsl-fbm-fractional-brownian-motion-turbulence-octaves.md +146 -0
  558. package/templates/skills/shader/references/glsl-fundamentals-data-types-vectors-precision-coordinates.md +104 -0
  559. package/templates/skills/shader/references/glsl-noise-random-perlin-simplex-cellular-voronoi.md +115 -0
  560. package/templates/skills/shader/references/glsl-pattern-symmetry-truchet-domain-warping.md +134 -0
  561. package/templates/skills/shader/references/glsl-patterns-tiling-fract-matrices-transformations.md +133 -0
  562. package/templates/skills/shader/references/glsl-procedural-textures-clouds-marble-wood-terrain.md +144 -0
  563. package/templates/skills/shader/references/glsl-shader-builtin-functions-complete-api-reference.md +112 -0
  564. package/templates/skills/shader/references/glsl-shapes-polygon-star-polar-sdf-combinations.md +124 -0
  565. package/templates/skills/shader/references/glsl-shapes-sdf-circles-rectangles-polar-distance-fields.md +106 -0
  566. package/templates/skills/shader/references/glsl-shaping-functions-step-smoothstep-curves-interpolation.md +141 -0
  567. package/templates/skills/shopify/SKILL.md +3 -2
  568. package/templates/skills/shopify/scripts/shopify_init.py +5 -5
  569. package/templates/skills/skill-creator/SKILL.md +91 -238
  570. package/templates/skills/skill-creator/references/benchmark-optimization-guide.md +86 -0
  571. package/templates/skills/skill-creator/references/distribution-guide.md +79 -0
  572. package/templates/skills/skill-creator/references/mcp-skills-integration.md +71 -0
  573. package/templates/skills/skill-creator/references/metadata-quality-criteria.md +76 -0
  574. package/templates/skills/skill-creator/references/plugin-marketplace-hosting.md +104 -0
  575. package/templates/skills/skill-creator/references/plugin-marketplace-overview.md +89 -0
  576. package/templates/skills/skill-creator/references/plugin-marketplace-schema.md +93 -0
  577. package/templates/skills/skill-creator/references/plugin-marketplace-sources.md +103 -0
  578. package/templates/skills/skill-creator/references/plugin-marketplace-troubleshooting.md +76 -0
  579. package/templates/skills/skill-creator/references/script-quality-criteria.md +106 -0
  580. package/templates/skills/skill-creator/references/skill-anatomy-and-requirements.md +76 -0
  581. package/templates/skills/skill-creator/references/skill-creation-workflow.md +95 -0
  582. package/templates/skills/skill-creator/references/skill-design-patterns.md +75 -0
  583. package/templates/skills/skill-creator/references/skillmark-benchmark-criteria.md +102 -0
  584. package/templates/skills/skill-creator/references/structure-organization-criteria.md +114 -0
  585. package/templates/skills/skill-creator/references/testing-and-iteration.md +78 -0
  586. package/templates/skills/skill-creator/references/token-efficiency-criteria.md +74 -0
  587. package/templates/skills/skill-creator/references/troubleshooting-guide.md +80 -0
  588. package/templates/skills/skill-creator/references/validation-checklist.md +83 -0
  589. package/templates/skills/skill-creator/references/writing-effective-instructions.md +88 -0
  590. package/templates/skills/skill-creator/references/yaml-frontmatter-reference.md +91 -0
  591. package/templates/skills/skill-creator/scripts/debug.zip +0 -0
  592. package/templates/skills/skill-creator/scripts/encoding_utils.py +36 -0
  593. package/templates/skills/skill-creator/scripts/init_skill.py +9 -4
  594. package/templates/skills/skill-creator/scripts/package_skill.py +5 -0
  595. package/templates/skills/skill-creator/scripts/quick_validate.py +6 -2
  596. package/templates/skills/tanstack/SKILL.md +141 -0
  597. package/templates/skills/tanstack/references/tanstack-ai.md +97 -0
  598. package/templates/skills/tanstack/references/tanstack-form.md +125 -0
  599. package/templates/skills/tanstack/references/tanstack-start.md +100 -0
  600. package/templates/skills/team/SKILL.md +285 -0
  601. package/templates/skills/team/references/agent-teams-controls-and-modes.md +107 -0
  602. package/templates/skills/team/references/agent-teams-examples-and-best-practices.md +182 -0
  603. package/templates/skills/team/references/agent-teams-official-docs.md +175 -0
  604. package/templates/skills/template-skill/SKILL.md +1 -1
  605. package/templates/skills/test/SKILL.md +109 -0
  606. package/templates/skills/test/references/report-format.md +58 -0
  607. package/templates/skills/test/references/test-execution-workflow.md +103 -0
  608. package/templates/skills/test/references/ui-testing-workflow.md +65 -0
  609. package/templates/skills/threejs/SKILL.md +106 -53
  610. package/templates/skills/threejs/data/api-reference.csv +61 -0
  611. package/templates/skills/threejs/data/categories.csv +14 -0
  612. package/templates/skills/threejs/data/examples-all.csv +557 -0
  613. package/templates/skills/threejs/data/use-cases.csv +21 -0
  614. package/templates/skills/threejs/references/00-fundamentals.md +487 -0
  615. package/templates/skills/threejs/references/11-materials-advanced.md +1 -1
  616. package/templates/skills/threejs/references/11-materials.md +519 -0
  617. package/templates/skills/threejs/references/17-shader.md +641 -0
  618. package/templates/skills/threejs/references/18-geometry.md +547 -0
  619. package/templates/skills/threejs/scripts/core.py +236 -0
  620. package/templates/skills/threejs/scripts/extract_examples.py +688 -0
  621. package/templates/skills/threejs/scripts/generate_csv_from_json.py +135 -0
  622. package/templates/skills/threejs/scripts/search.py +77 -0
  623. package/templates/skills/ui-styling/SKILL.md +3 -2
  624. package/templates/skills/ui-styling/scripts/shadcn_add.py +0 -0
  625. package/templates/skills/ui-styling/scripts/tailwind_config_gen.py +1 -1
  626. package/templates/skills/ui-ux-pro-max/SKILL.md +69 -32
  627. package/templates/skills/ui-ux-pro-max/data/charts.csv +25 -25
  628. package/templates/skills/ui-ux-pro-max/data/colors.csv +96 -96
  629. package/templates/skills/ui-ux-pro-max/data/landing.csv +30 -30
  630. package/templates/skills/ui-ux-pro-max/data/products.csv +96 -96
  631. package/templates/skills/ui-ux-pro-max/data/prompts.csv +20 -20
  632. package/templates/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
  633. package/templates/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
  634. package/templates/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
  635. package/templates/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
  636. package/templates/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
  637. package/templates/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
  638. package/templates/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
  639. package/templates/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
  640. package/templates/skills/ui-ux-pro-max/data/styles.csv +58 -58
  641. package/templates/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  642. package/templates/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
  643. package/templates/skills/ui-ux-pro-max/scripts/design_system.py +494 -0
  644. package/templates/skills/ui-ux-pro-max/scripts/search.py +84 -61
  645. package/templates/skills/use-mcp/SKILL.md +42 -0
  646. package/templates/skills/watzup/SKILL.md +12 -0
  647. package/templates/skills/web-design-guidelines/SKILL.md +36 -0
  648. package/templates/skills/web-frameworks/SKILL.md +4 -3
  649. package/templates/skills/web-frameworks/scripts/nextjs_init.py +13 -13
  650. package/templates/skills/web-frameworks/scripts/turborepo_migrate.py +0 -0
  651. package/templates/skills/web-testing/SKILL.md +97 -0
  652. package/templates/skills/web-testing/references/accessibility-testing.md +84 -0
  653. package/templates/skills/web-testing/references/api-testing.md +78 -0
  654. package/templates/skills/web-testing/references/ci-cd-testing-workflows.md +121 -0
  655. package/templates/skills/web-testing/references/component-testing.md +94 -0
  656. package/templates/skills/web-testing/references/contract-testing.md +146 -0
  657. package/templates/skills/web-testing/references/cross-browser-checklist.md +72 -0
  658. package/templates/skills/web-testing/references/database-testing.md +139 -0
  659. package/templates/skills/web-testing/references/e2e-testing-playwright.md +119 -0
  660. package/templates/skills/web-testing/references/functional-testing-checklist.md +88 -0
  661. package/templates/skills/web-testing/references/interactive-testing-patterns.md +89 -0
  662. package/templates/skills/web-testing/references/load-testing-k6.md +93 -0
  663. package/templates/skills/web-testing/references/mobile-gesture-testing.md +85 -0
  664. package/templates/skills/web-testing/references/performance-core-web-vitals.md +124 -0
  665. package/templates/skills/web-testing/references/playwright-component-testing.md +115 -0
  666. package/templates/skills/web-testing/references/pre-release-checklist.md +75 -0
  667. package/templates/skills/web-testing/references/security-checklists.md +81 -0
  668. package/templates/skills/web-testing/references/security-testing-overview.md +92 -0
  669. package/templates/skills/web-testing/references/shadow-dom-testing.md +70 -0
  670. package/templates/skills/web-testing/references/test-data-management.md +131 -0
  671. package/templates/skills/web-testing/references/test-flakiness-mitigation.md +86 -0
  672. package/templates/skills/web-testing/references/testing-pyramid-strategy.md +76 -0
  673. package/templates/skills/web-testing/references/unit-integration-testing.md +138 -0
  674. package/templates/skills/web-testing/references/visual-regression.md +92 -0
  675. package/templates/skills/web-testing/references/vulnerability-payloads.md +93 -0
  676. package/templates/skills/web-testing/scripts/analyze-test-results.js +280 -0
  677. package/templates/skills/web-testing/scripts/init-playwright.js +233 -0
  678. package/templates/skills/worktree/SKILL.md +96 -0
  679. package/templates/skills/worktree/scripts/worktree.cjs +916 -0
  680. package/templates/skills/worktree/scripts/worktree.test.cjs +792 -0
  681. package/templates/statusline.cjs +477 -244
  682. package/templates/statusline.ps1 +0 -1
  683. package/templates/statusline.sh +0 -1
  684. package/templates/agents/README.md +0 -172
  685. package/templates/agents/copywriter.md +0 -113
  686. package/templates/agents/database-admin.md +0 -97
  687. package/templates/agents/scout-external.md +0 -146
  688. package/templates/agents/scout.md +0 -260
  689. package/templates/hooks/.python-cache.json +0 -1
  690. package/templates/hooks/README.md +0 -246
  691. package/templates/hooks/backend-csharp-context.cjs +0 -223
  692. package/templates/hooks/design-system-context.cjs +0 -185
  693. package/templates/hooks/frontend-typescript-context.cjs +0 -233
  694. package/templates/hooks/lib/ck-paths.cjs +0 -110
  695. package/templates/hooks/lib/context-tracker.cjs +0 -335
  696. package/templates/hooks/notify-waiting.js +0 -117
  697. package/templates/hooks/post-edit-prettier.cjs +0 -189
  698. package/templates/hooks/post-task-review.cjs +0 -142
  699. package/templates/hooks/scss-styling-context.cjs +0 -213
  700. package/templates/hooks/session-end.cjs +0 -35
  701. package/templates/hooks/tests/test-context-tracker.cjs +0 -454
  702. package/templates/hooks/tests/test-scout-block.js +0 -163
  703. package/templates/hooks/workflow-router.cjs +0 -326
  704. package/templates/hooks/write-compact-marker.cjs +0 -159
  705. package/templates/scripts/__pycache__/win_compat.cpython-312.pyc +0 -0
  706. package/templates/scripts/plan-preview.cjs +0 -921
  707. package/templates/skills/arch-cross-service-integration/SKILL.md +0 -48
  708. package/templates/skills/arch-performance-optimization/SKILL.md +0 -306
  709. package/templates/skills/arch-security-review/SKILL.md +0 -344
  710. package/templates/skills/branch-comparison/SKILL.md +0 -150
  711. package/templates/skills/bug-diagnosis/SKILL.md +0 -309
  712. package/templates/skills/claude-code/references/advanced-features.md +0 -399
  713. package/templates/skills/claude-code/references/agent-skills.md +0 -399
  714. package/templates/skills/claude-code/references/api-reference.md +0 -498
  715. package/templates/skills/claude-code/references/best-practices.md +0 -447
  716. package/templates/skills/claude-code/references/cicd-integration.md +0 -428
  717. package/templates/skills/claude-code/references/common-workflows.md +0 -119
  718. package/templates/skills/claude-code/references/configuration.md +0 -480
  719. package/templates/skills/claude-code/references/enterprise-features.md +0 -472
  720. package/templates/skills/claude-code/references/getting-started.md +0 -252
  721. package/templates/skills/claude-code/references/hooks-and-plugins.md +0 -444
  722. package/templates/skills/claude-code/references/hooks-comprehensive.md +0 -622
  723. package/templates/skills/claude-code/references/ide-integration.md +0 -316
  724. package/templates/skills/claude-code/references/mcp-integration.md +0 -386
  725. package/templates/skills/claude-code/references/slash-commands.md +0 -489
  726. package/templates/skills/claude-code/references/troubleshooting.md +0 -456
  727. package/templates/skills/claude-code/skill.md +0 -60
  728. package/templates/skills/debugging/SKILL.md +0 -84
  729. package/templates/skills/developer-growth-analysis/SKILL.md +0 -322
  730. package/templates/skills/documentation/SKILL.md +0 -134
  731. package/templates/skills/domain-name-brainstormer/SKILL.md +0 -212
  732. package/templates/skills/dual-pass-review/SKILL.md +0 -249
  733. package/templates/skills/feature-docs/SKILL.md +0 -294
  734. package/templates/skills/feature-implementation/SKILL.md +0 -262
  735. package/templates/skills/feature-investigation/SKILL.md +0 -346
  736. package/templates/skills/frontend-design-pro/SKILL.md +0 -58
  737. package/templates/skills/package-upgrade/SKILL.md +0 -189
  738. package/templates/skills/plan-analysis/SKILL.md +0 -191
  739. package/templates/skills/planning/SKILL.md +0 -115
  740. package/templates/skills/planning-with-files/SKILL.md +0 -160
  741. package/templates/skills/planning-with-files/examples.md +0 -202
  742. package/templates/skills/planning-with-files/reference.md +0 -110
  743. package/templates/skills/project-index/SKILL.md +0 -97
  744. package/templates/skills/project-index/scripts/scan-structure.js +0 -417
  745. package/templates/skills/project-index/scripts/scan_structure.py +0 -450
  746. package/templates/skills/readme-improvement/SKILL.md +0 -177
  747. package/templates/skills/skill-share/SKILL.md +0 -80
  748. package/templates/skills/tasks-code-review/SKILL.md +0 -298
  749. package/templates/skills/tasks-documentation/SKILL.md +0 -328
  750. package/templates/skills/tasks-spec-update/SKILL.md +0 -318
  751. package/templates/skills/tasks-test-generation/SKILL.md +0 -433
  752. package/templates/skills/test-generation/SKILL.md +0 -203
  753. package/templates/skills/webapp-testing/LICENSE.txt +0 -202
  754. package/templates/skills/webapp-testing/SKILL.md +0 -96
  755. package/templates/skills/webapp-testing/examples/console_logging.py +0 -35
  756. package/templates/skills/webapp-testing/examples/element_discovery.py +0 -40
  757. package/templates/skills/webapp-testing/examples/static_html_automation.py +0 -33
  758. package/templates/skills/webapp-testing/scripts/with_server.py +0 -106
  759. /package/templates/hooks/scout-block/vendor/{ignore.js → ignore.cjs} +0 -0
  760. /package/templates/skills/{debugging → debug}/references/defense-in-depth.md +0 -0
  761. /package/templates/skills/{debugging → debug}/references/root-cause-tracing.md +0 -0
  762. /package/templates/skills/{debugging → debug}/references/systematic-debugging.md +0 -0
  763. /package/templates/skills/{debugging → debug}/references/verification.md +0 -0
  764. /package/templates/skills/{debugging → debug}/scripts/find-polluter.sh +0 -0
  765. /package/templates/skills/{debugging → debug}/scripts/find-polluter.test.md +0 -0
  766. /package/templates/skills/{planning → plan}/references/solution-design.md +0 -0
@@ -19,7 +19,7 @@ async function click() {
19
19
 
20
20
  try {
21
21
  const browser = await getBrowser({
22
- headless: args.headless !== 'false'
22
+ headless: args.headless
23
23
  });
24
24
 
25
25
  const page = await getPage(browser);
@@ -72,6 +72,7 @@ async function click() {
72
72
  } else {
73
73
  await disconnectBrowser();
74
74
  }
75
+ process.exit(0);
75
76
  } catch (error) {
76
77
  // Enhance error message with troubleshooting tips
77
78
  const enhanced = enhanceError(error, args.selector);
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Connect to an existing Chrome browser launched with remote debugging
4
+ *
5
+ * Two-step workflow:
6
+ * 1. User launches Chrome with: chrome --remote-debugging-port=9222
7
+ * 2. Connect with this script: node connect-chrome.js --browser-url http://localhost:9222
8
+ *
9
+ * Or launch Chrome automatically:
10
+ * node connect-chrome.js --launch --port 9222
11
+ *
12
+ * This is useful for:
13
+ * - Debugging (can see browser window while scripts run)
14
+ * - Using existing Chrome session with all logged-in accounts
15
+ * - Avoiding Puppeteer's bundled Chromium
16
+ */
17
+ import { spawn } from 'child_process';
18
+ import { getBrowser, getPage, disconnectBrowser, parseArgs, outputJSON, outputError } from './lib/browser.js';
19
+
20
+ /**
21
+ * Get Chrome executable path based on OS
22
+ * @returns {string} - Path to Chrome executable
23
+ */
24
+ function getChromeExecutablePath() {
25
+ switch (process.platform) {
26
+ case 'darwin':
27
+ return '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
28
+ case 'win32':
29
+ // Try common installation paths
30
+ const paths = [
31
+ `${process.env['PROGRAMFILES']}/Google/Chrome/Application/chrome.exe`,
32
+ `${process.env['PROGRAMFILES(X86)']}/Google/Chrome/Application/chrome.exe`,
33
+ `${process.env.LOCALAPPDATA}/Google/Chrome/Application/chrome.exe`
34
+ ];
35
+ // Return first path (user should have Chrome installed in standard location)
36
+ return paths[0];
37
+ default: // Linux
38
+ return 'google-chrome';
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Launch Chrome with remote debugging enabled
44
+ * @param {number} port - Debug port (default 9222)
45
+ * @returns {Promise<ChildProcess>}
46
+ */
47
+ function launchChromeWithDebugging(port = 9222) {
48
+ const chromePath = getChromeExecutablePath();
49
+ const args = [
50
+ `--remote-debugging-port=${port}`,
51
+ '--no-first-run',
52
+ '--no-default-browser-check'
53
+ ];
54
+
55
+ const chrome = spawn(chromePath, args, {
56
+ detached: true,
57
+ stdio: 'ignore'
58
+ });
59
+
60
+ chrome.unref();
61
+ return chrome;
62
+ }
63
+
64
+ /**
65
+ * Wait for Chrome debug endpoint to be ready
66
+ * @param {string} browserUrl - Browser debug URL
67
+ * @param {number} timeout - Max wait time in ms
68
+ * @returns {Promise<boolean>}
69
+ */
70
+ async function waitForDebugEndpoint(browserUrl, timeout = 10000) {
71
+ const start = Date.now();
72
+ const checkUrl = `${browserUrl}/json/version`;
73
+
74
+ while (Date.now() - start < timeout) {
75
+ try {
76
+ const response = await fetch(checkUrl);
77
+ if (response.ok) return true;
78
+ } catch {
79
+ // Not ready yet
80
+ }
81
+ await new Promise(r => setTimeout(r, 500));
82
+ }
83
+ return false;
84
+ }
85
+
86
+ async function connectChrome() {
87
+ const args = parseArgs(process.argv.slice(2));
88
+ const port = parseInt(args.port || '9222');
89
+ const browserUrl = args['browser-url'] || `http://localhost:${port}`;
90
+
91
+ try {
92
+ // Launch Chrome if requested
93
+ if (args.launch) {
94
+ launchChromeWithDebugging(port);
95
+
96
+ // Wait for debug endpoint
97
+ const ready = await waitForDebugEndpoint(browserUrl);
98
+ if (!ready) {
99
+ outputError(new Error(`Chrome did not start within timeout. Check if port ${port} is available.`));
100
+ return;
101
+ }
102
+ }
103
+
104
+ // Connect to Chrome via browserUrl
105
+ const browser = await getBrowser({ browserUrl });
106
+ const page = await getPage(browser);
107
+
108
+ // Navigate if URL provided
109
+ if (args.url) {
110
+ await page.goto(args.url, {
111
+ waitUntil: args['wait-until'] || 'networkidle2',
112
+ timeout: parseInt(args.timeout || '30000')
113
+ });
114
+ }
115
+
116
+ const result = {
117
+ success: true,
118
+ browserUrl,
119
+ connected: true,
120
+ url: page.url(),
121
+ title: await page.title(),
122
+ hint: args.launch
123
+ ? 'Chrome launched with debugging. Browser window is visible.'
124
+ : 'Connected to existing Chrome instance.'
125
+ };
126
+
127
+ outputJSON(result);
128
+
129
+ // Default: disconnect to keep browser running
130
+ await disconnectBrowser();
131
+ process.exit(0);
132
+ } catch (error) {
133
+ // Provide helpful error message
134
+ if (error.message.includes('ECONNREFUSED')) {
135
+ outputError(new Error(
136
+ `Could not connect to Chrome at ${browserUrl}. ` +
137
+ `Make sure Chrome is running with: ` +
138
+ `chrome --remote-debugging-port=${port}`
139
+ ));
140
+ } else {
141
+ outputError(error);
142
+ }
143
+ }
144
+ }
145
+
146
+ connectChrome();
@@ -15,7 +15,7 @@ async function monitorConsole() {
15
15
 
16
16
  try {
17
17
  const browser = await getBrowser({
18
- headless: args.headless !== 'false'
18
+ headless: args.headless
19
19
  });
20
20
 
21
21
  const page = await getPage(browser);
@@ -71,8 +71,10 @@ async function monitorConsole() {
71
71
  } else {
72
72
  await disconnectBrowser();
73
73
  }
74
+ process.exit(0);
74
75
  } catch (error) {
75
76
  outputError(error);
77
+ process.exit(1);
76
78
  }
77
79
  }
78
80
 
@@ -15,7 +15,7 @@ async function evaluate() {
15
15
 
16
16
  try {
17
17
  const browser = await getBrowser({
18
- headless: args.headless !== 'false'
18
+ headless: args.headless
19
19
  });
20
20
 
21
21
  const page = await getPage(browser);
@@ -27,9 +27,10 @@ async function evaluate() {
27
27
  });
28
28
  }
29
29
 
30
- const result = await page.evaluate((script) => {
30
+ const result = await page.evaluate(async (script) => {
31
+ // Wrap in async IIFE so user scripts can use await
31
32
  // eslint-disable-next-line no-eval
32
- return eval(script);
33
+ return await eval(`(async () => { return ${script}; })()`);
33
34
  }, args.script);
34
35
 
35
36
  outputJSON({
@@ -45,8 +46,10 @@ async function evaluate() {
45
46
  } else {
46
47
  await disconnectBrowser();
47
48
  }
49
+ process.exit(0);
48
50
  } catch (error) {
49
51
  outputError(error);
52
+ process.exit(1);
50
53
  }
51
54
  }
52
55
 
@@ -24,7 +24,7 @@ async function fill() {
24
24
 
25
25
  try {
26
26
  const browser = await getBrowser({
27
- headless: args.headless !== 'false'
27
+ headless: args.headless
28
28
  });
29
29
 
30
30
  const page = await getPage(browser);
@@ -65,6 +65,7 @@ async function fill() {
65
65
  } else {
66
66
  await disconnectBrowser();
67
67
  }
68
+ process.exit(0);
68
69
  } catch (error) {
69
70
  // Enhance error message with troubleshooting tips
70
71
  const enhanced = enhanceError(error, args.selector);
@@ -0,0 +1,205 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Import cookies from JSON file exported by browser extensions
4
+ * Supports: EditThisCookie, Cookie-Editor, Netscape (txt) formats
5
+ *
6
+ * Usage:
7
+ * node import-cookies.js --file ./cookies.json --url https://example.com
8
+ * node import-cookies.js --file ./cookies.txt --format netscape --url https://example.com
9
+ *
10
+ * Workflow:
11
+ * 1. Install "Cookie-Editor" or "EditThisCookie" Chrome extension
12
+ * 2. Navigate to target site and log in manually
13
+ * 3. Export cookies as JSON via extension
14
+ * 4. Run this script to import into puppeteer session
15
+ * 5. Use other scripts (screenshot, navigate) with authenticated session
16
+ */
17
+ import fs from 'fs';
18
+ import { getBrowser, getPage, closeBrowser, disconnectBrowser, parseArgs, outputJSON, outputError, saveAuthSession } from './lib/browser.js';
19
+
20
+ /**
21
+ * Parse cookies from EditThisCookie/Cookie-Editor JSON format
22
+ * @param {Array} cookies - Array of cookie objects
23
+ * @returns {Array} - Normalized cookie array for Puppeteer
24
+ */
25
+ function parseJsonCookies(cookies) {
26
+ return cookies.map(cookie => {
27
+ // Handle different property names from various extensions
28
+ const normalized = {
29
+ name: cookie.name,
30
+ value: cookie.value,
31
+ domain: cookie.domain,
32
+ path: cookie.path || '/',
33
+ httpOnly: cookie.httpOnly ?? false,
34
+ secure: cookie.secure ?? false,
35
+ sameSite: cookie.sameSite || 'Lax'
36
+ };
37
+
38
+ // Handle expiration (different extensions use different names)
39
+ if (cookie.expirationDate) {
40
+ normalized.expires = cookie.expirationDate;
41
+ } else if (cookie.expires) {
42
+ normalized.expires = typeof cookie.expires === 'number'
43
+ ? cookie.expires
44
+ : new Date(cookie.expires).getTime() / 1000;
45
+ }
46
+
47
+ return normalized;
48
+ });
49
+ }
50
+
51
+ /**
52
+ * Parse Netscape cookie file format (used by curl, wget, etc.)
53
+ * Format: domain\tflags\tpath\tsecure\texpiration\tname\tvalue
54
+ * @param {string} content - Netscape format cookie file content
55
+ * @returns {Array} - Normalized cookie array for Puppeteer
56
+ */
57
+ function parseNetscapeCookies(content) {
58
+ const cookies = [];
59
+ const lines = content.split('\n');
60
+
61
+ for (const line of lines) {
62
+ // Skip comments and empty lines
63
+ if (line.startsWith('#') || line.trim() === '') continue;
64
+
65
+ const parts = line.split('\t');
66
+ if (parts.length < 7) continue;
67
+
68
+ const [domain, , path, secure, expires, name, value] = parts;
69
+
70
+ cookies.push({
71
+ name: name.trim(),
72
+ value: value.trim(),
73
+ domain: domain.trim(),
74
+ path: path.trim() || '/',
75
+ secure: secure.toUpperCase() === 'TRUE',
76
+ httpOnly: false, // Netscape format doesn't include httpOnly
77
+ expires: parseInt(expires, 10) || undefined,
78
+ sameSite: 'Lax'
79
+ });
80
+ }
81
+
82
+ return cookies;
83
+ }
84
+
85
+ /**
86
+ * Detect cookie file format from content
87
+ * @param {string} content - File content
88
+ * @returns {string} - 'json' or 'netscape'
89
+ */
90
+ function detectFormat(content) {
91
+ const trimmed = content.trim();
92
+ if (trimmed.startsWith('[') || trimmed.startsWith('{')) {
93
+ return 'json';
94
+ }
95
+ return 'netscape';
96
+ }
97
+
98
+ async function importCookies() {
99
+ const args = parseArgs(process.argv.slice(2));
100
+
101
+ if (!args.file) {
102
+ outputError(new Error('--file is required (path to cookies file)'));
103
+ return;
104
+ }
105
+
106
+ if (!args.url) {
107
+ outputError(new Error('--url is required (target URL to apply cookies)'));
108
+ return;
109
+ }
110
+
111
+ // Read cookie file
112
+ let fileContent;
113
+ try {
114
+ fileContent = fs.readFileSync(args.file, 'utf8');
115
+ } catch (e) {
116
+ outputError(new Error(`Failed to read cookie file: ${e.message}`));
117
+ return;
118
+ }
119
+
120
+ // Parse cookies based on format
121
+ const format = args.format || detectFormat(fileContent);
122
+ let cookies;
123
+
124
+ try {
125
+ if (format === 'json') {
126
+ const parsed = JSON.parse(fileContent);
127
+ // Handle both array and object with cookies property
128
+ const cookieArray = Array.isArray(parsed) ? parsed : (parsed.cookies || []);
129
+ cookies = parseJsonCookies(cookieArray);
130
+ } else {
131
+ cookies = parseNetscapeCookies(fileContent);
132
+ }
133
+ } catch (e) {
134
+ outputError(new Error(`Failed to parse cookies (${format}): ${e.message}`));
135
+ return;
136
+ }
137
+
138
+ if (cookies.length === 0) {
139
+ outputError(new Error('No valid cookies found in file'));
140
+ return;
141
+ }
142
+
143
+ try {
144
+ const browser = await getBrowser({
145
+ headless: args.headless
146
+ });
147
+
148
+ const page = await getPage(browser);
149
+
150
+ // Navigate to URL first to establish domain context
151
+ await page.goto(args.url, {
152
+ waitUntil: args['wait-until'] || 'networkidle2',
153
+ timeout: parseInt(args.timeout || '30000')
154
+ });
155
+
156
+ // Filter cookies by domain if --strict-domain is set
157
+ let cookiesToApply = cookies;
158
+ if (args['strict-domain']) {
159
+ const urlDomain = new URL(args.url).hostname;
160
+ cookiesToApply = cookies.filter(c => {
161
+ const cookieDomain = c.domain.startsWith('.') ? c.domain.slice(1) : c.domain;
162
+ return urlDomain.endsWith(cookieDomain);
163
+ });
164
+ }
165
+
166
+ // Apply cookies
167
+ await page.setCookie(...cookiesToApply);
168
+
169
+ // Save to auth session for persistence
170
+ saveAuthSession({ cookies: cookiesToApply });
171
+
172
+ // Reload to apply cookies if --reload is set
173
+ if (args.reload === 'true') {
174
+ await page.reload({ waitUntil: 'networkidle2' });
175
+ }
176
+
177
+ const result = {
178
+ success: true,
179
+ file: args.file,
180
+ format,
181
+ url: args.url,
182
+ imported: {
183
+ total: cookiesToApply.length,
184
+ names: cookiesToApply.map(c => c.name)
185
+ },
186
+ persisted: true,
187
+ finalUrl: page.url(),
188
+ title: await page.title()
189
+ };
190
+
191
+ outputJSON(result);
192
+
193
+ // Default: disconnect to keep browser running
194
+ if (args.close === 'true') {
195
+ await closeBrowser();
196
+ } else {
197
+ await disconnectBrowser();
198
+ }
199
+ process.exit(0);
200
+ } catch (error) {
201
+ outputError(error);
202
+ }
203
+ }
204
+
205
+ importCookies();
@@ -64,7 +64,7 @@ async function injectAuth() {
64
64
 
65
65
  try {
66
66
  const browser = await getBrowser({
67
- headless: args.headless !== 'false'
67
+ headless: args.headless
68
68
  });
69
69
 
70
70
  const page = await getPage(browser);
@@ -221,6 +221,7 @@ async function injectAuth() {
221
221
  } else {
222
222
  await disconnectBrowser();
223
223
  }
224
+ process.exit(0);
224
225
  } catch (error) {
225
226
  outputError(error);
226
227
  }
@@ -18,6 +18,51 @@ const AUTH_SESSION_FILE = path.join(__dirname, '..', '.auth-session.json');
18
18
  let browserInstance = null;
19
19
  let pageInstance = null;
20
20
 
21
+ /**
22
+ * Resolve headless mode based on explicit value or OS auto-detection.
23
+ * - Explicit 'true'/'false' or boolean always wins
24
+ * - CI environments (CI, GITHUB_ACTIONS, GITLAB_CI, JENKINS_URL) → headless
25
+ * - Linux → headless (servers/WSL typically have no display)
26
+ * - macOS/Windows → headed for better debugging
27
+ * @param {string|boolean|undefined} value - CLI arg value or boolean
28
+ * @returns {boolean} - true for headless, false for headed
29
+ */
30
+ export function resolveHeadless(value) {
31
+ if (value === false || value === 'false') return false;
32
+ if (value === true || value === 'true') return true;
33
+
34
+ // Auto-detect: CI → headless
35
+ if (process.env.CI || process.env.GITHUB_ACTIONS || process.env.GITLAB_CI || process.env.JENKINS_URL) {
36
+ log('Auto-detected CI environment → headless');
37
+ return true;
38
+ }
39
+
40
+ // Linux → headless (includes WSL, remote servers)
41
+ if (process.platform === 'linux') {
42
+ log('Auto-detected Linux → headless');
43
+ return true;
44
+ }
45
+
46
+ // macOS/Windows → headed for debugging
47
+ log(`Auto-detected ${process.platform} → headed`);
48
+ return false;
49
+ }
50
+
51
+ /**
52
+ * Get default Chrome profile path based on OS
53
+ * @returns {string} - Path to Chrome's default user data directory
54
+ */
55
+ function getDefaultChromeProfilePath() {
56
+ switch (process.platform) {
57
+ case 'darwin':
58
+ return `${process.env.HOME}/Library/Application Support/Google/Chrome`;
59
+ case 'win32':
60
+ return `${process.env.LOCALAPPDATA}/Google/Chrome/User Data`;
61
+ default: // Linux and others
62
+ return `${process.env.HOME}/.config/google-chrome`;
63
+ }
64
+ }
65
+
21
66
  /**
22
67
  * Read session info from file
23
68
  */
@@ -201,20 +246,31 @@ export async function getBrowser(options = {}) {
201
246
  return browserInstance;
202
247
  }
203
248
 
249
+ // Resolve Chrome profile path
250
+ let userDataDir = options.userDataDir || options.profile;
251
+ if (options.useDefaultProfile) {
252
+ userDataDir = getDefaultChromeProfilePath();
253
+ log(`Using default Chrome profile: ${userDataDir}`);
254
+ }
255
+
256
+ // Destructure known properties — only pass Puppeteer-valid options to launch()
257
+ const { headless, args: extraArgs, viewport, useDefaultProfile, profile, browserUrl, wsEndpoint: _ws, userDataDir: _udd, ...restOptions } = options;
258
+
204
259
  // Launch new browser
205
260
  const launchOptions = {
206
- headless: options.headless !== false,
261
+ headless: resolveHeadless(headless),
207
262
  args: [
208
263
  '--no-sandbox',
209
264
  '--disable-setuid-sandbox',
210
265
  '--disable-dev-shm-usage',
211
- ...(options.args || [])
266
+ ...(extraArgs || [])
212
267
  ],
213
- defaultViewport: options.viewport || {
268
+ defaultViewport: viewport || {
214
269
  width: 1920,
215
270
  height: 1080
216
271
  },
217
- ...options
272
+ ...(userDataDir && { userDataDir }),
273
+ ...restOptions
218
274
  };
219
275
 
220
276
  log('Launching new browser');
@@ -2,12 +2,24 @@
2
2
  /**
3
3
  * Navigate to a URL
4
4
  * Usage: node navigate.js --url https://example.com [--wait-until networkidle2] [--timeout 30000]
5
+ * node navigate.js --url https://example.com --use-default-profile true
6
+ * node navigate.js --url https://example.com --profile "/path/to/chrome/profile"
7
+ * node navigate.js --url https://example.com/login --wait-for-login "/dashboard"
5
8
  *
6
9
  * Session behavior:
7
10
  * --close false : Keep browser running, disconnect from it (default for chaining)
8
11
  * --close true : Close browser completely and clear session
12
+ *
13
+ * Profile options (Chrome must be closed first):
14
+ * --use-default-profile true : Use Chrome's default profile with all cookies
15
+ * --profile <path> : Use specific Chrome profile directory
16
+ * --browser-url <url> : Connect to Chrome with remote debugging
17
+ *
18
+ * Interactive login (OAuth/SSO):
19
+ * --wait-for-login <pattern> : Open headed browser, wait for URL to match regex pattern
20
+ * --login-timeout <ms> : Max wait time for login (default: 300000 = 5 min)
9
21
  */
10
- import { getBrowser, getPage, closeBrowser, disconnectBrowser, parseArgs, outputJSON, outputError } from './lib/browser.js';
22
+ import { getBrowser, getPage, closeBrowser, disconnectBrowser, saveAuthSession, parseArgs, outputJSON, outputError } from './lib/browser.js';
11
23
 
12
24
  async function navigate() {
13
25
  const args = parseArgs(process.argv.slice(2));
@@ -18,8 +30,14 @@ async function navigate() {
18
30
  }
19
31
 
20
32
  try {
33
+ // Force headed mode when waiting for interactive login
34
+ const headless = args['wait-for-login'] ? false : args.headless;
35
+
21
36
  const browser = await getBrowser({
22
- headless: args.headless !== 'false'
37
+ headless,
38
+ useDefaultProfile: args['use-default-profile'] === 'true',
39
+ profile: args.profile,
40
+ browserUrl: args['browser-url']
23
41
  });
24
42
 
25
43
  const page = await getPage(browser);
@@ -37,6 +55,70 @@ async function navigate() {
37
55
  title: await page.title()
38
56
  };
39
57
 
58
+ // Interactive login: wait for user to complete OAuth/SSO flow
59
+ if (args['wait-for-login']) {
60
+ const pattern = args['wait-for-login'];
61
+ const loginTimeout = parseInt(args['login-timeout'] || '300000');
62
+
63
+ // Validate timeout value
64
+ if (!Number.isFinite(loginTimeout) || loginTimeout <= 0) {
65
+ outputError(new Error('--login-timeout must be a positive integer (ms)'));
66
+ return;
67
+ }
68
+
69
+ // Validate regex pattern before use
70
+ let regex;
71
+ try {
72
+ regex = new RegExp(pattern);
73
+ } catch (e) {
74
+ outputError(new Error(`Invalid regex pattern for --wait-for-login: ${e.message}`));
75
+ return;
76
+ }
77
+
78
+ // Log to stderr so JSON output stays clean
79
+ process.stderr.write(`[i] Browser opened for manual login. Complete the login flow.\n`);
80
+ process.stderr.write(`[i] Waiting for URL to match: ${pattern} (timeout: ${loginTimeout / 1000}s)\n`);
81
+
82
+ // Poll URL from Node side — survives page navigations during OAuth redirects
83
+ const deadline = Date.now() + loginTimeout;
84
+ let loginDetected = false;
85
+
86
+ while (Date.now() < deadline) {
87
+ try {
88
+ const currentUrl = page.url();
89
+ if (regex.test(currentUrl)) {
90
+ loginDetected = true;
91
+ break;
92
+ }
93
+ } catch {
94
+ // Page may be mid-navigation, retry
95
+ }
96
+ await new Promise(r => setTimeout(r, 500));
97
+ }
98
+
99
+ if (loginDetected) {
100
+ // Save session cookies after successful login
101
+ const cookies = await page.cookies();
102
+ if (cookies.length > 0) {
103
+ saveAuthSession({ cookies });
104
+ result.cookiesSaved = cookies.length;
105
+ } else {
106
+ process.stderr.write('[!] No cookies captured. Previous session preserved.\n');
107
+ result.cookiesSaved = 0;
108
+ }
109
+
110
+ result.loginCompleted = true;
111
+ result.url = page.url();
112
+ result.title = await page.title();
113
+
114
+ process.stderr.write(`[OK] Login detected. ${result.cookiesSaved} cookies saved for session reuse.\n`);
115
+ } else {
116
+ result.loginCompleted = false;
117
+ result.loginError = `Login timeout after ${loginTimeout / 1000}s. URL did not match: ${pattern}`;
118
+ process.stderr.write(`[X] Login timeout. URL never matched: ${pattern}\n`);
119
+ }
120
+ }
121
+
40
122
  outputJSON(result);
41
123
 
42
124
  // Default: disconnect to keep browser running for session persistence
@@ -46,8 +128,10 @@ async function navigate() {
46
128
  } else {
47
129
  await disconnectBrowser();
48
130
  }
131
+ process.exit(0);
49
132
  } catch (error) {
50
133
  outputError(error);
134
+ process.exit(1);
51
135
  }
52
136
  }
53
137
 
@@ -16,7 +16,7 @@ async function monitorNetwork() {
16
16
 
17
17
  try {
18
18
  const browser = await getBrowser({
19
- headless: args.headless !== 'false'
19
+ headless: args.headless
20
20
  });
21
21
 
22
22
  const page = await getPage(browser);
@@ -98,8 +98,10 @@ async function monitorNetwork() {
98
98
  } else {
99
99
  await disconnectBrowser();
100
100
  }
101
+ process.exit(0);
101
102
  } catch (error) {
102
103
  outputError(error);
104
+ process.exit(1);
103
105
  }
104
106
  }
105
107