@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,723 +5,22 @@
5
5
  */
6
6
 
7
7
  import { parseArgs } from "util";
8
- import { mkdirSync, appendFileSync, existsSync, readFileSync } from "fs";
9
- import { join, dirname, extname } from "path";
10
- import { randomUUID } from "crypto";
11
- import OpenAI from "openai";
12
-
13
- // Types
14
- type Preset = "users" | "products" | "orders" | "companies" | "articles" | "reviews" | "events" | "transactions";
15
- type OutputFormat = "json" | "csv" | "sql" | "typescript";
16
- type Locale = "en-US" | "de-DE" | "ja-JP" | "fr-FR" | "es-ES" | "pt-BR" | "it-IT" | "nl-NL" | "sv-SE" | "pl-PL";
17
-
18
- interface GenerateOptions {
19
- preset?: Preset;
20
- count: number;
21
- schema?: string;
22
- format: OutputFormat;
23
- locale: Locale;
24
- seed?: string;
25
- realistic: boolean;
26
- output?: string;
27
- table: string;
28
- }
29
-
30
- interface SchemaField {
31
- [key: string]: string;
32
- }
33
-
34
- // Constants
35
- const SKILL_NAME = "generate-mock-data";
36
- const SESSION_ID = randomUUID().slice(0, 8);
37
-
38
- // Use SKILLS_OUTPUT_DIR from CLI if available, otherwise fall back to cwd
39
- const SKILLS_OUTPUT_DIR = process.env.SKILLS_OUTPUT_DIR || join(process.cwd(), ".skills");
40
- const EXPORTS_DIR = join(SKILLS_OUTPUT_DIR, "exports", SKILL_NAME);
41
- const LOGS_DIR = join(SKILLS_OUTPUT_DIR, "logs", SKILL_NAME);
42
-
43
- // Session timestamp for log filename
44
- const SESSION_TIMESTAMP = new Date().toISOString().replace(/[:.]/g, "_").replace(/-/g, "_").slice(0, 19).toLowerCase();
45
-
46
- // Ensure directories exist
47
- function ensureDir(dir: string) {
48
- if (!existsSync(dir)) {
49
- mkdirSync(dir, { recursive: true });
50
- }
51
- }
52
-
53
- // Logger
54
- function log(message: string, level: "info" | "error" | "success" = "info") {
55
- const timestamp = new Date().toISOString();
56
- const logFile = join(LOGS_DIR, `log_${SESSION_TIMESTAMP}_${SESSION_ID}.log`);
57
-
58
- ensureDir(LOGS_DIR);
59
-
60
- const logEntry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
61
- appendFileSync(logFile, logEntry);
62
-
63
- const prefix = level === "error" ? "❌" : level === "success" ? "✅" : "ℹ️";
64
- console.log(`${prefix} ${message}`);
65
- }
66
-
67
- // Preset schemas
68
- const PRESET_SCHEMAS: Record<Preset, SchemaField> = {
69
- users: {
70
- id: "uuid",
71
- firstName: "firstName",
72
- lastName: "lastName",
73
- email: "email",
74
- phone: "phone",
75
- dateOfBirth: "date",
76
- username: "username",
77
- avatarUrl: "avatarUrl",
78
- address: "address",
79
- city: "city",
80
- state: "state",
81
- zipCode: "zipCode",
82
- country: "country",
83
- },
84
- products: {
85
- id: "uuid",
86
- name: "productName",
87
- description: "paragraph",
88
- price: "price",
89
- category: "category",
90
- sku: "sku",
91
- stock: "number",
92
- brand: "company",
93
- imageUrl: "imageUrl",
94
- rating: "rating",
95
- },
96
- orders: {
97
- orderId: "uuid",
98
- customerId: "uuid",
99
- customerName: "name",
100
- customerEmail: "email",
101
- orderDate: "date",
102
- items: "orderItems",
103
- subtotal: "price",
104
- tax: "price",
105
- shipping: "price",
106
- total: "price",
107
- status: "orderStatus",
108
- trackingNumber: "trackingNumber",
109
- },
110
- companies: {
111
- id: "uuid",
112
- name: "company",
113
- industry: "industry",
114
- employees: "number",
115
- foundedYear: "year",
116
- revenue: "price",
117
- website: "url",
118
- description: "paragraph",
119
- logoUrl: "imageUrl",
120
- address: "address",
121
- city: "city",
122
- country: "country",
123
- },
124
- articles: {
125
- id: "uuid",
126
- title: "title",
127
- author: "name",
128
- content: "paragraph",
129
- excerpt: "sentence",
130
- publishedDate: "date",
131
- tags: "tags",
132
- category: "category",
133
- readingTime: "number",
134
- viewCount: "number",
135
- imageUrl: "imageUrl",
136
- },
137
- reviews: {
138
- id: "uuid",
139
- reviewerName: "name",
140
- rating: "rating",
141
- title: "sentence",
142
- text: "paragraph",
143
- date: "date",
144
- verifiedPurchase: "boolean",
145
- helpfulCount: "number",
146
- productId: "uuid",
147
- },
148
- events: {
149
- id: "uuid",
150
- name: "title",
151
- description: "paragraph",
152
- startDate: "date",
153
- endDate: "date",
154
- location: "address",
155
- organizer: "name",
156
- category: "category",
157
- attendees: "number",
158
- ticketPrice: "price",
159
- status: "eventStatus",
160
- },
161
- transactions: {
162
- transactionId: "uuid",
163
- amount: "price",
164
- currency: "currency",
165
- type: "transactionType",
166
- date: "date",
167
- description: "sentence",
168
- fromAccount: "accountNumber",
169
- toAccount: "accountNumber",
170
- status: "transactionStatus",
171
- balance: "price",
172
- },
173
- };
174
-
175
- // Seeded random number generator
176
- class SeededRandom {
177
- private seed: number;
178
-
179
- constructor(seed: string) {
180
- this.seed = this.hashCode(seed);
181
- }
182
-
183
- private hashCode(str: string): number {
184
- let hash = 0;
185
- for (let i = 0; i < str.length; i++) {
186
- const char = str.charCodeAt(i);
187
- hash = ((hash << 5) - hash) + char;
188
- hash = hash & hash;
189
- }
190
- return Math.abs(hash);
191
- }
192
-
193
- next(): number {
194
- this.seed = (this.seed * 9301 + 49297) % 233280;
195
- return this.seed / 233280;
196
- }
197
-
198
- nextInt(min: number, max: number): number {
199
- return Math.floor(this.next() * (max - min + 1)) + min;
200
- }
201
-
202
- choice<T>(array: T[]): T {
203
- return array[this.nextInt(0, array.length - 1)];
204
- }
205
- }
206
-
207
- // Built-in data generators
208
- class DataGenerator {
209
- private random: SeededRandom | null;
210
- private locale: Locale;
211
-
212
- constructor(seed?: string, locale: Locale = "en-US") {
213
- this.random = seed ? new SeededRandom(seed) : null;
214
- this.locale = locale;
215
- }
216
-
217
- private rand(): number {
218
- return this.random ? this.random.next() : Math.random();
219
- }
220
-
221
- private randInt(min: number, max: number): number {
222
- return this.random ? this.random.nextInt(min, max) : Math.floor(Math.random() * (max - min + 1)) + min;
223
- }
224
-
225
- private choice<T>(array: T[]): T {
226
- return this.random ? this.random.choice(array) : array[Math.floor(Math.random() * array.length)];
227
- }
228
-
229
- // Locale-specific data
230
- private getFirstNames(): string[] {
231
- const names: Record<string, string[]> = {
232
- "en-US": ["James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph", "Thomas", "Christopher", "Mary", "Patricia", "Jennifer", "Linda", "Elizabeth", "Barbara", "Susan", "Jessica", "Sarah", "Karen"],
233
- "de-DE": ["Lukas", "Leon", "Tim", "Paul", "Felix", "Jonas", "Maximilian", "Luis", "Ben", "Noah", "Emma", "Mia", "Hannah", "Sofia", "Anna", "Lena", "Lea", "Marie", "Lina", "Emily"],
234
- "ja-JP": ["Haruto", "Sota", "Yuto", "Yuki", "Kaito", "Takumi", "Riku", "Sora", "Hinata", "Yui", "Hina", "Sakura", "Yuna", "Aoi", "Miyu", "Rin", "Mei", "Mio", "Nanami", "Riko"],
235
- "fr-FR": ["Gabriel", "Louis", "Raphael", "Arthur", "Lucas", "Jules", "Adam", "Hugo", "Nathan", "Tom", "Emma", "Louise", "Alice", "Chloe", "Lea", "Manon", "Rose", "Jade", "Clara", "Anna"],
236
- "es-ES": ["Lucas", "Hugo", "Martin", "Mateo", "Leo", "Daniel", "Alejandro", "Pablo", "Manuel", "Adrian", "Lucia", "Maria", "Sofia", "Julia", "Paula", "Emma", "Martina", "Valeria", "Olivia", "Sara"],
237
- };
238
- return names[this.locale] || names["en-US"];
239
- }
240
-
241
- private getLastNames(): string[] {
242
- const names: Record<string, string[]> = {
243
- "en-US": ["Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller", "Davis", "Rodriguez", "Martinez", "Hernandez", "Lopez", "Gonzalez", "Wilson", "Anderson", "Thomas", "Taylor", "Moore", "Jackson", "Martin"],
244
- "de-DE": ["Müller", "Schmidt", "Schneider", "Fischer", "Weber", "Meyer", "Wagner", "Becker", "Schulz", "Hoffmann", "Schäfer", "Koch", "Bauer", "Richter", "Klein", "Wolf", "Schröder", "Neumann", "Schwarz", "Zimmermann"],
245
- "ja-JP": ["Sato", "Suzuki", "Takahashi", "Tanaka", "Watanabe", "Ito", "Yamamoto", "Nakamura", "Kobayashi", "Kato", "Yoshida", "Yamada", "Sasaki", "Yamaguchi", "Saito", "Matsumoto", "Inoue", "Kimura", "Hayashi", "Shimizu"],
246
- "fr-FR": ["Martin", "Bernard", "Dubois", "Thomas", "Robert", "Richard", "Petit", "Durand", "Leroy", "Moreau", "Simon", "Laurent", "Lefebvre", "Michel", "Garcia", "David", "Bertrand", "Roux", "Vincent", "Fournier"],
247
- "es-ES": ["García", "Rodríguez", "González", "Fernández", "López", "Martínez", "Sánchez", "Pérez", "Gómez", "Martín", "Jiménez", "Ruiz", "Hernández", "Díaz", "Moreno", "Muñoz", "Álvarez", "Romero", "Alonso", "Gutiérrez"],
248
- };
249
- return names[this.locale] || names["en-US"];
250
- }
251
-
252
- private getCities(): string[] {
253
- const cities: Record<string, string[]> = {
254
- "en-US": ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix", "Philadelphia", "San Antonio", "San Diego", "Dallas", "San Jose"],
255
- "de-DE": ["Berlin", "Hamburg", "München", "Köln", "Frankfurt", "Stuttgart", "Düsseldorf", "Dortmund", "Essen", "Leipzig"],
256
- "ja-JP": ["Tokyo", "Osaka", "Nagoya", "Sapporo", "Fukuoka", "Kobe", "Kyoto", "Yokohama", "Kawasaki", "Saitama"],
257
- "fr-FR": ["Paris", "Marseille", "Lyon", "Toulouse", "Nice", "Nantes", "Strasbourg", "Montpellier", "Bordeaux", "Lille"],
258
- "es-ES": ["Madrid", "Barcelona", "Valencia", "Sevilla", "Zaragoza", "Málaga", "Murcia", "Palma", "Las Palmas", "Bilbao"],
259
- };
260
- return cities[this.locale] || cities["en-US"];
261
- }
262
-
263
- private getCountries(): string[] {
264
- const countries: Record<string, string[]> = {
265
- "en-US": ["United States", "Canada", "United Kingdom", "Australia", "New Zealand"],
266
- "de-DE": ["Deutschland", "Österreich", "Schweiz", "Luxemburg", "Belgien"],
267
- "ja-JP": ["日本", "アメリカ", "中国", "韓国", "オーストラリア"],
268
- "fr-FR": ["France", "Belgique", "Suisse", "Canada", "Luxembourg"],
269
- "es-ES": ["España", "México", "Argentina", "Colombia", "Chile"],
270
- };
271
- return countries[this.locale] || countries["en-US"];
272
- }
273
-
274
- uuid(): string {
275
- return randomUUID();
276
- }
277
-
278
- string(length: number = 10): string {
279
- const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
280
- let result = "";
281
- for (let i = 0; i < length; i++) {
282
- result += chars.charAt(this.randInt(0, chars.length - 1));
283
- }
284
- return result;
285
- }
286
-
287
- number(min: number = 0, max: number = 1000): number {
288
- return this.randInt(min, max);
289
- }
290
-
291
- boolean(): boolean {
292
- return this.rand() > 0.5;
293
- }
294
-
295
- email(firstName?: string, lastName?: string): string {
296
- const first = firstName || this.firstName();
297
- const last = lastName || this.lastName();
298
- const domains = ["gmail.com", "yahoo.com", "outlook.com", "hotmail.com", "example.com"];
299
- return `${first.toLowerCase()}.${last.toLowerCase()}@${this.choice(domains)}`;
300
- }
301
-
302
- phone(): string {
303
- const formats: Record<string, () => string> = {
304
- "en-US": () => `+1-${this.randInt(200, 999)}-${this.randInt(200, 999)}-${this.randInt(1000, 9999)}`,
305
- "de-DE": () => `+49-${this.randInt(30, 89)}-${this.randInt(10000000, 99999999)}`,
306
- "ja-JP": () => `+81-${this.randInt(3, 9)}-${this.randInt(1000, 9999)}-${this.randInt(1000, 9999)}`,
307
- "fr-FR": () => `+33-${this.randInt(1, 9)}-${this.randInt(10, 99)}-${this.randInt(10, 99)}-${this.randInt(10, 99)}-${this.randInt(10, 99)}`,
308
- "es-ES": () => `+34-${this.randInt(600, 799)}-${this.randInt(100, 999)}-${this.randInt(100, 999)}`,
309
- };
310
- const format = formats[this.locale] || formats["en-US"];
311
- return format();
312
- }
313
-
314
- url(): string {
315
- const protocols = ["https://"];
316
- const domains = ["example.com", "test.com", "demo.com", "sample.org", "mock.io"];
317
- return `${this.choice(protocols)}${this.choice(domains)}`;
318
- }
319
-
320
- date(): string {
321
- const start = new Date(2020, 0, 1).getTime();
322
- const end = new Date().getTime();
323
- const randomTime = start + this.rand() * (end - start);
324
- return new Date(randomTime).toISOString();
325
- }
326
-
327
- firstName(): string {
328
- return this.choice(this.getFirstNames());
329
- }
330
-
331
- lastName(): string {
332
- return this.choice(this.getLastNames());
333
- }
334
-
335
- name(): string {
336
- return `${this.firstName()} ${this.lastName()}`;
337
- }
338
-
339
- username(): string {
340
- return `${this.firstName().toLowerCase()}${this.randInt(100, 9999)}`;
341
- }
342
-
343
- address(): string {
344
- return `${this.randInt(1, 9999)} ${this.choice(["Main", "Oak", "Pine", "Maple", "Cedar", "Elm", "Park", "Washington"])} ${this.choice(["St", "Ave", "Rd", "Blvd", "Dr", "Ln", "Way"])}`;
345
- }
346
-
347
- city(): string {
348
- return this.choice(this.getCities());
349
- }
350
-
351
- state(): string {
352
- const states = ["CA", "TX", "FL", "NY", "PA", "IL", "OH", "GA", "NC", "MI"];
353
- return this.choice(states);
354
- }
355
-
356
- zipCode(): string {
357
- return this.randInt(10000, 99999).toString();
358
- }
359
-
360
- country(): string {
361
- return this.choice(this.getCountries());
362
- }
363
-
364
- company(): string {
365
- const prefixes = ["Tech", "Global", "Digital", "Smart", "Dynamic", "Advanced", "Premier"];
366
- const suffixes = ["Solutions", "Systems", "Corp", "Industries", "Group", "Enterprises", "Technologies"];
367
- return `${this.choice(prefixes)} ${this.choice(suffixes)}`;
368
- }
369
-
370
- price(): string {
371
- return (this.randInt(100, 999999) / 100).toFixed(2);
372
- }
373
-
374
- paragraph(): string {
375
- const words = ["lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", "sed", "do", "eiusmod", "tempor", "incididunt", "ut", "labore", "et", "dolore", "magna", "aliqua"];
376
- const length = this.randInt(20, 50);
377
- let paragraph = "";
378
- for (let i = 0; i < length; i++) {
379
- paragraph += this.choice(words) + " ";
380
- }
381
- return paragraph.trim().charAt(0).toUpperCase() + paragraph.trim().slice(1) + ".";
382
- }
383
-
384
- sentence(): string {
385
- const words = ["lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit"];
386
- const length = this.randInt(5, 12);
387
- let sentence = "";
388
- for (let i = 0; i < length; i++) {
389
- sentence += this.choice(words) + " ";
390
- }
391
- return sentence.trim().charAt(0).toUpperCase() + sentence.trim().slice(1) + ".";
392
- }
393
-
394
- productName(): string {
395
- const adjectives = ["Premium", "Deluxe", "Professional", "Advanced", "Ultimate", "Essential", "Classic"];
396
- const products = ["Laptop", "Phone", "Tablet", "Monitor", "Keyboard", "Mouse", "Headphones", "Speaker", "Camera", "Watch"];
397
- return `${this.choice(adjectives)} ${this.choice(products)}`;
398
- }
399
-
400
- category(): string {
401
- return this.choice(["Electronics", "Clothing", "Food", "Books", "Sports", "Home", "Garden", "Toys", "Automotive", "Health"]);
402
- }
403
-
404
- sku(): string {
405
- return `SKU-${this.randInt(10000, 99999)}`;
406
- }
407
-
408
- imageUrl(): string {
409
- return `https://picsum.photos/seed/${this.randInt(1, 1000)}/800/600`;
410
- }
411
-
412
- avatarUrl(): string {
413
- return `https://i.pravatar.cc/300?u=${this.randInt(1, 10000)}`;
414
- }
415
-
416
- rating(): number {
417
- return this.randInt(1, 5);
418
- }
419
-
420
- orderItems(): string {
421
- const count = this.randInt(1, 5);
422
- const items = [];
423
- for (let i = 0; i < count; i++) {
424
- items.push(`${this.productName()} (qty: ${this.randInt(1, 3)})`);
425
- }
426
- return items.join(", ");
427
- }
428
-
429
- orderStatus(): string {
430
- return this.choice(["pending", "processing", "shipped", "delivered", "cancelled"]);
431
- }
432
-
433
- trackingNumber(): string {
434
- return `TRK${this.randInt(100000000, 999999999)}`;
435
- }
436
-
437
- industry(): string {
438
- return this.choice(["Technology", "Healthcare", "Finance", "Retail", "Manufacturing", "Education", "Entertainment", "Hospitality", "Transportation", "Energy"]);
439
- }
440
-
441
- year(): number {
442
- return this.randInt(1990, 2024);
443
- }
444
-
445
- title(): string {
446
- const words = ["How to", "The Best", "Top 10", "Guide to", "Understanding", "Introduction to", "Mastering", "Essential"];
447
- const topics = ["Technology", "Business", "Marketing", "Design", "Programming", "Leadership", "Innovation", "Strategy"];
448
- return `${this.choice(words)} ${this.choice(topics)}`;
449
- }
450
-
451
- tags(): string {
452
- const allTags = ["technology", "business", "marketing", "design", "development", "productivity", "innovation", "strategy", "leadership", "education"];
453
- const count = this.randInt(2, 5);
454
- const selected = [];
455
- for (let i = 0; i < count; i++) {
456
- selected.push(this.choice(allTags));
457
- }
458
- return selected.join(", ");
459
- }
460
-
461
- eventStatus(): string {
462
- return this.choice(["upcoming", "ongoing", "completed", "cancelled"]);
463
- }
464
-
465
- currency(): string {
466
- return this.choice(["USD", "EUR", "GBP", "JPY", "CAD", "AUD"]);
467
- }
468
-
469
- transactionType(): string {
470
- return this.choice(["debit", "credit", "transfer", "payment", "refund"]);
471
- }
472
-
473
- accountNumber(): string {
474
- return `${this.randInt(1000, 9999)}-${this.randInt(1000, 9999)}-${this.randInt(1000, 9999)}`;
475
- }
476
-
477
- transactionStatus(): string {
478
- return this.choice(["pending", "completed", "failed", "cancelled"]);
479
- }
480
-
481
- generateField(fieldType: string): any {
482
- switch (fieldType) {
483
- case "string": return this.string();
484
- case "number": return this.number();
485
- case "boolean": return this.boolean();
486
- case "email": return this.email();
487
- case "phone": return this.phone();
488
- case "url": return this.url();
489
- case "date": return this.date();
490
- case "uuid": return this.uuid();
491
- case "name": return this.name();
492
- case "firstName": return this.firstName();
493
- case "lastName": return this.lastName();
494
- case "username": return this.username();
495
- case "address": return this.address();
496
- case "city": return this.city();
497
- case "state": return this.state();
498
- case "zipCode": return this.zipCode();
499
- case "country": return this.country();
500
- case "company": return this.company();
501
- case "price": return this.price();
502
- case "paragraph": return this.paragraph();
503
- case "sentence": return this.sentence();
504
- case "productName": return this.productName();
505
- case "category": return this.category();
506
- case "sku": return this.sku();
507
- case "imageUrl": return this.imageUrl();
508
- case "avatarUrl": return this.avatarUrl();
509
- case "rating": return this.rating();
510
- case "orderItems": return this.orderItems();
511
- case "orderStatus": return this.orderStatus();
512
- case "trackingNumber": return this.trackingNumber();
513
- case "industry": return this.industry();
514
- case "year": return this.year();
515
- case "title": return this.title();
516
- case "tags": return this.tags();
517
- case "eventStatus": return this.eventStatus();
518
- case "currency": return this.currency();
519
- case "transactionType": return this.transactionType();
520
- case "accountNumber": return this.accountNumber();
521
- case "transactionStatus": return this.transactionStatus();
522
- default: return this.string();
523
- }
524
- }
525
- }
526
-
527
- // Generate data using built-in generators
528
- async function generateDataBuiltin(
529
- schema: SchemaField,
530
- count: number,
531
- seed?: string,
532
- locale: Locale = "en-US"
533
- ): Promise<any[]> {
534
- const generator = new DataGenerator(seed, locale);
535
- const data = [];
536
-
537
- for (let i = 0; i < count; i++) {
538
- const record: any = {};
539
- for (const [field, type] of Object.entries(schema)) {
540
- record[field] = generator.generateField(type);
541
- }
542
- data.push(record);
543
- }
544
-
545
- return data;
546
- }
547
-
548
- // Generate data using AI (OpenAI GPT-4o-mini)
549
- async function generateDataAI(
550
- schema: SchemaField,
551
- count: number,
552
- locale: Locale = "en-US"
553
- ): Promise<any[]> {
554
- const apiKey = process.env.OPENAI_API_KEY;
555
- if (!apiKey) {
556
- throw new Error("OPENAI_API_KEY environment variable is required for AI mode");
557
- }
558
-
559
- const openai = new OpenAI({ apiKey });
560
-
561
- log(`Generating ${count} records using AI (GPT-4o-mini)...`);
562
-
563
- const schemaDescription = Object.entries(schema)
564
- .map(([field, type]) => `- ${field}: ${type}`)
565
- .join("\n");
566
-
567
- const prompt = `Generate ${count} realistic mock data records as a JSON array.
568
-
569
- Schema:
570
- ${schemaDescription}
571
-
572
- Requirements:
573
- - Return ONLY a valid JSON array of objects
574
- - Each object must have all fields from the schema
575
- - Data should be realistic and diverse
576
- - Use ${locale} locale for localized data (names, addresses, phone numbers)
577
- - No explanations, just the JSON array
578
-
579
- Example format:
580
- [
581
- { "field1": "value1", "field2": "value2" },
582
- { "field1": "value3", "field2": "value4" }
583
- ]`;
584
-
585
- try {
586
- // Split into batches if count > 50 to avoid token limits
587
- const batchSize = Math.min(count, 50);
588
- const batches = Math.ceil(count / batchSize);
589
- const allData: any[] = [];
590
-
591
- for (let batch = 0; batch < batches; batch++) {
592
- const currentBatchSize = Math.min(batchSize, count - allData.length);
593
-
594
- log(`Generating batch ${batch + 1}/${batches} (${currentBatchSize} records)...`);
595
-
596
- const batchPrompt = prompt.replace(`Generate ${count}`, `Generate ${currentBatchSize}`);
597
-
598
- const completion = await openai.chat.completions.create({
599
- model: "gpt-4o-mini",
600
- messages: [
601
- {
602
- role: "system",
603
- content: "You are a data generator that returns only valid JSON arrays. No explanations, no markdown, just JSON.",
604
- },
605
- {
606
- role: "user",
607
- content: batchPrompt,
608
- },
609
- ],
610
- temperature: 0.8,
611
- });
612
-
613
- const content = completion.choices[0].message.content || "[]";
614
-
615
- // Clean up response (remove markdown code blocks if present)
616
- const cleanContent = content
617
- .replace(/```json\n?/g, "")
618
- .replace(/```\n?/g, "")
619
- .trim();
620
-
621
- const batchData = JSON.parse(cleanContent);
622
-
623
- if (!Array.isArray(batchData)) {
624
- throw new Error("AI response is not a JSON array");
625
- }
626
-
627
- allData.push(...batchData);
628
-
629
- // Log cost estimate
630
- const inputTokens = completion.usage?.prompt_tokens || 0;
631
- const outputTokens = completion.usage?.completion_tokens || 0;
632
- const cost = (inputTokens * 0.00015 / 1000) + (outputTokens * 0.0006 / 1000);
633
- log(`Batch ${batch + 1} cost: $${cost.toFixed(4)}`);
634
- }
635
-
636
- return allData.slice(0, count);
637
- } catch (error) {
638
- if (error instanceof Error) {
639
- throw new Error(`AI generation failed: ${error.message}`);
640
- }
641
- throw error;
642
- }
643
- }
644
-
645
- // Format data as JSON
646
- function formatJSON(data: any[]): string {
647
- return JSON.stringify(data, null, 2);
648
- }
649
-
650
- // Format data as CSV
651
- function formatCSV(data: any[]): string {
652
- if (data.length === 0) return "";
653
-
654
- const headers = Object.keys(data[0]);
655
- const rows = data.map(record =>
656
- headers.map(header => {
657
- const value = record[header];
658
- // Escape quotes and wrap in quotes if contains comma or quote
659
- if (typeof value === "string" && (value.includes(",") || value.includes('"') || value.includes("\n"))) {
660
- return `"${value.replace(/"/g, '""')}"`;
661
- }
662
- return value;
663
- }).join(",")
664
- );
665
-
666
- return [headers.join(","), ...rows].join("\n");
667
- }
668
-
669
- // Format data as SQL INSERT statements
670
- function formatSQL(data: any[], tableName: string): string {
671
- if (data.length === 0) return "";
672
-
673
- const fields = Object.keys(data[0]);
674
- const fieldList = fields.join(", ");
675
-
676
- const values = data.map(record =>
677
- `(${fields.map(field => {
678
- const value = record[field];
679
- if (value === null || value === undefined) {
680
- return "NULL";
681
- }
682
- if (typeof value === "string") {
683
- return `'${value.replace(/'/g, "''")}'`;
684
- }
685
- if (typeof value === "boolean") {
686
- return value ? "TRUE" : "FALSE";
687
- }
688
- return value;
689
- }).join(", ")})`
690
- );
691
-
692
- return `INSERT INTO ${tableName} (${fieldList}) VALUES\n${values.join(",\n")};`;
693
- }
694
-
695
- // Format data as TypeScript
696
- function formatTypeScript(data: any[]): string {
697
- if (data.length === 0) return "";
698
-
699
- // Generate interface from first record
700
- const sample = data[0];
701
- const interfaceFields = Object.entries(sample)
702
- .map(([key, value]) => {
703
- let type = typeof value;
704
- if (type === "object" && value === null) {
705
- type = "any";
706
- }
707
- return ` ${key}: ${type};`;
708
- })
709
- .join("\n");
710
-
711
- const interfaceCode = `interface MockData {\n${interfaceFields}\n}`;
712
- const dataCode = `export const mockData: MockData[] = ${JSON.stringify(data, null, 2)};`;
713
-
714
- return `${interfaceCode}\n\n${dataCode}`;
715
- }
716
-
717
- // Generate output filename
718
- function generateOutputFilename(format: OutputFormat): string {
719
- const timestamp = new Date().toISOString().replace(/[:.]/g, "_").replace(/-/g, "_").slice(0, 19).toLowerCase();
720
- const extension = format === "typescript" ? "ts" : format;
721
- return join(EXPORTS_DIR, `mock_data_${timestamp}.${extension}`);
722
- }
8
+ import { existsSync, readFileSync } from "fs";
9
+ import { dirname, join } from "path";
10
+
11
+ import { generateDataAI } from "./ai";
12
+ import {
13
+ formatCSV,
14
+ formatJSON,
15
+ formatSQL,
16
+ formatTypeScript,
17
+ generateOutputFilename,
18
+ } from "./formatters";
19
+ import { generateDataBuiltin } from "./generator";
20
+ import { ensureDir, log, LOGS_DIR, SESSION_ID, SESSION_TIMESTAMP } from "./logger";
21
+ import { PRESET_SCHEMAS } from "./presets";
22
+ import type { Locale, OutputFormat, Preset, SchemaField } from "./types";
723
23
 
724
- // Main function
725
24
  async function main() {
726
25
  const { values, positionals } = parseArgs({
727
26
  args: Bun.argv.slice(2),