@hasna/skills 0.1.62 → 0.1.63

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 (526) hide show
  1. package/README.md +10 -6
  2. package/bin/index.js +14271 -21602
  3. package/bin/mcp.js +3527 -11449
  4. package/bin/migrate.js +53 -3
  5. package/bin/server.js +5140 -2675
  6. package/bin/worker.js +4542 -2129
  7. package/dist/cli/commands/publish.d.ts +2 -0
  8. package/dist/cli/components/App.d.ts +2 -1
  9. package/dist/cli/components/CategorySelect.d.ts +2 -1
  10. package/dist/cli/components/Header.d.ts +2 -1
  11. package/dist/cli/components/InstallProgress.d.ts +2 -1
  12. package/dist/cli/components/SearchView.d.ts +2 -1
  13. package/dist/cli/components/SkillSelect.d.ts +2 -1
  14. package/dist/index.d.ts +4 -1
  15. package/dist/index.js +5094 -13755
  16. package/dist/lib/agent-sync.d.ts +38 -3
  17. package/dist/lib/home-adoption.d.ts +91 -0
  18. package/dist/lib/home-census.d.ts +22 -0
  19. package/dist/lib/home-migration.d.ts +61 -0
  20. package/dist/lib/portable-skills-files.d.ts +21 -1
  21. package/dist/lib/portable-skills-types.d.ts +46 -0
  22. package/dist/lib/pull.d.ts +66 -0
  23. package/dist/lib/remote-client.d.ts +6 -0
  24. package/dist/lib/run-state.d.ts +5 -0
  25. package/dist/lib/skill-bundles.d.ts +54 -0
  26. package/dist/lib/skill-contract.d.ts +35 -0
  27. package/dist/lib/skill-hash.d.ts +77 -0
  28. package/dist/sdk/cancel.d.ts +30 -0
  29. package/dist/sdk/dispatcher.d.ts +40 -0
  30. package/dist/sdk/event-sink.d.ts +2 -0
  31. package/dist/sdk/events.d.ts +79 -0
  32. package/dist/sdk/execution/admission.d.ts +44 -0
  33. package/dist/sdk/execution/dispatchers/e2b.d.ts +17 -0
  34. package/dist/sdk/execution/dispatchers/ecs.d.ts +151 -0
  35. package/dist/sdk/execution/image-profile.d.ts +73 -0
  36. package/dist/sdk/execution/index.d.ts +15 -0
  37. package/dist/sdk/execution/receipts.d.ts +44 -0
  38. package/dist/sdk/execution/state-machine.d.ts +38 -0
  39. package/dist/sdk/execution/storage.d.ts +158 -0
  40. package/dist/sdk/execution/types.d.ts +130 -0
  41. package/dist/sdk/executor.d.ts +17 -0
  42. package/dist/sdk/governance-store.d.ts +156 -0
  43. package/dist/sdk/governance.d.ts +92 -0
  44. package/dist/sdk/index.d.ts +26 -0
  45. package/dist/sdk/index.js +48730 -0
  46. package/dist/sdk/offline.d.ts +16 -0
  47. package/dist/sdk/outputs.d.ts +71 -0
  48. package/dist/sdk/registry.d.ts +28 -0
  49. package/dist/sdk/runs.d.ts +229 -0
  50. package/dist/sdk/server.d.ts +35 -0
  51. package/dist/sdk/spend.d.ts +36 -0
  52. package/dist/sdk/storage.d.ts +25 -0
  53. package/dist/server/app.d.ts +42 -0
  54. package/dist/server/artifact-storage.d.ts +102 -0
  55. package/dist/server/auth.d.ts +5 -0
  56. package/dist/server/config.d.ts +40 -0
  57. package/dist/server/database-url.d.ts +42 -0
  58. package/dist/server/handlers.d.ts +3 -0
  59. package/dist/server/index.d.ts +2 -0
  60. package/dist/server/migrate.d.ts +13 -0
  61. package/dist/server/migrations-dir.d.ts +18 -0
  62. package/dist/server/redaction.d.ts +1 -0
  63. package/dist/server/registry.d.ts +5 -0
  64. package/dist/server/rows.d.ts +23 -0
  65. package/dist/server/skills-api.d.ts +68 -0
  66. package/dist/server/sqlite-store.d.ts +114 -0
  67. package/dist/server/store-fixtures.d.ts +25 -0
  68. package/dist/server/store.d.ts +144 -0
  69. package/dist/server/types.d.ts +242 -0
  70. package/dist/server/worker.d.ts +4 -0
  71. package/dist/storage.js +32 -0
  72. package/docs/skill-standard.md +211 -39
  73. package/migrations/postgres/0003_run_outputs_governance.sql +83 -0
  74. package/migrations/sqlite/0003_run_outputs_governance.sql +58 -0
  75. package/package.json +11 -8
  76. package/schemas/skill.schema.json +181 -0
  77. package/agent-skills/README.md +0 -41
  78. package/agent-skills/fleet-package-rollout/SKILL.md +0 -169
  79. package/agent-skills/inbox/SKILL.md +0 -25
  80. package/agent-skills/inbox/scripts/inbox +0 -109
  81. package/agent-skills/inbox/tests/test_registered_sender_id.sh +0 -92
  82. package/agent-skills/inbox-monitor/SKILL.md +0 -41
  83. package/agent-skills/inbox-monitor/scripts/inbox_monitor.sh +0 -91
  84. package/agent-skills/inbox-monitor/scripts/test_inbox_monitor.sh +0 -71
  85. package/agent-skills/merge-pr/SKILL.md +0 -85
  86. package/agent-skills/merge-pr/references/merge-safety.md +0 -82
  87. package/agent-skills/merge-pr/scripts/merge_pr_guard.py +0 -694
  88. package/agent-skills/merge-pr/scripts/test_merge_pr_guard.py +0 -647
  89. package/agent-skills/merge-pr/tests/fixtures/multi-commit-synthesized.json +0 -28
  90. package/agent-skills/merge-pr/tests/fixtures/trailer-free-provider.json +0 -28
  91. package/agent-skills/skill-goal-execute/SKILL.md +0 -115
  92. package/agent-skills/skill-login/SKILL.md +0 -109
  93. package/agent-skills/skill-project-create/SKILL.md +0 -91
  94. package/agent-skills/skill-publish/SKILL.md +0 -254
  95. package/agent-skills/skill-publish/scripts/capture_registry.js +0 -47
  96. package/agent-skills/skill-publish/scripts/publish_with_git_head.sh +0 -143
  97. package/agent-skills/skill-publish/scripts/test_publish_with_git_head.sh +0 -231
  98. package/skills/_common/auth.ts +0 -45
  99. package/skills/_common/http-client.ts +0 -143
  100. package/skills/_common/index.ts +0 -26
  101. package/skills/_common/install.sh +0 -7
  102. package/skills/_common/installer.ts +0 -72
  103. package/skills/_common/skill-install.ts +0 -37
  104. package/skills/_common/vision.ts +0 -374
  105. package/skills/ad-creative-pack/SKILL.md +0 -55
  106. package/skills/ad-creative-pack/package.json +0 -10
  107. package/skills/analyze-data/CLAUDE.md +0 -16
  108. package/skills/analyze-data/SKILL.md +0 -112
  109. package/skills/analyze-data/package.json +0 -23
  110. package/skills/analyze-data/src/analysis.ts +0 -401
  111. package/skills/analyze-data/src/cli.ts +0 -66
  112. package/skills/analyze-data/src/formatters.ts +0 -235
  113. package/skills/analyze-data/src/index.ts +0 -74
  114. package/skills/analyze-data/src/logger.ts +0 -36
  115. package/skills/analyze-data/src/parsers.ts +0 -57
  116. package/skills/analyze-data/src/stats.ts +0 -151
  117. package/skills/analyze-data/src/types.ts +0 -85
  118. package/skills/analyze-data/tsconfig.json +0 -19
  119. package/skills/api-docs-portal/SKILL.md +0 -84
  120. package/skills/api-docs-portal/package.json +0 -35
  121. package/skills/api-docs-portal/src/index.ts +0 -919
  122. package/skills/api-docs-portal/tsconfig.json +0 -17
  123. package/skills/api-test-suite/CLAUDE.md +0 -19
  124. package/skills/api-test-suite/package.json +0 -27
  125. package/skills/api-test-suite/src/index.ts +0 -381
  126. package/skills/api-test-suite/tsconfig.json +0 -10
  127. package/skills/audio-extract/CLAUDE.md +0 -9
  128. package/skills/audio-extract/SKILL.md +0 -73
  129. package/skills/audio-extract/package.json +0 -23
  130. package/skills/audio-extract/src/index.ts +0 -323
  131. package/skills/audio-extract/tsconfig.json +0 -11
  132. package/skills/bio-sequence-tool/CLAUDE.md +0 -19
  133. package/skills/bio-sequence-tool/package.json +0 -27
  134. package/skills/bio-sequence-tool/src/index.ts +0 -85
  135. package/skills/bio-sequence-tool/tsconfig.json +0 -10
  136. package/skills/blog-article/CLAUDE.md +0 -12
  137. package/skills/blog-article/SKILL.md +0 -55
  138. package/skills/blog-article/package.json +0 -10
  139. package/skills/blog-article/tsconfig.json +0 -10
  140. package/skills/brand-assets/SKILL.md +0 -118
  141. package/skills/brand-assets/package.json +0 -35
  142. package/skills/brand-assets/src/cli.ts +0 -155
  143. package/skills/brand-assets/src/constants.ts +0 -8
  144. package/skills/brand-assets/src/extract.ts +0 -236
  145. package/skills/brand-assets/src/index.ts +0 -668
  146. package/skills/brand-assets/src/types.ts +0 -59
  147. package/skills/brand-assets/tsconfig.json +0 -17
  148. package/skills/brand-kit/SKILL.md +0 -54
  149. package/skills/brand-kit/package.json +0 -10
  150. package/skills/businessactivity/CLAUDE.md +0 -176
  151. package/skills/businessactivity/LICENSE +0 -192
  152. package/skills/businessactivity/README.md +0 -287
  153. package/skills/businessactivity/package.json +0 -25
  154. package/skills/businessactivity/scripts/publish.ts +0 -210
  155. package/skills/businessactivity/src/commands/activity.ts +0 -211
  156. package/skills/businessactivity/src/commands/function.ts +0 -227
  157. package/skills/businessactivity/src/commands/owner.ts +0 -193
  158. package/skills/businessactivity/src/commands/profile.ts +0 -121
  159. package/skills/businessactivity/src/commands/responsibility.ts +0 -264
  160. package/skills/businessactivity/src/commands/team.ts +0 -244
  161. package/skills/businessactivity/src/commands/workflow.ts +0 -359
  162. package/skills/businessactivity/src/index.ts +0 -3
  163. package/skills/businessactivity/src/lib/config.ts +0 -167
  164. package/skills/businessactivity/src/lib/output.ts +0 -76
  165. package/skills/businessactivity/src/lib/paths.ts +0 -79
  166. package/skills/businessactivity/src/lib/storage.ts +0 -95
  167. package/skills/businessactivity/src/types/index.ts +0 -86
  168. package/skills/businessactivity/tsconfig.json +0 -29
  169. package/skills/codefix/LICENSE +0 -192
  170. package/skills/codefix/README.md +0 -232
  171. package/skills/codefix/SKILL.md +0 -94
  172. package/skills/codefix/package.json +0 -21
  173. package/skills/codefix/src/fixers/batch.ts +0 -213
  174. package/skills/codefix/src/fixers/detector.ts +0 -160
  175. package/skills/codefix/src/fixers/index.ts +0 -7
  176. package/skills/codefix/src/fixers/runner.ts +0 -522
  177. package/skills/codefix/src/index-local.ts +0 -431
  178. package/skills/codefix/src/index.ts +0 -4
  179. package/skills/codefix/src/types.ts +0 -211
  180. package/skills/codefix/tsconfig.json +0 -15
  181. package/skills/commitpush/SKILL.md +0 -57
  182. package/skills/commitpush/package.json +0 -33
  183. package/skills/commitpush/src/index.ts +0 -34
  184. package/skills/commitpush/tsconfig.json +0 -17
  185. package/skills/commitpushpr/SKILL.md +0 -55
  186. package/skills/commitpushpr/package.json +0 -33
  187. package/skills/commitpushpr/src/index.ts +0 -34
  188. package/skills/commitpushpr/tsconfig.json +0 -17
  189. package/skills/compress-video/CLAUDE.md +0 -9
  190. package/skills/compress-video/SKILL.md +0 -79
  191. package/skills/compress-video/package.json +0 -23
  192. package/skills/compress-video/src/index.ts +0 -473
  193. package/skills/compress-video/tsconfig.json +0 -11
  194. package/skills/contract-review-report/SKILL.md +0 -52
  195. package/skills/contract-review-report/package.json +0 -10
  196. package/skills/customer-feedback-report/SKILL.md +0 -52
  197. package/skills/customer-feedback-report/package.json +0 -10
  198. package/skills/dashboard-builder/CLAUDE.md +0 -19
  199. package/skills/dashboard-builder/package.json +0 -29
  200. package/skills/dashboard-builder/src/index.ts +0 -150
  201. package/skills/dashboard-builder/tsconfig.json +0 -10
  202. package/skills/data-anonymizer/CLAUDE.md +0 -19
  203. package/skills/data-anonymizer/package.json +0 -27
  204. package/skills/data-anonymizer/src/index.ts +0 -183
  205. package/skills/data-anonymizer/tsconfig.json +0 -10
  206. package/skills/database-explorer/CLAUDE.md +0 -19
  207. package/skills/database-explorer/package.json +0 -29
  208. package/skills/database-explorer/src/index.ts +0 -95
  209. package/skills/database-explorer/tsconfig.json +0 -10
  210. package/skills/diff-viewer/CLAUDE.md +0 -19
  211. package/skills/diff-viewer/package.json +0 -30
  212. package/skills/diff-viewer/src/index.ts +0 -164
  213. package/skills/diff-viewer/tsconfig.json +0 -10
  214. package/skills/doc-read/SKILL.md +0 -45
  215. package/skills/doc-read/package.json +0 -29
  216. package/skills/doc-read/src/index.ts +0 -324
  217. package/skills/doc-read/tsconfig.json +0 -8
  218. package/skills/domainpurchase/LICENSE +0 -192
  219. package/skills/domainpurchase/SKILL.md +0 -29
  220. package/skills/domainpurchase/package.json +0 -30
  221. package/skills/domainpurchase/src/index.ts +0 -3
  222. package/skills/domainpurchase/tsconfig.json +0 -21
  223. package/skills/email-sequence/SKILL.md +0 -53
  224. package/skills/email-sequence/package.json +0 -10
  225. package/skills/experiment-power-calculator/CLAUDE.md +0 -19
  226. package/skills/experiment-power-calculator/package.json +0 -29
  227. package/skills/experiment-power-calculator/src/index.ts +0 -86
  228. package/skills/experiment-power-calculator/tsconfig.json +0 -10
  229. package/skills/extract-frames/CLAUDE.md +0 -19
  230. package/skills/extract-frames/package.json +0 -27
  231. package/skills/extract-frames/src/index.ts +0 -616
  232. package/skills/extract-frames/tsconfig.json +0 -10
  233. package/skills/file-organizer/CLAUDE.md +0 -19
  234. package/skills/file-organizer/package.json +0 -27
  235. package/skills/file-organizer/src/index.ts +0 -91
  236. package/skills/file-organizer/tsconfig.json +0 -10
  237. package/skills/folder-tree/CLAUDE.md +0 -19
  238. package/skills/folder-tree/package.json +0 -29
  239. package/skills/folder-tree/src/index.ts +0 -568
  240. package/skills/folder-tree/tsconfig.json +0 -10
  241. package/skills/form-filler/CLAUDE.md +0 -19
  242. package/skills/form-filler/package.json +0 -29
  243. package/skills/form-filler/src/index.ts +0 -81
  244. package/skills/form-filler/tsconfig.json +0 -10
  245. package/skills/generate-api-client/CLAUDE.md +0 -19
  246. package/skills/generate-api-client/package.json +0 -29
  247. package/skills/generate-api-client/src/generator.ts +0 -47
  248. package/skills/generate-api-client/src/index.ts +0 -92
  249. package/skills/generate-api-client/src/logger.ts +0 -34
  250. package/skills/generate-api-client/src/python-generator.ts +0 -245
  251. package/skills/generate-api-client/src/spec-loader.ts +0 -48
  252. package/skills/generate-api-client/src/type-mappers.ts +0 -79
  253. package/skills/generate-api-client/src/types.ts +0 -76
  254. package/skills/generate-api-client/src/typescript-generator.ts +0 -247
  255. package/skills/generate-api-client/tsconfig.json +0 -10
  256. package/skills/generate-chart/CLAUDE.md +0 -19
  257. package/skills/generate-chart/package.json +0 -27
  258. package/skills/generate-chart/src/index.ts +0 -510
  259. package/skills/generate-chart/tsconfig.json +0 -10
  260. package/skills/generate-dockerfile/CLAUDE.md +0 -19
  261. package/skills/generate-dockerfile/package.json +0 -27
  262. package/skills/generate-dockerfile/src/cli.ts +0 -78
  263. package/skills/generate-dockerfile/src/dockerfile-templates.ts +0 -392
  264. package/skills/generate-dockerfile/src/index.ts +0 -81
  265. package/skills/generate-dockerfile/src/logger.ts +0 -30
  266. package/skills/generate-dockerfile/src/project-detection.ts +0 -68
  267. package/skills/generate-dockerfile/src/support-files.ts +0 -171
  268. package/skills/generate-dockerfile/src/types.ts +0 -29
  269. package/skills/generate-dockerfile/tsconfig.json +0 -10
  270. package/skills/generate-env/CLAUDE.md +0 -19
  271. package/skills/generate-env/package.json +0 -29
  272. package/skills/generate-env/src/cli.ts +0 -85
  273. package/skills/generate-env/src/detection.ts +0 -161
  274. package/skills/generate-env/src/env-data.ts +0 -66
  275. package/skills/generate-env/src/generators.ts +0 -240
  276. package/skills/generate-env/src/index.ts +0 -120
  277. package/skills/generate-env/src/runtime.ts +0 -30
  278. package/skills/generate-env/src/types.ts +0 -32
  279. package/skills/generate-env/tsconfig.json +0 -10
  280. package/skills/generate-favicon/CLAUDE.md +0 -19
  281. package/skills/generate-favicon/package.json +0 -29
  282. package/skills/generate-favicon/src/index.ts +0 -421
  283. package/skills/generate-favicon/tsconfig.json +0 -10
  284. package/skills/generate-qrcode/CLAUDE.md +0 -19
  285. package/skills/generate-qrcode/package.json +0 -30
  286. package/skills/generate-qrcode/src/index.ts +0 -584
  287. package/skills/generate-qrcode/tsconfig.json +0 -10
  288. package/skills/generate-resume/CLAUDE.md +0 -19
  289. package/skills/generate-resume/package.json +0 -27
  290. package/skills/generate-resume/src/cli.ts +0 -157
  291. package/skills/generate-resume/src/index.ts +0 -178
  292. package/skills/generate-resume/src/parsers.ts +0 -95
  293. package/skills/generate-resume/src/renderers.ts +0 -538
  294. package/skills/generate-resume/src/security.ts +0 -39
  295. package/skills/generate-resume/src/types.ts +0 -86
  296. package/skills/generate-resume/tsconfig.json +0 -10
  297. package/skills/generate-sitemap/CLAUDE.md +0 -19
  298. package/skills/generate-sitemap/package.json +0 -27
  299. package/skills/generate-sitemap/src/index.ts +0 -626
  300. package/skills/generate-sitemap/tsconfig.json +0 -10
  301. package/skills/gif-maker/CLAUDE.md +0 -19
  302. package/skills/gif-maker/package.json +0 -30
  303. package/skills/gif-maker/src/index.ts +0 -600
  304. package/skills/gif-maker/tsconfig.json +0 -10
  305. package/skills/hook/LICENSE +0 -192
  306. package/skills/hook/README.md +0 -74
  307. package/skills/hook/SKILL.md +0 -85
  308. package/skills/hook/bunfig.toml +0 -5
  309. package/skills/hook/package.json +0 -28
  310. package/skills/hook/src/commands/create.ts +0 -112
  311. package/skills/hook/src/commands/events.ts +0 -37
  312. package/skills/hook/src/commands/validate.ts +0 -117
  313. package/skills/hook/src/index.ts +0 -118
  314. package/skills/hook/src/templates/root.ts +0 -196
  315. package/skills/hook/src/templates/source.ts +0 -647
  316. package/skills/hook/tsconfig.json +0 -18
  317. package/skills/http-server/CLAUDE.md +0 -19
  318. package/skills/http-server/package.json +0 -29
  319. package/skills/http-server/src/index.ts +0 -51
  320. package/skills/http-server/tsconfig.json +0 -10
  321. package/skills/implementation/LICENSE +0 -192
  322. package/skills/implementation/README.md +0 -53
  323. package/skills/implementation/SKILL.md +0 -57
  324. package/skills/implementation/bunfig.toml +0 -5
  325. package/skills/implementation/package.json +0 -28
  326. package/skills/implementation/src/commands/create.ts +0 -187
  327. package/skills/implementation/src/index.ts +0 -62
  328. package/skills/implementation/tsconfig.json +0 -18
  329. package/skills/implementation-plan/CLAUDE.md +0 -19
  330. package/skills/implementation-plan/package.json +0 -29
  331. package/skills/implementation-plan/src/index.ts +0 -520
  332. package/skills/implementation-plan/tsconfig.json +0 -10
  333. package/skills/implementation-todo/CLAUDE.md +0 -19
  334. package/skills/implementation-todo/package.json +0 -29
  335. package/skills/implementation-todo/src/index.ts +0 -429
  336. package/skills/implementation-todo/tsconfig.json +0 -10
  337. package/skills/invoice/.env.example +0 -3
  338. package/skills/invoice/CLAUDE.md +0 -31
  339. package/skills/invoice/LICENSE +0 -192
  340. package/skills/invoice/README.md +0 -70
  341. package/skills/invoice/package.json +0 -26
  342. package/skills/invoice/src/commands/companies.ts +0 -202
  343. package/skills/invoice/src/commands/config.ts +0 -132
  344. package/skills/invoice/src/commands/generate.ts +0 -177
  345. package/skills/invoice/src/commands/invoices.ts +0 -218
  346. package/skills/invoice/src/index.ts +0 -3
  347. package/skills/invoice/src/lib/api.ts +0 -124
  348. package/skills/invoice/src/lib/storage.ts +0 -171
  349. package/skills/invoice/src/types/index.ts +0 -86
  350. package/skills/invoice/src/utils/logger.ts +0 -33
  351. package/skills/invoice/src/utils/paths.ts +0 -25
  352. package/skills/invoice/tsconfig.json +0 -23
  353. package/skills/invoice-reconciliation/SKILL.md +0 -98
  354. package/skills/invoice-reconciliation/package.json +0 -36
  355. package/skills/invoice-reconciliation/src/index.ts +0 -743
  356. package/skills/invoice-reconciliation/tsconfig.json +0 -17
  357. package/skills/landing-page-pack/SKILL.md +0 -55
  358. package/skills/landing-page-pack/package.json +0 -10
  359. package/skills/latex-table-generator/CLAUDE.md +0 -19
  360. package/skills/latex-table-generator/package.json +0 -29
  361. package/skills/latex-table-generator/src/index.ts +0 -113
  362. package/skills/latex-table-generator/tsconfig.json +0 -10
  363. package/skills/logo-design/SKILL.md +0 -94
  364. package/skills/logo-design/package.json +0 -35
  365. package/skills/logo-design/src/cli.ts +0 -132
  366. package/skills/logo-design/src/constants.ts +0 -5
  367. package/skills/logo-design/src/docs.ts +0 -102
  368. package/skills/logo-design/src/geometry.ts +0 -324
  369. package/skills/logo-design/src/index.ts +0 -212
  370. package/skills/logo-design/src/palette.ts +0 -258
  371. package/skills/logo-design/src/types.ts +0 -50
  372. package/skills/logo-design/tsconfig.json +0 -17
  373. package/skills/lorem-generator/CLAUDE.md +0 -19
  374. package/skills/lorem-generator/package.json +0 -29
  375. package/skills/lorem-generator/src/index.ts +0 -59
  376. package/skills/lorem-generator/tsconfig.json +0 -10
  377. package/skills/managemcp/CLAUDE.md +0 -14
  378. package/skills/managemcp/README.md +0 -24
  379. package/skills/managemcp/package.json +0 -16
  380. package/skills/managemcp/src/index.ts +0 -3
  381. package/skills/managemcp/tsconfig.json +0 -27
  382. package/skills/markdown-validator/CLAUDE.md +0 -19
  383. package/skills/markdown-validator/package.json +0 -29
  384. package/skills/markdown-validator/src/index.ts +0 -92
  385. package/skills/markdown-validator/tsconfig.json +0 -10
  386. package/skills/market-research-report/SKILL.md +0 -51
  387. package/skills/market-research-report/package.json +0 -10
  388. package/skills/meeting-pack/SKILL.md +0 -52
  389. package/skills/meeting-pack/package.json +0 -10
  390. package/skills/merge-pdfs/CLAUDE.md +0 -19
  391. package/skills/merge-pdfs/package.json +0 -31
  392. package/skills/merge-pdfs/src/index.ts +0 -427
  393. package/skills/merge-pdfs/tsconfig.json +0 -10
  394. package/skills/migration-plan-pack/SKILL.md +0 -56
  395. package/skills/migration-plan-pack/package.json +0 -10
  396. package/skills/monitor/SKILL.md +0 -69
  397. package/skills/monitor/package.json +0 -33
  398. package/skills/monitor/src/index.ts +0 -34
  399. package/skills/monitor/tsconfig.json +0 -17
  400. package/skills/one-page-website/SKILL.md +0 -128
  401. package/skills/one-page-website/package.json +0 -34
  402. package/skills/one-page-website/src/design.ts +0 -336
  403. package/skills/one-page-website/src/docs.ts +0 -159
  404. package/skills/one-page-website/src/index.ts +0 -357
  405. package/skills/one-page-website/src/page.ts +0 -340
  406. package/skills/one-page-website/src/styles.ts +0 -508
  407. package/skills/one-page-website/src/types.ts +0 -78
  408. package/skills/one-page-website/tsconfig.json +0 -17
  409. package/skills/pdf-generate/CLAUDE.md +0 -19
  410. package/skills/pdf-generate/SKILL.md +0 -86
  411. package/skills/pdf-generate/package.json +0 -21
  412. package/skills/pdf-generate/src/cli.ts +0 -162
  413. package/skills/pdf-generate/src/html.ts +0 -84
  414. package/skills/pdf-generate/src/index.ts +0 -62
  415. package/skills/pdf-generate/src/markdown.ts +0 -27
  416. package/skills/pdf-generate/src/pdf-writer.ts +0 -78
  417. package/skills/pdf-generate/src/runtime.ts +0 -34
  418. package/skills/pdf-generate/src/security.ts +0 -37
  419. package/skills/pdf-generate/src/templates.ts +0 -311
  420. package/skills/pdf-generate/src/types.ts +0 -28
  421. package/skills/pdf-generate/tsconfig.json +0 -16
  422. package/skills/pdf-to-dataset/SKILL.md +0 -88
  423. package/skills/pdf-to-dataset/package.json +0 -37
  424. package/skills/pdf-to-dataset/src/index.ts +0 -790
  425. package/skills/pdf-to-dataset/tsconfig.json +0 -17
  426. package/skills/pdf-to-markdown/SKILL.md +0 -81
  427. package/skills/pdf-to-markdown/package.json +0 -35
  428. package/skills/pdf-to-markdown/src/index.ts +0 -694
  429. package/skills/pdf-to-markdown/tsconfig.json +0 -17
  430. package/skills/performance-audit-report/SKILL.md +0 -49
  431. package/skills/performance-audit-report/package.json +0 -10
  432. package/skills/pitch-deck/SKILL.md +0 -51
  433. package/skills/pitch-deck/package.json +0 -10
  434. package/skills/product-mockup/SKILL.md +0 -107
  435. package/skills/product-mockup/package.json +0 -32
  436. package/skills/product-mockup/src/cli.ts +0 -150
  437. package/skills/product-mockup/src/design.ts +0 -151
  438. package/skills/product-mockup/src/docs.ts +0 -134
  439. package/skills/product-mockup/src/index.ts +0 -182
  440. package/skills/product-mockup/src/render.ts +0 -407
  441. package/skills/product-mockup/src/types.ts +0 -66
  442. package/skills/product-mockup/tsconfig.json +0 -17
  443. package/skills/proposal-pack/SKILL.md +0 -53
  444. package/skills/proposal-pack/package.json +0 -10
  445. package/skills/read-csv/SKILL.md +0 -62
  446. package/skills/read-csv/package.json +0 -37
  447. package/skills/read-csv/src/index.ts +0 -356
  448. package/skills/read-csv/tsconfig.json +0 -17
  449. package/skills/read-excel/SKILL.md +0 -64
  450. package/skills/read-excel/package.json +0 -36
  451. package/skills/read-excel/src/index.ts +0 -266
  452. package/skills/read-excel/tsconfig.json +0 -17
  453. package/skills/regex-tester/CLAUDE.md +0 -19
  454. package/skills/regex-tester/package.json +0 -27
  455. package/skills/regex-tester/src/index.ts +0 -183
  456. package/skills/regex-tester/tsconfig.json +0 -10
  457. package/skills/repo-onboarding-report/SKILL.md +0 -52
  458. package/skills/repo-onboarding-report/package.json +0 -10
  459. package/skills/scancommitpr/SKILL.md +0 -178
  460. package/skills/scancommitpr/package.json +0 -34
  461. package/skills/scancommitpr/src/index.ts +0 -44
  462. package/skills/scancommitpr/tsconfig.json +0 -13
  463. package/skills/scancommitpush/SKILL.md +0 -174
  464. package/skills/scancommitpush/package.json +0 -32
  465. package/skills/scancommitpush/src/index.ts +0 -44
  466. package/skills/scancommitpush/tsconfig.json +0 -13
  467. package/skills/scientific-figure-check/CLAUDE.md +0 -19
  468. package/skills/scientific-figure-check/package.json +0 -29
  469. package/skills/scientific-figure-check/src/index.ts +0 -83
  470. package/skills/scientific-figure-check/tsconfig.json +0 -10
  471. package/skills/security-audit/CLAUDE.md +0 -19
  472. package/skills/security-audit/package.json +0 -27
  473. package/skills/security-audit/src/index.ts +0 -145
  474. package/skills/security-audit/tsconfig.json +0 -10
  475. package/skills/security-audit-report/SKILL.md +0 -52
  476. package/skills/security-audit-report/package.json +0 -10
  477. package/skills/seo-content-pack/SKILL.md +0 -54
  478. package/skills/seo-content-pack/package.json +0 -10
  479. package/skills/siteanalyze/SKILL.md +0 -25
  480. package/skills/siteanalyze/package.json +0 -27
  481. package/skills/siteanalyze/src/index.ts +0 -592
  482. package/skills/slide-deck-generator/SKILL.md +0 -93
  483. package/skills/slide-deck-generator/package.json +0 -38
  484. package/skills/slide-deck-generator/src/cli.ts +0 -133
  485. package/skills/slide-deck-generator/src/index.ts +0 -148
  486. package/skills/slide-deck-generator/src/model.ts +0 -307
  487. package/skills/slide-deck-generator/src/pptx.ts +0 -143
  488. package/skills/slide-deck-generator/src/render.ts +0 -248
  489. package/skills/slide-deck-generator/src/types.ts +0 -114
  490. package/skills/slide-deck-generator/src/utils.ts +0 -53
  491. package/skills/slide-deck-generator/tsconfig.json +0 -17
  492. package/skills/social-content-calendar/SKILL.md +0 -54
  493. package/skills/social-content-calendar/package.json +0 -10
  494. package/skills/split-pdf/CLAUDE.md +0 -19
  495. package/skills/split-pdf/package.json +0 -30
  496. package/skills/split-pdf/src/index.ts +0 -301
  497. package/skills/split-pdf/tsconfig.json +0 -10
  498. package/skills/statistical-test-selector/CLAUDE.md +0 -19
  499. package/skills/statistical-test-selector/package.json +0 -27
  500. package/skills/statistical-test-selector/src/index.ts +0 -75
  501. package/skills/statistical-test-selector/tsconfig.json +0 -10
  502. package/skills/test-suite-generator/SKILL.md +0 -51
  503. package/skills/test-suite-generator/package.json +0 -10
  504. package/skills/tmux-session/SKILL.md +0 -109
  505. package/skills/tmux-session/package.json +0 -33
  506. package/skills/tmux-session/src/index.ts +0 -34
  507. package/skills/tmux-session/tsconfig.json +0 -17
  508. package/skills/todos-plan/SKILL.md +0 -363
  509. package/skills/todos-plan/agents/openai.yaml +0 -4
  510. package/skills/todos-plan/package.json +0 -9
  511. package/skills/todos-plan/src/index.ts +0 -68
  512. package/skills/tsconfig.base.json +0 -12
  513. package/skills/validate-config/CLAUDE.md +0 -19
  514. package/skills/validate-config/package.json +0 -29
  515. package/skills/validate-config/src/index.ts +0 -56
  516. package/skills/validate-config/tsconfig.json +0 -10
  517. package/skills/video-downloader/CLAUDE.md +0 -19
  518. package/skills/video-downloader/package.json +0 -29
  519. package/skills/video-downloader/src/index.ts +0 -561
  520. package/skills/video-downloader/tsconfig.json +0 -10
  521. package/skills/video-highlight-pack/SKILL.md +0 -54
  522. package/skills/video-highlight-pack/package.json +0 -10
  523. package/skills/watermark/CLAUDE.md +0 -19
  524. package/skills/watermark/package.json +0 -32
  525. package/skills/watermark/src/index.ts +0 -587
  526. package/skills/watermark/tsconfig.json +0 -10
@@ -1,592 +0,0 @@
1
- #!/usr/bin/env bun
2
- /**
3
- * siteanalyze — Analyze any website's design system via Playwright + AI Vision
4
- * Supports multiple providers: anthropic, openai, xai, gemini
5
- */
6
- import { writeFileSync, existsSync, mkdirSync } from "fs";
7
- import { tmpdir } from "os";
8
- import { join } from "path";
9
- import {
10
- analyzeImage,
11
- detectProvider,
12
- listAvailableProviders,
13
- parseJsonResponse,
14
- type VisionProvider,
15
- } from "../../_common/vision.js";
16
-
17
- // ============================================================================
18
- // Types
19
- // ============================================================================
20
-
21
- export interface DesignColors {
22
- primary?: string;
23
- secondary?: string;
24
- accent?: string;
25
- background?: string;
26
- text?: string;
27
- border?: string;
28
- muted?: string;
29
- [key: string]: string | undefined;
30
- }
31
-
32
- export interface TypographyScale {
33
- fontFamilies: string[];
34
- sizes: string[];
35
- weights: string[];
36
- lineHeights?: string[];
37
- }
38
-
39
- export interface ComponentPattern {
40
- name: string;
41
- description: string;
42
- }
43
-
44
- export interface SiteAnalyzeResult {
45
- url: string;
46
- framework: string | null;
47
- hasShadcn: boolean;
48
- hasTailwind: boolean;
49
- colors: DesignColors;
50
- typography: TypographyScale;
51
- components: ComponentPattern[];
52
- provider: VisionProvider | null;
53
- model: string | null;
54
- openStylesProfile: {
55
- name: string;
56
- displayName: string;
57
- category: string;
58
- description: string;
59
- colors: Record<string, string>;
60
- typography: TypographyScale;
61
- framework: string | null;
62
- tags: string[];
63
- };
64
- screenshotPath?: string;
65
- rawAnalysis?: string;
66
- }
67
-
68
- // ============================================================================
69
- // HTML/CSS analysis (quick mode — no browser needed)
70
- // ============================================================================
71
-
72
- async function fetchPageSource(url: string): Promise<string> {
73
- const response = await fetch(url, {
74
- headers: {
75
- "User-Agent":
76
- "Mozilla/5.0 (compatible; siteanalyze/1.0; +https://github.com/hasna/skills)",
77
- },
78
- });
79
- if (!response.ok) {
80
- throw new Error(`Failed to fetch ${url}: ${response.status} ${response.statusText}`);
81
- }
82
- return response.text();
83
- }
84
-
85
- function detectFrameworkFromHtml(html: string): {
86
- hasShadcn: boolean;
87
- hasTailwind: boolean;
88
- framework: string | null;
89
- } {
90
- const lower = html.toLowerCase();
91
- const hasShadcn =
92
- lower.includes("shadcn") ||
93
- lower.includes("@radix-ui") ||
94
- lower.includes("radix-ui") ||
95
- lower.includes("cmdk") ||
96
- lower.includes("data-radix");
97
- const hasTailwind =
98
- lower.includes("tailwind") ||
99
- lower.includes("tw-") ||
100
- /class="[^"]*\b(flex|grid|p-\d|m-\d|text-\w+|bg-\w+|border-\w+)\b/.test(html);
101
-
102
- let framework: string | null = null;
103
- if (hasShadcn) {
104
- framework = "shadcn/ui";
105
- } else if (lower.includes("mui") || lower.includes("material-ui")) {
106
- framework = "Material UI";
107
- } else if (lower.includes("chakra")) {
108
- framework = "Chakra UI";
109
- } else if (lower.includes("mantine")) {
110
- framework = "Mantine";
111
- } else if (lower.includes("antd") || lower.includes("ant-design")) {
112
- framework = "Ant Design";
113
- } else if (lower.includes("bootstrap")) {
114
- framework = "Bootstrap";
115
- } else if (hasTailwind) {
116
- framework = "Tailwind CSS";
117
- }
118
-
119
- return { hasShadcn, hasTailwind, framework };
120
- }
121
-
122
- function extractColorsFromCss(html: string): DesignColors {
123
- const colors: DesignColors = {};
124
- const hexPattern = /#([0-9A-Fa-f]{3,8})\b/g;
125
- const cssVarPattern = /--[\w-]+:\s*(#[0-9A-Fa-f]{3,8}|rgba?\([^)]+\)|hsla?\([^)]+\))/g;
126
-
127
- // Try to extract CSS custom properties (most reliable)
128
- const varMatches = [...html.matchAll(cssVarPattern)].slice(0, 20);
129
- if (varMatches.length > 0) {
130
- for (const match of varMatches) {
131
- const varName = match[0].split(":")[0].trim();
132
- const value = match[1].trim();
133
- if (varName.includes("primary")) colors.primary = value;
134
- else if (varName.includes("secondary")) colors.secondary = value;
135
- else if (varName.includes("accent")) colors.accent = value;
136
- else if (varName.includes("background") || varName.includes("bg")) colors.background = value;
137
- else if (varName.includes("foreground") || varName.includes("text")) colors.text = value;
138
- else if (varName.includes("border")) colors.border = value;
139
- else if (varName.includes("muted")) colors.muted = value;
140
- }
141
- }
142
-
143
- // Fall back to raw hex extraction from inline styles
144
- if (Object.keys(colors).length === 0) {
145
- const hexMatches = [...html.matchAll(hexPattern)].map((m) => m[0]);
146
- const unique = [...new Set(hexMatches)].slice(0, 5);
147
- if (unique[0]) colors.primary = unique[0];
148
- if (unique[1]) colors.secondary = unique[1];
149
- if (unique[2]) colors.accent = unique[2];
150
- }
151
-
152
- return colors;
153
- }
154
-
155
- // ============================================================================
156
- // Vision-based analysis
157
- // ============================================================================
158
-
159
- async function captureScreenshot(url: string): Promise<string | null> {
160
- // Try to use playwright if available
161
- try {
162
- // Dynamic import so the skill works without playwright installed
163
- const { chromium } = await import("playwright" as never) as {
164
- chromium: {
165
- launch: (opts?: Record<string, unknown>) => Promise<{
166
- newPage: () => Promise<{
167
- goto: (url: string, opts?: Record<string, unknown>) => Promise<unknown>;
168
- screenshot: (opts?: Record<string, unknown>) => Promise<Buffer>;
169
- close: () => Promise<void>;
170
- }>;
171
- close: () => Promise<void>;
172
- }>;
173
- };
174
- };
175
-
176
- const tmpDir = join(tmpdir(), "siteanalyze");
177
- if (!existsSync(tmpDir)) {
178
- mkdirSync(tmpDir, { recursive: true });
179
- }
180
- const screenshotPath = join(tmpDir, `screenshot-${Date.now()}.png`);
181
-
182
- const browser = await chromium.launch({ headless: true });
183
- const page = await browser.newPage();
184
- await page.goto(url, { waitUntil: "networkidle", timeout: 30000 });
185
- const buffer = await page.screenshot({ path: screenshotPath, fullPage: false });
186
- await page.close();
187
- await browser.close();
188
-
189
- return screenshotPath;
190
- } catch {
191
- return null;
192
- }
193
- }
194
-
195
- async function analyzeScreenshot(
196
- screenshotPath: string,
197
- url: string,
198
- options: { provider?: VisionProvider; model?: string }
199
- ): Promise<{
200
- colors: DesignColors;
201
- typography: TypographyScale;
202
- components: ComponentPattern[];
203
- styleCategory: string;
204
- description: string;
205
- rawAnalysis: string;
206
- provider: VisionProvider;
207
- model: string;
208
- }> {
209
- const { readFileSync } = await import("fs");
210
- const imageBase64 = readFileSync(screenshotPath).toString("base64");
211
-
212
- const prompt = `Analyze this website screenshot from ${url}.
213
-
214
- Extract:
215
- 1. Color palette — primary, secondary, accent, background, text, border, muted colors (hex values)
216
- 2. Typography — font families used, size scale, font weights
217
- 3. UI components — list the main component patterns you see (buttons, cards, nav, etc.)
218
- 4. Design style category (minimalist/corporate/startup/editorial/material/glassmorphism/brutalist/neubrutalism)
219
- 5. Brief description of the overall design system
220
-
221
- Respond ONLY with valid JSON:
222
- {
223
- "colors": {
224
- "primary": "#...",
225
- "secondary": "#...",
226
- "accent": "#...",
227
- "background": "#...",
228
- "text": "#...",
229
- "border": "#...",
230
- "muted": "#..."
231
- },
232
- "typography": {
233
- "fontFamilies": ["..."],
234
- "sizes": ["xs", "sm", "base", "lg", "xl", "2xl"],
235
- "weights": ["400", "500", "600", "700"]
236
- },
237
- "components": [
238
- { "name": "Button", "description": "Rounded pill buttons with primary color fill" }
239
- ],
240
- "styleCategory": "minimalist",
241
- "description": "..."
242
- }`;
243
-
244
- const result = await analyzeImage(imageBase64, "image/png", prompt, {
245
- provider: options.provider,
246
- model: options.model,
247
- jsonMode: true,
248
- maxTokens: 2048,
249
- });
250
-
251
- const parsed = parseJsonResponse(result.text) as {
252
- colors: DesignColors;
253
- typography: TypographyScale;
254
- components: ComponentPattern[];
255
- styleCategory: string;
256
- description: string;
257
- };
258
-
259
- return {
260
- colors: parsed.colors ?? {},
261
- typography: parsed.typography ?? { fontFamilies: [], sizes: [], weights: [] },
262
- components: parsed.components ?? [],
263
- styleCategory: parsed.styleCategory ?? "unknown",
264
- description: parsed.description ?? "",
265
- rawAnalysis: result.text,
266
- provider: result.provider,
267
- model: result.model,
268
- };
269
- }
270
-
271
- // ============================================================================
272
- // Core analysis function
273
- // ============================================================================
274
-
275
- export async function analyzeSite(
276
- url: string,
277
- options?: {
278
- provider?: VisionProvider;
279
- model?: string;
280
- quickMode?: boolean; // skip screenshot/vision — HTML analysis only
281
- }
282
- ): Promise<SiteAnalyzeResult> {
283
- // Fetch HTML for framework/color detection
284
- const html = await fetchPageSource(url);
285
- const { hasShadcn, hasTailwind, framework } = detectFrameworkFromHtml(html);
286
- const quickColors = extractColorsFromCss(html);
287
-
288
- const availableProviders = listAvailableProviders();
289
- const useVision = !options?.quickMode && availableProviders.length > 0;
290
-
291
- if (!useVision) {
292
- // Quick mode or no provider available — return HTML analysis only
293
- return {
294
- url,
295
- framework,
296
- hasShadcn,
297
- hasTailwind,
298
- colors: quickColors,
299
- typography: { fontFamilies: [], sizes: [], weights: [] },
300
- components: [],
301
- provider: null,
302
- model: null,
303
- openStylesProfile: {
304
- name: `site-${Date.now()}`,
305
- displayName: url,
306
- category: framework ?? "Unknown",
307
- description: `Design system extracted from ${url} (HTML analysis only)`,
308
- colors: quickColors as Record<string, string>,
309
- typography: { fontFamilies: [], sizes: [], weights: [] },
310
- framework,
311
- tags: [
312
- "extracted",
313
- "auto-generated",
314
- ...(hasShadcn ? ["shadcn"] : []),
315
- ...(hasTailwind ? ["tailwind"] : []),
316
- ],
317
- },
318
- };
319
- }
320
-
321
- // Vision-based analysis
322
- const screenshotPath = await captureScreenshot(url);
323
- let visionResult: Awaited<ReturnType<typeof analyzeScreenshot>> | null = null;
324
-
325
- if (screenshotPath) {
326
- visionResult = await analyzeScreenshot(screenshotPath, url, {
327
- provider: options?.provider,
328
- model: options?.model,
329
- });
330
- }
331
-
332
- const colors = visionResult?.colors ?? quickColors;
333
- const typography = visionResult?.typography ?? { fontFamilies: [], sizes: [], weights: [] };
334
- const components = visionResult?.components ?? [];
335
- const styleCategory = visionResult?.styleCategory ?? framework ?? "Unknown";
336
- const description =
337
- visionResult?.description ??
338
- `Design system extracted from ${url}`;
339
-
340
- return {
341
- url,
342
- framework,
343
- hasShadcn,
344
- hasTailwind,
345
- colors,
346
- typography,
347
- components,
348
- provider: visionResult?.provider ?? null,
349
- model: visionResult?.model ?? null,
350
- screenshotPath: screenshotPath ?? undefined,
351
- rawAnalysis: visionResult?.rawAnalysis,
352
- openStylesProfile: {
353
- name: `site-${Date.now()}`,
354
- displayName: url,
355
- category: styleCategory,
356
- description,
357
- colors: colors as Record<string, string>,
358
- typography,
359
- framework,
360
- tags: [
361
- "extracted",
362
- "auto-generated",
363
- ...(hasShadcn ? ["shadcn"] : []),
364
- ...(hasTailwind ? ["tailwind"] : []),
365
- ],
366
- },
367
- };
368
- }
369
-
370
- // ============================================================================
371
- // CLI
372
- // ============================================================================
373
-
374
- type OutputFormat = "profile" | "colors" | "full";
375
-
376
- interface CliOptions {
377
- url: string | null;
378
- format: OutputFormat;
379
- output: string | null;
380
- provider: VisionProvider | null;
381
- model: string | null;
382
- quickMode: boolean;
383
- }
384
-
385
- function parseArgs(argv: string[]): { command: string; options: CliOptions } {
386
- const args = argv.slice(2);
387
-
388
- let command = "help";
389
- const options: CliOptions = {
390
- url: null,
391
- format: "full",
392
- output: null,
393
- provider: null,
394
- model: null,
395
- quickMode: false,
396
- };
397
-
398
- if (args.length === 0) {
399
- return { command: "help", options };
400
- }
401
-
402
- const firstArg = args[0];
403
- if (firstArg === "analyze") {
404
- command = "analyze";
405
- } else if (
406
- firstArg === "help" ||
407
- firstArg === "--help" ||
408
- firstArg === "-h"
409
- ) {
410
- command = "help";
411
- } else if (firstArg.startsWith("http://") || firstArg.startsWith("https://")) {
412
- // Allow `siteanalyze <url>` shorthand
413
- command = "analyze";
414
- options.url = firstArg;
415
- args.splice(0, 1);
416
- // Re-parse remaining flags below (shift args[0] already used)
417
- for (let i = 0; i < args.length; i++) {
418
- const arg = args[i];
419
- if ((arg === "--format" || arg === "-f") && args[i + 1]) {
420
- const fmt = args[++i];
421
- if (fmt === "profile" || fmt === "colors" || fmt === "full") {
422
- options.format = fmt;
423
- }
424
- } else if ((arg === "--output" || arg === "-o") && args[i + 1]) {
425
- options.output = args[++i];
426
- } else if (arg === "--provider" && args[i + 1]) {
427
- const p = args[++i] as VisionProvider;
428
- if (["anthropic", "openai", "xai", "gemini"].includes(p)) options.provider = p;
429
- } else if (arg === "--model" && args[i + 1]) {
430
- options.model = args[++i];
431
- } else if (arg === "--quick") {
432
- options.quickMode = true;
433
- }
434
- }
435
- return { command, options };
436
- } else {
437
- command = "help";
438
- }
439
-
440
- for (let i = 1; i < args.length; i++) {
441
- const arg = args[i];
442
- if ((arg === "--url" || arg === "-u") && args[i + 1]) {
443
- options.url = args[++i];
444
- } else if ((arg === "--format" || arg === "-f") && args[i + 1]) {
445
- const fmt = args[++i];
446
- if (fmt === "profile" || fmt === "colors" || fmt === "full") {
447
- options.format = fmt;
448
- } else {
449
- console.error(`Invalid format: ${fmt}. Use: profile, colors, full`);
450
- process.exit(1);
451
- }
452
- } else if ((arg === "--output" || arg === "-o") && args[i + 1]) {
453
- options.output = args[++i];
454
- } else if (arg === "--provider" && args[i + 1]) {
455
- const p = args[++i] as VisionProvider;
456
- if (["anthropic", "openai", "xai", "gemini"].includes(p)) {
457
- options.provider = p;
458
- } else {
459
- console.error(`Invalid provider: ${p}. Use: anthropic, openai, xai, gemini`);
460
- process.exit(1);
461
- }
462
- } else if (arg === "--model" && args[i + 1]) {
463
- options.model = args[++i];
464
- } else if (arg === "--quick") {
465
- options.quickMode = true;
466
- }
467
- }
468
-
469
- return { command, options };
470
- }
471
-
472
- function printHelp(): void {
473
- const available = listAvailableProviders();
474
- console.log(`
475
- siteanalyze — Analyze any website's design system via Playwright + AI Vision
476
-
477
- USAGE
478
- siteanalyze <url> [options]
479
- siteanalyze analyze --url <url> [options]
480
- siteanalyze help
481
-
482
- COMMANDS
483
- analyze Analyze a website's design system (default when URL is given)
484
- help Show this help message
485
-
486
- OPTIONS
487
- --url, -u <url> Website URL to analyze (required)
488
- --format, -f <format> Output format: profile | colors | full (default: full)
489
- --output, -o <file> Write JSON result to file instead of stdout
490
- --provider <name> AI provider: anthropic | openai | xai | gemini (auto-detected)
491
- --model <name> Model override (uses provider default if not set)
492
- --quick Skip AI vision analysis — HTML/CSS analysis only
493
-
494
- FORMATS
495
- profile Print only the open-styles compatible profile object
496
- colors Print only the extracted colors
497
- full Print the complete analysis result (default)
498
-
499
- EXAMPLES
500
- siteanalyze https://vercel.com
501
- siteanalyze https://stripe.com --format profile
502
- siteanalyze https://tailwindcss.com --provider openai
503
- siteanalyze https://shadcn.com --quick
504
- siteanalyze analyze --url https://example.com --output ./profile.json
505
-
506
- ENVIRONMENT
507
- ANTHROPIC_API_KEY Claude API key (anthropic provider)
508
- OPENAI_API_KEY OpenAI API key (openai provider)
509
- XAI_API_KEY xAI API key (xai provider)
510
- GEMINI_API_KEY Google Gemini API key (gemini provider)
511
-
512
- AVAILABLE PROVIDERS
513
- ${available.length > 0 ? available.join(", ") : "(none — set an API key for vision analysis, or use --quick)"}
514
- `);
515
- }
516
-
517
- async function main(): Promise<void> {
518
- const { command, options } = parseArgs(process.argv);
519
-
520
- if (command === "help") {
521
- printHelp();
522
- process.exit(0);
523
- }
524
-
525
- if (command === "analyze") {
526
- if (!options.url) {
527
- console.error("Error: URL is required.");
528
- console.error(
529
- "Run `siteanalyze help` for usage."
530
- );
531
- process.exit(1);
532
- }
533
-
534
- const available = listAvailableProviders();
535
- if (!options.quickMode && available.length === 0) {
536
- console.warn(
537
- "Warning: No AI provider API key found — running in quick mode (HTML analysis only)."
538
- );
539
- console.warn(
540
- "Set ANTHROPIC_API_KEY, OPENAI_API_KEY, XAI_API_KEY, or GEMINI_API_KEY for visual analysis."
541
- );
542
- options.quickMode = true;
543
- }
544
-
545
- try {
546
- console.error(`Analyzing ${options.url}...`);
547
-
548
- const result = await analyzeSite(options.url, {
549
- provider: options.provider ?? undefined,
550
- model: options.model ?? undefined,
551
- quickMode: options.quickMode,
552
- });
553
-
554
- let output: unknown;
555
- if (options.format === "colors") {
556
- output = result.colors;
557
- } else if (options.format === "profile") {
558
- output = result.openStylesProfile;
559
- } else {
560
- output = {
561
- url: result.url,
562
- framework: result.framework,
563
- hasShadcn: result.hasShadcn,
564
- hasTailwind: result.hasTailwind,
565
- colors: result.colors,
566
- typography: result.typography,
567
- components: result.components,
568
- provider: result.provider,
569
- model: result.model,
570
- openStylesProfile: result.openStylesProfile,
571
- };
572
- }
573
-
574
- const json = JSON.stringify(output, null, 2);
575
-
576
- if (options.output) {
577
- writeFileSync(options.output, json, "utf-8");
578
- console.error(`Result written to: ${options.output}`);
579
- } else {
580
- console.log(json);
581
- }
582
- } catch (error) {
583
- console.error(
584
- "Error:",
585
- error instanceof Error ? error.message : String(error)
586
- );
587
- process.exit(1);
588
- }
589
- }
590
- }
591
-
592
- main();
@@ -1,93 +0,0 @@
1
- ---
2
- name: slide-deck-generator
3
- description: Turn a brief or Markdown outline into a real slide deck locally - structured slides.json, deck.md, speaker notes, theme guide, a self-contained keyboard-navigable HTML deck, and a PPTX file.
4
- ---
5
-
6
- # Slide Deck Generator
7
-
8
- Parse a brief, outline, report, or product narrative into a slide model, then render it to several
9
- formats at once. This is the local binary renderer: it does the deterministic parsing, layout, and
10
- file writing so no model call is needed to produce the artifacts.
11
-
12
- `pitch-deck` is an instruction skill that decides the narrative and then delegates the actual
13
- rendering to this skill. Anything that needs a real `.pptx` or a shareable HTML deck should call
14
- `slide-deck-generator`.
15
-
16
- Everything runs locally. No API keys, no network calls, no accounts.
17
-
18
- ## Requirements
19
-
20
- - [Bun](https://bun.sh) 1.1+.
21
- - `bun install` inside this skill directory. Runtime dependencies:
22
- - `marked` — Markdown tokenizing for `--source` outlines.
23
- - `pptxgenjs` — writes the real `deck.pptx` (Open XML zip package).
24
- - No API keys and no network access. `deck.html` embeds all CSS and JS inline and makes zero
25
- external requests.
26
-
27
- ## Usage
28
-
29
- ```bash
30
- # From a Markdown outline
31
- bun run src/index.ts --source ./outline.md --slides 10 --theme aurora \
32
- --audience executives --format report --output ./out
33
-
34
- # From a one-paragraph brief
35
- bun run src/index.ts --brief "Q2 launch review for AI billing" --slides 8 --theme midnight
36
-
37
- # Skip PPTX rendering, emit machine-readable manifest
38
- bun run src/index.ts --source ./outline.md --no-pptx --json
39
- ```
40
-
41
- Open `out/deck.html` in any browser: `←`/`→` (or space) to navigate, `Home`/`End` to jump, `N` to
42
- toggle speaker notes, `Ctrl/Cmd-P` to print one slide per page.
43
-
44
- ### Markdown parsing rules
45
-
46
- - The first `#` heading becomes the deck title (unless `--title` is given).
47
- - Each `#`/`##` heading starts a new slide; `###` headings become bullets.
48
- - List items become bullets; paragraphs become speaker notes (and become bullets when a slide would
49
- otherwise be empty); blockquotes become full-bleed quote slides; the first lines of a code block
50
- become bullets.
51
- - Plain prose with no Markdown structure is split into sentences and grouped into slides.
52
- - The deck is then fitted to `--slides`: dense slides split into `(cont.)` slides, short adjacent
53
- slides merge, and any remaining gap is filled with format-appropriate scaffold slides.
54
-
55
- ## Options
56
-
57
- | Option | Description | Default |
58
- |--------|-------------|---------|
59
- | `-b, --brief <text>` | Brief, outline, or narrative text. Also accepted as a bare positional argument. | — |
60
- | `-s, --source <path>` | Read the brief/outline from a Markdown or text file. | — |
61
- | `-t, --title <text>` | Deck title. | first `#` heading, else first line of the brief |
62
- | `-n, --slides <n>` | Target slide count (1–60). | `8` |
63
- | `--theme <name>` | `midnight`, `aurora`, `sandstone`, `ocean`, or `mono`. | `midnight` |
64
- | `--audience <type>` | `team`, `customers`, `executives`, or `students`. Shapes the speaker notes. | `team` |
65
- | `--format <type>` | `general`, `training`, `sales`, `report`, or `proposal`. Shapes the closing slides. | `general` |
66
- | `-o, --output <dir>` | Output directory. | `./slide-deck` |
67
- | `--no-pptx` | Skip `deck.pptx`; still write every other file. | off |
68
- | `--json` | Print `manifest.json` to stdout instead of the text summary. | off |
69
- | `-h, --help` | Show help. | — |
70
- | `-v, --version` | Show version. | — |
71
-
72
- Either `--brief` or `--source` is required.
73
-
74
- ## Outputs
75
-
76
- Written under `--output`:
77
-
78
- | File | Contents |
79
- |------|----------|
80
- | `slides.json` | The slide model: index, layout (`title`/`agenda`/`bullets`/`section`/`quote`/`closing`), title, subtitle, bullets, and notes per slide. |
81
- | `deck.md` | Readable Markdown deck, one `---` separated section per slide with inline notes. |
82
- | `speaker-notes.md` | Per-slide talk track, on-screen recap, runtime estimate, and a delivery checklist. |
83
- | `theme-guide.md` | Palette hex values, typography scale, layout rules, and how to swap themes. |
84
- | `deck.html` | Self-contained reveal-style deck: inline CSS/JS, keyboard + click navigation, progress bar, notes toggle, and a print stylesheet that paginates one slide per page. No external requests. |
85
- | `deck.pptx` | Real PowerPoint file written by `pptxgenjs` (16:9), including per-slide speaker notes. Opens in PowerPoint, Keynote, LibreOffice, and Google Slides. |
86
- | `manifest.json` | Run metadata: title, source, theme, audience, format, slide count, layouts, and file list. |
87
-
88
- ## Notes
89
-
90
- - PPTX rendering failures are non-fatal: the other files are still written, a warning goes to
91
- stderr, and `manifest.json` records `pptx: "failed: …"`.
92
- - Scaffold slides added to reach `--slides` are labelled in their notes so they are easy to find and
93
- replace before presenting.