@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
@@ -5,1000 +5,17 @@
5
5
  * Generates complete project boilerplates from plain English descriptions
6
6
  */
7
7
 
8
- import { parseArgs } from "util";
9
- import { existsSync, mkdirSync, writeFileSync } from "fs";
10
8
  import { spawnSync } from "child_process";
11
- import { join } from "path";
12
-
13
- // ============================================================================
14
- // Security: Allowlist for Package Managers
15
- // ============================================================================
16
-
17
- const ALLOWED_PACKAGE_MANAGERS = ['npm', 'yarn', 'pnpm', 'bun'] as const;
18
-
19
- function validatePackageManager(pm: string): asserts pm is PackageManager {
20
- if (!ALLOWED_PACKAGE_MANAGERS.includes(pm as PackageManager)) {
21
- throw new Error(
22
- `Invalid package manager: "${pm}". Must be one of: ${ALLOWED_PACKAGE_MANAGERS.join(', ')}`
23
- );
24
- }
25
- }
26
-
27
- // ============================================================================
28
- // Types & Interfaces
29
- // ============================================================================
30
-
31
- type Template =
32
- | 'next' | 'react' | 'vue' | 'svelte' | 'astro' | 'remix'
33
- | 'express' | 'fastapi' | 'hono' | 'elysia' | 'nestjs'
34
- | 't3' | 'nextjs-supabase' | 'remix-prisma'
35
- | 'rest-api' | 'graphql' | 'trpc'
36
- | 'cli' | 'chrome-extension' | 'electron' | 'react-native' | 'tauri' | 'monorepo';
37
-
38
- type Database = 'prisma' | 'drizzle' | 'supabase' | 'none';
39
- type Auth = 'nextauth' | 'clerk' | 'lucia' | 'supabase' | 'none';
40
- type Testing = 'vitest' | 'playwright' | 'both' | 'none';
41
- type State = 'zustand' | 'jotai' | 'redux' | 'none';
42
- type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';
43
-
44
- interface ScaffoldOptions {
45
- description?: string;
46
- template?: Template;
47
- name?: string;
48
- output?: string;
49
- typescript: boolean;
50
- tailwind: boolean;
51
- shadcn: boolean;
52
- database: Database;
53
- auth: Auth;
54
- testing: Testing;
55
- state: State;
56
- git: boolean;
57
- install: boolean;
58
- pm: PackageManager;
59
- dryRun: boolean;
60
- verbose: boolean;
61
- }
62
-
63
- interface ProjectConfig {
64
- name: string;
65
- template: Template;
66
- outputDir: string;
67
- dependencies: string[];
68
- devDependencies: string[];
69
- scripts: Record<string, string>;
70
- files: Array<{ path: string; content: string }>;
71
- features: string[];
72
- }
73
-
74
- // ============================================================================
75
- // Template Definitions
76
- // ============================================================================
77
-
78
- const TEMPLATES: Record<Template, {
79
- name: string;
80
- description: string;
81
- category: string;
82
- defaultDeps: string[];
83
- defaultDevDeps: string[];
84
- }> = {
85
- next: {
86
- name: 'Next.js 15',
87
- description: 'Next.js 15 App Router with React, TypeScript, and Tailwind',
88
- category: 'frontend',
89
- defaultDeps: ['next', 'react', 'react-dom'],
90
- defaultDevDeps: ['@types/node', '@types/react', '@types/react-dom', 'typescript'],
91
- },
92
- react: {
93
- name: 'React + Vite',
94
- description: 'Vite + React + TypeScript',
95
- category: 'frontend',
96
- defaultDeps: ['react', 'react-dom'],
97
- defaultDevDeps: ['@types/react', '@types/react-dom', '@vitejs/plugin-react', 'typescript', 'vite'],
98
- },
99
- vue: {
100
- name: 'Vue 3 + Vite',
101
- description: 'Vite + Vue 3 + TypeScript',
102
- category: 'frontend',
103
- defaultDeps: ['vue'],
104
- defaultDevDeps: ['@vitejs/plugin-vue', 'typescript', 'vite', 'vue-tsc'],
105
- },
106
- svelte: {
107
- name: 'SvelteKit',
108
- description: 'SvelteKit + TypeScript',
109
- category: 'frontend',
110
- defaultDeps: ['svelte'],
111
- defaultDevDeps: ['@sveltejs/adapter-auto', '@sveltejs/kit', 'typescript', 'vite'],
112
- },
113
- astro: {
114
- name: 'Astro',
115
- description: 'Astro + TypeScript',
116
- category: 'frontend',
117
- defaultDeps: ['astro'],
118
- defaultDevDeps: ['@astrojs/tailwind', 'typescript'],
119
- },
120
- remix: {
121
- name: 'Remix',
122
- description: 'Remix + TypeScript',
123
- category: 'frontend',
124
- defaultDeps: ['@remix-run/node', '@remix-run/react', '@remix-run/serve', 'react', 'react-dom'],
125
- defaultDevDeps: ['@remix-run/dev', '@types/react', '@types/react-dom', 'typescript'],
126
- },
127
- express: {
128
- name: 'Express.js',
129
- description: 'Express + TypeScript',
130
- category: 'backend',
131
- defaultDeps: ['express', 'cors', 'dotenv'],
132
- defaultDevDeps: ['@types/express', '@types/cors', '@types/node', 'typescript', 'tsx'],
133
- },
134
- fastapi: {
135
- name: 'FastAPI',
136
- description: 'FastAPI + Python',
137
- category: 'backend',
138
- defaultDeps: ['fastapi', 'uvicorn', 'pydantic'],
139
- defaultDevDeps: ['black', 'pytest'],
140
- },
141
- hono: {
142
- name: 'Hono',
143
- description: 'Hono + TypeScript (edge-ready)',
144
- category: 'backend',
145
- defaultDeps: ['hono'],
146
- defaultDevDeps: ['@types/node', 'typescript'],
147
- },
148
- elysia: {
149
- name: 'Elysia',
150
- description: 'Elysia + Bun + TypeScript',
151
- category: 'backend',
152
- defaultDeps: ['elysia'],
153
- defaultDevDeps: ['bun-types'],
154
- },
155
- nestjs: {
156
- name: 'NestJS',
157
- description: 'NestJS + TypeScript',
158
- category: 'backend',
159
- defaultDeps: ['@nestjs/common', '@nestjs/core', '@nestjs/platform-express', 'reflect-metadata', 'rxjs'],
160
- defaultDevDeps: ['@nestjs/cli', '@types/node', 'typescript'],
161
- },
162
- t3: {
163
- name: 'T3 Stack',
164
- description: 'Next.js + tRPC + Prisma + NextAuth',
165
- category: 'fullstack',
166
- defaultDeps: ['next', 'react', 'react-dom', '@trpc/client', '@trpc/server', '@trpc/react-query', '@tanstack/react-query', 'zod'],
167
- defaultDevDeps: ['@types/node', '@types/react', '@types/react-dom', 'typescript'],
168
- },
169
- 'nextjs-supabase': {
170
- name: 'Next.js + Supabase',
171
- description: 'Next.js + Supabase',
172
- category: 'fullstack',
173
- defaultDeps: ['next', 'react', 'react-dom', '@supabase/supabase-js'],
174
- defaultDevDeps: ['@types/node', '@types/react', '@types/react-dom', 'typescript'],
175
- },
176
- 'remix-prisma': {
177
- name: 'Remix + Prisma',
178
- description: 'Remix + Prisma ORM',
179
- category: 'fullstack',
180
- defaultDeps: ['@remix-run/node', '@remix-run/react', '@remix-run/serve', 'react', 'react-dom', '@prisma/client'],
181
- defaultDevDeps: ['@remix-run/dev', '@types/react', '@types/react-dom', 'typescript', 'prisma'],
182
- },
183
- 'rest-api': {
184
- name: 'REST API',
185
- description: 'REST API boilerplate',
186
- category: 'api',
187
- defaultDeps: ['express', 'cors', 'dotenv'],
188
- defaultDevDeps: ['@types/express', '@types/cors', '@types/node', 'typescript', 'tsx'],
189
- },
190
- graphql: {
191
- name: 'GraphQL API',
192
- description: 'GraphQL API (Apollo Server)',
193
- category: 'api',
194
- defaultDeps: ['@apollo/server', 'graphql'],
195
- defaultDevDeps: ['@types/node', 'typescript'],
196
- },
197
- trpc: {
198
- name: 'tRPC API',
199
- description: 'tRPC API',
200
- category: 'api',
201
- defaultDeps: ['@trpc/server', 'zod'],
202
- defaultDevDeps: ['@types/node', 'typescript'],
203
- },
204
- cli: {
205
- name: 'CLI Tool',
206
- description: 'CLI tool with Commander.js or Bun',
207
- category: 'other',
208
- defaultDeps: ['commander'],
209
- defaultDevDeps: ['@types/node', 'typescript'],
210
- },
211
- 'chrome-extension': {
212
- name: 'Chrome Extension',
213
- description: 'Chrome extension boilerplate',
214
- category: 'other',
215
- defaultDeps: [],
216
- defaultDevDeps: ['@types/chrome', 'typescript'],
217
- },
218
- electron: {
219
- name: 'Electron',
220
- description: 'Electron desktop app',
221
- category: 'other',
222
- defaultDeps: ['electron'],
223
- defaultDevDeps: ['@types/node', 'typescript'],
224
- },
225
- 'react-native': {
226
- name: 'React Native',
227
- description: 'React Native mobile app',
228
- category: 'other',
229
- defaultDeps: ['react', 'react-native'],
230
- defaultDevDeps: ['@types/react', 'typescript'],
231
- },
232
- tauri: {
233
- name: 'Tauri',
234
- description: 'Tauri desktop app',
235
- category: 'other',
236
- defaultDeps: ['@tauri-apps/api'],
237
- defaultDevDeps: ['@tauri-apps/cli', 'typescript'],
238
- },
239
- monorepo: {
240
- name: 'Turborepo Monorepo',
241
- description: 'Turborepo monorepo',
242
- category: 'other',
243
- defaultDeps: [],
244
- defaultDevDeps: ['turbo'],
245
- },
246
- };
247
-
248
- // ============================================================================
249
- // AI Template Detection
250
- // ============================================================================
251
-
252
- async function detectTemplate(description: string, verbose: boolean): Promise<{ template: Template; features: string[] }> {
253
- const apiKey = process.env.OPENAI_API_KEY || process.env.ANTHROPIC_API_KEY;
254
-
255
- if (!apiKey) {
256
- console.error('❌ No API key found for AI detection.');
257
- console.error('Set OPENAI_API_KEY or ANTHROPIC_API_KEY, or use --template to specify manually.');
258
- process.exit(1);
259
- }
260
-
261
- if (verbose) {
262
- console.log('🤖 Analyzing description with AI...');
263
- }
264
-
265
- const prompt = `Analyze this project description and select the BEST matching template from the list below.
266
-
267
- Project Description: "${description}"
268
-
269
- Available Templates:
270
- ${Object.entries(TEMPLATES).map(([key, val]) => `- ${key}: ${val.description}`).join('\n')}
271
-
272
- Also suggest which of these features to include:
273
- - database: prisma, drizzle, supabase, none
274
- - auth: nextauth, clerk, lucia, supabase, none
275
- - testing: vitest, playwright, both, none
276
- - state: zustand, jotai, redux, none
277
- - shadcn: true, false
278
- - tailwind: true, false
279
-
280
- Respond ONLY with valid JSON in this format:
281
- {
282
- "template": "template-name",
283
- "features": {
284
- "database": "prisma or drizzle or supabase or none",
285
- "auth": "nextauth or clerk or lucia or supabase or none",
286
- "testing": "vitest or playwright or both or none",
287
- "state": "zustand or jotai or redux or none",
288
- "shadcn": true or false,
289
- "tailwind": true or false
290
- },
291
- "reasoning": "Brief explanation of why this template was chosen"
292
- }`;
293
-
294
- try {
295
- let response: any;
296
-
297
- if (process.env.OPENAI_API_KEY) {
298
- // Use OpenAI
299
- const res = await fetch('https://api.openai.com/v1/chat/completions', {
300
- method: 'POST',
301
- headers: {
302
- 'Content-Type': 'application/json',
303
- 'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`,
304
- },
305
- body: JSON.stringify({
306
- model: 'gpt-4o-mini',
307
- messages: [
308
- { role: 'system', content: 'You are a helpful assistant that selects appropriate project templates.' },
309
- { role: 'user', content: prompt }
310
- ],
311
- temperature: 0.3,
312
- }),
313
- });
314
-
315
- if (!res.ok) {
316
- throw new Error(`OpenAI API error: ${res.statusText}`);
317
- }
318
-
319
- const data = await res.json();
320
- response = JSON.parse(data.choices[0].message.content);
321
- } else {
322
- // Use Anthropic
323
- const res = await fetch('https://api.anthropic.com/v1/messages', {
324
- method: 'POST',
325
- headers: {
326
- 'Content-Type': 'application/json',
327
- 'x-api-key': process.env.ANTHROPIC_API_KEY!,
328
- 'anthropic-version': '2023-06-01',
329
- },
330
- body: JSON.stringify({
331
- model: 'claude-3-5-sonnet-20241022',
332
- max_tokens: 1024,
333
- messages: [
334
- { role: 'user', content: prompt }
335
- ],
336
- }),
337
- });
338
-
339
- if (!res.ok) {
340
- throw new Error(`Anthropic API error: ${res.statusText}`);
341
- }
342
-
343
- const data = await res.json();
344
- response = JSON.parse(data.content[0].text);
345
- }
346
-
347
- if (verbose) {
348
- console.log(`✅ Selected template: ${response.template}`);
349
- console.log(`💡 Reasoning: ${response.reasoning}`);
350
- }
351
-
352
- // Convert features object to array of strings
353
- const featuresArray: string[] = [];
354
- if (response.features.database && response.features.database !== 'none') {
355
- featuresArray.push(`database:${response.features.database}`);
356
- }
357
- if (response.features.auth && response.features.auth !== 'none') {
358
- featuresArray.push(`auth:${response.features.auth}`);
359
- }
360
- if (response.features.testing && response.features.testing !== 'none') {
361
- featuresArray.push(`testing:${response.features.testing}`);
362
- }
363
- if (response.features.state && response.features.state !== 'none') {
364
- featuresArray.push(`state:${response.features.state}`);
365
- }
366
- if (response.features.shadcn) {
367
- featuresArray.push('shadcn');
368
- }
369
- if (response.features.tailwind) {
370
- featuresArray.push('tailwind');
371
- }
372
-
373
- return {
374
- template: response.template,
375
- features: featuresArray,
376
- };
377
- } catch (error) {
378
- console.error('❌ AI detection failed:', error);
379
- console.error('Please specify --template manually.');
380
- process.exit(1);
381
- }
382
- }
383
-
384
- // ============================================================================
385
- // Project Generation
386
- // ============================================================================
387
-
388
- function generateProjectConfig(options: ScaffoldOptions): ProjectConfig {
389
- const template = TEMPLATES[options.template!];
390
- const name = options.name || 'my-app';
391
- const outputDir = options.output || join(process.cwd(), name);
392
-
393
- const config: ProjectConfig = {
394
- name,
395
- template: options.template!,
396
- outputDir,
397
- dependencies: [...template.defaultDeps],
398
- devDependencies: [...template.defaultDevDeps],
399
- scripts: {},
400
- files: [],
401
- features: [],
402
- };
403
-
404
- // Add TypeScript
405
- if (options.typescript) {
406
- config.features.push('typescript');
407
- }
408
-
409
- // Add Tailwind CSS
410
- if (options.tailwind) {
411
- config.dependencies.push('tailwindcss', 'autoprefixer', 'postcss');
412
- config.features.push('tailwind');
413
- }
414
-
415
- // Add shadcn/ui
416
- if (options.shadcn) {
417
- config.dependencies.push('class-variance-authority', 'clsx', 'tailwind-merge');
418
- config.devDependencies.push('tailwindcss-animate');
419
- config.features.push('shadcn');
420
- }
421
-
422
- // Add database
423
- if (options.database !== 'none') {
424
- config.features.push(`database:${options.database}`);
425
-
426
- if (options.database === 'prisma') {
427
- config.dependencies.push('@prisma/client');
428
- config.devDependencies.push('prisma');
429
- } else if (options.database === 'drizzle') {
430
- config.dependencies.push('drizzle-orm', 'postgres');
431
- config.devDependencies.push('drizzle-kit');
432
- } else if (options.database === 'supabase') {
433
- config.dependencies.push('@supabase/supabase-js');
434
- }
435
- }
436
-
437
- // Add authentication
438
- if (options.auth !== 'none') {
439
- config.features.push(`auth:${options.auth}`);
440
-
441
- if (options.auth === 'nextauth') {
442
- config.dependencies.push('next-auth');
443
- } else if (options.auth === 'clerk') {
444
- config.dependencies.push('@clerk/nextjs');
445
- } else if (options.auth === 'lucia') {
446
- config.dependencies.push('lucia');
447
- }
448
- }
449
-
450
- // Add testing
451
- if (options.testing !== 'none') {
452
- config.features.push(`testing:${options.testing}`);
453
-
454
- if (options.testing === 'vitest' || options.testing === 'both') {
455
- config.devDependencies.push('vitest', '@vitest/ui');
456
- }
457
- if (options.testing === 'playwright' || options.testing === 'both') {
458
- config.devDependencies.push('@playwright/test');
459
- }
460
- }
461
-
462
- // Add state management
463
- if (options.state !== 'none') {
464
- config.features.push(`state:${options.state}`);
465
-
466
- if (options.state === 'zustand') {
467
- config.dependencies.push('zustand');
468
- } else if (options.state === 'jotai') {
469
- config.dependencies.push('jotai');
470
- } else if (options.state === 'redux') {
471
- config.dependencies.push('@reduxjs/toolkit', 'react-redux');
472
- }
473
- }
474
-
475
- // Add ESLint and Prettier
476
- config.devDependencies.push('eslint', 'prettier');
477
-
478
- return config;
479
- }
480
-
481
- function generateFiles(config: ProjectConfig, options: ScaffoldOptions): void {
482
- const { outputDir, name, template } = config;
483
-
484
- // Create output directory
485
- if (!existsSync(outputDir)) {
486
- mkdirSync(outputDir, { recursive: true });
487
- }
488
-
489
- // Generate package.json
490
- const packageJson = {
491
- name,
492
- version: '0.1.0',
493
- private: true,
494
- scripts: generateScripts(template, options),
495
- dependencies: config.dependencies.reduce((acc, dep) => {
496
- acc[dep] = 'latest';
497
- return acc;
498
- }, {} as Record<string, string>),
499
- devDependencies: config.devDependencies.reduce((acc, dep) => {
500
- acc[dep] = 'latest';
501
- return acc;
502
- }, {} as Record<string, string>),
503
- };
504
-
505
- writeFileSync(
506
- join(outputDir, 'package.json'),
507
- JSON.stringify(packageJson, null, 2)
508
- );
509
-
510
- // Generate tsconfig.json
511
- if (options.typescript) {
512
- const tsConfig = generateTsConfig(template);
513
- writeFileSync(
514
- join(outputDir, 'tsconfig.json'),
515
- JSON.stringify(tsConfig, null, 2)
516
- );
517
- }
518
-
519
- // Generate .gitignore
520
- const gitignore = generateGitignore(template);
521
- writeFileSync(join(outputDir, '.gitignore'), gitignore);
522
-
523
- // Generate .env.example
524
- const envExample = generateEnvExample(options);
525
- writeFileSync(join(outputDir, '.env.example'), envExample);
526
-
527
- // Generate README.md
528
- const readme = generateReadme(config, options);
529
- writeFileSync(join(outputDir, 'README.md'), readme);
530
-
531
- // Generate template-specific files
532
- generateTemplateFiles(config, options);
533
-
534
- console.log(`\n✅ Project scaffolded successfully!`);
535
- console.log(`📁 Location: ${outputDir}`);
536
- console.log(`\nNext steps:`);
537
- console.log(` cd ${name}`);
538
- if (!options.install) {
539
- console.log(` ${options.pm} install`);
540
- }
541
- console.log(` ${options.pm} ${options.pm === 'npm' ? 'run ' : ''}dev`);
542
- }
543
-
544
- function generateScripts(template: Template, options: ScaffoldOptions): Record<string, string> {
545
- const scripts: Record<string, string> = {
546
- dev: 'next dev',
547
- build: 'next build',
548
- start: 'next start',
549
- lint: 'eslint .',
550
- format: 'prettier --write .',
551
- };
552
-
553
- // Template-specific scripts
554
- if (template === 'next') {
555
- scripts.dev = 'next dev';
556
- scripts.build = 'next build';
557
- scripts.start = 'next start';
558
- } else if (template === 'react') {
559
- scripts.dev = 'vite';
560
- scripts.build = 'vite build';
561
- scripts.preview = 'vite preview';
562
- } else if (template === 'express' || template === 'rest-api') {
563
- scripts.dev = 'tsx watch src/index.ts';
564
- scripts.build = 'tsc';
565
- scripts.start = 'node dist/index.js';
566
- }
567
-
568
- // Database scripts
569
- if (options.database === 'prisma') {
570
- scripts['db:generate'] = 'prisma generate';
571
- scripts['db:push'] = 'prisma db push';
572
- scripts['db:migrate'] = 'prisma migrate dev';
573
- scripts['db:studio'] = 'prisma studio';
574
- } else if (options.database === 'drizzle') {
575
- scripts['db:generate'] = 'drizzle-kit generate';
576
- scripts['db:migrate'] = 'drizzle-kit migrate';
577
- scripts['db:studio'] = 'drizzle-kit studio';
578
- }
579
-
580
- // Testing scripts
581
- if (options.testing === 'vitest' || options.testing === 'both') {
582
- scripts.test = 'vitest';
583
- scripts['test:ui'] = 'vitest --ui';
584
- }
585
- if (options.testing === 'playwright' || options.testing === 'both') {
586
- scripts['test:e2e'] = 'playwright test';
587
- }
588
-
589
- return scripts;
590
- }
591
-
592
- function generateTsConfig(template: Template): any {
593
- return {
594
- compilerOptions: {
595
- target: 'ES2020',
596
- lib: ['ES2020', 'DOM', 'DOM.Iterable'],
597
- module: 'ESNext',
598
- skipLibCheck: true,
599
- moduleResolution: 'bundler',
600
- allowImportingTsExtensions: true,
601
- resolveJsonModule: true,
602
- isolatedModules: true,
603
- noEmit: true,
604
- jsx: template.includes('react') || template === 'next' ? 'preserve' : undefined,
605
- strict: true,
606
- noUnusedLocals: true,
607
- noUnusedParameters: true,
608
- noFallthroughCasesInSwitch: true,
609
- baseUrl: '.',
610
- paths: {
611
- '@/*': ['./src/*'],
612
- },
613
- },
614
- include: ['src'],
615
- exclude: ['node_modules'],
616
- };
617
- }
618
-
619
- function generateGitignore(template: Template): string {
620
- return `# Dependencies
621
- node_modules
622
- .pnp
623
- .pnp.js
624
-
625
- # Testing
626
- coverage
627
- .nyc_output
628
-
629
- # Next.js
630
- .next
631
- out
632
-
633
- # Production
634
- build
635
- dist
636
-
637
- # Misc
638
- .DS_Store
639
- *.pem
640
-
641
- # Debug
642
- npm-debug.log*
643
- yarn-debug.log*
644
- yarn-error.log*
645
-
646
- # Local env files
647
- .env
648
- .env*.local
649
-
650
- # Vercel
651
- .vercel
652
-
653
- # TypeScript
654
- *.tsbuildinfo
655
- next-env.d.ts
656
-
657
- # IDE
658
- .vscode
659
- .idea
660
- *.swp
661
- *.swo
662
- *~
663
- `;
664
- }
665
-
666
- function generateEnvExample(options: ScaffoldOptions): string {
667
- let env = '# Environment Variables\n\n';
668
-
669
- if (options.database === 'prisma' || options.database === 'drizzle') {
670
- env += '# Database\n';
671
- env += 'DATABASE_URL="postgresql://user:password@localhost:5432/dbname"\n\n';
672
- }
673
-
674
- if (options.database === 'supabase' || options.auth === 'supabase') {
675
- env += '# Supabase\n';
676
- env += 'NEXT_PUBLIC_SUPABASE_URL="your-supabase-url"\n';
677
- env += 'NEXT_PUBLIC_SUPABASE_ANON_KEY="your-supabase-anon-key"\n\n';
678
- }
679
-
680
- if (options.auth === 'nextauth') {
681
- env += '# NextAuth\n';
682
- env += 'NEXTAUTH_URL="http://localhost:3000"\n';
683
- env += 'NEXTAUTH_SECRET="your-secret-here"\n\n';
684
- }
685
-
686
- if (options.auth === 'clerk') {
687
- env += '# Clerk\n';
688
- env += 'NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY="your-publishable-key"\n';
689
- env += 'CLERK_SECRET_KEY="your-secret-key"\n\n';
690
- }
691
-
692
- return env;
693
- }
694
-
695
- function generateReadme(config: ProjectConfig, options: ScaffoldOptions): string {
696
- const { name, template } = config;
697
- const templateInfo = TEMPLATES[template];
698
-
699
- return `# ${name}
700
-
701
- ${templateInfo.description}
702
-
703
- ## Tech Stack
704
-
705
- - **Framework**: ${templateInfo.name}
706
- ${options.typescript ? '- **Language**: TypeScript\n' : ''}${options.tailwind ? '- **Styling**: Tailwind CSS\n' : ''}${options.shadcn ? '- **UI**: shadcn/ui\n' : ''}${options.database !== 'none' ? `- **Database**: ${options.database}\n` : ''}${options.auth !== 'none' ? `- **Auth**: ${options.auth}\n` : ''}${options.testing !== 'none' ? `- **Testing**: ${options.testing}\n` : ''}${options.state !== 'none' ? `- **State**: ${options.state}\n` : ''}
707
- ## Prerequisites
708
-
709
- - Node.js 18+ (or Bun)
710
- - ${options.database === 'prisma' || options.database === 'drizzle' ? 'PostgreSQL database' : ''}
711
-
712
- ## Getting Started
713
-
714
- 1. Install dependencies:
715
-
716
- \`\`\`bash
717
- ${options.pm} install
718
- \`\`\`
719
-
720
- 2. Copy environment variables:
721
-
722
- \`\`\`bash
723
- cp .env.example .env
724
- \`\`\`
725
-
726
- 3. Fill in the environment variables in \`.env\`
727
-
728
- ${options.database === 'prisma' ? `4. Setup database:
729
-
730
- \`\`\`bash
731
- ${options.pm} db:generate
732
- ${options.pm} db:push
733
- \`\`\`
734
-
735
- ` : ''}${options.database === 'drizzle' ? `4. Setup database:
736
-
737
- \`\`\`bash
738
- ${options.pm} db:generate
739
- ${options.pm} db:migrate
740
- \`\`\`
741
-
742
- ` : ''}5. Run the development server:
743
-
744
- \`\`\`bash
745
- ${options.pm} ${options.pm === 'npm' ? 'run ' : ''}dev
746
- \`\`\`
747
-
748
- ## Available Scripts
749
-
750
- - \`${options.pm} ${options.pm === 'npm' ? 'run ' : ''}dev\` - Start development server
751
- - \`${options.pm} ${options.pm === 'npm' ? 'run ' : ''}build\` - Build for production
752
- - \`${options.pm} ${options.pm === 'npm' ? 'run ' : ''}start\` - Start production server
753
- - \`${options.pm} ${options.pm === 'npm' ? 'run ' : ''}lint\` - Run ESLint
754
- - \`${options.pm} ${options.pm === 'npm' ? 'run ' : ''}format\` - Format code with Prettier
755
- ${options.testing !== 'none' ? `- \`${options.pm} ${options.pm === 'npm' ? 'run ' : ''}test\` - Run tests\n` : ''}
756
- ## Project Structure
757
-
758
- \`\`\`
759
- ${name}/
760
- ├── src/
761
- │ ├── app/ # Application routes
762
- │ ├── components/ # React components
763
- │ ├── lib/ # Utility functions
764
- │ └── types/ # TypeScript types
765
- ├── public/ # Static assets
766
- ├── .env.example # Environment variables template
767
- ├── package.json
768
- └── README.md
769
- \`\`\`
770
-
771
- ## Learn More
772
-
773
- - [${templateInfo.name} Documentation](https://nextjs.org/docs)
774
- ${options.tailwind ? '- [Tailwind CSS](https://tailwindcss.com/docs)\n' : ''}${options.shadcn ? '- [shadcn/ui](https://ui.shadcn.com)\n' : ''}${options.database === 'prisma' ? '- [Prisma](https://www.prisma.io/docs)\n' : ''}${options.database === 'drizzle' ? '- [Drizzle](https://orm.drizzle.team)\n' : ''}
775
- ## Deployment
776
-
777
- Deploy your application on [Vercel](https://vercel.com) or [Railway](https://railway.app).
778
-
779
- ---
780
-
781
- Generated with [scaffold-project](https://skills.md/skills/scaffold-project)
782
- `;
783
- }
784
-
785
- function generateTemplateFiles(config: ProjectConfig, options: ScaffoldOptions): void {
786
- const { outputDir, template } = config;
787
- const srcDir = join(outputDir, 'src');
788
-
789
- // Create src directory
790
- if (!existsSync(srcDir)) {
791
- mkdirSync(srcDir, { recursive: true });
792
- }
793
-
794
- // Generate template-specific files
795
- if (template === 'next') {
796
- generateNextJsFiles(srcDir, options);
797
- } else if (template === 'react') {
798
- generateReactFiles(srcDir, options);
799
- } else if (template === 'express' || template === 'rest-api') {
800
- generateExpressFiles(srcDir, options);
801
- } else if (template === 'cli') {
802
- generateCliFiles(srcDir, options);
803
- }
804
- // Add more template generators as needed
805
- }
806
-
807
- function generateNextJsFiles(srcDir: string, options: ScaffoldOptions): void {
808
- const appDir = join(srcDir, 'app');
809
- mkdirSync(appDir, { recursive: true });
810
-
811
- // layout.tsx
812
- writeFileSync(
813
- join(appDir, 'layout.tsx'),
814
- `import type { Metadata } from 'next'
815
- import './globals.css'
816
-
817
- export const metadata: Metadata = {
818
- title: 'My App',
819
- description: 'Generated by scaffold-project',
820
- }
821
-
822
- export default function RootLayout({
823
- children,
824
- }: {
825
- children: React.ReactNode
826
- }) {
827
- return (
828
- <html lang="en">
829
- <body>{children}</body>
830
- </html>
831
- )
832
- }
833
- `
834
- );
835
-
836
- // page.tsx
837
- writeFileSync(
838
- join(appDir, 'page.tsx'),
839
- `export default function Home() {
840
- return (
841
- <main className="flex min-h-screen flex-col items-center justify-center p-24">
842
- <h1 className="text-4xl font-bold">Welcome to Your App</h1>
843
- <p className="mt-4 text-lg">Start building something amazing!</p>
844
- </main>
845
- )
846
- }
847
- `
848
- );
849
-
850
- // globals.css
851
- writeFileSync(
852
- join(appDir, 'globals.css'),
853
- `@tailwind base;
854
- @tailwind components;
855
- @tailwind utilities;
856
-
857
- :root {
858
- --foreground-rgb: 0, 0, 0;
859
- --background-start-rgb: 214, 219, 220;
860
- --background-end-rgb: 255, 255, 255;
861
- }
862
-
863
- @media (prefers-color-scheme: dark) {
864
- :root {
865
- --foreground-rgb: 255, 255, 255;
866
- --background-start-rgb: 0, 0, 0;
867
- --background-end-rgb: 0, 0, 0;
868
- }
869
- }
870
-
871
- body {
872
- color: rgb(var(--foreground-rgb));
873
- background: linear-gradient(
874
- to bottom,
875
- transparent,
876
- rgb(var(--background-end-rgb))
877
- )
878
- rgb(var(--background-start-rgb));
879
- }
880
- `
881
- );
882
-
883
- // lib/utils.ts
884
- const libDir = join(srcDir, 'lib');
885
- mkdirSync(libDir, { recursive: true });
886
- writeFileSync(
887
- join(libDir, 'utils.ts'),
888
- `import { type ClassValue, clsx } from 'clsx'
889
- import { twMerge } from 'tailwind-merge'
890
-
891
- export function cn(...inputs: ClassValue[]) {
892
- return twMerge(clsx(inputs))
893
- }
894
- `
895
- );
896
- }
897
-
898
- function generateReactFiles(srcDir: string, options: ScaffoldOptions): void {
899
- // main.tsx
900
- writeFileSync(
901
- join(srcDir, 'main.tsx'),
902
- `import React from 'react'
903
- import ReactDOM from 'react-dom/client'
904
- import App from './App'
905
- import './index.css'
906
-
907
- ReactDOM.createRoot(document.getElementById('root')!).render(
908
- <React.StrictMode>
909
- <App />
910
- </React.StrictMode>,
911
- )
912
- `
913
- );
914
-
915
- // App.tsx
916
- writeFileSync(
917
- join(srcDir, 'App.tsx'),
918
- `function App() {
919
- return (
920
- <div className="min-h-screen flex items-center justify-center">
921
- <div className="text-center">
922
- <h1 className="text-4xl font-bold mb-4">Welcome to Your App</h1>
923
- <p className="text-lg">Start building something amazing!</p>
924
- </div>
925
- </div>
926
- )
927
- }
928
-
929
- export default App
930
- `
931
- );
932
-
933
- // index.css
934
- writeFileSync(
935
- join(srcDir, 'index.css'),
936
- `@tailwind base;
937
- @tailwind components;
938
- @tailwind utilities;
939
- `
940
- );
941
- }
942
-
943
- function generateExpressFiles(srcDir: string, options: ScaffoldOptions): void {
944
- // index.ts
945
- writeFileSync(
946
- join(srcDir, 'index.ts'),
947
- `import express from 'express'
948
- import cors from 'cors'
949
- import dotenv from 'dotenv'
950
-
951
- dotenv.config()
952
-
953
- const app = express()
954
- const port = process.env.PORT || 3000
955
-
956
- app.use(cors())
957
- app.use(express.json())
958
-
959
- app.get('/', (req, res) => {
960
- res.json({ message: 'API is running' })
961
- })
962
-
963
- app.get('/health', (req, res) => {
964
- res.json({ status: 'ok' })
965
- })
966
-
967
- app.listen(port, () => {
968
- console.log(\`Server running on http://localhost:\${port}\`)
969
- })
970
- `
971
- );
972
- }
973
-
974
- function generateCliFiles(srcDir: string, options: ScaffoldOptions): void {
975
- // index.ts
976
- writeFileSync(
977
- join(srcDir, 'index.ts'),
978
- `#!/usr/bin/env node
979
- import { Command } from 'commander'
980
-
981
- const program = new Command()
982
-
983
- program
984
- .name('my-cli')
985
- .description('CLI tool generated by scaffold-project')
986
- .version('1.0.0')
987
-
988
- program
989
- .command('hello')
990
- .description('Say hello')
991
- .argument('<name>', 'Name to greet')
992
- .action((name) => {
993
- console.log(\`Hello, \${name}!\`)
994
- })
9
+ import { existsSync } from "fs";
10
+ import { parseArgs } from "util";
995
11
 
996
- program.parse()
997
- `
998
- );
999
- }
12
+ import { detectTemplate } from "./ai-detect";
13
+ import { generateFiles } from "./file-generators";
14
+ import { generateProjectConfig } from "./project-config";
15
+ import { TEMPLATES } from "./templates";
16
+ import { validatePackageManager } from "./types";
17
+ import type { Auth, Database, PackageManager, ScaffoldOptions, State, Template, Testing } from "./types";
1000
18
 
1001
- // ============================================================================
1002
19
  // Main CLI Logic
1003
20
  // ============================================================================
1004
21