@hasna/skills 0.1.27 → 0.1.30

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 (671) hide show
  1. package/LICENSE +1 -10
  2. package/README.md +141 -39
  3. package/bin/index.js +30121 -27576
  4. package/bin/mcp.js +22073 -18556
  5. package/dist/cli/cli.test-utils.d.ts +15 -0
  6. package/dist/cli/commands/auth.d.ts +2 -0
  7. package/dist/cli/commands/install.d.ts +1 -1
  8. package/dist/cli/commands/runtime-mcp.d.ts +4 -0
  9. package/dist/index.d.ts +9 -4
  10. package/dist/index.js +11606 -598
  11. package/dist/lib/auth-store.d.ts +13 -0
  12. package/dist/lib/installer.d.ts +58 -55
  13. package/dist/lib/mcp-contracts.d.ts +86 -0
  14. package/dist/lib/project-state.d.ts +43 -0
  15. package/dist/lib/registry-data/business-marketing.d.ts +2 -0
  16. package/dist/lib/registry-data/communication.d.ts +2 -0
  17. package/dist/lib/registry-data/content-generation.d.ts +2 -0
  18. package/dist/lib/registry-data/data-analysis.d.ts +2 -0
  19. package/dist/lib/registry-data/design-branding.d.ts +2 -0
  20. package/dist/lib/registry-data/development-tools.d.ts +2 -0
  21. package/dist/lib/registry-data/education-learning.d.ts +2 -0
  22. package/dist/lib/registry-data/event-management.d.ts +2 -0
  23. package/dist/lib/registry-data/finance-compliance.d.ts +2 -0
  24. package/dist/lib/registry-data/health-wellness.d.ts +2 -0
  25. package/dist/lib/registry-data/index.d.ts +2 -0
  26. package/dist/lib/registry-data/media-processing.d.ts +2 -0
  27. package/dist/lib/registry-data/productivity-organization.d.ts +2 -0
  28. package/dist/lib/registry-data/project-management.d.ts +2 -0
  29. package/dist/lib/registry-data/research-writing.d.ts +2 -0
  30. package/dist/lib/registry-data/science-academic.d.ts +2 -0
  31. package/dist/lib/registry-data/travel-lifestyle.d.ts +2 -0
  32. package/dist/lib/registry-data/web-browser.d.ts +2 -0
  33. package/dist/lib/registry-types.d.ts +27 -0
  34. package/dist/lib/registry.d.ts +6 -18
  35. package/dist/lib/remote-registry.d.ts +3 -0
  36. package/dist/lib/run-state.d.ts +60 -0
  37. package/dist/lib/skill-aliases.d.ts +17 -0
  38. package/dist/lib/skillinfo.d.ts +5 -1
  39. package/dist/mcp/discovery-tools.d.ts +2 -0
  40. package/dist/mcp/helpers.d.ts +26 -0
  41. package/dist/mcp/http.d.ts +11 -0
  42. package/dist/mcp/index.d.ts +3 -2
  43. package/dist/mcp/operation-tools.d.ts +2 -0
  44. package/dist/mcp/resource-meta-tools.d.ts +2 -0
  45. package/dist/mcp/schedule-tools.d.ts +2 -0
  46. package/dist/mcp/server.d.ts +4 -0
  47. package/dist/types/api.d.ts +7 -4
  48. package/package.json +22 -11
  49. package/skills/_common/http-client.ts +1 -1
  50. package/skills/_common/index.ts +2 -3
  51. package/skills/_common/install.sh +5 -110
  52. package/skills/_common/installer.ts +31 -282
  53. package/skills/_common/skill-install.ts +14 -181
  54. package/skills/ad-creative-pack/SKILL.md +45 -0
  55. package/skills/ad-creative-pack/package.json +14 -0
  56. package/skills/advanced-math/package.json +3 -1
  57. package/skills/advanced-math/src/calculators.ts +118 -0
  58. package/skills/advanced-math/src/cli.ts +130 -0
  59. package/skills/advanced-math/src/conversion.ts +90 -0
  60. package/skills/advanced-math/src/finance.ts +75 -0
  61. package/skills/advanced-math/src/formatting.ts +95 -0
  62. package/skills/advanced-math/src/index.ts +24 -702
  63. package/skills/advanced-math/src/runtime.ts +49 -0
  64. package/skills/advanced-math/src/symbolic.ts +110 -0
  65. package/skills/advanced-math/src/types.ts +36 -0
  66. package/skills/analyze-data/SKILL.md +2 -2
  67. package/skills/analyze-data/src/analysis.ts +401 -0
  68. package/skills/analyze-data/src/cli.ts +66 -0
  69. package/skills/analyze-data/src/formatters.ts +235 -0
  70. package/skills/analyze-data/src/index.ts +6 -1027
  71. package/skills/analyze-data/src/logger.ts +36 -0
  72. package/skills/analyze-data/src/parsers.ts +57 -0
  73. package/skills/analyze-data/src/stats.ts +151 -0
  74. package/skills/analyze-data/src/types.ts +85 -0
  75. package/skills/api-docs-portal/SKILL.md +46 -0
  76. package/skills/api-docs-portal/package.json +9 -0
  77. package/skills/api-test-suite/src/index.ts +13 -0
  78. package/skills/apidocs/package.json +1 -1
  79. package/skills/apidocs/src/index.ts +3 -0
  80. package/skills/audio/package.json +2 -3
  81. package/skills/audio-cleanup-lab/SKILL.md +2 -2
  82. package/skills/audio-extract/CLAUDE.md +1 -1
  83. package/skills/audio-transcript-pack/SKILL.md +43 -0
  84. package/skills/audio-transcript-pack/package.json +10 -0
  85. package/skills/blog-article/CLAUDE.md +12 -0
  86. package/skills/blog-article/SKILL.md +45 -0
  87. package/skills/{create-blog-article → blog-article}/package.json +3 -3
  88. package/skills/brand-kit/SKILL.md +45 -0
  89. package/skills/brand-kit/package.json +14 -0
  90. package/skills/brand-photo-shoot/SKILL.md +28 -0
  91. package/skills/brand-photo-shoot/package.json +10 -0
  92. package/skills/brand-style-guide/SKILL.md +2 -2
  93. package/skills/brand-style-guide/src/index.ts +0 -0
  94. package/skills/budget-variance-analyzer/SKILL.md +2 -2
  95. package/skills/businessactivity/package.json +1 -1
  96. package/skills/businessactivity/src/index.ts +3 -0
  97. package/skills/calendar-events/src/ai-parser.ts +103 -0
  98. package/skills/calendar-events/src/api.ts +157 -0
  99. package/skills/calendar-events/src/auth.ts +22 -0
  100. package/skills/calendar-events/src/config.ts +6 -0
  101. package/skills/calendar-events/src/format.ts +96 -0
  102. package/skills/calendar-events/src/help.ts +54 -0
  103. package/skills/calendar-events/src/index.ts +21 -524
  104. package/skills/calendar-events/src/logger.ts +34 -0
  105. package/skills/calendar-events/src/types.ts +67 -0
  106. package/skills/compress-video/SKILL.md +2 -2
  107. package/skills/consolelog/exports/products-2025-12-14T13-50-53-041Z.csv +16 -0
  108. package/skills/consolelog/exports/products-2025-12-14T13-50-53-041Z.json +227 -0
  109. package/skills/consolelog/package.json +1 -1
  110. package/skills/consolelog/src/index.ts +3 -0
  111. package/skills/contract-review-report/SKILL.md +43 -0
  112. package/skills/contract-review-report/package.json +10 -0
  113. package/skills/convert/SKILL.md +2 -3
  114. package/skills/customer-feedback-report/SKILL.md +44 -0
  115. package/skills/customer-feedback-report/package.json +10 -0
  116. package/skills/dashboard-builder/package.json +3 -1
  117. package/skills/database-explorer/package.json +3 -1
  118. package/skills/deepresearch/README.md +4 -13
  119. package/skills/deploy/src/http-client.ts +1 -1
  120. package/skills/diff-viewer/package.json +4 -1
  121. package/skills/doc-generate/package.json +0 -1
  122. package/skills/doc-generate/src/ai.ts +50 -0
  123. package/skills/doc-generate/src/cli.ts +203 -0
  124. package/skills/doc-generate/src/dependencies.ts +44 -0
  125. package/skills/doc-generate/src/document-builder.ts +299 -0
  126. package/skills/doc-generate/src/index.ts +40 -764
  127. package/skills/doc-generate/src/markdown-parser.ts +125 -0
  128. package/skills/doc-generate/src/types.ts +68 -0
  129. package/skills/domainpurchase/SKILL.md +1 -1
  130. package/skills/domainpurchase/package.json +1 -1
  131. package/skills/domainpurchase/src/index.ts +3 -0
  132. package/skills/domainsearch/SKILL.md +1 -1
  133. package/skills/domainsearch/package.json +1 -1
  134. package/skills/domainsearch/src/index.ts +3 -0
  135. package/skills/email-sequence/SKILL.md +44 -0
  136. package/skills/email-sequence/package.json +14 -0
  137. package/skills/excel/CLAUDE.md +2 -2
  138. package/skills/experiment-power-calculator/package.json +3 -1
  139. package/skills/extract-invoice/src/cli.ts +97 -0
  140. package/skills/extract-invoice/src/extractor.ts +170 -0
  141. package/skills/extract-invoice/src/file-utils.ts +46 -0
  142. package/skills/extract-invoice/src/formatters.ts +144 -0
  143. package/skills/extract-invoice/src/index.ts +44 -629
  144. package/skills/extract-invoice/src/runtime.ts +46 -0
  145. package/skills/extract-invoice/src/types.ts +88 -0
  146. package/skills/folder-tree/package.json +3 -1
  147. package/skills/form-filler/package.json +3 -1
  148. package/skills/generate-api-client/package.json +3 -1
  149. package/skills/generate-api-client/src/generator.ts +47 -0
  150. package/skills/generate-api-client/src/index.ts +3 -777
  151. package/skills/generate-api-client/src/logger.ts +34 -0
  152. package/skills/generate-api-client/src/python-generator.ts +245 -0
  153. package/skills/generate-api-client/src/spec-loader.ts +48 -0
  154. package/skills/generate-api-client/src/type-mappers.ts +79 -0
  155. package/skills/generate-api-client/src/types.ts +76 -0
  156. package/skills/generate-api-client/src/typescript-generator.ts +247 -0
  157. package/skills/generate-book-cover/package.json +3 -1
  158. package/skills/generate-dockerfile/src/cli.ts +78 -0
  159. package/skills/generate-dockerfile/src/dockerfile-templates.ts +392 -0
  160. package/skills/generate-dockerfile/src/index.ts +12 -790
  161. package/skills/generate-dockerfile/src/logger.ts +30 -0
  162. package/skills/generate-dockerfile/src/project-detection.ts +68 -0
  163. package/skills/generate-dockerfile/src/support-files.ts +171 -0
  164. package/skills/generate-dockerfile/src/types.ts +29 -0
  165. package/skills/generate-documentation/src/ai.ts +131 -0
  166. package/skills/generate-documentation/src/cli.ts +71 -0
  167. package/skills/generate-documentation/src/code-parser.ts +300 -0
  168. package/skills/generate-documentation/src/file-processing.ts +182 -0
  169. package/skills/generate-documentation/src/index.ts +13 -753
  170. package/skills/generate-documentation/src/runtime.ts +35 -0
  171. package/skills/generate-documentation/src/types.ts +30 -0
  172. package/skills/generate-env/package.json +3 -1
  173. package/skills/generate-env/src/cli.ts +85 -0
  174. package/skills/generate-env/src/detection.ts +161 -0
  175. package/skills/generate-env/src/env-data.ts +66 -0
  176. package/skills/generate-env/src/generators.ts +240 -0
  177. package/skills/generate-env/src/index.ts +76 -676
  178. package/skills/generate-env/src/runtime.ts +30 -0
  179. package/skills/generate-env/src/types.ts +32 -0
  180. package/skills/generate-favicon/package.json +3 -1
  181. package/skills/generate-mock-data/package.json +3 -1
  182. package/skills/generate-mock-data/src/ai.ts +102 -0
  183. package/skills/generate-mock-data/src/formatters.ts +84 -0
  184. package/skills/generate-mock-data/src/generator.ts +377 -0
  185. package/skills/generate-mock-data/src/index.ts +15 -716
  186. package/skills/generate-mock-data/src/logger.ts +37 -0
  187. package/skills/generate-mock-data/src/presets.ts +110 -0
  188. package/skills/generate-mock-data/src/types.ts +21 -0
  189. package/skills/generate-pr-description/src/ai.ts +144 -0
  190. package/skills/generate-pr-description/src/cli.ts +80 -0
  191. package/skills/generate-pr-description/src/clipboard.ts +30 -0
  192. package/skills/generate-pr-description/src/formatters.ts +231 -0
  193. package/skills/generate-pr-description/src/git.ts +153 -0
  194. package/skills/generate-pr-description/src/index.ts +21 -714
  195. package/skills/generate-pr-description/src/types.ts +49 -0
  196. package/skills/generate-presentation/src/ai-clients.ts +61 -0
  197. package/skills/generate-presentation/src/cli.ts +126 -0
  198. package/skills/generate-presentation/src/index.ts +3 -751
  199. package/skills/generate-presentation/src/logger.ts +67 -0
  200. package/skills/generate-presentation/src/presentation-generator.ts +425 -0
  201. package/skills/generate-presentation/src/runtime.ts +6 -0
  202. package/skills/generate-presentation/src/security.ts +12 -0
  203. package/skills/generate-presentation/src/types.ts +28 -0
  204. package/skills/generate-qrcode/package.json +4 -1
  205. package/skills/generate-regex/package.json +3 -1
  206. package/skills/generate-resume/src/cli.ts +157 -0
  207. package/skills/generate-resume/src/index.ts +13 -917
  208. package/skills/generate-resume/src/parsers.ts +95 -0
  209. package/skills/generate-resume/src/renderers.ts +538 -0
  210. package/skills/generate-resume/src/security.ts +39 -0
  211. package/skills/generate-resume/src/types.ts +86 -0
  212. package/skills/generate-social-posts/src/ai.ts +88 -0
  213. package/skills/generate-social-posts/src/cli.ts +118 -0
  214. package/skills/generate-social-posts/src/exporters.ts +126 -0
  215. package/skills/generate-social-posts/src/generator.ts +130 -0
  216. package/skills/generate-social-posts/src/index.ts +19 -709
  217. package/skills/generate-social-posts/src/platforms.ts +39 -0
  218. package/skills/generate-social-posts/src/runtime.ts +34 -0
  219. package/skills/generate-social-posts/src/source.ts +116 -0
  220. package/skills/generate-social-posts/src/types.ts +58 -0
  221. package/skills/gif-maker/package.json +4 -1
  222. package/skills/github-manager/package.json +3 -1
  223. package/skills/gmail/CLAUDE.md +1 -1
  224. package/skills/highlight-reel-generator/src/index.ts +19 -0
  225. package/skills/hook/src/commands/create.ts +20 -845
  226. package/skills/hook/src/templates/root.ts +196 -0
  227. package/skills/hook/src/templates/source.ts +647 -0
  228. package/skills/http-server/package.json +3 -1
  229. package/skills/icon-pack/README.md +28 -0
  230. package/skills/icon-pack/SKILL.md +23 -0
  231. package/skills/icon-pack/package.json +29 -0
  232. package/skills/{audio → icon-pack}/tsconfig.json +10 -12
  233. package/skills/image/package.json +1 -2
  234. package/skills/implementation-agent/package.json +3 -1
  235. package/skills/implementation-agent/src/ai-generation.ts +225 -0
  236. package/skills/implementation-agent/src/index.ts +3 -960
  237. package/skills/implementation-agent/src/minimist.d.ts +15 -0
  238. package/skills/implementation-agent/src/templates.ts +686 -0
  239. package/skills/implementation-agent/src/types.ts +53 -0
  240. package/skills/implementation-plan/package.json +3 -1
  241. package/skills/implementation-todo/package.json +3 -1
  242. package/skills/invoice/package.json +1 -1
  243. package/skills/invoice/src/index.ts +3 -0
  244. package/skills/invoice-reconciliation/SKILL.md +42 -0
  245. package/skills/invoice-reconciliation/package.json +10 -0
  246. package/skills/landing-page-pack/SKILL.md +47 -0
  247. package/skills/landing-page-pack/package.json +14 -0
  248. package/skills/latex-table-generator/package.json +3 -1
  249. package/skills/logo-design/SKILL.md +25 -44
  250. package/skills/logo-design/package.json +3 -15
  251. package/skills/lorem-generator/package.json +3 -1
  252. package/skills/lorem-generator/src/index.ts +13 -0
  253. package/skills/managehook/package.json +1 -1
  254. package/skills/managehook/src/index.ts +3 -0
  255. package/skills/managemcp/package.json +1 -1
  256. package/skills/managemcp/src/index.ts +3 -0
  257. package/skills/manageskill/package.json +1 -1
  258. package/skills/manageskill/src/index.ts +3 -0
  259. package/skills/markdown-validator/package.json +3 -1
  260. package/skills/markdown-validator/src/index.ts +1 -4
  261. package/skills/market-research-report/SKILL.md +41 -0
  262. package/skills/market-research-report/package.json +10 -0
  263. package/skills/mcp-builder/package.json +4 -1
  264. package/skills/mcp-builder/src/ai-descriptions.ts +37 -0
  265. package/skills/mcp-builder/src/generators.ts +513 -0
  266. package/skills/mcp-builder/src/index.ts +7 -908
  267. package/skills/mcp-builder/src/minimist.d.ts +15 -0
  268. package/skills/mcp-builder/src/naming.ts +12 -0
  269. package/skills/mcp-builder/src/options.ts +170 -0
  270. package/skills/mcp-builder/src/templates.ts +149 -0
  271. package/skills/mcp-builder/src/types.ts +42 -0
  272. package/skills/meeting-pack/SKILL.md +43 -0
  273. package/skills/meeting-pack/package.json +10 -0
  274. package/skills/merge-pdfs/package.json +5 -1
  275. package/skills/migration-plan-pack/SKILL.md +45 -0
  276. package/skills/migration-plan-pack/package.json +10 -0
  277. package/skills/music/package.json +2 -3
  278. package/skills/music-album/SKILL.md +37 -0
  279. package/skills/music-album/package.json +10 -0
  280. package/skills/notion-manager/package.json +3 -1
  281. package/skills/npmpublish/CLAUDE.md +5 -8
  282. package/skills/npmpublish/README.md +5 -26
  283. package/skills/npmpublish/src/index.ts +9 -147
  284. package/skills/one-page-website/SKILL.md +46 -0
  285. package/skills/one-page-website/package.json +10 -0
  286. package/skills/one-page-website/tsconfig.json +8 -0
  287. package/skills/pdf-generate/src/cli.ts +162 -0
  288. package/skills/pdf-generate/src/html.ts +84 -0
  289. package/skills/pdf-generate/src/index.ts +11 -800
  290. package/skills/pdf-generate/src/markdown.ts +27 -0
  291. package/skills/pdf-generate/src/pdf-writer.ts +78 -0
  292. package/skills/pdf-generate/src/runtime.ts +34 -0
  293. package/skills/pdf-generate/src/security.ts +37 -0
  294. package/skills/pdf-generate/src/templates.ts +311 -0
  295. package/skills/pdf-generate/src/types.ts +28 -0
  296. package/skills/pdf-read/SKILL.md +10 -10
  297. package/skills/pdf-to-dataset/SKILL.md +45 -0
  298. package/skills/pdf-to-dataset/package.json +10 -0
  299. package/skills/pdf-to-markdown/SKILL.md +49 -0
  300. package/skills/pdf-to-markdown/package.json +10 -0
  301. package/skills/pdf-to-markdown/tsconfig.json +10 -0
  302. package/skills/performance-audit-report/SKILL.md +42 -0
  303. package/skills/performance-audit-report/package.json +10 -0
  304. package/skills/persona-based-adwriter/src/index.ts +19 -0
  305. package/skills/photo-album/SKILL.md +29 -0
  306. package/skills/photo-album/package.json +9 -0
  307. package/skills/photo-album/tsconfig.json +4 -0
  308. package/skills/pitch-deck/SKILL.md +43 -0
  309. package/skills/pitch-deck/package.json +9 -0
  310. package/skills/playlist-maker/SKILL.md +33 -0
  311. package/skills/playlist-maker/package.json +9 -0
  312. package/skills/playlist-maker/tsconfig.json +4 -0
  313. package/skills/product-mockup/SKILL.md +45 -0
  314. package/skills/product-mockup/package.json +3 -20
  315. package/skills/product-mockup/tsconfig.json +3 -5
  316. package/skills/project-retro-companion/src/index.ts +19 -0
  317. package/skills/proposal-pack/SKILL.md +45 -0
  318. package/skills/proposal-pack/package.json +10 -0
  319. package/skills/read-pdf/SKILL.md +5 -4
  320. package/skills/repo-onboarding-report/SKILL.md +42 -0
  321. package/skills/repo-onboarding-report/package.json +10 -0
  322. package/skills/sales-call-recapper/src/index.ts +20 -0
  323. package/skills/salescopy/package.json +1 -1
  324. package/skills/salescopy/src/index.ts +3 -0
  325. package/skills/scaffold-project/src/ai-detect.ts +136 -0
  326. package/skills/scaffold-project/src/file-generators.ts +292 -0
  327. package/skills/scaffold-project/src/index.ts +8 -991
  328. package/skills/scaffold-project/src/project-config.ts +338 -0
  329. package/skills/scaffold-project/src/templates.ts +173 -0
  330. package/skills/scaffold-project/src/types.ts +58 -0
  331. package/skills/scientific-figure-check/package.json +3 -1
  332. package/skills/sdk-generator/SKILL.md +45 -0
  333. package/skills/sdk-generator/package.json +10 -0
  334. package/skills/sdk-generator/tsconfig.json +8 -0
  335. package/skills/security-audit/src/index.ts +25 -6
  336. package/skills/security-audit-report/SKILL.md +40 -0
  337. package/skills/security-audit-report/package.json +10 -0
  338. package/skills/seo-content-pack/SKILL.md +44 -0
  339. package/skills/seo-content-pack/package.json +9 -0
  340. package/skills/short-video-pack/SKILL.md +30 -0
  341. package/skills/short-video-pack/package.json +10 -0
  342. package/skills/skill-academic-journal-matcher/bin/cli.ts +34 -0
  343. package/skills/skill-action-item-router/bin/cli.ts +34 -0
  344. package/skills/skill-ad-creative-generator/bin/cli.ts +34 -0
  345. package/skills/skill-advanced-math/bin/cli.ts +34 -0
  346. package/skills/skill-analyze-data/bin/cli.ts +19 -0
  347. package/skills/skill-anomaly-investigator/bin/cli.ts +34 -0
  348. package/skills/skill-api-test-suite/bin/cli.ts +34 -0
  349. package/skills/skill-apidocs/bin/cli.ts +87 -0
  350. package/skills/skill-audio-cleanup-lab/bin/cli.ts +6 -0
  351. package/skills/skill-audiobook-chapter-proofer/bin/cli.ts +34 -0
  352. package/skills/skill-banner-ad-suite/bin/cli.ts +34 -0
  353. package/skills/skill-benchmark-finder/bin/cli.ts +34 -0
  354. package/skills/skill-bio-sequence-tool/bin/cli.ts +34 -0
  355. package/skills/skill-blog-topic-cluster/bin/cli.ts +34 -0
  356. package/skills/skill-brand-style-guide/bin/cli.ts +19 -0
  357. package/skills/skill-brand-voice-audit/bin/cli.ts +34 -0
  358. package/skills/skill-budget-variance-analyzer/bin/cli.ts +6 -0
  359. package/skills/skill-businessactivity/bin/cli.ts +28 -0
  360. package/skills/skill-calendar-events/bin/cli.ts +34 -0
  361. package/skills/skill-campaign-metric-brief/bin/cli.ts +34 -0
  362. package/skills/skill-campaign-moodboard/bin/cli.ts +34 -0
  363. package/skills/skill-caption-style-stylist/bin/cli.ts +34 -0
  364. package/skills/skill-chemistry-calculator/bin/cli.ts +34 -0
  365. package/skills/skill-churn-risk-notifier/bin/cli.ts +34 -0
  366. package/skills/skill-citation-formatter/bin/cli.ts +34 -0
  367. package/skills/skill-classroom-newsletter-kit/bin/cli.ts +34 -0
  368. package/skills/skill-color-palette-harmonizer/bin/cli.ts +34 -0
  369. package/skills/skill-competitor-ad-analyzer/bin/cli.ts +34 -0
  370. package/skills/skill-compliance-copy-check/bin/cli.ts +34 -0
  371. package/skills/skill-compliance-report-pack/bin/cli.ts +34 -0
  372. package/skills/skill-compress-video/bin/cli.ts +19 -0
  373. package/skills/skill-consolelog/bin/cli.ts +884 -0
  374. package/skills/skill-contract-plainlanguage/bin/cli.ts +34 -0
  375. package/skills/skill-copytone-translator/bin/cli.ts +34 -0
  376. package/skills/skill-create-blog-article/bin/cli.ts +34 -0
  377. package/skills/skill-create-ebook/bin/cli.ts +34 -0
  378. package/skills/skill-crm-note-enhancer/bin/cli.ts +34 -0
  379. package/skills/skill-customer-journey-mapper/bin/cli.ts +34 -0
  380. package/skills/skill-dashboard-builder/bin/cli.ts +34 -0
  381. package/skills/skill-dashboard-narrator/bin/cli.ts +34 -0
  382. package/skills/skill-data-anonymizer/bin/cli.ts +34 -0
  383. package/skills/skill-database-explorer/bin/cli.ts +34 -0
  384. package/skills/skill-dataset-health-check/bin/cli.ts +34 -0
  385. package/skills/skill-decision-journal/bin/cli.ts +34 -0
  386. package/skills/skill-delegation-brief-writer/bin/cli.ts +34 -0
  387. package/skills/skill-destination-briefing/bin/cli.ts +34 -0
  388. package/skills/skill-diff-viewer/bin/cli.ts +34 -0
  389. package/skills/skill-domainpurchase/bin/cli.ts +683 -0
  390. package/skills/skill-domainsearch/bin/cli.ts +410 -0
  391. package/skills/skill-educational-resource-finder/bin/cli.ts +34 -0
  392. package/skills/skill-email-campaign/bin/cli.ts +34 -0
  393. package/skills/skill-exam-readiness-check/bin/cli.ts +34 -0
  394. package/skills/skill-experiment-power-calculator/bin/cli.ts +34 -0
  395. package/skills/skill-extract-audio/bin/cli.ts +19 -0
  396. package/skills/skill-extract-frames/bin/cli.ts +34 -0
  397. package/skills/skill-extract-invoice/bin/cli.ts +34 -0
  398. package/skills/skill-family-activity-curator/bin/cli.ts +34 -0
  399. package/skills/skill-faq-packager/bin/cli.ts +34 -0
  400. package/skills/skill-feedback-survey-designer/bin/cli.ts +34 -0
  401. package/skills/skill-field-trip-planner/bin/cli.ts +34 -0
  402. package/skills/skill-file-organizer/bin/cli.ts +34 -0
  403. package/skills/skill-folder-tree/bin/cli.ts +34 -0
  404. package/skills/skill-forecast-scenario-lab/bin/cli.ts +34 -0
  405. package/skills/skill-form-filler/bin/cli.ts +34 -0
  406. package/skills/skill-generate-api-client/bin/cli.ts +34 -0
  407. package/skills/skill-generate-book-cover/bin/cli.ts +34 -0
  408. package/skills/skill-generate-chart/bin/cli.ts +34 -0
  409. package/skills/skill-generate-diagram/bin/cli.ts +34 -0
  410. package/skills/skill-generate-dockerfile/bin/cli.ts +34 -0
  411. package/skills/skill-generate-documentation/bin/cli.ts +34 -0
  412. package/skills/skill-generate-docx/bin/cli.ts +6 -0
  413. package/skills/skill-generate-env/bin/cli.ts +34 -0
  414. package/skills/skill-generate-excel/bin/cli.ts +34 -0
  415. package/skills/skill-generate-favicon/bin/cli.ts +34 -0
  416. package/skills/skill-generate-mock-data/bin/cli.ts +34 -0
  417. package/skills/skill-generate-pdf/bin/cli.ts +6 -0
  418. package/skills/skill-generate-pr-description/bin/cli.ts +34 -0
  419. package/skills/skill-generate-presentation/bin/cli.ts +34 -0
  420. package/skills/skill-generate-qrcode/bin/cli.ts +34 -0
  421. package/skills/skill-generate-regex/bin/cli.ts +34 -0
  422. package/skills/skill-generate-resume/bin/cli.ts +34 -0
  423. package/skills/skill-generate-sitemap/bin/cli.ts +34 -0
  424. package/skills/skill-generate-social-posts/bin/cli.ts +34 -0
  425. package/skills/skill-generate-sql/bin/cli.ts +34 -0
  426. package/skills/skill-gif-maker/bin/cli.ts +34 -0
  427. package/skills/skill-github-manager/bin/cli.ts +34 -0
  428. package/skills/skill-gmail/bin/cli.ts +34 -0
  429. package/skills/skill-goal-quarterly-roadmap/bin/cli.ts +34 -0
  430. package/skills/skill-grant-application-drafter/bin/cli.ts +34 -0
  431. package/skills/skill-grocery-basket-optimizer/bin/cli.ts +34 -0
  432. package/skills/skill-guest-communication-suite/bin/cli.ts +34 -0
  433. package/skills/skill-habit-reflection-digest/bin/cli.ts +34 -0
  434. package/skills/skill-highlight-reel-generator/bin/cli.ts +34 -0
  435. package/skills/skill-homework-feedback-coach/bin/cli.ts +34 -0
  436. package/skills/skill-household-maintenance-mgr/bin/cli.ts +34 -0
  437. package/skills/skill-http-server/bin/cli.ts +34 -0
  438. package/skills/skill-implementation-agent/bin/cli.ts +34 -0
  439. package/skills/skill-implementation-plan/bin/cli.ts +34 -0
  440. package/skills/skill-implementation-todo/bin/cli.ts +34 -0
  441. package/skills/skill-inbox-priority-planner/bin/cli.ts +34 -0
  442. package/skills/skill-invoice/bin/cli.ts +20 -0
  443. package/skills/skill-invoice-dispute-helper/bin/cli.ts +34 -0
  444. package/skills/skill-itinerary-architect/bin/cli.ts +34 -0
  445. package/skills/skill-jingle-composer/bin/cli.ts +34 -0
  446. package/skills/skill-kpi-digest-generator/bin/cli.ts +34 -0
  447. package/skills/skill-lab-notebook-formatter/bin/cli.ts +34 -0
  448. package/skills/skill-landing-page-copy/bin/cli.ts +34 -0
  449. package/skills/skill-latex-table-generator/bin/cli.ts +34 -0
  450. package/skills/skill-learning-style-profiler/bin/cli.ts +34 -0
  451. package/skills/skill-lesson-plan-customizer/bin/cli.ts +34 -0
  452. package/skills/skill-livestream-runofshow/bin/cli.ts +34 -0
  453. package/skills/skill-longform-structurer/bin/cli.ts +34 -0
  454. package/skills/skill-lorem-generator/bin/cli.ts +34 -0
  455. package/skills/skill-managehook/bin/cli.ts +241 -0
  456. package/skills/skill-managemcp/bin/cli.ts +241 -0
  457. package/skills/skill-manageskill/bin/cli.ts +241 -0
  458. package/skills/skill-markdown-validator/bin/cli.ts +34 -0
  459. package/skills/skill-mcp-builder/bin/cli.ts +34 -0
  460. package/skills/skill-meal-plan-designer/bin/cli.ts +34 -0
  461. package/skills/skill-meeting-insight-summarizer/bin/cli.ts +34 -0
  462. package/skills/skill-merge-pdfs/bin/cli.ts +34 -0
  463. package/skills/skill-microcopy-generator/bin/cli.ts +34 -0
  464. package/skills/skill-mindfulness-prompt-cache/bin/cli.ts +34 -0
  465. package/skills/skill-notion-manager/bin/cli.ts +34 -0
  466. package/skills/skill-onboarding-sequence-builder/bin/cli.ts +34 -0
  467. package/skills/skill-onsite-ops-checklist/bin/cli.ts +34 -0
  468. package/skills/skill-outreach-cadence-designer/bin/cli.ts +34 -0
  469. package/skills/skill-packaging-concept-studio/bin/cli.ts +34 -0
  470. package/skills/skill-packing-plan-pro/bin/cli.ts +34 -0
  471. package/skills/skill-parent-teacher-brief/bin/cli.ts +34 -0
  472. package/skills/skill-partner-kit-assembler/bin/cli.ts +34 -0
  473. package/skills/skill-payroll-change-prepper/bin/cli.ts +34 -0
  474. package/skills/skill-persona-based-adwriter/bin/cli.ts +34 -0
  475. package/skills/skill-persona-generator/bin/cli.ts +34 -0
  476. package/skills/skill-personal-daily-ops/bin/cli.ts +34 -0
  477. package/skills/skill-pet-care-scheduler/bin/cli.ts +34 -0
  478. package/skills/skill-podcast-show-notes/bin/cli.ts +34 -0
  479. package/skills/skill-presentation-theme-maker/bin/cli.ts +34 -0
  480. package/skills/skill-press-release-drafter/bin/cli.ts +34 -0
  481. package/skills/skill-print-collateral-designer/bin/cli.ts +34 -0
  482. package/skills/skill-procurement-scorecard/bin/cli.ts +34 -0
  483. package/skills/skill-product-demo-script/bin/cli.ts +34 -0
  484. package/skills/skill-product-mockup/bin/cli.ts +34 -0
  485. package/skills/skill-project-retro-companion/bin/cli.ts +34 -0
  486. package/skills/skill-proposal-redline-advisor/bin/cli.ts +34 -0
  487. package/skills/skill-regex-tester/bin/cli.ts +34 -0
  488. package/skills/skill-remove-background/bin/cli.ts +34 -0
  489. package/skills/skill-risk-disclosure-kit/bin/cli.ts +34 -0
  490. package/skills/skill-roi-comparison-tool/bin/cli.ts +34 -0
  491. package/skills/skill-sales-call-recapper/bin/cli.ts +34 -0
  492. package/skills/skill-salescopy/bin/cli.ts +20 -0
  493. package/skills/skill-scaffold-project/bin/cli.ts +34 -0
  494. package/skills/skill-scholarship-tracker/bin/cli.ts +34 -0
  495. package/skills/skill-scientific-figure-check/bin/cli.ts +34 -0
  496. package/skills/skill-seating-chart-maker/bin/cli.ts +34 -0
  497. package/skills/skill-security-audit/bin/cli.ts +34 -0
  498. package/skills/skill-seo-brief-builder/bin/cli.ts +34 -0
  499. package/skills/skill-slack-assistant/bin/cli.ts +34 -0
  500. package/skills/skill-sleep-routine-analyzer/bin/cli.ts +34 -0
  501. package/skills/skill-social-media-kit/bin/cli.ts +34 -0
  502. package/skills/skill-split-pdf/bin/cli.ts +34 -0
  503. package/skills/skill-sponsorship-proposal-lab/bin/cli.ts +34 -0
  504. package/skills/skill-spreadsheet-cleanroom/bin/cli.ts +34 -0
  505. package/skills/skill-statistical-test-selector/bin/cli.ts +34 -0
  506. package/skills/skill-stress-relief-playbook/bin/cli.ts +34 -0
  507. package/skills/skill-study-guide-builder/bin/cli.ts +34 -0
  508. package/skills/skill-subscription-spend-watcher/bin/cli.ts +34 -0
  509. package/skills/skill-subtitle/bin/cli.ts +20 -0
  510. package/skills/skill-survey-insight-extractor/bin/cli.ts +34 -0
  511. package/skills/skill-terraform-generator/bin/cli.ts +34 -0
  512. package/skills/skill-testimonial-graphics/bin/cli.ts +34 -0
  513. package/skills/skill-timesheet/bin/cli.ts +47 -0
  514. package/skills/skill-travel-budget-balancer/bin/cli.ts +34 -0
  515. package/skills/skill-validate-config/bin/cli.ts +34 -0
  516. package/skills/skill-video-cut-suggester/bin/cli.ts +34 -0
  517. package/skills/skill-video-downloader/bin/cli.ts +34 -0
  518. package/skills/skill-video-thumbnail/bin/cli.ts +34 -0
  519. package/skills/skill-voiceover-casting-assistant/bin/cli.ts +34 -0
  520. package/skills/skill-watermark/bin/cli.ts +34 -0
  521. package/skills/skill-webcrawling/bin/cli.ts +21 -0
  522. package/skills/skill-webinar-script-coach/bin/cli.ts +34 -0
  523. package/skills/skill-wellness-progress-reporter/bin/cli.ts +34 -0
  524. package/skills/skill-workout-cycle-planner/bin/cli.ts +34 -0
  525. package/skills/slack-assistant/package.json +3 -1
  526. package/skills/slide-deck-generator/SKILL.md +44 -0
  527. package/skills/slide-deck-generator/package.json +10 -0
  528. package/skills/sms/package.json +1 -1
  529. package/skills/sms/src/index.ts +15 -0
  530. package/skills/social-content-calendar/SKILL.md +45 -0
  531. package/skills/social-content-calendar/package.json +14 -0
  532. package/skills/split-pdf/package.json +4 -1
  533. package/skills/subtitle/package.json +2 -1
  534. package/skills/subtitle/src/index.ts +3 -0
  535. package/skills/terraform-generator/package.json +3 -1
  536. package/skills/test-suite-generator/SKILL.md +41 -0
  537. package/skills/test-suite-generator/package.json +10 -0
  538. package/skills/timesheet/package.json +1 -1
  539. package/skills/timesheet/src/index.ts +3 -0
  540. package/skills/transcript/SKILL.md +1 -8
  541. package/skills/validate-config/package.json +3 -1
  542. package/skills/video/package.json +6 -4
  543. package/skills/video-downloader/package.json +3 -1
  544. package/skills/video-highlight-pack/SKILL.md +44 -0
  545. package/skills/video-highlight-pack/package.json +10 -0
  546. package/skills/voiceover-jingle-pack/SKILL.md +28 -0
  547. package/skills/voiceover-jingle-pack/package.json +10 -0
  548. package/skills/watermark/package.json +6 -1
  549. package/skills/webcrawling/package.json +2 -1
  550. package/skills/write/SKILL.md +6 -6
  551. package/dist/server/serve.d.ts +0 -11
  552. package/skills/apidocs/.claude/settings.json +0 -5
  553. package/skills/audio/.env.example +0 -14
  554. package/skills/audio/QUICKSTART.md +0 -158
  555. package/skills/audio/README.md +0 -256
  556. package/skills/audio/src/index-local.ts +0 -206
  557. package/skills/audio/src/index.ts +0 -95
  558. package/skills/audio/src/providers/elevenlabs.ts +0 -115
  559. package/skills/audio/src/providers/google.ts +0 -116
  560. package/skills/audio/src/providers/minimax.ts +0 -83
  561. package/skills/audio/src/providers/openai.ts +0 -115
  562. package/skills/audio/src/types.ts +0 -79
  563. package/skills/audiobook-chapter-proofer/CLAUDE.md +0 -19
  564. package/skills/audiobook-chapter-proofer/package.json +0 -27
  565. package/skills/audiobook-chapter-proofer/src/index.ts +0 -285
  566. package/skills/browse/src/client.ts +0 -373
  567. package/skills/browse/src/index-local.ts +0 -430
  568. package/skills/browse/src/index.ts +0 -110
  569. package/skills/browse/src/sse-server.ts +0 -919
  570. package/skills/browse/src/types.ts +0 -104
  571. package/skills/consolelog/src/server/index.ts +0 -508
  572. package/skills/create-blog-article/CLAUDE.md +0 -19
  573. package/skills/create-blog-article/src/index.ts +0 -745
  574. package/skills/create-blog-article/tsconfig.json +0 -10
  575. package/skills/deepresearch/src/agents/query-generator.ts +0 -91
  576. package/skills/deepresearch/src/agents/synthesizer.ts +0 -111
  577. package/skills/deepresearch/src/index.ts +0 -224
  578. package/skills/deepresearch/src/research.ts +0 -166
  579. package/skills/deepresearch/src/services/anthropic.ts +0 -69
  580. package/skills/deepresearch/src/services/exa.ts +0 -108
  581. package/skills/deepresearch/src/services/firecrawl.ts +0 -88
  582. package/skills/deepresearch/src/services/openai.ts +0 -81
  583. package/skills/deepresearch/src/types.ts +0 -76
  584. package/skills/deepresearch/src/utils/file.ts +0 -111
  585. package/skills/deepresearch/src/utils/logger.ts +0 -84
  586. package/skills/domainpurchase/src/server/index.ts +0 -332
  587. package/skills/domainsearch/src/server/index.ts +0 -229
  588. package/skills/e2bswarm/README.md +0 -135
  589. package/skills/e2bswarm/SKILL.md +0 -118
  590. package/skills/e2bswarm/examples/tasks-example.json +0 -38
  591. package/skills/e2bswarm/package.json +0 -59
  592. package/skills/e2bswarm/src/commands/collect.ts +0 -135
  593. package/skills/e2bswarm/src/commands/install.ts +0 -164
  594. package/skills/e2bswarm/src/commands/kill.ts +0 -62
  595. package/skills/e2bswarm/src/commands/spawn.ts +0 -134
  596. package/skills/e2bswarm/src/commands/status.ts +0 -90
  597. package/skills/e2bswarm/src/commands/sync.ts +0 -208
  598. package/skills/e2bswarm/src/index.ts +0 -121
  599. package/skills/e2bswarm/src/lib/config.ts +0 -75
  600. package/skills/e2bswarm/src/lib/e2b.ts +0 -490
  601. package/skills/e2bswarm/src/lib/github.ts +0 -253
  602. package/skills/e2bswarm/src/lib/logger.ts +0 -41
  603. package/skills/e2bswarm/src/lib/paths.ts +0 -75
  604. package/skills/e2bswarm/src/lib/tasks.ts +0 -320
  605. package/skills/e2bswarm/src/types/index.ts +0 -107
  606. package/skills/e2bswarm/templates/codebox/e2b.Dockerfile +0 -38
  607. package/skills/e2bswarm/templates/codebox/e2b.toml +0 -3
  608. package/skills/e2bswarm/templates/setup.sh +0 -21
  609. package/skills/e2bswarm/tsconfig.json +0 -19
  610. package/skills/generate-book-cover/src/index.ts +0 -694
  611. package/skills/image/src/index-local.ts +0 -206
  612. package/skills/image/src/index.ts +0 -96
  613. package/skills/image/src/providers/google.ts +0 -79
  614. package/skills/image/src/providers/minimax.ts +0 -94
  615. package/skills/image/src/providers/openai.ts +0 -80
  616. package/skills/image/src/providers/xai.ts +0 -73
  617. package/skills/image/src/types.ts +0 -37
  618. package/skills/logo-design/CLAUDE.md +0 -30
  619. package/skills/logo-design/src/index.ts +0 -322
  620. package/skills/managehook/src/server/index.ts +0 -108
  621. package/skills/managemcp/src/server/index.ts +0 -108
  622. package/skills/manageskill/src/server/index.ts +0 -108
  623. package/skills/music/CLAUDE.md +0 -9
  624. package/skills/music/src/index.ts +0 -94
  625. package/skills/music/tsconfig.json +0 -10
  626. package/skills/pdf-read/src/index.ts +0 -320
  627. package/skills/product-mockup/CLAUDE.md +0 -19
  628. package/skills/product-mockup/src/index.ts +0 -290
  629. package/skills/read-pdf/src/index.ts +0 -388
  630. package/skills/remove-background/src/index.ts +0 -405
  631. package/skills/sound-effects/SKILL.md +0 -34
  632. package/skills/sound-effects/package.json +0 -21
  633. package/skills/sound-effects/src/index.ts +0 -172
  634. package/skills/sound-effects/tsconfig.json +0 -8
  635. package/skills/transcript/src/chunker.ts +0 -215
  636. package/skills/transcript/src/formatter.ts +0 -134
  637. package/skills/transcript/src/index-local.ts +0 -226
  638. package/skills/transcript/src/index.ts +0 -110
  639. package/skills/transcript/src/providers/elevenlabs.ts +0 -133
  640. package/skills/transcript/src/providers/gemini.ts +0 -192
  641. package/skills/transcript/src/providers/index.ts +0 -54
  642. package/skills/transcript/src/providers/openai.ts +0 -203
  643. package/skills/transcript/src/types.ts +0 -106
  644. package/skills/video/.env.example +0 -14
  645. package/skills/video/EXAMPLES.md +0 -266
  646. package/skills/video/LICENSE +0 -192
  647. package/skills/video/README.md +0 -174
  648. package/skills/video/src/cli.ts +0 -155
  649. package/skills/video/src/index-local.ts +0 -148
  650. package/skills/video/src/index.ts +0 -96
  651. package/skills/video/src/providers/google-veo.ts +0 -126
  652. package/skills/video/src/providers/index.ts +0 -22
  653. package/skills/video/src/providers/minimax.ts +0 -100
  654. package/skills/video/src/providers/openai-sora.ts +0 -164
  655. package/skills/video/src/providers/runway.ts +0 -159
  656. package/skills/video/src/types.ts +0 -35
  657. package/skills/video/tsconfig.json +0 -22
  658. package/skills/voiceover-casting-assistant/CLAUDE.md +0 -19
  659. package/skills/voiceover-casting-assistant/package.json +0 -27
  660. package/skills/voiceover-casting-assistant/src/index.ts +0 -255
  661. package/skills/voiceover-casting-assistant/tsconfig.json +0 -10
  662. package/skills/webcrawling/src/commands/config.ts +0 -34
  663. package/skills/webcrawling/src/commands/crawl.ts +0 -33
  664. package/skills/webcrawling/src/commands/scrape.ts +0 -32
  665. package/skills/webcrawling/src/commands/sessions.ts +0 -42
  666. package/skills/webcrawling/src/lib/crawler.ts +0 -174
  667. package/skills/webcrawling/src/lib/storage.ts +0 -130
  668. package/skills/webcrawling/src/types/index.ts +0 -45
  669. package/skills/webcrawling/src/utils/logger.ts +0 -30
  670. package/skills/webcrawling/src/utils/paths.ts +0 -28
  671. /package/skills/{audiobook-chapter-proofer → blog-article}/tsconfig.json +0 -0
@@ -1,694 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- /**
4
- * Generate Book Cover - AI-powered book cover generation
5
- *
6
- * This script generates professional book covers using DALL-E 3 with customizable
7
- * genres, dimensions, styles, and text overlays.
8
- */
9
-
10
- import { parseArgs } from "util";
11
- import { mkdir, writeFile, appendFile } from "fs/promises";
12
- import { join } from "path";
13
- import { existsSync, mkdirSync } from "fs";
14
- import OpenAI from "openai";
15
- import { randomUUID } from "crypto";
16
-
17
- // ============================================================================
18
- // Constants & Logging
19
- // ============================================================================
20
-
21
- const SKILL_NAME = "generate-book-cover";
22
- const SESSION_ID = randomUUID().slice(0, 8);
23
- const SKILLS_OUTPUT_DIR = process.env.SKILLS_OUTPUT_DIR || join(process.cwd(), ".skills");
24
- const LOGS_DIR = join(SKILLS_OUTPUT_DIR, "logs", SKILL_NAME);
25
- const SESSION_TIMESTAMP = new Date().toISOString().replace(/[:.]/g, "_").slice(0, 19);
26
-
27
- function ensureDir(dir: string) {
28
- if (!existsSync(dir)) {
29
- mkdirSync(dir, { recursive: true });
30
- }
31
- }
32
-
33
- async function log(message: string, level: "info" | "error" | "success" | "debug" = "info") {
34
- ensureDir(LOGS_DIR);
35
- const timestamp = new Date().toISOString();
36
- const logFile = join(LOGS_DIR, `log_${SESSION_TIMESTAMP}_${SESSION_ID}.log`);
37
- const logEntry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
38
-
39
- try {
40
- await appendFile(logFile, logEntry);
41
- } catch (e) {
42
- // Silent fail for logging
43
- }
44
-
45
- const prefix = level === "error" ? "āŒ" : level === "success" ? "āœ…" : level === "debug" ? "šŸ”" : "ā„¹ļø";
46
- if (level === "error") {
47
- console.error(`${prefix} ${message}`);
48
- } else if (level !== "debug") {
49
- console.log(`${prefix} ${message}`);
50
- }
51
- }
52
-
53
- // ============================================================================
54
- // Types & Interfaces
55
- // ============================================================================
56
-
57
- interface BookCoverOptions {
58
- title: string;
59
- genre: string;
60
- author?: string;
61
- subtitle?: string;
62
- tagline?: string;
63
- series?: string;
64
- style: string;
65
- dimensions: string;
66
- colors?: string;
67
- fontStyle: string;
68
- includeSpine: boolean;
69
- includeBack: boolean;
70
- fullWrap: boolean;
71
- spineWidth?: number;
72
- pageCount: number;
73
- variations: number;
74
- styles?: string[];
75
- quality: "standard" | "hd";
76
- aspectFocus: string;
77
- mood?: string;
78
- output: string;
79
- format: "png" | "jpg" | "both";
80
- prefix?: string;
81
- includeMockup: boolean;
82
- }
83
-
84
- interface DimensionSpec {
85
- format: string;
86
- width: number;
87
- height: number;
88
- dpi: number;
89
- bleed?: number;
90
- }
91
-
92
- interface GeneratedCover {
93
- type: "front" | "spine" | "back" | "full-wrap" | "mockup";
94
- filename: string;
95
- url: string;
96
- prompt: string;
97
- }
98
-
99
- interface CoverMetadata {
100
- title: string;
101
- author?: string;
102
- genre: string;
103
- style: string;
104
- dimensions: DimensionSpec;
105
- colors?: string[];
106
- mood?: string;
107
- generatedAt: string;
108
- aiPrompt: string;
109
- files: {
110
- front?: string;
111
- spine?: string;
112
- back?: string;
113
- fullWrap?: string;
114
- mockup?: string;
115
- };
116
- }
117
-
118
- // ============================================================================
119
- // Constants
120
- // ============================================================================
121
-
122
- const DIMENSIONS: Record<string, DimensionSpec> = {
123
- paperback: { format: "paperback", width: 1800, height: 2700, dpi: 300 },
124
- hardcover: { format: "hardcover", width: 1875, height: 2775, dpi: 300, bleed: 0.125 },
125
- ebook: { format: "ebook", width: 1600, height: 2400, dpi: 300 },
126
- square: { format: "square", width: 2400, height: 2400, dpi: 300 },
127
- trade: { format: "trade", width: 1650, height: 2550, dpi: 300 },
128
- };
129
-
130
- const GENRE_KEYWORDS: Record<string, string[]> = {
131
- fiction: ["literary", "contemporary", "artistic"],
132
- "non-fiction": ["professional", "educational", "informative"],
133
- "sci-fi": ["futuristic", "space", "technology", "alien", "cyberpunk"],
134
- fantasy: ["magical", "medieval", "mystical", "dragons", "enchanted"],
135
- romance: ["romantic", "passionate", "soft lighting", "couples", "flowers"],
136
- thriller: ["dark", "tense", "mysterious", "suspenseful", "urban"],
137
- mystery: ["noir", "detective", "shadows", "clues", "investigation"],
138
- horror: ["dark", "scary", "haunting", "supernatural", "eerie"],
139
- business: ["professional", "corporate", "clean", "modern", "success"],
140
- "self-help": ["uplifting", "inspiring", "peaceful", "transformation"],
141
- biography: ["portrait", "historical", "personal", "legacy"],
142
- history: ["historical", "documentary", "archival", "period"],
143
- children: ["colorful", "playful", "fun", "illustrated", "whimsical"],
144
- "young-adult": ["dynamic", "coming-of-age", "vibrant", "teen"],
145
- literary: ["sophisticated", "artistic", "elegant", "thoughtful"],
146
- };
147
-
148
- const COLOR_PALETTES: Record<string, string[]> = {
149
- ocean: ["deep blue", "turquoise", "white", "sea foam"],
150
- sunset: ["orange", "pink", "purple", "gold"],
151
- monochrome: ["black", "white", "grey"],
152
- forest: ["deep green", "brown", "gold", "moss"],
153
- fire: ["red", "orange", "yellow", "black"],
154
- ice: ["light blue", "white", "silver", "pale purple"],
155
- royal: ["purple", "gold", "deep red", "black"],
156
- earth: ["brown", "tan", "forest green", "terracotta"],
157
- midnight: ["navy", "black", "silver", "deep purple"],
158
- vintage: ["sepia", "cream", "muted gold", "brown"],
159
- };
160
-
161
- // ============================================================================
162
- // Helper Functions
163
- // ============================================================================
164
-
165
- function slugify(text: string): string {
166
- return text
167
- .toLowerCase()
168
- .replace(/[^\w\s-]/g, "")
169
- .replace(/\s+/g, "-")
170
- .replace(/-+/g, "-")
171
- .trim();
172
- }
173
-
174
- function parseColorInput(colorInput?: string): string[] {
175
- if (!colorInput) return [];
176
-
177
- // Check if it's a predefined palette
178
- if (COLOR_PALETTES[colorInput.toLowerCase()]) {
179
- return COLOR_PALETTES[colorInput.toLowerCase()];
180
- }
181
-
182
- // Parse as comma-separated colors
183
- return colorInput.split(",").map(c => c.trim()).filter(Boolean);
184
- }
185
-
186
- function calculateSpineWidth(pageCount: number, paperType: "standard" | "premium" = "standard"): number {
187
- // Standard calculation: pages * paper thickness
188
- // 60# paper = 0.0025 inches per sheet (0.005 per page since it's double-sided)
189
- // 70# paper = 0.003 inches per sheet
190
- const thickness = paperType === "standard" ? 0.0025 : 0.003;
191
- return (pageCount / 2) * thickness;
192
- }
193
-
194
- function generatePrompt(options: BookCoverOptions, coverType: "front" | "spine" | "back" | "full-wrap"): string {
195
- const { title, genre, style, colors, mood, author, subtitle, series, fontStyle } = options;
196
-
197
- // Get genre-specific keywords
198
- const genreKeywords = GENRE_KEYWORDS[genre] || GENRE_KEYWORDS.fiction;
199
-
200
- // Parse colors
201
- const colorList = colors ? parseColorInput(colors) : [];
202
-
203
- let prompt = `Professional ${genre} book cover design, ${style} style. `;
204
-
205
- // Cover type specific
206
- if (coverType === "front") {
207
- prompt += `Front cover only. `;
208
-
209
- // Add title and typography
210
- prompt += `Large bold title "${title}" prominently displayed. `;
211
- if (fontStyle) {
212
- prompt += `${fontStyle} typography. `;
213
- }
214
-
215
- if (author) {
216
- prompt += `Author name "${author}" elegantly placed. `;
217
- }
218
-
219
- if (subtitle) {
220
- prompt += `Subtitle "${subtitle}" in smaller text. `;
221
- }
222
-
223
- if (series) {
224
- prompt += `Series indicator "${series}". `;
225
- }
226
- } else if (coverType === "spine") {
227
- prompt += `Book spine design with vertical text. `;
228
- prompt += `Title "${title}" and author "${author || "Author"}" on spine. `;
229
- } else if (coverType === "back") {
230
- prompt += `Back cover design with space for book description. `;
231
- prompt += `Clean layout with barcode area. `;
232
- } else if (coverType === "full-wrap") {
233
- prompt += `Complete book wraparound cover (front, spine, and back). `;
234
- prompt += `Title "${title}" on front and spine. `;
235
- }
236
-
237
- // Add genre elements
238
- prompt += `Incorporating ${genreKeywords.slice(0, 3).join(", ")} elements. `;
239
-
240
- // Add style specifics
241
- switch (style) {
242
- case "minimalist":
243
- prompt += `Clean, simple design with lots of negative space. Minimal elements. `;
244
- break;
245
- case "illustrated":
246
- prompt += `Hand-drawn or digitally illustrated artwork. Artistic and detailed. `;
247
- break;
248
- case "photographic":
249
- prompt += `High-quality photographic imagery. Realistic and cinematic. `;
250
- break;
251
- case "typographic":
252
- prompt += `Typography-focused design. Bold, creative text treatment as main element. `;
253
- break;
254
- case "abstract":
255
- prompt += `Abstract shapes and patterns. Modern and artistic interpretation. `;
256
- break;
257
- case "vintage":
258
- prompt += `Vintage or retro aesthetic. Classic design elements. `;
259
- break;
260
- case "modern":
261
- prompt += `Contemporary and sleek design. Current trends. `;
262
- break;
263
- case "bold":
264
- prompt += `Strong, impactful design. High contrast and dramatic. `;
265
- break;
266
- case "elegant":
267
- prompt += `Sophisticated and refined. Graceful composition. `;
268
- break;
269
- }
270
-
271
- // Add colors
272
- if (colorList.length > 0) {
273
- prompt += `Color palette: ${colorList.join(", ")}. `;
274
- }
275
-
276
- // Add mood
277
- if (mood) {
278
- prompt += `Overall mood: ${mood}. `;
279
- }
280
-
281
- // Add professional requirements
282
- prompt += `Professional quality, suitable for print. High-resolution, balanced composition. `;
283
- prompt += `Cover should be visually appealing and genre-appropriate.`;
284
-
285
- return prompt;
286
- }
287
-
288
- async function generateImageWithDallE(
289
- openai: OpenAI,
290
- prompt: string,
291
- quality: "standard" | "hd",
292
- dimensions: DimensionSpec
293
- ): Promise<string> {
294
- log(`Generating image with DALL-E 3...`, "debug");
295
- log(`Prompt: ${prompt.substring(0, 100)}...`, "debug");
296
-
297
- try {
298
- // DALL-E 3 only supports 1024x1024, 1024x1792, or 1792x1024
299
- // We'll request the appropriate size and note that post-processing would be needed
300
- const aspectRatio = dimensions.width / dimensions.height;
301
- let size: "1024x1024" | "1024x1792" | "1792x1024" = "1024x1792";
302
-
303
- if (Math.abs(aspectRatio - 1) < 0.1) {
304
- size = "1024x1024"; // Square
305
- } else if (aspectRatio > 1) {
306
- size = "1792x1024"; // Landscape
307
- } else {
308
- size = "1024x1792"; // Portrait
309
- }
310
-
311
- const response = await openai.images.generate({
312
- model: "dall-e-3",
313
- prompt: prompt,
314
- n: 1,
315
- size: size,
316
- quality: quality,
317
- style: "vivid",
318
- });
319
-
320
- const imageUrl = response.data[0]?.url;
321
- if (!imageUrl) {
322
- throw new Error("No image URL returned from DALL-E");
323
- }
324
-
325
- log(`Image generated successfully`, "success");
326
- return imageUrl;
327
- } catch (error) {
328
- log(`Failed to generate image: ${error}`, "error");
329
- throw error;
330
- }
331
- }
332
-
333
- async function downloadImage(url: string, outputPath: string): Promise<void> {
334
- log(`Downloading image...`, "debug");
335
- log(`URL: ${url.substring(0, 50)}...`, "debug");
336
- log(`Output: ${outputPath}`, "debug");
337
-
338
- try {
339
- const response = await fetch(url);
340
- if (!response.ok) {
341
- throw new Error(`Failed to download image: ${response.statusText}`);
342
- }
343
-
344
- const arrayBuffer = await response.arrayBuffer();
345
- const buffer = Buffer.from(arrayBuffer);
346
-
347
- await writeFile(outputPath, buffer);
348
- log(`Image saved successfully`, "success");
349
- } catch (error) {
350
- log(`Failed to download image: ${error}`, "error");
351
- throw error;
352
- }
353
- }
354
-
355
- async function generateCover(
356
- openai: OpenAI,
357
- options: BookCoverOptions,
358
- coverType: "front" | "spine" | "back" | "full-wrap",
359
- outputDir: string,
360
- filePrefix: string
361
- ): Promise<GeneratedCover> {
362
- const prompt = generatePrompt(options, coverType);
363
- const dimensions = DIMENSIONS[options.dimensions];
364
-
365
- const imageUrl = await generateImageWithDallE(openai, prompt, options.quality, dimensions);
366
-
367
- const ext = options.format === "jpg" ? "jpg" : "png";
368
- const filename = `${filePrefix}-${coverType}.${ext}`;
369
- const filepath = join(outputDir, filename);
370
-
371
- await downloadImage(imageUrl, filepath);
372
-
373
- return {
374
- type: coverType,
375
- filename,
376
- url: imageUrl,
377
- prompt,
378
- };
379
- }
380
-
381
- async function generateMockup(
382
- openai: OpenAI,
383
- options: BookCoverOptions,
384
- frontCoverPath: string,
385
- outputDir: string,
386
- filePrefix: string
387
- ): Promise<GeneratedCover> {
388
- log(`Generating 3D book mockup...`, "info");
389
-
390
- const prompt = `3D realistic book mockup, ${options.dimensions} book standing upright at a slight angle,
391
- professional photography, clean white background, soft shadows, studio lighting,
392
- photorealistic rendering, high quality product photography`;
393
-
394
- const dimensions = { format: "mockup", width: 2048, height: 2048, dpi: 300 };
395
-
396
- const imageUrl = await generateImageWithDallE(openai, prompt, "hd", dimensions);
397
-
398
- const ext = options.format === "jpg" ? "jpg" : "png";
399
- const filename = `${filePrefix}-mockup.${ext}`;
400
- const filepath = join(outputDir, filename);
401
-
402
- await downloadImage(imageUrl, filepath);
403
-
404
- return {
405
- type: "mockup",
406
- filename,
407
- url: imageUrl,
408
- prompt,
409
- };
410
- }
411
-
412
- async function saveMetadata(
413
- options: BookCoverOptions,
414
- generatedCovers: GeneratedCover[],
415
- outputDir: string
416
- ): Promise<void> {
417
- const metadata: CoverMetadata = {
418
- title: options.title,
419
- author: options.author,
420
- genre: options.genre,
421
- style: options.style,
422
- dimensions: DIMENSIONS[options.dimensions],
423
- colors: options.colors ? parseColorInput(options.colors) : undefined,
424
- mood: options.mood,
425
- generatedAt: new Date().toISOString(),
426
- aiPrompt: generatedCovers[0]?.prompt || "",
427
- files: {},
428
- };
429
-
430
- for (const cover of generatedCovers) {
431
- metadata.files[cover.type === "full-wrap" ? "fullWrap" : cover.type] = cover.filename;
432
- }
433
-
434
- const metadataPath = join(outputDir, "metadata.json");
435
- await writeFile(metadataPath, JSON.stringify(metadata, null, 2));
436
-
437
- log(`Metadata saved to ${metadataPath}`, "success");
438
- }
439
-
440
- async function generateReadme(outputDir: string): Promise<void> {
441
- const readme = `# Generated Book Covers
442
-
443
- This directory contains AI-generated book covers created with the generate-book-cover skill.
444
-
445
- ## Using Your Covers
446
-
447
- ### For Digital Publishing (Ebook)
448
- - Use the \`*-front.png\` file
449
- - Upload to Amazon KDP, Draft2Digital, or other platforms
450
- - Recommended: 1600x2400px for ebooks
451
-
452
- ### For Print Publishing
453
- - Use the \`*-full-wrap.png\` file if available (includes front, spine, and back)
454
- - Or use individual \`*-front.png\`, \`*-spine.png\`, \`*-back.png\` files
455
- - Ensure 300 DPI resolution for professional printing
456
- - Convert RGB to CMYK before sending to printer
457
-
458
- ### For Marketing
459
- - Use the \`*-mockup.png\` file for promotional materials
460
- - Share on social media, websites, and advertising
461
-
462
- ## File Formats
463
-
464
- - **PNG**: Lossless format, best for editing and archiving
465
- - **JPG**: Smaller file size, suitable for web use
466
-
467
- ## Next Steps
468
-
469
- 1. Review the generated covers in this directory
470
- 2. Edit text overlays if needed (use Photoshop, GIMP, or Canva)
471
- 3. Convert to CMYK for print (use Adobe Photoshop or online tools)
472
- 4. Upload to your publishing platform
473
-
474
- ## Metadata
475
-
476
- Each cover includes a \`metadata.json\` file with:
477
- - Book title and author
478
- - Genre and style used
479
- - Dimensions and specifications
480
- - Color palette
481
- - AI prompt used for generation
482
-
483
- ## Need Help?
484
-
485
- - Regenerate with different options: \`skills run generate-book-cover --help\`
486
- - Visit: https://skills.md/docs/generate-book-cover
487
- - Support: support@skills.md
488
- `;
489
-
490
- const readmePath = join(outputDir, "README.md");
491
- await writeFile(readmePath, readme);
492
-
493
- log(`README saved to ${readmePath}`, "success");
494
- }
495
-
496
- // ============================================================================
497
- // Main Function
498
- // ============================================================================
499
-
500
- async function main() {
501
- log(`Starting ${SKILL_NAME} session: ${SESSION_ID}`, "debug");
502
-
503
- // Parse command-line arguments
504
- const { values, positionals } = parseArgs({
505
- args: process.argv.slice(2),
506
- options: {
507
- genre: { type: "string", default: "fiction" },
508
- author: { type: "string" },
509
- subtitle: { type: "string" },
510
- tagline: { type: "string" },
511
- series: { type: "string" },
512
- style: { type: "string", default: "modern" },
513
- dimensions: { type: "string", default: "paperback" },
514
- colors: { type: "string" },
515
- "font-style": { type: "string", default: "serif" },
516
- "include-spine": { type: "boolean", default: false },
517
- "include-back": { type: "boolean", default: false },
518
- "full-wrap": { type: "boolean", default: false },
519
- "spine-width": { type: "string" },
520
- "page-count": { type: "string", default: "200" },
521
- variations: { type: "string", default: "1" },
522
- styles: { type: "string" },
523
- quality: { type: "string", default: "hd" },
524
- "aspect-focus": { type: "string", default: "center" },
525
- mood: { type: "string" },
526
- output: { type: "string" },
527
- format: { type: "string", default: "png" },
528
- prefix: { type: "string" },
529
- "include-mockup": { type: "boolean", default: false },
530
- help: { type: "boolean", short: "h" },
531
- },
532
- allowPositionals: true,
533
- });
534
-
535
- // Show help
536
- if (values.help) {
537
- console.log(`
538
- Generate Book Cover - AI-Powered Book Cover Design
539
-
540
- Usage:
541
- skills run generate-book-cover -- "Book Title" [options]
542
-
543
- Options:
544
- --genre <string> Genre (fiction, non-fiction, sci-fi, etc.) [default: fiction]
545
- --author <string> Author name
546
- --subtitle <string> Book subtitle
547
- --style <string> Visual style (modern, minimalist, etc.) [default: modern]
548
- --dimensions <string> Format (paperback, hardcover, ebook) [default: paperback]
549
- --colors <string> Color palette
550
- --output <path> Output directory
551
- --help, -h Show this help
552
- `);
553
- process.exit(0);
554
- }
555
-
556
- // Get title from positional argument
557
- const title = positionals[0];
558
- if (!title) {
559
- log("Error: Book title is required", "error");
560
- console.error("Usage: skills run generate-book-cover -- \"Your Book Title\" [options]");
561
- process.exit(1);
562
- }
563
-
564
- // Get OpenAI API key
565
- const apiKey = process.env.OPENAI_API_KEY;
566
- if (!apiKey) {
567
- log("Error: OPENAI_API_KEY environment variable is required", "error");
568
- console.error("\nSet it with: export OPENAI_API_KEY='sk-...'");
569
- process.exit(1);
570
- }
571
-
572
- // Initialize OpenAI client
573
- const openai = new OpenAI({ apiKey });
574
-
575
- // Parse options
576
- const options: BookCoverOptions = {
577
- title,
578
- genre: values.genre as string,
579
- author: values.author as string | undefined,
580
- subtitle: values.subtitle as string | undefined,
581
- tagline: values.tagline as string | undefined,
582
- series: values.series as string | undefined,
583
- style: values.style as string,
584
- dimensions: values.dimensions as string,
585
- colors: values.colors as string | undefined,
586
- fontStyle: values["font-style"] as string,
587
- includeSpine: values["include-spine"] as boolean,
588
- includeBack: values["include-back"] as boolean,
589
- fullWrap: values["full-wrap"] as boolean,
590
- spineWidth: values["spine-width"] ? parseFloat(values["spine-width"] as string) : undefined,
591
- pageCount: parseInt(values["page-count"] as string),
592
- variations: parseInt(values.variations as string),
593
- styles: values.styles ? (values.styles as string).split(",").map(s => s.trim()) : undefined,
594
- quality: (values.quality as "standard" | "hd") || "hd",
595
- aspectFocus: values["aspect-focus"] as string,
596
- mood: values.mood as string | undefined,
597
- output: values.output as string || process.env.SKILLS_OUTPUT_DIR || ".skills/exports/generate-book-cover",
598
- format: (values.format as "png" | "jpg" | "both") || "png",
599
- prefix: values.prefix as string | undefined,
600
- includeMockup: values["include-mockup"] as boolean,
601
- };
602
-
603
- // Validate dimensions
604
- if (!DIMENSIONS[options.dimensions]) {
605
- log(`Error: Invalid dimensions "${options.dimensions}"`, "error");
606
- console.error(`Valid options: ${Object.keys(DIMENSIONS).join(", ")}`);
607
- process.exit(1);
608
- }
609
-
610
- // Calculate spine width if needed
611
- if (options.includeSpine && !options.spineWidth) {
612
- options.spineWidth = calculateSpineWidth(options.pageCount);
613
- }
614
-
615
- // Create output directory
616
- const filePrefix = options.prefix || slugify(title);
617
- const outputDir = join(options.output, filePrefix);
618
- await mkdir(outputDir, { recursive: true });
619
-
620
- log("Configuration:", "info");
621
- log(` Title: ${options.title}`, "info");
622
- log(` Genre: ${options.genre}`, "info");
623
- log(` Style: ${options.style}`, "info");
624
- log(` Output: ${outputDir}`, "info");
625
-
626
- // Generate covers
627
- const generatedCovers: GeneratedCover[] = [];
628
-
629
- try {
630
- // Generate variations if requested
631
- const stylesToGenerate = options.styles || [options.style];
632
- const numVariations = Math.min(options.variations, stylesToGenerate.length);
633
-
634
- for (let i = 0; i < numVariations; i++) {
635
- const variantStyle = stylesToGenerate[i] || options.style;
636
- const variantOptions = { ...options, style: variantStyle };
637
- const variantPrefix = numVariations > 1 ? `${filePrefix}-${i + 1}` : filePrefix;
638
-
639
- log(`Generating variation ${i + 1} of ${numVariations} (${variantStyle} style)`, "info");
640
-
641
- // Generate front cover (always)
642
- const frontCover = await generateCover(openai, variantOptions, "front", outputDir, variantPrefix);
643
- generatedCovers.push(frontCover);
644
-
645
- // Generate spine if requested
646
- if (options.includeSpine) {
647
- const spineCover = await generateCover(openai, variantOptions, "spine", outputDir, variantPrefix);
648
- generatedCovers.push(spineCover);
649
- }
650
-
651
- // Generate back cover if requested
652
- if (options.includeBack) {
653
- const backCover = await generateCover(openai, variantOptions, "back", outputDir, variantPrefix);
654
- generatedCovers.push(backCover);
655
- }
656
-
657
- // Generate full wrap if requested
658
- if (options.fullWrap) {
659
- const fullWrapCover = await generateCover(openai, variantOptions, "full-wrap", outputDir, variantPrefix);
660
- generatedCovers.push(fullWrapCover);
661
- }
662
-
663
- // Generate mockup if requested
664
- if (options.includeMockup) {
665
- const mockup = await generateMockup(openai, variantOptions, frontCover.filename, outputDir, variantPrefix);
666
- generatedCovers.push(mockup);
667
- }
668
-
669
- // Save metadata for this variation
670
- await saveMetadata(variantOptions, generatedCovers, outputDir);
671
- }
672
-
673
- // Generate README
674
- await generateReadme(outputDir);
675
-
676
- // Success summary
677
- log("Book cover generation complete!", "success");
678
- console.log(`\nšŸ“ Output directory: ${outputDir}`);
679
- console.log(`\nšŸ“Š Generated files:`);
680
- for (const cover of generatedCovers) {
681
- console.log(` - ${cover.filename} (${cover.type})`);
682
- }
683
-
684
- } catch (error) {
685
- log(`Error generating book cover: ${error}`, "error");
686
- process.exit(1);
687
- }
688
- }
689
-
690
- // Run the script
691
- main().catch(error => {
692
- console.error("Fatal error:", error);
693
- process.exit(1);
694
- });