@macpaw/cctk 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/License +21 -0
  2. package/README.md +142 -0
  3. package/bin/index.js +5 -0
  4. package/dist/index.js +1 -0
  5. package/package.json +65 -0
  6. package/templates/claude/agents/brainstormer.md +113 -0
  7. package/templates/claude/agents/code-reviewer.md +157 -0
  8. package/templates/claude/agents/copywriter.md +110 -0
  9. package/templates/claude/agents/database-admin.md +92 -0
  10. package/templates/claude/agents/debugger.md +137 -0
  11. package/templates/claude/agents/docs-manager.md +208 -0
  12. package/templates/claude/agents/fullstack-developer.md +95 -0
  13. package/templates/claude/agents/git-manager.md +394 -0
  14. package/templates/claude/agents/journal-writer.md +113 -0
  15. package/templates/claude/agents/mcp-manager.md +89 -0
  16. package/templates/claude/agents/planner.md +108 -0
  17. package/templates/claude/agents/project-manager.md +125 -0
  18. package/templates/claude/agents/registry.json +304 -0
  19. package/templates/claude/agents/researcher.md +37 -0
  20. package/templates/claude/agents/scout-external.md +140 -0
  21. package/templates/claude/agents/scout.md +106 -0
  22. package/templates/claude/agents/tester.md +105 -0
  23. package/templates/claude/agents/ui-ux-designer.md +208 -0
  24. package/templates/claude/commands/ask.md +56 -0
  25. package/templates/claude/commands/bootstrap/auto/fast.md +106 -0
  26. package/templates/claude/commands/bootstrap/auto/parallel.md +64 -0
  27. package/templates/claude/commands/bootstrap/auto.md +110 -0
  28. package/templates/claude/commands/bootstrap.md +130 -0
  29. package/templates/claude/commands/brainstorm.md +75 -0
  30. package/templates/claude/commands/code/auto.md +198 -0
  31. package/templates/claude/commands/code/no-test.md +172 -0
  32. package/templates/claude/commands/code/parallel.md +100 -0
  33. package/templates/claude/commands/code.md +197 -0
  34. package/templates/claude/commands/coding-level.md +37 -0
  35. package/templates/claude/commands/content/cro.md +41 -0
  36. package/templates/claude/commands/content/enhance.md +12 -0
  37. package/templates/claude/commands/content/fast.md +11 -0
  38. package/templates/claude/commands/content/good.md +14 -0
  39. package/templates/claude/commands/cook/auto/fast.md +26 -0
  40. package/templates/claude/commands/cook/auto/parallel.md +49 -0
  41. package/templates/claude/commands/cook/auto.md +15 -0
  42. package/templates/claude/commands/cook.md +101 -0
  43. package/templates/claude/commands/debug.md +13 -0
  44. package/templates/claude/commands/docs/init.md +37 -0
  45. package/templates/claude/commands/docs/summarize.md +22 -0
  46. package/templates/claude/commands/docs/update.md +78 -0
  47. package/templates/claude/commands/fix/ci.md +17 -0
  48. package/templates/claude/commands/fix/fast.md +18 -0
  49. package/templates/claude/commands/fix/hard.md +35 -0
  50. package/templates/claude/commands/fix/logs.md +26 -0
  51. package/templates/claude/commands/fix/parallel.md +54 -0
  52. package/templates/claude/commands/fix/test.md +20 -0
  53. package/templates/claude/commands/fix/types.md +9 -0
  54. package/templates/claude/commands/fix/ui.md +33 -0
  55. package/templates/claude/commands/fix.md +43 -0
  56. package/templates/claude/commands/git/cm.md +5 -0
  57. package/templates/claude/commands/git/cp.md +4 -0
  58. package/templates/claude/commands/git/merge.md +40 -0
  59. package/templates/claude/commands/git/pr.md +50 -0
  60. package/templates/claude/commands/journal.md +7 -0
  61. package/templates/claude/commands/kanban.md +99 -0
  62. package/templates/claude/commands/plan/archive.md +57 -0
  63. package/templates/claude/commands/plan/ci.md +33 -0
  64. package/templates/claude/commands/plan/cro.md +67 -0
  65. package/templates/claude/commands/plan/fast.md +66 -0
  66. package/templates/claude/commands/plan/hard.md +92 -0
  67. package/templates/claude/commands/plan/parallel.md +129 -0
  68. package/templates/claude/commands/plan/two.md +45 -0
  69. package/templates/claude/commands/plan/validate.md +117 -0
  70. package/templates/claude/commands/plan.md +30 -0
  71. package/templates/claude/commands/preview.md +87 -0
  72. package/templates/claude/commands/registry.json +313 -0
  73. package/templates/claude/commands/review/codebase/parallel.md +122 -0
  74. package/templates/claude/commands/review/codebase.md +47 -0
  75. package/templates/claude/commands/scout/ext.md +35 -0
  76. package/templates/claude/commands/scout.md +28 -0
  77. package/templates/claude/commands/skill/add.md +36 -0
  78. package/templates/claude/commands/skill/create.md +29 -0
  79. package/templates/claude/commands/skill/fix-logs.md +22 -0
  80. package/templates/claude/commands/skill/optimize/auto.md +25 -0
  81. package/templates/claude/commands/skill/optimize.md +34 -0
  82. package/templates/claude/commands/skill/plan.md +45 -0
  83. package/templates/claude/commands/test/ui.md +91 -0
  84. package/templates/claude/commands/test.md +8 -0
  85. package/templates/claude/commands/use-mcp.md +34 -0
  86. package/templates/claude/commands/watzup.md +8 -0
  87. package/templates/claude/commands/worktree.md +126 -0
  88. package/templates/claude/hooks/dev-rules-reminder.cjs +258 -0
  89. package/templates/claude/hooks/docs/README.md +42 -0
  90. package/templates/claude/hooks/lib/cctk-config-utils.cjs +751 -0
  91. package/templates/claude/hooks/lib/cctk-paths.cjs +106 -0
  92. package/templates/claude/hooks/lib/context-tracker.cjs +346 -0
  93. package/templates/claude/hooks/privacy-block.cjs +289 -0
  94. package/templates/claude/hooks/registry.json +77 -0
  95. package/templates/claude/hooks/scout-block/broad-pattern-detector.cjs +293 -0
  96. package/templates/claude/hooks/scout-block/error-formatter.cjs +156 -0
  97. package/templates/claude/hooks/scout-block/path-extractor.cjs +359 -0
  98. package/templates/claude/hooks/scout-block/pattern-matcher.cjs +184 -0
  99. package/templates/claude/hooks/scout-block/vendor/ignore.js +626 -0
  100. package/templates/claude/hooks/scout-block.cjs +167 -0
  101. package/templates/claude/hooks/session-end.cjs +35 -0
  102. package/templates/claude/hooks/session-init.cjs +214 -0
  103. package/templates/claude/hooks/subagent-init.cjs +161 -0
  104. package/templates/claude/hooks/write-compact-marker.cjs +153 -0
  105. package/templates/claude/output-styles/coding-level-1.md +148 -0
  106. package/templates/claude/output-styles/coding-level-2.md +159 -0
  107. package/templates/claude/output-styles/coding-level-3.md +91 -0
  108. package/templates/claude/scripts/README.md +33 -0
  109. package/templates/claude/scripts/generate-catalogs.cjs +318 -0
  110. package/templates/claude/scripts/registry.json +48 -0
  111. package/templates/claude/scripts/set-active-plan.cjs +45 -0
  112. package/templates/claude/scripts/validate-docs.cjs +447 -0
  113. package/templates/claude/scripts/worktree.cjs +658 -0
  114. package/templates/claude/skills/README.md +112 -0
  115. package/templates/claude/skills/ai-artist/SKILL.md +75 -0
  116. package/templates/claude/skills/ai-artist/references/advanced-techniques.md +184 -0
  117. package/templates/claude/skills/ai-artist/references/domain-code.md +66 -0
  118. package/templates/claude/skills/ai-artist/references/domain-data.md +72 -0
  119. package/templates/claude/skills/ai-artist/references/domain-marketing.md +66 -0
  120. package/templates/claude/skills/ai-artist/references/domain-patterns.md +33 -0
  121. package/templates/claude/skills/ai-artist/references/domain-writing.md +68 -0
  122. package/templates/claude/skills/ai-artist/references/image-prompting.md +141 -0
  123. package/templates/claude/skills/ai-artist/references/llm-prompting.md +165 -0
  124. package/templates/claude/skills/ai-artist/references/nano-banana.md +59 -0
  125. package/templates/claude/skills/ai-artist/references/reasoning-techniques.md +201 -0
  126. package/templates/claude/skills/backend-development/SKILL.md +95 -0
  127. package/templates/claude/skills/backend-development/references/backend-api-design.md +495 -0
  128. package/templates/claude/skills/backend-development/references/backend-architecture.md +454 -0
  129. package/templates/claude/skills/backend-development/references/backend-authentication.md +338 -0
  130. package/templates/claude/skills/backend-development/references/backend-code-quality.md +659 -0
  131. package/templates/claude/skills/backend-development/references/backend-debugging.md +904 -0
  132. package/templates/claude/skills/backend-development/references/backend-devops.md +494 -0
  133. package/templates/claude/skills/backend-development/references/backend-mindset.md +387 -0
  134. package/templates/claude/skills/backend-development/references/backend-performance.md +397 -0
  135. package/templates/claude/skills/backend-development/references/backend-security.md +290 -0
  136. package/templates/claude/skills/backend-development/references/backend-technologies.md +256 -0
  137. package/templates/claude/skills/backend-development/references/backend-testing.md +429 -0
  138. package/templates/claude/skills/better-auth/SKILL.md +204 -0
  139. package/templates/claude/skills/better-auth/references/advanced-features.md +553 -0
  140. package/templates/claude/skills/better-auth/references/database-integration.md +577 -0
  141. package/templates/claude/skills/better-auth/references/email-password-auth.md +416 -0
  142. package/templates/claude/skills/better-auth/references/oauth-providers.md +430 -0
  143. package/templates/claude/skills/better-auth/scripts/better_auth_init.py +521 -0
  144. package/templates/claude/skills/chrome-devtools/SKILL.md +473 -0
  145. package/templates/claude/skills/chrome-devtools/references/cdp-domains.md +694 -0
  146. package/templates/claude/skills/chrome-devtools/references/performance-guide.md +940 -0
  147. package/templates/claude/skills/chrome-devtools/references/puppeteer-reference.md +953 -0
  148. package/templates/claude/skills/chrome-devtools/scripts/README.md +288 -0
  149. package/templates/claude/skills/chrome-devtools/scripts/aria-snapshot.js +368 -0
  150. package/templates/claude/skills/chrome-devtools/scripts/click.js +92 -0
  151. package/templates/claude/skills/chrome-devtools/scripts/console.js +85 -0
  152. package/templates/claude/skills/chrome-devtools/scripts/evaluate.js +59 -0
  153. package/templates/claude/skills/chrome-devtools/scripts/fill.js +84 -0
  154. package/templates/claude/skills/chrome-devtools/scripts/inject-auth.js +247 -0
  155. package/templates/claude/skills/chrome-devtools/scripts/install-deps.sh +11 -0
  156. package/templates/claude/skills/chrome-devtools/scripts/install.sh +36 -0
  157. package/templates/claude/skills/chrome-devtools/scripts/lib/browser.js +335 -0
  158. package/templates/claude/skills/chrome-devtools/scripts/lib/selector.js +183 -0
  159. package/templates/claude/skills/chrome-devtools/scripts/navigate.js +60 -0
  160. package/templates/claude/skills/chrome-devtools/scripts/network.js +113 -0
  161. package/templates/claude/skills/chrome-devtools/scripts/package.json +16 -0
  162. package/templates/claude/skills/chrome-devtools/scripts/performance.js +159 -0
  163. package/templates/claude/skills/chrome-devtools/scripts/screenshot.js +212 -0
  164. package/templates/claude/skills/chrome-devtools/scripts/select-ref.js +151 -0
  165. package/templates/claude/skills/chrome-devtools/scripts/snapshot.js +143 -0
  166. package/templates/claude/skills/chrome-devtools/scripts/ws-debug.js +47 -0
  167. package/templates/claude/skills/chrome-devtools/scripts/ws-full-debug.js +115 -0
  168. package/templates/claude/skills/claude-code/references/advanced-features.md +399 -0
  169. package/templates/claude/skills/claude-code/references/agent-skills.md +399 -0
  170. package/templates/claude/skills/claude-code/references/api-reference.md +498 -0
  171. package/templates/claude/skills/claude-code/references/best-practices.md +447 -0
  172. package/templates/claude/skills/claude-code/references/cicd-integration.md +428 -0
  173. package/templates/claude/skills/claude-code/references/common-workflows.md +107 -0
  174. package/templates/claude/skills/claude-code/references/configuration.md +480 -0
  175. package/templates/claude/skills/claude-code/references/enterprise-features.md +472 -0
  176. package/templates/claude/skills/claude-code/references/getting-started.md +244 -0
  177. package/templates/claude/skills/claude-code/references/hooks-and-plugins.md +444 -0
  178. package/templates/claude/skills/claude-code/references/hooks-comprehensive.md +622 -0
  179. package/templates/claude/skills/claude-code/references/ide-integration.md +316 -0
  180. package/templates/claude/skills/claude-code/references/mcp-integration.md +386 -0
  181. package/templates/claude/skills/claude-code/references/slash-commands.md +460 -0
  182. package/templates/claude/skills/claude-code/references/troubleshooting.md +455 -0
  183. package/templates/claude/skills/claude-code/skill.md +60 -0
  184. package/templates/claude/skills/code-review/SKILL.md +143 -0
  185. package/templates/claude/skills/code-review/references/code-review-reception.md +209 -0
  186. package/templates/claude/skills/code-review/references/requesting-code-review.md +105 -0
  187. package/templates/claude/skills/code-review/references/verification-before-completion.md +139 -0
  188. package/templates/claude/skills/context-engineering/SKILL.md +86 -0
  189. package/templates/claude/skills/context-engineering/references/context-compression.md +84 -0
  190. package/templates/claude/skills/context-engineering/references/context-degradation.md +93 -0
  191. package/templates/claude/skills/context-engineering/references/context-fundamentals.md +75 -0
  192. package/templates/claude/skills/context-engineering/references/context-optimization.md +82 -0
  193. package/templates/claude/skills/context-engineering/references/evaluation.md +89 -0
  194. package/templates/claude/skills/context-engineering/references/memory-systems.md +88 -0
  195. package/templates/claude/skills/context-engineering/references/multi-agent-patterns.md +90 -0
  196. package/templates/claude/skills/context-engineering/references/project-development.md +97 -0
  197. package/templates/claude/skills/context-engineering/references/tool-design.md +86 -0
  198. package/templates/claude/skills/context-engineering/scripts/compression_evaluator.py +329 -0
  199. package/templates/claude/skills/context-engineering/scripts/context_analyzer.py +294 -0
  200. package/templates/claude/skills/databases/SKILL.md +232 -0
  201. package/templates/claude/skills/databases/references/mongodb-aggregation.md +447 -0
  202. package/templates/claude/skills/databases/references/mongodb-atlas.md +465 -0
  203. package/templates/claude/skills/databases/references/mongodb-crud.md +408 -0
  204. package/templates/claude/skills/databases/references/mongodb-indexing.md +442 -0
  205. package/templates/claude/skills/databases/references/postgresql-administration.md +594 -0
  206. package/templates/claude/skills/databases/references/postgresql-performance.md +527 -0
  207. package/templates/claude/skills/databases/references/postgresql-psql-cli.md +467 -0
  208. package/templates/claude/skills/databases/references/postgresql-queries.md +475 -0
  209. package/templates/claude/skills/databases/scripts/db_backup.py +502 -0
  210. package/templates/claude/skills/databases/scripts/db_migrate.py +414 -0
  211. package/templates/claude/skills/databases/scripts/db_performance_check.py +445 -0
  212. package/templates/claude/skills/debugging/SKILL.md +84 -0
  213. package/templates/claude/skills/debugging/references/defense-in-depth.md +124 -0
  214. package/templates/claude/skills/debugging/references/root-cause-tracing.md +122 -0
  215. package/templates/claude/skills/debugging/references/systematic-debugging.md +102 -0
  216. package/templates/claude/skills/debugging/references/verification.md +123 -0
  217. package/templates/claude/skills/debugging/scripts/find-polluter.sh +63 -0
  218. package/templates/claude/skills/debugging/scripts/find-polluter.test.md +102 -0
  219. package/templates/claude/skills/devops/SKILL.md +293 -0
  220. package/templates/claude/skills/devops/references/browser-rendering.md +305 -0
  221. package/templates/claude/skills/devops/references/cloudflare-d1-kv.md +123 -0
  222. package/templates/claude/skills/devops/references/cloudflare-platform.md +271 -0
  223. package/templates/claude/skills/devops/references/cloudflare-r2-storage.md +280 -0
  224. package/templates/claude/skills/devops/references/cloudflare-workers-advanced.md +312 -0
  225. package/templates/claude/skills/devops/references/cloudflare-workers-apis.md +309 -0
  226. package/templates/claude/skills/devops/references/cloudflare-workers-basics.md +418 -0
  227. package/templates/claude/skills/devops/references/docker-basics.md +297 -0
  228. package/templates/claude/skills/devops/references/docker-compose.md +292 -0
  229. package/templates/claude/skills/devops/references/gcloud-platform.md +307 -0
  230. package/templates/claude/skills/devops/references/gcloud-services.md +304 -0
  231. package/templates/claude/skills/devops/scripts/cloudflare_deploy.py +269 -0
  232. package/templates/claude/skills/devops/scripts/docker_optimize.py +320 -0
  233. package/templates/claude/skills/docs-seeker/SKILL.md +95 -0
  234. package/templates/claude/skills/docs-seeker/package.json +24 -0
  235. package/templates/claude/skills/docs-seeker/references/advanced.md +78 -0
  236. package/templates/claude/skills/docs-seeker/references/context7-patterns.md +68 -0
  237. package/templates/claude/skills/docs-seeker/references/errors.md +68 -0
  238. package/templates/claude/skills/docs-seeker/scripts/analyze-llms-txt.js +245 -0
  239. package/templates/claude/skills/docs-seeker/scripts/detect-topic.js +172 -0
  240. package/templates/claude/skills/docs-seeker/scripts/fetch-docs.js +212 -0
  241. package/templates/claude/skills/docs-seeker/workflows/library-search.md +87 -0
  242. package/templates/claude/skills/docs-seeker/workflows/repo-analysis.md +91 -0
  243. package/templates/claude/skills/docs-seeker/workflows/topic-search.md +77 -0
  244. package/templates/claude/skills/frontend-design/SKILL.md +85 -0
  245. package/templates/claude/skills/frontend-design/references/analysis-best-practices.md +80 -0
  246. package/templates/claude/skills/frontend-design/references/analysis-prompts.md +141 -0
  247. package/templates/claude/skills/frontend-design/references/analysis-techniques.md +118 -0
  248. package/templates/claude/skills/frontend-design/references/animejs.md +396 -0
  249. package/templates/claude/skills/frontend-design/references/design-extraction-overview.md +71 -0
  250. package/templates/claude/skills/frontend-design/references/extraction-best-practices.md +141 -0
  251. package/templates/claude/skills/frontend-design/references/extraction-output-templates.md +162 -0
  252. package/templates/claude/skills/frontend-design/references/extraction-prompts.md +127 -0
  253. package/templates/claude/skills/frontend-design/references/technical-accessibility.md +119 -0
  254. package/templates/claude/skills/frontend-design/references/technical-best-practices.md +97 -0
  255. package/templates/claude/skills/frontend-design/references/technical-optimization.md +44 -0
  256. package/templates/claude/skills/frontend-design/references/technical-overview.md +90 -0
  257. package/templates/claude/skills/frontend-design/references/technical-workflows.md +150 -0
  258. package/templates/claude/skills/frontend-design/references/visual-analysis-overview.md +95 -0
  259. package/templates/claude/skills/frontend-development/SKILL.md +399 -0
  260. package/templates/claude/skills/frontend-development/resources/common-patterns.md +331 -0
  261. package/templates/claude/skills/frontend-development/resources/complete-examples.md +872 -0
  262. package/templates/claude/skills/frontend-development/resources/component-patterns.md +502 -0
  263. package/templates/claude/skills/frontend-development/resources/data-fetching.md +767 -0
  264. package/templates/claude/skills/frontend-development/resources/file-organization.md +502 -0
  265. package/templates/claude/skills/frontend-development/resources/loading-and-error-states.md +501 -0
  266. package/templates/claude/skills/frontend-development/resources/performance.md +406 -0
  267. package/templates/claude/skills/frontend-development/resources/routing-guide.md +364 -0
  268. package/templates/claude/skills/frontend-development/resources/styling-guide.md +428 -0
  269. package/templates/claude/skills/frontend-development/resources/typescript-standards.md +418 -0
  270. package/templates/claude/skills/markdown-novel-viewer/SKILL.md +272 -0
  271. package/templates/claude/skills/markdown-novel-viewer/assets/directory-browser.css +215 -0
  272. package/templates/claude/skills/markdown-novel-viewer/assets/favicon.png +0 -0
  273. package/templates/claude/skills/markdown-novel-viewer/assets/novel-theme.css +872 -0
  274. package/templates/claude/skills/markdown-novel-viewer/assets/reader.js +378 -0
  275. package/templates/claude/skills/markdown-novel-viewer/assets/template.html +85 -0
  276. package/templates/claude/skills/markdown-novel-viewer/package.json +15 -0
  277. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
  278. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +335 -0
  279. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
  280. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/port-finder.cjs +49 -0
  281. package/templates/claude/skills/markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
  282. package/templates/claude/skills/markdown-novel-viewer/scripts/server.cjs +398 -0
  283. package/templates/claude/skills/mcp-builder/SKILL.md +328 -0
  284. package/templates/claude/skills/mcp-builder/reference/evaluation.md +602 -0
  285. package/templates/claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  286. package/templates/claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  287. package/templates/claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  288. package/templates/claude/skills/mcp-builder/scripts/connections.py +151 -0
  289. package/templates/claude/skills/mcp-builder/scripts/evaluation.py +381 -0
  290. package/templates/claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  291. package/templates/claude/skills/mcp-builder/scripts/requirements.txt +2 -0
  292. package/templates/claude/skills/mcp-management/README.md +219 -0
  293. package/templates/claude/skills/mcp-management/SKILL.md +209 -0
  294. package/templates/claude/skills/mcp-management/assets/tools.json +3146 -0
  295. package/templates/claude/skills/mcp-management/references/configuration.md +114 -0
  296. package/templates/claude/skills/mcp-management/references/gemini-cli-integration.md +209 -0
  297. package/templates/claude/skills/mcp-management/references/mcp-protocol.md +116 -0
  298. package/templates/claude/skills/mcp-management/scripts/.env.example +10 -0
  299. package/templates/claude/skills/mcp-management/scripts/cli.ts +202 -0
  300. package/templates/claude/skills/mcp-management/scripts/mcp-client.ts +247 -0
  301. package/templates/claude/skills/mcp-management/scripts/package.json +20 -0
  302. package/templates/claude/skills/mcp-management/scripts/tsconfig.json +15 -0
  303. package/templates/claude/skills/media-processing/SKILL.md +91 -0
  304. package/templates/claude/skills/media-processing/references/common-workflows.md +132 -0
  305. package/templates/claude/skills/media-processing/references/ffmpeg-encoding.md +358 -0
  306. package/templates/claude/skills/media-processing/references/ffmpeg-filters.md +503 -0
  307. package/templates/claude/skills/media-processing/references/ffmpeg-streaming.md +395 -0
  308. package/templates/claude/skills/media-processing/references/format-compatibility.md +375 -0
  309. package/templates/claude/skills/media-processing/references/imagemagick-batch.md +612 -0
  310. package/templates/claude/skills/media-processing/references/imagemagick-editing.md +623 -0
  311. package/templates/claude/skills/media-processing/references/rmbg-background-removal.md +66 -0
  312. package/templates/claude/skills/media-processing/references/troubleshooting.md +109 -0
  313. package/templates/claude/skills/media-processing/scripts/README.md +102 -0
  314. package/templates/claude/skills/media-processing/scripts/batch-remove-background.sh +124 -0
  315. package/templates/claude/skills/media-processing/scripts/batch_resize.py +342 -0
  316. package/templates/claude/skills/media-processing/scripts/media_convert.py +311 -0
  317. package/templates/claude/skills/media-processing/scripts/remove-background.sh +96 -0
  318. package/templates/claude/skills/media-processing/scripts/remove-bg-node.js +181 -0
  319. package/templates/claude/skills/mermaidjs-v11/SKILL.md +115 -0
  320. package/templates/claude/skills/mermaidjs-v11/references/cli-usage.md +228 -0
  321. package/templates/claude/skills/mermaidjs-v11/references/configuration.md +232 -0
  322. package/templates/claude/skills/mermaidjs-v11/references/diagram-types.md +315 -0
  323. package/templates/claude/skills/mermaidjs-v11/references/examples.md +344 -0
  324. package/templates/claude/skills/mermaidjs-v11/references/integration.md +310 -0
  325. package/templates/claude/skills/planning/SKILL.md +115 -0
  326. package/templates/claude/skills/planning/references/codebase-understanding.md +62 -0
  327. package/templates/claude/skills/planning/references/output-standards.md +127 -0
  328. package/templates/claude/skills/planning/references/plan-organization.md +150 -0
  329. package/templates/claude/skills/planning/references/research-phase.md +49 -0
  330. package/templates/claude/skills/planning/references/solution-design.md +63 -0
  331. package/templates/claude/skills/plans-kanban/SKILL.md +157 -0
  332. package/templates/claude/skills/plans-kanban/assets/dashboard-template.html +119 -0
  333. package/templates/claude/skills/plans-kanban/assets/dashboard.css +1594 -0
  334. package/templates/claude/skills/plans-kanban/assets/dashboard.js +659 -0
  335. package/templates/claude/skills/plans-kanban/assets/favicon.png +0 -0
  336. package/templates/claude/skills/plans-kanban/package.json +13 -0
  337. package/templates/claude/skills/plans-kanban/scripts/lib/dashboard-renderer.cjs +941 -0
  338. package/templates/claude/skills/plans-kanban/scripts/lib/http-server.cjs +310 -0
  339. package/templates/claude/skills/plans-kanban/scripts/lib/plan-metadata-extractor.cjs +489 -0
  340. package/templates/claude/skills/plans-kanban/scripts/lib/plan-parser.cjs +194 -0
  341. package/templates/claude/skills/plans-kanban/scripts/lib/plan-scanner.cjs +277 -0
  342. package/templates/claude/skills/plans-kanban/scripts/lib/port-finder.cjs +49 -0
  343. package/templates/claude/skills/plans-kanban/scripts/lib/process-mgr.cjs +128 -0
  344. package/templates/claude/skills/plans-kanban/scripts/server.cjs +249 -0
  345. package/templates/claude/skills/problem-solving/SKILL.md +96 -0
  346. package/templates/claude/skills/problem-solving/references/attribution.md +69 -0
  347. package/templates/claude/skills/problem-solving/references/collision-zone-thinking.md +79 -0
  348. package/templates/claude/skills/problem-solving/references/inversion-exercise.md +91 -0
  349. package/templates/claude/skills/problem-solving/references/meta-pattern-recognition.md +87 -0
  350. package/templates/claude/skills/problem-solving/references/scale-game.md +95 -0
  351. package/templates/claude/skills/problem-solving/references/simplification-cascades.md +80 -0
  352. package/templates/claude/skills/problem-solving/references/when-stuck.md +72 -0
  353. package/templates/claude/skills/registry.json +258 -0
  354. package/templates/claude/skills/repomix/SKILL.md +247 -0
  355. package/templates/claude/skills/repomix/references/configuration.md +211 -0
  356. package/templates/claude/skills/repomix/references/usage-patterns.md +232 -0
  357. package/templates/claude/skills/repomix/scripts/README.md +179 -0
  358. package/templates/claude/skills/repomix/scripts/repomix_batch.py +455 -0
  359. package/templates/claude/skills/repomix/scripts/repos.example.json +15 -0
  360. package/templates/claude/skills/research/SKILL.md +168 -0
  361. package/templates/claude/skills/sequential-thinking/.env.example +8 -0
  362. package/templates/claude/skills/sequential-thinking/README.md +183 -0
  363. package/templates/claude/skills/sequential-thinking/SKILL.md +94 -0
  364. package/templates/claude/skills/sequential-thinking/package.json +31 -0
  365. package/templates/claude/skills/sequential-thinking/references/advanced-strategies.md +79 -0
  366. package/templates/claude/skills/sequential-thinking/references/advanced-techniques.md +76 -0
  367. package/templates/claude/skills/sequential-thinking/references/core-patterns.md +95 -0
  368. package/templates/claude/skills/sequential-thinking/references/examples-api.md +88 -0
  369. package/templates/claude/skills/sequential-thinking/references/examples-architecture.md +94 -0
  370. package/templates/claude/skills/sequential-thinking/references/examples-debug.md +90 -0
  371. package/templates/claude/skills/sequential-thinking/scripts/format-thought.js +182 -0
  372. package/templates/claude/skills/sequential-thinking/scripts/process-thought.js +252 -0
  373. package/templates/claude/skills/skill-creator/LICENSE.txt +202 -0
  374. package/templates/claude/skills/skill-creator/SKILL.md +266 -0
  375. package/templates/claude/skills/skill-creator/references/agent-skills-spec.md +51 -0
  376. package/templates/claude/skills/skill-creator/scripts/encoding_utils.py +21 -0
  377. package/templates/claude/skills/skill-creator/scripts/init_skill.py +304 -0
  378. package/templates/claude/skills/skill-creator/scripts/package_skill.py +110 -0
  379. package/templates/claude/skills/skill-creator/scripts/quick_validate.py +66 -0
  380. package/templates/claude/skills/template-skill/SKILL.md +6 -0
  381. package/templates/claude/skills/vitest/SKILL.md +595 -0
  382. package/templates/claude/skills/vitest/references/async-patterns.md +82 -0
  383. package/templates/claude/skills/vitest/references/mock-patterns.md +78 -0
  384. package/templates/claude/skills/vitest/references/monorepo-setup.md +185 -0
  385. package/templates/claude/skills/vitest/references/turborepo-setup.md +332 -0
  386. package/templates/claude/skills/web-frameworks/SKILL.md +324 -0
  387. package/templates/claude/skills/web-frameworks/references/nextjs-app-router.md +465 -0
  388. package/templates/claude/skills/web-frameworks/references/nextjs-data-fetching.md +459 -0
  389. package/templates/claude/skills/web-frameworks/references/nextjs-optimization.md +511 -0
  390. package/templates/claude/skills/web-frameworks/references/nextjs-server-components.md +495 -0
  391. package/templates/claude/skills/web-frameworks/references/remix-icon-integration.md +603 -0
  392. package/templates/claude/skills/web-frameworks/references/turborepo-caching.md +551 -0
  393. package/templates/claude/skills/web-frameworks/references/turborepo-pipelines.md +517 -0
  394. package/templates/claude/skills/web-frameworks/references/turborepo-setup.md +542 -0
  395. package/templates/claude/skills/web-frameworks/scripts/nextjs_init.py +547 -0
  396. package/templates/claude/skills/web-frameworks/scripts/turborepo_migrate.py +394 -0
  397. package/templates/claude/workflows/development-rules.md +40 -0
  398. package/templates/claude/workflows/documentation-management.md +121 -0
  399. package/templates/claude/workflows/orchestration-protocol.md +16 -0
  400. package/templates/claude/workflows/primary-workflow.md +45 -0
  401. package/templates/claude/workflows/registry.json +37 -0
  402. package/templates/common/.cct.json +41 -0
  403. package/templates/common/.cctkignore +22 -0
  404. package/templates/common/.env.example +39 -0
  405. package/templates/common/.mcp.json.example +16 -0
  406. package/templates/common/metadata.json +15 -0
  407. package/templates/common/settings.json +79 -0
  408. package/templates/common/statusline.cjs +271 -0
  409. package/templates/config/.repomixignore +22 -0
  410. package/templates/config/AGENTS.md +55 -0
  411. package/templates/config/CLAUDE.md +87 -0
  412. package/templates/plans/bug-fix-template.md +69 -0
  413. package/templates/plans/feature-implementation-template.md +84 -0
  414. package/templates/plans/refactor-template.md +82 -0
  415. package/templates/plans/template-usage-guide.md +58 -0
@@ -0,0 +1,288 @@
1
+ # Chrome DevTools Scripts
2
+
3
+ CLI scripts for browser automation using Puppeteer.
4
+
5
+ **CRITICAL**: Always check `pwd` before running scripts.
6
+
7
+ ## Installation
8
+
9
+ ## Skill Location
10
+
11
+ Skills can exist in **project-scope** or **user-scope**. Priority: project-scope > user-scope.
12
+
13
+ ```bash
14
+ # Detect skill location
15
+ SKILL_DIR=""
16
+ if [ -d ".claude/skills/chrome-devtools/scripts" ]; then
17
+ SKILL_DIR=".claude/skills/chrome-devtools/scripts"
18
+ elif [ -d "$HOME/.claude/skills/chrome-devtools/scripts" ]; then
19
+ SKILL_DIR="$HOME/.claude/skills/chrome-devtools/scripts"
20
+ fi
21
+ cd "$SKILL_DIR"
22
+ ```
23
+
24
+ ### Quick Install
25
+
26
+ ```bash
27
+ cd .claude/skills/chrome-devtools/scripts && npm install
28
+ ```
29
+
30
+ ### Manual Installation
31
+
32
+ **Linux/WSL** - Install system dependencies first:
33
+ ```bash
34
+ ./install-deps.sh # Auto-detects OS (Ubuntu, Debian, Fedora, etc.)
35
+ ```
36
+
37
+ Or manually:
38
+ ```bash
39
+ sudo apt-get install -y libnss3 libnspr4 libasound2t64 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1
40
+ ```
41
+
42
+ **All platforms** - Install Node dependencies:
43
+ ```bash
44
+ npm install
45
+ ```
46
+
47
+ ## Scripts
48
+
49
+ **CRITICAL**: Always check `pwd` before running scripts.
50
+
51
+ ### inject-auth.js
52
+ Inject authentication (cookies, tokens, storage) for testing protected routes.
53
+
54
+ **Workflow for testing protected routes:**
55
+ 1. User manually logs into the site in their browser
56
+ 2. User extracts cookies/tokens from browser DevTools (Application tab)
57
+ 3. Run inject-auth.js to inject auth into puppeteer session
58
+ 4. Run other scripts which will use the authenticated session
59
+
60
+ ```bash
61
+ # Inject cookies
62
+ node inject-auth.js --url https://example.com --cookies '[{"name":"session","value":"abc123","domain":".example.com"}]'
63
+
64
+ # Inject Bearer token (stores in localStorage + sets HTTP header)
65
+ node inject-auth.js --url https://example.com --token "Bearer eyJhbGciOi..." --header Authorization
66
+
67
+ # Inject localStorage items
68
+ node inject-auth.js --url https://example.com --local-storage '{"auth_token":"xyz","user_id":"123"}'
69
+
70
+ # Inject sessionStorage items
71
+ node inject-auth.js --url https://example.com --session-storage '{"temp_key":"value"}'
72
+
73
+ # Combined injection
74
+ node inject-auth.js --url https://example.com \
75
+ --cookies '[{"name":"session","value":"abc"}]' \
76
+ --local-storage '{"user":"data"}' \
77
+ --reload true
78
+
79
+ # Clear saved auth session
80
+ node inject-auth.js --url https://example.com --cookies '[]' --clear true
81
+ ```
82
+
83
+ Options:
84
+ - `--cookies '<json>'` - JSON array of cookie objects (name, value, domain required)
85
+ - `--token '<token>'` - Bearer token to inject
86
+ - `--token-key '<key>'` - localStorage key for token (default: access_token)
87
+ - `--header '<name>'` - HTTP header name for token (e.g., Authorization)
88
+ - `--local-storage '<json>'` - JSON object of localStorage key-value pairs
89
+ - `--session-storage '<json>'` - JSON object of sessionStorage key-value pairs
90
+ - `--reload true` - Reload page after injection to apply auth
91
+ - `--clear true` - Clear the saved auth session file
92
+
93
+ **Session persistence:** Auth is saved to `.auth-session.json` (valid 24h) and automatically applied by subsequent script runs until `--clear true` is used or browser closes.
94
+
95
+ ### navigate.js
96
+ Navigate to a URL.
97
+
98
+ ```bash
99
+ node navigate.js --url https://example.com [--wait-until networkidle2] [--timeout 30000]
100
+ ```
101
+
102
+ ### screenshot.js
103
+ Take a screenshot with automatic compression.
104
+
105
+ **Important**: Always save screenshots to `./docs/screenshots` directory.
106
+
107
+ ```bash
108
+ node screenshot.js --output screenshot.png [--url https://example.com] [--full-page true] [--selector .element] [--max-size 5] [--no-compress]
109
+ ```
110
+
111
+ **Automatic Compression**: Screenshots >5MB are automatically compressed using ImageMagick to ensure compatibility with Gemini API and Claude Code. Install ImageMagick for this feature:
112
+ - macOS: `brew install imagemagick`
113
+ - Linux: `sudo apt-get install imagemagick`
114
+
115
+ Options:
116
+ - `--max-size N` - Custom size threshold in MB (default: 5)
117
+ - `--no-compress` - Disable automatic compression
118
+ - `--format png|jpeg` - Output format (default: png)
119
+ - `--quality N` - JPEG quality 0-100 (default: auto)
120
+
121
+ ### click.js
122
+ Click an element.
123
+
124
+ ```bash
125
+ node click.js --selector ".button" [--url https://example.com] [--wait-for ".result"]
126
+ ```
127
+
128
+ ### fill.js
129
+ Fill form fields.
130
+
131
+ ```bash
132
+ node fill.js --selector "#input" --value "text" [--url https://example.com] [--clear true]
133
+ ```
134
+
135
+ ### evaluate.js
136
+ Execute JavaScript in page context.
137
+
138
+ ```bash
139
+ node evaluate.js --script "document.title" [--url https://example.com]
140
+ ```
141
+
142
+ ### snapshot.js
143
+ Get DOM snapshot with interactive elements.
144
+
145
+ ```bash
146
+ node snapshot.js [--url https://example.com] [--output snapshot.json]
147
+ ```
148
+
149
+ ### console.js
150
+ Monitor console messages.
151
+
152
+ ```bash
153
+ node console.js --url https://example.com [--types error,warn] [--duration 5000]
154
+ ```
155
+
156
+ ### network.js
157
+ Monitor network requests.
158
+
159
+ ```bash
160
+ node network.js --url https://example.com [--types xhr,fetch] [--output requests.json]
161
+ ```
162
+
163
+ ### performance.js
164
+ Measure performance metrics and record trace.
165
+
166
+ ```bash
167
+ node performance.js --url https://example.com [--trace trace.json] [--metrics] [--resources true]
168
+ ```
169
+
170
+ ### ws-debug.js
171
+ Debug WebSocket connections (basic mode).
172
+
173
+ ```bash
174
+ node ws-debug.js
175
+ ```
176
+
177
+ Monitors WebSocket events via CDP: created, handshake, response, closed, error.
178
+
179
+ ### ws-full-debug.js
180
+ Debug WebSocket connections with full event tracking.
181
+
182
+ ```bash
183
+ node ws-full-debug.js
184
+ ```
185
+
186
+ Monitors all WebSocket events including frame sent/received, with detailed logging.
187
+
188
+ ## Common Options
189
+
190
+ - `--headless false` - Show browser window
191
+ - `--close false` - Keep browser open
192
+ - `--timeout 30000` - Set timeout in milliseconds
193
+ - `--wait-until networkidle2` - Wait strategy (load, domcontentloaded, networkidle0, networkidle2)
194
+
195
+ ## Selector Support
196
+
197
+ Scripts that accept `--selector` (click.js, fill.js, screenshot.js) support both **CSS** and **XPath** selectors.
198
+
199
+ ### CSS Selectors (Default)
200
+
201
+ ```bash
202
+ # Element tag
203
+ node click.js --selector "button" --url https://example.com
204
+
205
+ # Class selector
206
+ node click.js --selector ".btn-submit" --url https://example.com
207
+
208
+ # ID selector
209
+ node fill.js --selector "#email" --value "user@example.com" --url https://example.com
210
+
211
+ # Attribute selector
212
+ node click.js --selector 'button[type="submit"]' --url https://example.com
213
+
214
+ # Complex selector
215
+ node screenshot.js --selector "div.container > button.btn-primary" --output btn.png
216
+ ```
217
+
218
+ ### XPath Selectors
219
+
220
+ XPath selectors start with `/` or `(//` and are automatically detected:
221
+
222
+ ```bash
223
+ # Text matching - exact
224
+ node click.js --selector '//button[text()="Submit"]' --url https://example.com
225
+
226
+ # Text matching - contains
227
+ node click.js --selector '//button[contains(text(),"Submit")]' --url https://example.com
228
+
229
+ # Attribute matching
230
+ node fill.js --selector '//input[@type="email"]' --value "user@example.com"
231
+
232
+ # Multiple conditions
233
+ node click.js --selector '//button[@type="submit" and contains(text(),"Save")]'
234
+
235
+ # Descendant selection
236
+ node screenshot.js --selector '//div[@class="modal"]//button[@class="close"]' --output modal.png
237
+
238
+ # Nth element
239
+ node click.js --selector '(//button)[2]' # Second button on page
240
+ ```
241
+
242
+ ### Discovering Selectors
243
+
244
+ Use `snapshot.js` to discover correct selectors:
245
+
246
+ ```bash
247
+ # Get all interactive elements
248
+ node snapshot.js --url https://example.com | jq '.elements[]'
249
+
250
+ # Find buttons
251
+ node snapshot.js --url https://example.com | jq '.elements[] | select(.tagName=="BUTTON")'
252
+
253
+ # Find inputs
254
+ node snapshot.js --url https://example.com | jq '.elements[] | select(.tagName=="INPUT")'
255
+ ```
256
+
257
+ ### Security
258
+
259
+ XPath selectors are validated to prevent injection attacks. The following patterns are blocked:
260
+ - `javascript:`
261
+ - `<script`
262
+ - `onerror=`, `onload=`, `onclick=`
263
+ - `eval(`, `Function(`, `constructor(`
264
+
265
+ Selectors exceeding 1000 characters are rejected (DoS prevention).
266
+
267
+ ## Output Format
268
+
269
+ All scripts output JSON to stdout:
270
+
271
+ ```json
272
+ {
273
+ "success": true,
274
+ "url": "https://example.com",
275
+ "title": "Example Domain",
276
+ ...
277
+ }
278
+ ```
279
+
280
+ Errors are output to stderr:
281
+
282
+ ```json
283
+ {
284
+ "success": false,
285
+ "error": "Error message",
286
+ "stack": "..."
287
+ }
288
+ ```
@@ -0,0 +1,368 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Get ARIA-based accessibility snapshot with stable element refs
4
+ * Usage: node aria-snapshot.js [--url https://example.com] [--output snapshot.yaml]
5
+ *
6
+ * Returns YAML-formatted accessibility tree with:
7
+ * - Semantic roles (button, link, textbox, heading, etc.)
8
+ * - Accessible names (what screen readers announce)
9
+ * - Element states (checked, disabled, expanded)
10
+ * - Stable refs [ref=eN] that persist for interaction
11
+ *
12
+ * Session behavior:
13
+ * By default, browser stays running for session persistence
14
+ * Use --close true to fully close browser
15
+ */
16
+ import fs from 'node:fs/promises';
17
+ import path from 'node:path';
18
+ import { fileURLToPath } from 'node:url';
19
+ import {
20
+ getBrowser,
21
+ getPage,
22
+ closeBrowser,
23
+ disconnectBrowser,
24
+ parseArgs,
25
+ outputJSON,
26
+ outputError,
27
+ } from './lib/browser.js';
28
+
29
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
30
+
31
+ /**
32
+ * Get ARIA snapshot script to inject into page
33
+ * Builds YAML-formatted accessibility tree with element references
34
+ */
35
+ function getAriaSnapshotScript() {
36
+ return `
37
+ (function() {
38
+ // Store refs on window for later retrieval via selectRef
39
+ window.__chromeDevToolsRefs = window.__chromeDevToolsRefs || new Map();
40
+ let refCounter = window.__chromeDevToolsRefCounter || 1;
41
+
42
+ // ARIA roles we care about for interaction
43
+ const INTERACTIVE_ROLES = new Set([
44
+ 'button', 'link', 'textbox', 'checkbox', 'radio', 'combobox',
45
+ 'listbox', 'option', 'menuitem', 'menuitemcheckbox', 'menuitemradio',
46
+ 'tab', 'switch', 'slider', 'spinbutton', 'searchbox', 'tree', 'treeitem',
47
+ 'grid', 'gridcell', 'row', 'rowheader', 'columnheader'
48
+ ]);
49
+
50
+ // Landmark roles for structure
51
+ const LANDMARK_ROLES = new Set([
52
+ 'banner', 'navigation', 'main', 'complementary', 'contentinfo',
53
+ 'search', 'form', 'region', 'article', 'dialog', 'alertdialog'
54
+ ]);
55
+
56
+ // Implicit ARIA roles from HTML elements
57
+ const IMPLICIT_ROLES = {
58
+ 'A': (el) => el.href ? 'link' : null,
59
+ 'BUTTON': () => 'button',
60
+ 'INPUT': (el) => {
61
+ const type = el.type?.toLowerCase();
62
+ if (type === 'checkbox') return 'checkbox';
63
+ if (type === 'radio') return 'radio';
64
+ if (type === 'submit' || type === 'button' || type === 'reset') return 'button';
65
+ if (type === 'search') return 'searchbox';
66
+ if (type === 'range') return 'slider';
67
+ if (type === 'number') return 'spinbutton';
68
+ return 'textbox';
69
+ },
70
+ 'TEXTAREA': () => 'textbox',
71
+ 'SELECT': () => 'combobox',
72
+ 'OPTION': () => 'option',
73
+ 'IMG': () => 'img',
74
+ 'NAV': () => 'navigation',
75
+ 'MAIN': () => 'main',
76
+ 'HEADER': () => 'banner',
77
+ 'FOOTER': () => 'contentinfo',
78
+ 'ASIDE': () => 'complementary',
79
+ 'ARTICLE': () => 'article',
80
+ 'SECTION': (el) => el.getAttribute('aria-label') || el.getAttribute('aria-labelledby') ? 'region' : null,
81
+ 'FORM': () => 'form',
82
+ 'UL': () => 'list',
83
+ 'OL': () => 'list',
84
+ 'LI': () => 'listitem',
85
+ 'H1': () => 'heading',
86
+ 'H2': () => 'heading',
87
+ 'H3': () => 'heading',
88
+ 'H4': () => 'heading',
89
+ 'H5': () => 'heading',
90
+ 'H6': () => 'heading',
91
+ 'TABLE': () => 'table',
92
+ 'TR': () => 'row',
93
+ 'TH': () => 'columnheader',
94
+ 'TD': () => 'cell',
95
+ 'DIALOG': () => 'dialog'
96
+ };
97
+
98
+ function getRole(el) {
99
+ // Explicit role takes precedence
100
+ const explicitRole = el.getAttribute('role');
101
+ if (explicitRole) return explicitRole;
102
+
103
+ // Check implicit role
104
+ const implicitFn = IMPLICIT_ROLES[el.tagName];
105
+ if (implicitFn) return implicitFn(el);
106
+
107
+ return null;
108
+ }
109
+
110
+ function getAccessibleName(el) {
111
+ // aria-label takes precedence
112
+ const ariaLabel = el.getAttribute('aria-label');
113
+ if (ariaLabel) return ariaLabel.trim();
114
+
115
+ // aria-labelledby
116
+ const labelledBy = el.getAttribute('aria-labelledby');
117
+ if (labelledBy) {
118
+ const labels = labelledBy.split(' ')
119
+ .map(id => document.getElementById(id)?.textContent?.trim())
120
+ .filter(Boolean)
121
+ .join(' ');
122
+ if (labels) return labels;
123
+ }
124
+
125
+ // Input associated label
126
+ if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.tagName === 'SELECT') {
127
+ if (el.id) {
128
+ const label = document.querySelector('label[for="' + el.id + '"]');
129
+ if (label) return label.textContent?.trim();
130
+ }
131
+ // Check parent label
132
+ const parentLabel = el.closest('label');
133
+ if (parentLabel) {
134
+ const labelText = parentLabel.textContent?.replace(el.value || '', '')?.trim();
135
+ if (labelText) return labelText;
136
+ }
137
+ }
138
+
139
+ // Button/link content
140
+ if (el.tagName === 'BUTTON' || el.tagName === 'A') {
141
+ const text = el.textContent?.trim();
142
+ if (text) return text.substring(0, 100);
143
+ }
144
+
145
+ // Alt text for images
146
+ if (el.tagName === 'IMG') {
147
+ return el.alt || null;
148
+ }
149
+
150
+ // Title attribute fallback
151
+ if (el.title) return el.title.trim();
152
+
153
+ // Placeholder for inputs
154
+ if (el.placeholder) return null; // Return null, will add as /placeholder
155
+
156
+ return null;
157
+ }
158
+
159
+ function getStateFlags(el) {
160
+ const flags = [];
161
+
162
+ // Checked state
163
+ if (el.checked || el.getAttribute('aria-checked') === 'true') {
164
+ flags.push('checked');
165
+ }
166
+
167
+ // Disabled state
168
+ if (el.disabled || el.getAttribute('aria-disabled') === 'true') {
169
+ flags.push('disabled');
170
+ }
171
+
172
+ // Expanded state
173
+ if (el.getAttribute('aria-expanded') === 'true') {
174
+ flags.push('expanded');
175
+ }
176
+
177
+ // Selected state
178
+ if (el.selected || el.getAttribute('aria-selected') === 'true') {
179
+ flags.push('selected');
180
+ }
181
+
182
+ // Pressed state
183
+ if (el.getAttribute('aria-pressed') === 'true') {
184
+ flags.push('pressed');
185
+ }
186
+
187
+ // Required state
188
+ if (el.required || el.getAttribute('aria-required') === 'true') {
189
+ flags.push('required');
190
+ }
191
+
192
+ return flags;
193
+ }
194
+
195
+ function isVisible(el) {
196
+ const style = window.getComputedStyle(el);
197
+ if (style.display === 'none' || style.visibility === 'hidden') return false;
198
+ const rect = el.getBoundingClientRect();
199
+ return rect.width > 0 && rect.height > 0;
200
+ }
201
+
202
+ function isInteractiveOrLandmark(role) {
203
+ return INTERACTIVE_ROLES.has(role) || LANDMARK_ROLES.has(role);
204
+ }
205
+
206
+ function shouldInclude(el) {
207
+ if (!isVisible(el)) return false;
208
+ const role = getRole(el);
209
+ if (!role) return false;
210
+ // Include interactive, landmarks, and structural elements
211
+ return isInteractiveOrLandmark(role) ||
212
+ role === 'heading' ||
213
+ role === 'img' ||
214
+ role === 'list' ||
215
+ role === 'listitem' ||
216
+ role === 'table' ||
217
+ role === 'row' ||
218
+ role === 'cell' ||
219
+ role === 'columnheader';
220
+ }
221
+
222
+ function assignRef(el, role) {
223
+ // Only assign refs to interactive elements
224
+ if (!INTERACTIVE_ROLES.has(role)) return null;
225
+
226
+ const ref = 'e' + refCounter++;
227
+ window.__chromeDevToolsRefs.set(ref, el);
228
+ return ref;
229
+ }
230
+
231
+ function buildYaml(el, indent = 0) {
232
+ const role = getRole(el);
233
+ if (!role) return '';
234
+
235
+ const prefix = ' '.repeat(indent) + '- ';
236
+ const lines = [];
237
+
238
+ // Build the line: role "name" [flags] [ref=eN]
239
+ let line = prefix + role;
240
+
241
+ const name = getAccessibleName(el);
242
+ if (name) {
243
+ line += ' "' + name.replace(/"/g, '\\\\"') + '"';
244
+ }
245
+
246
+ // Add heading level
247
+ if (role === 'heading') {
248
+ const level = el.tagName.match(/H(\\d)/)?.[1] || el.getAttribute('aria-level');
249
+ if (level) line += ' [level=' + level + ']';
250
+ }
251
+
252
+ // Add state flags
253
+ const flags = getStateFlags(el);
254
+ flags.forEach(flag => {
255
+ line += ' [' + flag + ']';
256
+ });
257
+
258
+ // Add ref for interactive elements
259
+ const ref = assignRef(el, role);
260
+ if (ref) {
261
+ line += ' [ref=' + ref + ']';
262
+ }
263
+
264
+ lines.push(line);
265
+
266
+ // Add metadata on subsequent lines
267
+ if (el.tagName === 'A' && el.href) {
268
+ lines.push(' '.repeat(indent + 1) + '/url: ' + el.href);
269
+ }
270
+ if (el.placeholder) {
271
+ lines.push(' '.repeat(indent + 1) + '/placeholder: "' + el.placeholder + '"');
272
+ }
273
+ if (el.tagName === 'INPUT' && el.value && el.type !== 'password') {
274
+ lines.push(' '.repeat(indent + 1) + '/value: "' + el.value.substring(0, 50) + '"');
275
+ }
276
+
277
+ // Process children
278
+ const children = Array.from(el.children);
279
+ children.forEach(child => {
280
+ const childYaml = buildYaml(child, indent + 1);
281
+ if (childYaml) lines.push(childYaml);
282
+ });
283
+
284
+ return lines.join('\\n');
285
+ }
286
+
287
+ function getSnapshot() {
288
+ const lines = [];
289
+
290
+ // Start from body
291
+ const children = Array.from(document.body.children);
292
+ children.forEach(child => {
293
+ const yaml = buildYaml(child, 0);
294
+ if (yaml) lines.push(yaml);
295
+ });
296
+
297
+ // Save ref counter for next snapshot
298
+ window.__chromeDevToolsRefCounter = refCounter;
299
+
300
+ return lines.join('\\n');
301
+ }
302
+
303
+ return getSnapshot();
304
+ })();
305
+ `;
306
+ }
307
+
308
+ async function ariaSnapshot() {
309
+ const args = parseArgs(process.argv.slice(2));
310
+
311
+ try {
312
+ const browser = await getBrowser({
313
+ headless: args.headless !== 'false',
314
+ });
315
+
316
+ const page = await getPage(browser);
317
+
318
+ // Navigate if URL provided
319
+ if (args.url) {
320
+ await page.goto(args.url, {
321
+ waitUntil: args['wait-until'] || 'networkidle2',
322
+ });
323
+ }
324
+
325
+ // Get ARIA snapshot
326
+ const snapshot = await page.evaluate(getAriaSnapshotScript());
327
+
328
+ // Build result
329
+ const result = {
330
+ success: true,
331
+ url: page.url(),
332
+ title: await page.title(),
333
+ format: 'yaml',
334
+ snapshot,
335
+ };
336
+
337
+ // Output to file or stdout
338
+ if (args.output) {
339
+ const outputPath = args.output;
340
+
341
+ // Ensure snapshots directory exists
342
+ const outputDir = path.dirname(outputPath);
343
+
344
+ await fs.mkdir(outputDir, { recursive: true });
345
+
346
+ // Write YAML snapshot
347
+ await fs.writeFile(outputPath, snapshot, 'utf8');
348
+
349
+ outputJSON({
350
+ success: true,
351
+ output: path.resolve(outputPath),
352
+ url: page.url(),
353
+ });
354
+ } else {
355
+ // Output to stdout
356
+ outputJSON(result);
357
+ }
358
+
359
+ // Default: disconnect to keep browser running for session persistence
360
+ // Use --close true to fully close browser
361
+ await (args.close === 'true' ? closeBrowser() : disconnectBrowser());
362
+ process.exit(0);
363
+ } catch (error) {
364
+ outputError(error);
365
+ }
366
+ }
367
+
368
+ ariaSnapshot();