@hasna/skills 0.1.26 → 0.1.29

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 (491) hide show
  1. package/LICENSE +1 -10
  2. package/README.md +141 -39
  3. package/bin/index.js +30122 -27575
  4. package/bin/mcp.js +22112 -18593
  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 +11607 -597
  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 +10 -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 +23 -10
  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/package.json +1 -1
  108. package/skills/consolelog/src/index.ts +3 -0
  109. package/skills/contract-review-report/SKILL.md +43 -0
  110. package/skills/contract-review-report/package.json +10 -0
  111. package/skills/convert/SKILL.md +2 -3
  112. package/skills/customer-feedback-report/SKILL.md +44 -0
  113. package/skills/customer-feedback-report/package.json +10 -0
  114. package/skills/dashboard-builder/package.json +3 -1
  115. package/skills/database-explorer/package.json +3 -1
  116. package/skills/deepresearch/README.md +4 -13
  117. package/skills/deploy/src/http-client.ts +1 -1
  118. package/skills/diff-viewer/package.json +4 -1
  119. package/skills/doc-generate/package.json +0 -1
  120. package/skills/doc-generate/src/ai.ts +50 -0
  121. package/skills/doc-generate/src/cli.ts +203 -0
  122. package/skills/doc-generate/src/dependencies.ts +44 -0
  123. package/skills/doc-generate/src/document-builder.ts +299 -0
  124. package/skills/doc-generate/src/index.ts +40 -764
  125. package/skills/doc-generate/src/markdown-parser.ts +125 -0
  126. package/skills/doc-generate/src/types.ts +68 -0
  127. package/skills/domainpurchase/SKILL.md +1 -1
  128. package/skills/domainpurchase/package.json +1 -1
  129. package/skills/domainpurchase/src/index.ts +3 -0
  130. package/skills/domainsearch/SKILL.md +1 -1
  131. package/skills/domainsearch/package.json +1 -1
  132. package/skills/domainsearch/src/index.ts +3 -0
  133. package/skills/email-sequence/SKILL.md +44 -0
  134. package/skills/email-sequence/package.json +14 -0
  135. package/skills/excel/CLAUDE.md +2 -2
  136. package/skills/experiment-power-calculator/package.json +3 -1
  137. package/skills/extract-invoice/src/cli.ts +97 -0
  138. package/skills/extract-invoice/src/extractor.ts +170 -0
  139. package/skills/extract-invoice/src/file-utils.ts +46 -0
  140. package/skills/extract-invoice/src/formatters.ts +144 -0
  141. package/skills/extract-invoice/src/index.ts +44 -629
  142. package/skills/extract-invoice/src/runtime.ts +46 -0
  143. package/skills/extract-invoice/src/types.ts +88 -0
  144. package/skills/folder-tree/package.json +3 -1
  145. package/skills/form-filler/package.json +3 -1
  146. package/skills/generate-api-client/package.json +3 -1
  147. package/skills/generate-api-client/src/generator.ts +47 -0
  148. package/skills/generate-api-client/src/index.ts +3 -777
  149. package/skills/generate-api-client/src/logger.ts +34 -0
  150. package/skills/generate-api-client/src/python-generator.ts +245 -0
  151. package/skills/generate-api-client/src/spec-loader.ts +48 -0
  152. package/skills/generate-api-client/src/type-mappers.ts +79 -0
  153. package/skills/generate-api-client/src/types.ts +76 -0
  154. package/skills/generate-api-client/src/typescript-generator.ts +247 -0
  155. package/skills/generate-book-cover/package.json +3 -1
  156. package/skills/generate-dockerfile/src/cli.ts +78 -0
  157. package/skills/generate-dockerfile/src/dockerfile-templates.ts +392 -0
  158. package/skills/generate-dockerfile/src/index.ts +12 -790
  159. package/skills/generate-dockerfile/src/logger.ts +30 -0
  160. package/skills/generate-dockerfile/src/project-detection.ts +68 -0
  161. package/skills/generate-dockerfile/src/support-files.ts +171 -0
  162. package/skills/generate-dockerfile/src/types.ts +29 -0
  163. package/skills/generate-documentation/src/ai.ts +131 -0
  164. package/skills/generate-documentation/src/cli.ts +71 -0
  165. package/skills/generate-documentation/src/code-parser.ts +300 -0
  166. package/skills/generate-documentation/src/file-processing.ts +182 -0
  167. package/skills/generate-documentation/src/index.ts +13 -753
  168. package/skills/generate-documentation/src/runtime.ts +35 -0
  169. package/skills/generate-documentation/src/types.ts +30 -0
  170. package/skills/generate-env/package.json +3 -1
  171. package/skills/generate-env/src/cli.ts +85 -0
  172. package/skills/generate-env/src/detection.ts +161 -0
  173. package/skills/generate-env/src/env-data.ts +66 -0
  174. package/skills/generate-env/src/generators.ts +240 -0
  175. package/skills/generate-env/src/index.ts +76 -676
  176. package/skills/generate-env/src/runtime.ts +30 -0
  177. package/skills/generate-env/src/types.ts +32 -0
  178. package/skills/generate-favicon/package.json +3 -1
  179. package/skills/generate-mock-data/package.json +3 -1
  180. package/skills/generate-mock-data/src/ai.ts +102 -0
  181. package/skills/generate-mock-data/src/formatters.ts +84 -0
  182. package/skills/generate-mock-data/src/generator.ts +377 -0
  183. package/skills/generate-mock-data/src/index.ts +15 -716
  184. package/skills/generate-mock-data/src/logger.ts +37 -0
  185. package/skills/generate-mock-data/src/presets.ts +110 -0
  186. package/skills/generate-mock-data/src/types.ts +21 -0
  187. package/skills/generate-pr-description/src/ai.ts +144 -0
  188. package/skills/generate-pr-description/src/cli.ts +80 -0
  189. package/skills/generate-pr-description/src/clipboard.ts +30 -0
  190. package/skills/generate-pr-description/src/formatters.ts +231 -0
  191. package/skills/generate-pr-description/src/git.ts +153 -0
  192. package/skills/generate-pr-description/src/index.ts +21 -714
  193. package/skills/generate-pr-description/src/types.ts +49 -0
  194. package/skills/generate-presentation/src/ai-clients.ts +61 -0
  195. package/skills/generate-presentation/src/cli.ts +126 -0
  196. package/skills/generate-presentation/src/index.ts +3 -751
  197. package/skills/generate-presentation/src/logger.ts +67 -0
  198. package/skills/generate-presentation/src/presentation-generator.ts +425 -0
  199. package/skills/generate-presentation/src/runtime.ts +6 -0
  200. package/skills/generate-presentation/src/security.ts +12 -0
  201. package/skills/generate-presentation/src/types.ts +28 -0
  202. package/skills/generate-qrcode/package.json +4 -1
  203. package/skills/generate-regex/package.json +3 -1
  204. package/skills/generate-resume/src/cli.ts +157 -0
  205. package/skills/generate-resume/src/index.ts +13 -917
  206. package/skills/generate-resume/src/parsers.ts +95 -0
  207. package/skills/generate-resume/src/renderers.ts +538 -0
  208. package/skills/generate-resume/src/security.ts +39 -0
  209. package/skills/generate-resume/src/types.ts +86 -0
  210. package/skills/generate-social-posts/src/ai.ts +88 -0
  211. package/skills/generate-social-posts/src/cli.ts +118 -0
  212. package/skills/generate-social-posts/src/exporters.ts +126 -0
  213. package/skills/generate-social-posts/src/generator.ts +130 -0
  214. package/skills/generate-social-posts/src/index.ts +19 -709
  215. package/skills/generate-social-posts/src/platforms.ts +39 -0
  216. package/skills/generate-social-posts/src/runtime.ts +34 -0
  217. package/skills/generate-social-posts/src/source.ts +116 -0
  218. package/skills/generate-social-posts/src/types.ts +58 -0
  219. package/skills/gif-maker/package.json +4 -1
  220. package/skills/github-manager/package.json +3 -1
  221. package/skills/gmail/CLAUDE.md +1 -1
  222. package/skills/highlight-reel-generator/src/index.ts +19 -0
  223. package/skills/hook/src/commands/create.ts +20 -845
  224. package/skills/hook/src/templates/root.ts +196 -0
  225. package/skills/hook/src/templates/source.ts +647 -0
  226. package/skills/http-server/package.json +3 -1
  227. package/skills/icon-pack/README.md +28 -0
  228. package/skills/icon-pack/SKILL.md +23 -0
  229. package/skills/icon-pack/package.json +29 -0
  230. package/skills/{audio → icon-pack}/tsconfig.json +10 -12
  231. package/skills/image/package.json +1 -2
  232. package/skills/implementation-agent/package.json +3 -1
  233. package/skills/implementation-agent/src/ai-generation.ts +225 -0
  234. package/skills/implementation-agent/src/index.ts +3 -960
  235. package/skills/implementation-agent/src/minimist.d.ts +15 -0
  236. package/skills/implementation-agent/src/templates.ts +686 -0
  237. package/skills/implementation-agent/src/types.ts +53 -0
  238. package/skills/implementation-plan/package.json +3 -1
  239. package/skills/implementation-todo/package.json +3 -1
  240. package/skills/invoice/package.json +1 -1
  241. package/skills/invoice/src/index.ts +3 -0
  242. package/skills/invoice-reconciliation/SKILL.md +42 -0
  243. package/skills/invoice-reconciliation/package.json +10 -0
  244. package/skills/landing-page-pack/SKILL.md +47 -0
  245. package/skills/landing-page-pack/package.json +14 -0
  246. package/skills/latex-table-generator/package.json +3 -1
  247. package/skills/logo-design/SKILL.md +25 -44
  248. package/skills/logo-design/package.json +3 -15
  249. package/skills/lorem-generator/package.json +3 -1
  250. package/skills/lorem-generator/src/index.ts +13 -0
  251. package/skills/managehook/package.json +1 -1
  252. package/skills/managehook/src/index.ts +3 -0
  253. package/skills/managemcp/package.json +1 -1
  254. package/skills/managemcp/src/index.ts +3 -0
  255. package/skills/manageskill/package.json +1 -1
  256. package/skills/manageskill/src/index.ts +3 -0
  257. package/skills/markdown-validator/package.json +3 -1
  258. package/skills/markdown-validator/src/index.ts +1 -4
  259. package/skills/market-research-report/SKILL.md +41 -0
  260. package/skills/market-research-report/package.json +10 -0
  261. package/skills/mcp-builder/package.json +4 -1
  262. package/skills/mcp-builder/src/ai-descriptions.ts +37 -0
  263. package/skills/mcp-builder/src/generators.ts +513 -0
  264. package/skills/mcp-builder/src/index.ts +7 -908
  265. package/skills/mcp-builder/src/minimist.d.ts +15 -0
  266. package/skills/mcp-builder/src/naming.ts +12 -0
  267. package/skills/mcp-builder/src/options.ts +170 -0
  268. package/skills/mcp-builder/src/templates.ts +149 -0
  269. package/skills/mcp-builder/src/types.ts +42 -0
  270. package/skills/meeting-pack/SKILL.md +43 -0
  271. package/skills/meeting-pack/package.json +10 -0
  272. package/skills/merge-pdfs/package.json +5 -1
  273. package/skills/migration-plan-pack/SKILL.md +45 -0
  274. package/skills/migration-plan-pack/package.json +10 -0
  275. package/skills/music/package.json +2 -3
  276. package/skills/music-album/SKILL.md +37 -0
  277. package/skills/music-album/package.json +10 -0
  278. package/skills/notion-manager/package.json +3 -1
  279. package/skills/npmpublish/CLAUDE.md +5 -8
  280. package/skills/npmpublish/README.md +5 -26
  281. package/skills/npmpublish/src/index.ts +9 -147
  282. package/skills/one-page-website/SKILL.md +46 -0
  283. package/skills/one-page-website/package.json +10 -0
  284. package/skills/one-page-website/tsconfig.json +8 -0
  285. package/skills/pdf-generate/src/cli.ts +162 -0
  286. package/skills/pdf-generate/src/html.ts +84 -0
  287. package/skills/pdf-generate/src/index.ts +11 -800
  288. package/skills/pdf-generate/src/markdown.ts +27 -0
  289. package/skills/pdf-generate/src/pdf-writer.ts +78 -0
  290. package/skills/pdf-generate/src/runtime.ts +34 -0
  291. package/skills/pdf-generate/src/security.ts +37 -0
  292. package/skills/pdf-generate/src/templates.ts +311 -0
  293. package/skills/pdf-generate/src/types.ts +28 -0
  294. package/skills/pdf-read/SKILL.md +10 -10
  295. package/skills/pdf-to-dataset/SKILL.md +45 -0
  296. package/skills/pdf-to-dataset/package.json +10 -0
  297. package/skills/pdf-to-markdown/SKILL.md +49 -0
  298. package/skills/pdf-to-markdown/package.json +10 -0
  299. package/skills/pdf-to-markdown/tsconfig.json +10 -0
  300. package/skills/performance-audit-report/SKILL.md +42 -0
  301. package/skills/performance-audit-report/package.json +10 -0
  302. package/skills/persona-based-adwriter/src/index.ts +19 -0
  303. package/skills/photo-album/SKILL.md +29 -0
  304. package/skills/photo-album/package.json +9 -0
  305. package/skills/photo-album/tsconfig.json +4 -0
  306. package/skills/pitch-deck/SKILL.md +43 -0
  307. package/skills/pitch-deck/package.json +9 -0
  308. package/skills/playlist-maker/SKILL.md +33 -0
  309. package/skills/playlist-maker/package.json +9 -0
  310. package/skills/playlist-maker/tsconfig.json +4 -0
  311. package/skills/product-mockup/SKILL.md +45 -0
  312. package/skills/product-mockup/package.json +3 -20
  313. package/skills/product-mockup/tsconfig.json +3 -5
  314. package/skills/project-retro-companion/src/index.ts +19 -0
  315. package/skills/proposal-pack/SKILL.md +45 -0
  316. package/skills/proposal-pack/package.json +10 -0
  317. package/skills/read-pdf/SKILL.md +5 -4
  318. package/skills/repo-onboarding-report/SKILL.md +42 -0
  319. package/skills/repo-onboarding-report/package.json +10 -0
  320. package/skills/sales-call-recapper/src/index.ts +20 -0
  321. package/skills/salescopy/package.json +1 -1
  322. package/skills/salescopy/src/index.ts +3 -0
  323. package/skills/scaffold-project/src/ai-detect.ts +136 -0
  324. package/skills/scaffold-project/src/file-generators.ts +292 -0
  325. package/skills/scaffold-project/src/index.ts +8 -991
  326. package/skills/scaffold-project/src/project-config.ts +338 -0
  327. package/skills/scaffold-project/src/templates.ts +173 -0
  328. package/skills/scaffold-project/src/types.ts +58 -0
  329. package/skills/scientific-figure-check/package.json +3 -1
  330. package/skills/sdk-generator/SKILL.md +45 -0
  331. package/skills/sdk-generator/package.json +10 -0
  332. package/skills/sdk-generator/tsconfig.json +8 -0
  333. package/skills/security-audit/src/index.ts +25 -6
  334. package/skills/security-audit-report/SKILL.md +40 -0
  335. package/skills/security-audit-report/package.json +10 -0
  336. package/skills/seo-content-pack/SKILL.md +44 -0
  337. package/skills/seo-content-pack/package.json +9 -0
  338. package/skills/short-video-pack/SKILL.md +30 -0
  339. package/skills/short-video-pack/package.json +10 -0
  340. package/skills/slack-assistant/package.json +3 -1
  341. package/skills/slide-deck-generator/SKILL.md +44 -0
  342. package/skills/slide-deck-generator/package.json +10 -0
  343. package/skills/sms/package.json +1 -1
  344. package/skills/sms/src/index.ts +15 -0
  345. package/skills/social-content-calendar/SKILL.md +45 -0
  346. package/skills/social-content-calendar/package.json +14 -0
  347. package/skills/split-pdf/package.json +4 -1
  348. package/skills/subtitle/package.json +2 -1
  349. package/skills/subtitle/src/index.ts +3 -0
  350. package/skills/terraform-generator/package.json +3 -1
  351. package/skills/test-suite-generator/SKILL.md +41 -0
  352. package/skills/test-suite-generator/package.json +10 -0
  353. package/skills/timesheet/package.json +1 -1
  354. package/skills/timesheet/src/index.ts +3 -0
  355. package/skills/transcript/SKILL.md +1 -8
  356. package/skills/validate-config/package.json +3 -1
  357. package/skills/video/package.json +6 -4
  358. package/skills/video-downloader/package.json +3 -1
  359. package/skills/video-highlight-pack/SKILL.md +44 -0
  360. package/skills/video-highlight-pack/package.json +10 -0
  361. package/skills/voiceover-jingle-pack/SKILL.md +28 -0
  362. package/skills/voiceover-jingle-pack/package.json +10 -0
  363. package/skills/watermark/package.json +6 -1
  364. package/skills/webcrawling/package.json +2 -1
  365. package/skills/write/SKILL.md +6 -6
  366. package/dist/server/serve.d.ts +0 -11
  367. package/skills/apidocs/.claude/settings.json +0 -5
  368. package/skills/audio/.env.example +0 -14
  369. package/skills/audio/QUICKSTART.md +0 -158
  370. package/skills/audio/README.md +0 -256
  371. package/skills/audio/src/index-local.ts +0 -206
  372. package/skills/audio/src/index.ts +0 -95
  373. package/skills/audio/src/providers/elevenlabs.ts +0 -115
  374. package/skills/audio/src/providers/google.ts +0 -116
  375. package/skills/audio/src/providers/minimax.ts +0 -83
  376. package/skills/audio/src/providers/openai.ts +0 -115
  377. package/skills/audio/src/types.ts +0 -79
  378. package/skills/audiobook-chapter-proofer/CLAUDE.md +0 -19
  379. package/skills/audiobook-chapter-proofer/package.json +0 -27
  380. package/skills/audiobook-chapter-proofer/src/index.ts +0 -285
  381. package/skills/browse/src/client.ts +0 -373
  382. package/skills/browse/src/index-local.ts +0 -430
  383. package/skills/browse/src/index.ts +0 -110
  384. package/skills/browse/src/sse-server.ts +0 -919
  385. package/skills/browse/src/types.ts +0 -104
  386. package/skills/consolelog/src/server/index.ts +0 -508
  387. package/skills/create-blog-article/CLAUDE.md +0 -19
  388. package/skills/create-blog-article/src/index.ts +0 -745
  389. package/skills/create-blog-article/tsconfig.json +0 -10
  390. package/skills/deepresearch/src/agents/query-generator.ts +0 -91
  391. package/skills/deepresearch/src/agents/synthesizer.ts +0 -111
  392. package/skills/deepresearch/src/index.ts +0 -224
  393. package/skills/deepresearch/src/research.ts +0 -166
  394. package/skills/deepresearch/src/services/anthropic.ts +0 -69
  395. package/skills/deepresearch/src/services/exa.ts +0 -108
  396. package/skills/deepresearch/src/services/firecrawl.ts +0 -88
  397. package/skills/deepresearch/src/services/openai.ts +0 -81
  398. package/skills/deepresearch/src/types.ts +0 -76
  399. package/skills/deepresearch/src/utils/file.ts +0 -111
  400. package/skills/deepresearch/src/utils/logger.ts +0 -84
  401. package/skills/domainpurchase/src/server/index.ts +0 -332
  402. package/skills/domainsearch/src/server/index.ts +0 -229
  403. package/skills/e2bswarm/README.md +0 -135
  404. package/skills/e2bswarm/SKILL.md +0 -118
  405. package/skills/e2bswarm/examples/tasks-example.json +0 -38
  406. package/skills/e2bswarm/package.json +0 -59
  407. package/skills/e2bswarm/src/commands/collect.ts +0 -135
  408. package/skills/e2bswarm/src/commands/install.ts +0 -164
  409. package/skills/e2bswarm/src/commands/kill.ts +0 -62
  410. package/skills/e2bswarm/src/commands/spawn.ts +0 -134
  411. package/skills/e2bswarm/src/commands/status.ts +0 -90
  412. package/skills/e2bswarm/src/commands/sync.ts +0 -208
  413. package/skills/e2bswarm/src/index.ts +0 -121
  414. package/skills/e2bswarm/src/lib/config.ts +0 -75
  415. package/skills/e2bswarm/src/lib/e2b.ts +0 -490
  416. package/skills/e2bswarm/src/lib/github.ts +0 -253
  417. package/skills/e2bswarm/src/lib/logger.ts +0 -41
  418. package/skills/e2bswarm/src/lib/paths.ts +0 -75
  419. package/skills/e2bswarm/src/lib/tasks.ts +0 -320
  420. package/skills/e2bswarm/src/types/index.ts +0 -107
  421. package/skills/e2bswarm/templates/codebox/e2b.Dockerfile +0 -38
  422. package/skills/e2bswarm/templates/codebox/e2b.toml +0 -3
  423. package/skills/e2bswarm/templates/setup.sh +0 -21
  424. package/skills/e2bswarm/tsconfig.json +0 -19
  425. package/skills/generate-book-cover/src/index.ts +0 -694
  426. package/skills/image/src/index-local.ts +0 -206
  427. package/skills/image/src/index.ts +0 -96
  428. package/skills/image/src/providers/google.ts +0 -79
  429. package/skills/image/src/providers/minimax.ts +0 -94
  430. package/skills/image/src/providers/openai.ts +0 -80
  431. package/skills/image/src/providers/xai.ts +0 -73
  432. package/skills/image/src/types.ts +0 -37
  433. package/skills/logo-design/CLAUDE.md +0 -30
  434. package/skills/logo-design/src/index.ts +0 -322
  435. package/skills/managehook/src/server/index.ts +0 -108
  436. package/skills/managemcp/src/server/index.ts +0 -108
  437. package/skills/manageskill/src/server/index.ts +0 -108
  438. package/skills/music/CLAUDE.md +0 -9
  439. package/skills/music/src/index.ts +0 -94
  440. package/skills/music/tsconfig.json +0 -10
  441. package/skills/pdf-read/src/index.ts +0 -320
  442. package/skills/product-mockup/CLAUDE.md +0 -19
  443. package/skills/product-mockup/src/index.ts +0 -290
  444. package/skills/read-pdf/src/index.ts +0 -388
  445. package/skills/remove-background/src/index.ts +0 -405
  446. package/skills/scaffold-project/my-app/.env.example +0 -2
  447. package/skills/scaffold-project/my-app/README.md +0 -72
  448. package/skills/scaffold-project/my-app/package.json +0 -29
  449. package/skills/scaffold-project/my-app/src/index.ts +0 -23
  450. package/skills/scaffold-project/my-app/tsconfig.json +0 -33
  451. package/skills/sound-effects/SKILL.md +0 -34
  452. package/skills/sound-effects/package.json +0 -21
  453. package/skills/sound-effects/src/index.ts +0 -172
  454. package/skills/sound-effects/tsconfig.json +0 -8
  455. package/skills/transcript/src/chunker.ts +0 -215
  456. package/skills/transcript/src/formatter.ts +0 -134
  457. package/skills/transcript/src/index-local.ts +0 -226
  458. package/skills/transcript/src/index.ts +0 -110
  459. package/skills/transcript/src/providers/elevenlabs.ts +0 -133
  460. package/skills/transcript/src/providers/gemini.ts +0 -192
  461. package/skills/transcript/src/providers/index.ts +0 -54
  462. package/skills/transcript/src/providers/openai.ts +0 -203
  463. package/skills/transcript/src/types.ts +0 -106
  464. package/skills/video/.env.example +0 -14
  465. package/skills/video/EXAMPLES.md +0 -266
  466. package/skills/video/LICENSE +0 -192
  467. package/skills/video/README.md +0 -174
  468. package/skills/video/src/cli.ts +0 -155
  469. package/skills/video/src/index-local.ts +0 -148
  470. package/skills/video/src/index.ts +0 -96
  471. package/skills/video/src/providers/google-veo.ts +0 -126
  472. package/skills/video/src/providers/index.ts +0 -22
  473. package/skills/video/src/providers/minimax.ts +0 -100
  474. package/skills/video/src/providers/openai-sora.ts +0 -164
  475. package/skills/video/src/providers/runway.ts +0 -159
  476. package/skills/video/src/types.ts +0 -35
  477. package/skills/video/tsconfig.json +0 -22
  478. package/skills/voiceover-casting-assistant/CLAUDE.md +0 -19
  479. package/skills/voiceover-casting-assistant/package.json +0 -27
  480. package/skills/voiceover-casting-assistant/src/index.ts +0 -255
  481. package/skills/voiceover-casting-assistant/tsconfig.json +0 -10
  482. package/skills/webcrawling/src/commands/config.ts +0 -34
  483. package/skills/webcrawling/src/commands/crawl.ts +0 -33
  484. package/skills/webcrawling/src/commands/scrape.ts +0 -32
  485. package/skills/webcrawling/src/commands/sessions.ts +0 -42
  486. package/skills/webcrawling/src/lib/crawler.ts +0 -174
  487. package/skills/webcrawling/src/lib/storage.ts +0 -130
  488. package/skills/webcrawling/src/types/index.ts +0 -45
  489. package/skills/webcrawling/src/utils/logger.ts +0 -30
  490. package/skills/webcrawling/src/utils/paths.ts +0 -28
  491. /package/skills/{audiobook-chapter-proofer → blog-article}/tsconfig.json +0 -0
@@ -0,0 +1,392 @@
1
+ import { getBaseImage } from "./project-detection";
2
+ import type { GenerateOptions, ProjectType } from "./types";
3
+
4
+ const commentFor = (options: GenerateOptions) => (text: string) => options.minimal ? "" : `# ${text}\n`;
5
+
6
+ function generateNodejsDockerfile(options: GenerateOptions): string {
7
+ const baseImage = getBaseImage("nodejs", options.base);
8
+ const comment = commentFor(options);
9
+
10
+ if (options.multistage) {
11
+ return `${comment("Build stage")}FROM ${baseImage} AS builder
12
+
13
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
14
+
15
+ ${comment("Copy package files")}COPY package*.json ./
16
+
17
+ ${comment("Install dependencies")}RUN npm ci --only=production && \\
18
+ npm cache clean --force
19
+
20
+ ${comment("Copy application files")}COPY . .
21
+
22
+ ${comment("Build application if needed (uncomment if using TypeScript/build step)")}# RUN npm run build
23
+
24
+ ${comment("Production stage")}FROM ${baseImage}
25
+
26
+ ${comment("Install dumb-init for proper signal handling")}RUN apk add --no-cache dumb-init
27
+
28
+ ${comment("Create non-root user")}RUN addgroup -g 1001 -S ${options.user} && \\
29
+ adduser -S ${options.user} -u 1001
30
+
31
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
32
+
33
+ ${comment("Copy dependencies from builder")}COPY --from=builder --chown=${options.user}:${options.user} ${options.workdir}/node_modules ./node_modules
34
+
35
+ ${comment("Copy application files")}COPY --chown=${options.user}:${options.user} . .
36
+
37
+ ${comment("Set environment variables")}ENV NODE_ENV=production \\
38
+ PORT=${options.port}
39
+
40
+ ${comment("Switch to non-root user")}USER ${options.user}
41
+
42
+ ${comment("Expose port")}EXPOSE ${options.port}
43
+
44
+ ${comment("Add health check")}${options.healthcheck ? `HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
45
+ CMD node -e "require('http').get('http://localhost:${options.port}/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"
46
+
47
+ ` : ""}${comment("Start application")}ENTRYPOINT ["dumb-init", "--"]
48
+ CMD ["node", "index.js"]
49
+ `;
50
+ }
51
+
52
+ return `FROM ${baseImage}
53
+
54
+ ${comment("Create non-root user")}RUN addgroup -g 1001 -S ${options.user} && \\
55
+ adduser -S ${options.user} -u 1001
56
+
57
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
58
+
59
+ ${comment("Copy package files")}COPY package*.json ./
60
+
61
+ ${comment("Install dependencies")}RUN npm ci --only=production && \\
62
+ npm cache clean --force
63
+
64
+ ${comment("Copy application files")}COPY --chown=${options.user}:${options.user} . .
65
+
66
+ ${comment("Set environment variables")}ENV NODE_ENV=production \\
67
+ PORT=${options.port}
68
+
69
+ ${comment("Switch to non-root user")}USER ${options.user}
70
+
71
+ ${comment("Expose port")}EXPOSE ${options.port}
72
+
73
+ ${comment("Add health check")}${options.healthcheck ? `HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
74
+ CMD node -e "require('http').get('http://localhost:${options.port}/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"
75
+
76
+ ` : ""}${comment("Start application")}CMD ["node", "index.js"]
77
+ `;
78
+ }
79
+
80
+ function generatePythonDockerfile(options: GenerateOptions): string {
81
+ const baseImage = getBaseImage("python", options.base);
82
+ const comment = commentFor(options);
83
+
84
+ if (options.multistage) {
85
+ return `${comment("Build stage")}FROM ${baseImage} AS builder
86
+
87
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
88
+
89
+ ${comment("Install build dependencies")}${options.base === "alpine" ? `RUN apk add --no-cache gcc musl-dev libffi-dev
90
+
91
+ ` : ""}${comment("Create virtual environment")}RUN python -m venv /opt/venv
92
+ ENV PATH="/opt/venv/bin:$PATH"
93
+
94
+ ${comment("Copy requirements and install dependencies")}COPY requirements.txt .
95
+ RUN pip install --no-cache-dir -r requirements.txt
96
+
97
+ ${comment("Production stage")}FROM ${baseImage}
98
+
99
+ ${comment("Install runtime dependencies")}${options.base === "alpine" ? `RUN apk add --no-cache libffi
100
+
101
+ ` : ""}${comment("Create non-root user")}RUN addgroup -g 1001 -S ${options.user} && \\
102
+ adduser -S ${options.user} -u 1001
103
+
104
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
105
+
106
+ ${comment("Copy virtual environment from builder")}COPY --from=builder /opt/venv /opt/venv
107
+
108
+ ${comment("Copy application files")}COPY --chown=${options.user}:${options.user} . .
109
+
110
+ ${comment("Set environment variables")}ENV PATH="/opt/venv/bin:$PATH" \\
111
+ PYTHONUNBUFFERED=1 \\
112
+ PYTHONDONTWRITEBYTECODE=1 \\
113
+ PORT=${options.port}
114
+
115
+ ${comment("Switch to non-root user")}USER ${options.user}
116
+
117
+ ${comment("Expose port")}EXPOSE ${options.port}
118
+
119
+ ${comment("Add health check")}${options.healthcheck ? `HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
120
+ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:${options.port}/health').read()"
121
+
122
+ ` : ""}${comment("Start application")}CMD ["python", "app.py"]
123
+ `;
124
+ }
125
+
126
+ return `FROM ${baseImage}
127
+
128
+ ${comment("Create non-root user")}RUN addgroup -g 1001 -S ${options.user} && \\
129
+ adduser -S ${options.user} -u 1001
130
+
131
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
132
+
133
+ ${comment("Copy requirements and install dependencies")}COPY requirements.txt .
134
+ RUN pip install --no-cache-dir -r requirements.txt
135
+
136
+ ${comment("Copy application files")}COPY --chown=${options.user}:${options.user} . .
137
+
138
+ ${comment("Set environment variables")}ENV PYTHONUNBUFFERED=1 \\
139
+ PYTHONDONTWRITEBYTECODE=1 \\
140
+ PORT=${options.port}
141
+
142
+ ${comment("Switch to non-root user")}USER ${options.user}
143
+
144
+ ${comment("Expose port")}EXPOSE ${options.port}
145
+
146
+ ${comment("Add health check")}${options.healthcheck ? `HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
147
+ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:${options.port}/health').read()"
148
+
149
+ ` : ""}${comment("Start application")}CMD ["python", "app.py"]
150
+ `;
151
+ }
152
+
153
+ function generateGoDockerfile(options: GenerateOptions): string {
154
+ const buildImage = getBaseImage("go", options.base);
155
+ const comment = commentFor(options);
156
+
157
+ return `${comment("Build stage")}FROM ${buildImage} AS builder
158
+
159
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
160
+
161
+ ${comment("Copy go mod files")}COPY go.mod go.sum ./
162
+
163
+ ${comment("Download dependencies")}RUN go mod download
164
+
165
+ ${comment("Copy source code")}COPY . .
166
+
167
+ ${comment("Build application")}RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
168
+
169
+ ${comment("Production stage - use minimal image")}FROM alpine:latest
170
+
171
+ ${comment("Install ca-certificates for HTTPS")}RUN apk --no-cache add ca-certificates
172
+
173
+ ${comment("Create non-root user")}RUN addgroup -g 1001 -S ${options.user} && \\
174
+ adduser -S ${options.user} -u 1001
175
+
176
+ ${comment("Set working directory")}WORKDIR /root/
177
+
178
+ ${comment("Copy binary from builder")}COPY --from=builder ${options.workdir}/main .
179
+
180
+ ${comment("Set ownership")}RUN chown ${options.user}:${options.user} main
181
+
182
+ ${comment("Switch to non-root user")}USER ${options.user}
183
+
184
+ ${comment("Expose port")}EXPOSE ${options.port}
185
+
186
+ ${comment("Add health check")}${options.healthcheck ? `HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
187
+ CMD wget --no-verbose --tries=1 --spider http://localhost:${options.port}/health || exit 1
188
+
189
+ ` : ""}${comment("Start application")}CMD ["./main"]
190
+ `;
191
+ }
192
+
193
+ function generateRustDockerfile(options: GenerateOptions): string {
194
+ const buildImage = getBaseImage("rust", options.base);
195
+ const comment = commentFor(options);
196
+
197
+ return `${comment("Build stage")}FROM ${buildImage} AS builder
198
+
199
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
200
+
201
+ ${comment("Copy Cargo files")}COPY Cargo.toml Cargo.lock ./
202
+
203
+ ${comment("Create dummy main to cache dependencies")}RUN mkdir src && \\
204
+ echo "fn main() {}" > src/main.rs && \\
205
+ cargo build --release && \\
206
+ rm -rf src
207
+
208
+ ${comment("Copy source code")}COPY . .
209
+
210
+ ${comment("Build application")}RUN cargo build --release
211
+
212
+ ${comment("Production stage")}FROM alpine:latest
213
+
214
+ ${comment("Install runtime dependencies")}RUN apk --no-cache add ca-certificates libgcc
215
+
216
+ ${comment("Create non-root user")}RUN addgroup -g 1001 -S ${options.user} && \\
217
+ adduser -S ${options.user} -u 1001
218
+
219
+ ${comment("Set working directory")}WORKDIR /root/
220
+
221
+ ${comment("Copy binary from builder")}COPY --from=builder ${options.workdir}/target/release/app .
222
+
223
+ ${comment("Set ownership")}RUN chown ${options.user}:${options.user} app
224
+
225
+ ${comment("Switch to non-root user")}USER ${options.user}
226
+
227
+ ${comment("Expose port")}EXPOSE ${options.port}
228
+
229
+ ${comment("Add health check")}${options.healthcheck ? `HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
230
+ CMD wget --no-verbose --tries=1 --spider http://localhost:${options.port}/health || exit 1
231
+
232
+ ` : ""}${comment("Start application")}CMD ["./app"]
233
+ `;
234
+ }
235
+
236
+ function generateJavaDockerfile(options: GenerateOptions): string {
237
+ const buildImage = getBaseImage("java", options.base);
238
+ const runtimeImage = buildImage.replace("-jdk", "-jre");
239
+ const comment = commentFor(options);
240
+
241
+ return `${comment("Build stage")}FROM ${buildImage} AS builder
242
+
243
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
244
+
245
+ ${comment("Copy Maven/Gradle files")}COPY pom.xml ./
246
+ ${comment("Uncomment for Gradle: COPY build.gradle settings.gradle ./")}\
247
+
248
+ ${comment("Copy source code")}COPY src ./src
249
+
250
+ ${comment("Build application")}RUN ./mvnw package -DskipTests
251
+ ${comment("Uncomment for Gradle: RUN ./gradlew build -x test")}
252
+
253
+ ${comment("Production stage")}FROM ${runtimeImage}
254
+
255
+ ${comment("Create non-root user")}RUN addgroup -g 1001 -S ${options.user} && \\
256
+ adduser -S ${options.user} -u 1001
257
+
258
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
259
+
260
+ ${comment("Copy JAR from builder")}COPY --from=builder ${options.workdir}/target/*.jar app.jar
261
+
262
+ ${comment("Set ownership")}RUN chown ${options.user}:${options.user} app.jar
263
+
264
+ ${comment("Set environment variables")}ENV JAVA_OPTS="-Xmx512m -Xms256m" \\
265
+ PORT=${options.port}
266
+
267
+ ${comment("Switch to non-root user")}USER ${options.user}
268
+
269
+ ${comment("Expose port")}EXPOSE ${options.port}
270
+
271
+ ${comment("Add health check")}${options.healthcheck ? `HEALTHCHECK --interval=30s --timeout=3s --start-period=30s --retries=3 \\
272
+ CMD wget --no-verbose --tries=1 --spider http://localhost:${options.port}/actuator/health || exit 1
273
+
274
+ ` : ""}${comment("Start application")}ENTRYPOINT ["java", "-jar", "app.jar"]
275
+ `;
276
+ }
277
+
278
+ function generateRubyDockerfile(options: GenerateOptions): string {
279
+ const baseImage = getBaseImage("ruby", options.base);
280
+ const comment = commentFor(options);
281
+
282
+ return `FROM ${baseImage}
283
+
284
+ ${comment("Install dependencies")}${options.base === "alpine" ? `RUN apk add --no-cache build-base postgresql-dev
285
+
286
+ ` : ""}${comment("Create non-root user")}RUN addgroup -g 1001 -S ${options.user} && \\
287
+ adduser -S ${options.user} -u 1001
288
+
289
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
290
+
291
+ ${comment("Copy Gemfile")}COPY Gemfile Gemfile.lock ./
292
+
293
+ ${comment("Install gems")}RUN bundle install --without development test
294
+
295
+ ${comment("Copy application files")}COPY --chown=${options.user}:${options.user} . .
296
+
297
+ ${comment("Set environment variables")}ENV RAILS_ENV=production \\
298
+ RACK_ENV=production \\
299
+ PORT=${options.port}
300
+
301
+ ${comment("Switch to non-root user")}USER ${options.user}
302
+
303
+ ${comment("Expose port")}EXPOSE ${options.port}
304
+
305
+ ${comment("Add health check")}${options.healthcheck ? `HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
306
+ CMD wget --no-verbose --tries=1 --spider http://localhost:${options.port}/health || exit 1
307
+
308
+ ` : ""}${comment("Start application")}CMD ["bundle", "exec", "rackup", "-o", "0.0.0.0", "-p", "${options.port}"]
309
+ `;
310
+ }
311
+
312
+ function generatePhpDockerfile(options: GenerateOptions): string {
313
+ const baseImage = getBaseImage("php", options.base);
314
+ const comment = commentFor(options);
315
+
316
+ return `FROM ${baseImage}
317
+
318
+ ${comment("Install dependencies")}${options.base === "alpine" ? `RUN apk add --no-cache nginx supervisor
319
+
320
+ ` : ""}${comment("Install composer")}COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
321
+
322
+ ${comment("Create non-root user")}RUN addgroup -g 1001 -S ${options.user} && \\
323
+ adduser -S ${options.user} -u 1001
324
+
325
+ ${comment("Set working directory")}WORKDIR ${options.workdir}
326
+
327
+ ${comment("Copy composer files")}COPY composer.json composer.lock ./
328
+
329
+ ${comment("Install PHP dependencies")}RUN composer install --no-dev --optimize-autoloader
330
+
331
+ ${comment("Copy application files")}COPY --chown=${options.user}:${options.user} . .
332
+
333
+ ${comment("Set environment variables")}ENV PHP_FPM_USER=${options.user} \\
334
+ PHP_FPM_GROUP=${options.user}
335
+
336
+ ${comment("Expose port")}EXPOSE ${options.port}
337
+
338
+ ${comment("Add health check")}${options.healthcheck ? `HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
339
+ CMD wget --no-verbose --tries=1 --spider http://localhost:${options.port}/health.php || exit 1
340
+
341
+ ` : ""}${comment("Start PHP-FPM")}CMD ["php-fpm"]
342
+ `;
343
+ }
344
+
345
+ function generateStaticDockerfile(options: GenerateOptions): string {
346
+ const baseImage = getBaseImage("static", options.base);
347
+ const comment = commentFor(options);
348
+
349
+ return `FROM ${baseImage}
350
+
351
+ ${comment("Remove default nginx config")}RUN rm /etc/nginx/conf.d/default.conf
352
+
353
+ ${comment("Copy custom nginx config")}COPY nginx.conf /etc/nginx/conf.d/
354
+
355
+ ${comment("Copy static files")}COPY . /usr/share/nginx/html
356
+
357
+ ${comment("Set permissions")}RUN chown -R nginx:nginx /usr/share/nginx/html && \\
358
+ chmod -R 755 /usr/share/nginx/html
359
+
360
+ ${comment("Switch to non-root user")}USER nginx
361
+
362
+ ${comment("Expose port")}EXPOSE 80
363
+
364
+ ${comment("Add health check")}${options.healthcheck ? `HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
365
+ CMD wget --no-verbose --tries=1 --spider http://localhost || exit 1
366
+
367
+ ` : ""}${comment("Start nginx")}CMD ["nginx", "-g", "daemon off;"]
368
+ `;
369
+ }
370
+
371
+ export function generateDockerfile(type: ProjectType, options: GenerateOptions): string {
372
+ switch (type) {
373
+ case "nodejs":
374
+ return generateNodejsDockerfile(options);
375
+ case "python":
376
+ return generatePythonDockerfile(options);
377
+ case "go":
378
+ return generateGoDockerfile(options);
379
+ case "rust":
380
+ return generateRustDockerfile(options);
381
+ case "java":
382
+ return generateJavaDockerfile(options);
383
+ case "ruby":
384
+ return generateRubyDockerfile(options);
385
+ case "php":
386
+ return generatePhpDockerfile(options);
387
+ case "static":
388
+ return generateStaticDockerfile(options);
389
+ default:
390
+ throw new Error(`Unsupported project type: ${type}`);
391
+ }
392
+ }