@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
@@ -0,0 +1,683 @@
1
+ #!/usr/bin/env bun
2
+
3
+ import { Command } from "commander";
4
+ import {
5
+ loadConfig,
6
+ saveConfig,
7
+ CONFIG_FILE,
8
+ getApiKey,
9
+ getApiSecret,
10
+ getCustomerId,
11
+ } from "../src/lib/config";
12
+ import { purchaseApi, domainApi, formatPrice, type Contact, type DomainPurchaseRequestV2 } from "../src/lib/api-client";
13
+ import { ensureInstalled } from "../src/lib/installer";
14
+
15
+ // Ensure service directory exists on startup
16
+ ensureInstalled();
17
+
18
+ const program = new Command();
19
+
20
+ program
21
+ .name("service-domainpurchase")
22
+ .description("CLI tool for purchasing and managing domains via Brandsight/GoDaddy API")
23
+ .version("1.0.0");
24
+
25
+ // ============ CONFIG COMMANDS ============
26
+
27
+ program
28
+ .command("config")
29
+ .description("Show or set configuration")
30
+ .option("--api-key <key>", "Set GoDaddy API key (direct mode)")
31
+ .option("--api-secret <secret>", "Set GoDaddy API secret (direct mode)")
32
+ .option("--customer-id <id>", "Set GoDaddy customer ID (direct mode)")
33
+ .option("--api-url <url>", "Set GoDaddy API URL (direct mode)")
34
+ .option("--use-remote <bool>", "Use remote server instead of direct API (true/false)")
35
+ .option("--remote-url <url>", "Set remote server URL")
36
+ .option("--remote-api-key <key>", "Set remote server API key")
37
+ .option("--show", "Show current configuration")
38
+ .action(async (options) => {
39
+ const config = loadConfig();
40
+
41
+ if (options.apiKey) {
42
+ saveConfig({ apiKey: options.apiKey });
43
+ console.log("API key saved");
44
+ }
45
+
46
+ if (options.apiSecret) {
47
+ saveConfig({ apiSecret: options.apiSecret });
48
+ console.log("API secret saved");
49
+ }
50
+
51
+ if (options.customerId) {
52
+ saveConfig({ customerId: options.customerId });
53
+ console.log("Customer ID saved");
54
+ }
55
+
56
+ if (options.apiUrl) {
57
+ saveConfig({ apiUrl: options.apiUrl });
58
+ console.log(`API URL set to: ${options.apiUrl}`);
59
+ }
60
+
61
+ if (options.useRemote !== undefined) {
62
+ const useRemote = options.useRemote === "true";
63
+ saveConfig({ useRemoteServer: useRemote });
64
+ console.log(`Remote server mode: ${useRemote ? "ENABLED" : "DISABLED"}`);
65
+ }
66
+
67
+ if (options.remoteUrl) {
68
+ saveConfig({ remoteServerUrl: options.remoteUrl });
69
+ console.log(`Remote server URL set to: ${options.remoteUrl}`);
70
+ }
71
+
72
+ if (options.remoteApiKey) {
73
+ saveConfig({ remoteApiKey: options.remoteApiKey });
74
+ console.log("Remote API key saved");
75
+ }
76
+
77
+ const hasOptions = options.apiKey || options.apiSecret || options.customerId ||
78
+ options.apiUrl || options.useRemote !== undefined ||
79
+ options.remoteUrl || options.remoteApiKey;
80
+
81
+ if (options.show || !hasOptions) {
82
+ const currentConfig = loadConfig();
83
+ console.log("\nConfiguration:");
84
+ console.log(` Config file: ${CONFIG_FILE}`);
85
+ console.log("");
86
+ console.log(" Mode: " + (currentConfig.useRemoteServer ? "REMOTE SERVER" : "DIRECT API"));
87
+ console.log("");
88
+
89
+ if (currentConfig.useRemoteServer) {
90
+ console.log(" Remote Server Settings:");
91
+ console.log(` URL: ${currentConfig.remoteServerUrl}`);
92
+ console.log(` API Key: ${currentConfig.remoteApiKey ? "***" + currentConfig.remoteApiKey.slice(-4) : "(auto from AWS)"}`);
93
+ } else {
94
+ console.log(" Direct API Settings:");
95
+ console.log(` API URL: ${currentConfig.apiUrl}`);
96
+ console.log(` API Key: ${currentConfig.apiKey ? "***" + currentConfig.apiKey.slice(-4) : "(not set)"}`);
97
+ console.log(` API Secret: ${currentConfig.apiSecret ? "***" + currentConfig.apiSecret.slice(-4) : "(not set)"}`);
98
+ console.log(` Customer ID: ${currentConfig.customerId || "(not set)"}`);
99
+ }
100
+
101
+ console.log("\n Tip: Use --use-remote true to switch to remote server mode");
102
+ }
103
+ });
104
+
105
+ // ============ CHECK COMMAND ============
106
+
107
+ program
108
+ .command("check <domain>")
109
+ .description("Check domain availability and pricing")
110
+ .option("--transfer", "Check for transfer instead of registration")
111
+ .option("--json", "Output as JSON")
112
+ .action(async (domain, options) => {
113
+ try {
114
+ const result = await domainApi.checkAvailability(domain, options.transfer);
115
+
116
+ if (options.json) {
117
+ console.log(JSON.stringify(result, null, 2));
118
+ return;
119
+ }
120
+
121
+ const status = result.available ? "AVAILABLE" : "TAKEN";
122
+ const price = result.price
123
+ ? formatPrice(result.price, result.currency)
124
+ : "N/A";
125
+ const premium = result.registryPremiumPricing ? " [PREMIUM]" : "";
126
+
127
+ console.log(`\nDomain: ${domain}`);
128
+ console.log(`Status: ${status}`);
129
+ if (result.available) {
130
+ console.log(`Price: ${price}${premium}`);
131
+ console.log(`Period: ${result.period || 1} year(s)`);
132
+ }
133
+ } catch (error) {
134
+ console.error("Error:", error instanceof Error ? error.message : error);
135
+ process.exit(1);
136
+ }
137
+ });
138
+
139
+ // ============ AGREEMENTS COMMAND ============
140
+
141
+ program
142
+ .command("agreements <tlds...>")
143
+ .description("Get legal agreements for TLDs (required before purchase)")
144
+ .option("--privacy", "Include privacy agreements")
145
+ .option("--json", "Output as JSON")
146
+ .action(async (tlds, options) => {
147
+ try {
148
+ const agreements = await domainApi.getAgreements(tlds, options.privacy);
149
+
150
+ if (options.json) {
151
+ console.log(JSON.stringify(agreements, null, 2));
152
+ return;
153
+ }
154
+
155
+ console.log(`\nAgreements for: ${tlds.join(", ")}\n`);
156
+
157
+ for (const a of agreements) {
158
+ console.log(` [${a.agreementKey}] ${a.title}`);
159
+ console.log(` URL: ${a.url}\n`);
160
+ }
161
+
162
+ console.log(`\nTotal: ${agreements.length} agreement(s)`);
163
+ console.log(`\nUse these agreement keys when purchasing domains.`);
164
+ } catch (error) {
165
+ console.error("Error:", error instanceof Error ? error.message : error);
166
+ process.exit(1);
167
+ }
168
+ });
169
+
170
+ // ============ VALIDATE COMMAND ============
171
+
172
+ program
173
+ .command("validate <domain>")
174
+ .description("Validate a domain purchase request (dry run)")
175
+ .option("--contact-json <path>", "Path to JSON file with contact info")
176
+ .option("--period <years>", "Registration period in years", "1")
177
+ .option("--privacy", "Enable WHOIS privacy")
178
+ .option("--auto-renew", "Enable auto renewal")
179
+ .option("--json", "Output as JSON")
180
+ .action(async (domain, options) => {
181
+ try {
182
+ // Check availability first to get price
183
+ console.log(`Checking availability for ${domain}...`);
184
+ const availability = await domainApi.checkAvailability(domain);
185
+
186
+ if (!availability.available) {
187
+ console.error(`\nError: ${domain} is not available for registration.`);
188
+ process.exit(1);
189
+ }
190
+
191
+ const price = availability.price || 0;
192
+ const currency = availability.currency || "USD";
193
+ console.log(`Domain available! Price: ${formatPrice(price, currency)}\n`);
194
+
195
+ // Get TLD from domain
196
+ const tld = domain.split(".").slice(1).join(".");
197
+
198
+ // Get agreements
199
+ console.log(`Fetching agreements for .${tld}...`);
200
+ const agreements = await domainApi.getAgreements([tld], options.privacy);
201
+ const agreementKeys = agreements.map((a) => a.agreementKey);
202
+
203
+ // Load contact info
204
+ let contact: Contact;
205
+ if (options.contactJson) {
206
+ const file = await Bun.file(options.contactJson);
207
+ contact = await file.json();
208
+ } else {
209
+ // Use placeholder contact for validation
210
+ contact = {
211
+ nameFirst: "Test",
212
+ nameLast: "User",
213
+ email: "test@example.com",
214
+ phone: "+1.5555555555",
215
+ addressMailing: {
216
+ address1: "123 Test St",
217
+ city: "Test City",
218
+ state: "CA",
219
+ postalCode: "90210",
220
+ country: "US",
221
+ },
222
+ encoding: "ASCII",
223
+ };
224
+ console.log("\nUsing placeholder contact info for validation.");
225
+ console.log("For actual purchase, provide --contact-json <path>\n");
226
+ }
227
+
228
+ // Ensure contact has encoding
229
+ if (!contact.encoding) {
230
+ contact.encoding = "ASCII";
231
+ }
232
+
233
+ // Get public IP for consent
234
+ const ipResponse = await fetch("https://api.ipify.org?format=json");
235
+ const ipData = await ipResponse.json() as { ip: string };
236
+
237
+ // Build V2 API request format with all contacts
238
+ const request: DomainPurchaseRequestV2 = {
239
+ domain,
240
+ consent: {
241
+ agreedAt: new Date().toISOString(),
242
+ agreedBy: ipData.ip,
243
+ agreementKeys,
244
+ price,
245
+ currency,
246
+ },
247
+ contacts: {
248
+ registrant: contact,
249
+ admin: contact,
250
+ billing: contact,
251
+ tech: contact,
252
+ },
253
+ period: parseInt(options.period),
254
+ privacy: options.privacy || false,
255
+ renewAuto: options.autoRenew || false,
256
+ };
257
+
258
+ console.log("Validating purchase request...\n");
259
+ const result = await domainApi.validatePurchase(request);
260
+
261
+ if (options.json) {
262
+ console.log(JSON.stringify(result, null, 2));
263
+ return;
264
+ }
265
+
266
+ if (result.valid) {
267
+ console.log("Validation: PASSED");
268
+ console.log("\nThe domain purchase request is valid.");
269
+ console.log("Use the 'purchase' command to complete the purchase.");
270
+ } else {
271
+ console.log("Validation: FAILED");
272
+ console.log(`Status: ${result.status}`);
273
+ console.log(`Response: ${JSON.stringify(result.data, null, 2)}`);
274
+ }
275
+ } catch (error) {
276
+ console.error("Error:", error instanceof Error ? error.message : error);
277
+ process.exit(1);
278
+ }
279
+ });
280
+
281
+ // ============ PURCHASE COMMAND ============
282
+
283
+ program
284
+ .command("purchase <domain>")
285
+ .description("Purchase a domain")
286
+ .requiredOption("--contact-json <path>", "Path to JSON file with contact info")
287
+ .option("--period <years>", "Registration period in years", "1")
288
+ .option("--privacy", "Enable WHOIS privacy")
289
+ .option("--auto-renew", "Enable auto renewal")
290
+ .option("--nameservers <ns>", "Comma-separated nameservers (max 2)")
291
+ .option("--dry-run", "Validate only, don't actually purchase")
292
+ .option("--json", "Output as JSON")
293
+ .action(async (domain, options) => {
294
+ try {
295
+ // Check availability first
296
+ console.log(`Checking availability for ${domain}...`);
297
+ const availability = await domainApi.checkAvailability(domain);
298
+
299
+ if (!availability.available) {
300
+ console.error(`\nError: ${domain} is not available for registration.`);
301
+ process.exit(1);
302
+ }
303
+
304
+ const price = availability.price || 0;
305
+ const currency = availability.currency || "USD";
306
+ console.log(`Domain available! Price: ${formatPrice(price, currency)}\n`);
307
+
308
+ // Get TLD from domain
309
+ const tld = domain.split(".").slice(1).join(".");
310
+
311
+ // Get agreements
312
+ console.log(`Fetching agreements for .${tld}...`);
313
+ const agreements = await domainApi.getAgreements([tld], options.privacy);
314
+ const agreementKeys = agreements.map((a) => a.agreementKey);
315
+ console.log(`Found ${agreements.length} agreement(s)\n`);
316
+
317
+ // Load contact info
318
+ const contactFile = await Bun.file(options.contactJson);
319
+ const contact: Contact = await contactFile.json();
320
+
321
+ // Ensure contact has encoding
322
+ if (!contact.encoding) {
323
+ contact.encoding = "ASCII";
324
+ }
325
+
326
+ // Get public IP for consent
327
+ const ipResponse = await fetch("https://api.ipify.org?format=json");
328
+ const ipData = await ipResponse.json() as { ip: string };
329
+
330
+ // Build V2 API request format with all contacts
331
+ const request: DomainPurchaseRequestV2 = {
332
+ domain,
333
+ consent: {
334
+ agreedAt: new Date().toISOString(),
335
+ agreedBy: ipData.ip,
336
+ agreementKeys,
337
+ price,
338
+ currency,
339
+ },
340
+ contacts: {
341
+ registrant: contact,
342
+ admin: contact,
343
+ billing: contact,
344
+ tech: contact,
345
+ },
346
+ period: parseInt(options.period),
347
+ privacy: options.privacy || false,
348
+ renewAuto: options.autoRenew || false,
349
+ ...(options.nameservers && {
350
+ nameServers: options.nameservers.split(",").map((ns: string) => ns.trim()).slice(0, 2),
351
+ }),
352
+ };
353
+
354
+ if (options.dryRun) {
355
+ console.log("Validating purchase request (dry run)...\n");
356
+ const result = await domainApi.validatePurchase(request);
357
+
358
+ if (options.json) {
359
+ console.log(JSON.stringify(result, null, 2));
360
+ return;
361
+ }
362
+
363
+ if (result.valid) {
364
+ console.log("Validation: PASSED");
365
+ console.log("\nRemove --dry-run to complete the purchase.");
366
+ } else {
367
+ console.log("Validation: FAILED");
368
+ console.log(`Response: ${JSON.stringify(result.data, null, 2)}`);
369
+ }
370
+ return;
371
+ }
372
+
373
+ // Actual purchase
374
+ console.log("Processing purchase...\n");
375
+ const result = await domainApi.purchaseDomain(request);
376
+
377
+ if (options.json) {
378
+ console.log(JSON.stringify(result, null, 2));
379
+ return;
380
+ }
381
+
382
+ console.log("Purchase completed!");
383
+ console.log(`Domain: ${domain}`);
384
+ console.log(`Order ID: ${result.orderId || "N/A"}`);
385
+ console.log(`\nUse 'service-domainpurchase info ${domain}' to view details.`);
386
+ } catch (error) {
387
+ console.error("Error:", error instanceof Error ? error.message : error);
388
+ process.exit(1);
389
+ }
390
+ });
391
+
392
+ // ============ LIST COMMAND ============
393
+
394
+ program
395
+ .command("list")
396
+ .description("List domains owned by your account")
397
+ .option("-l, --limit <count>", "Maximum domains to list", "100")
398
+ .option("--json", "Output as JSON")
399
+ .action(async (options) => {
400
+ try {
401
+ const domains = await domainApi.listOwnedDomains(parseInt(options.limit));
402
+
403
+ if (options.json) {
404
+ console.log(JSON.stringify(domains, null, 2));
405
+ return;
406
+ }
407
+
408
+ console.log(`\nOwned Domains (${domains.length}):\n`);
409
+
410
+ for (const d of domains) {
411
+ const expires = d.expires
412
+ ? new Date(d.expires).toLocaleDateString()
413
+ : "N/A";
414
+ const autoRenew = d.renewAuto ? "[AUTO]" : "";
415
+ const privacy = d.privacy ? "[PRIVATE]" : "";
416
+ console.log(
417
+ ` ${d.domain.padEnd(35)} expires: ${expires} ${autoRenew} ${privacy}`
418
+ );
419
+ }
420
+ } catch (error) {
421
+ console.error("Error:", error instanceof Error ? error.message : error);
422
+ process.exit(1);
423
+ }
424
+ });
425
+
426
+ // ============ INFO COMMAND ============
427
+
428
+ program
429
+ .command("info <domain>")
430
+ .description("Get detailed information about an owned domain")
431
+ .option("--json", "Output as JSON")
432
+ .action(async (domain, options) => {
433
+ try {
434
+ const details = await domainApi.getDomainDetails(domain);
435
+
436
+ if (options.json) {
437
+ console.log(JSON.stringify(details, null, 2));
438
+ return;
439
+ }
440
+
441
+ console.log(`\nDomain: ${details.domain}`);
442
+ console.log(`Status: ${details.status}`);
443
+ console.log(`Created: ${details.createdAt}`);
444
+ console.log(`Expires: ${details.expires}`);
445
+ console.log(`Auto Renew: ${details.renewAuto ? "Yes" : "No"}`);
446
+ console.log(`Privacy: ${details.privacy ? "Yes" : "No"}`);
447
+
448
+ if (details.nameServers?.length) {
449
+ console.log(`\nNameservers:`);
450
+ for (const ns of details.nameServers) {
451
+ console.log(` - ${ns}`);
452
+ }
453
+ }
454
+
455
+ if (details.contactRegistrant) {
456
+ console.log(`\nRegistrant:`);
457
+ console.log(
458
+ ` ${details.contactRegistrant.nameFirst} ${details.contactRegistrant.nameLast}`
459
+ );
460
+ console.log(` ${details.contactRegistrant.email}`);
461
+ }
462
+ } catch (error) {
463
+ console.error("Error:", error instanceof Error ? error.message : error);
464
+ process.exit(1);
465
+ }
466
+ });
467
+
468
+ // ============ UPDATE COMMAND ============
469
+
470
+ program
471
+ .command("update <domain>")
472
+ .description("Update domain settings")
473
+ .option("--auto-renew <bool>", "Enable/disable auto renewal (true/false)")
474
+ .option("--privacy <bool>", "Enable/disable WHOIS privacy (true/false)")
475
+ .option("--nameservers <ns>", "Comma-separated nameservers")
476
+ .option("--json", "Output as JSON")
477
+ .action(async (domain, options) => {
478
+ try {
479
+ const updates: any = {};
480
+
481
+ if (options.autoRenew !== undefined) {
482
+ updates.renewAuto = options.autoRenew === "true";
483
+ }
484
+
485
+ if (options.privacy !== undefined) {
486
+ updates.privacy = options.privacy === "true";
487
+ }
488
+
489
+ if (options.nameservers) {
490
+ updates.nameServers = options.nameservers
491
+ .split(",")
492
+ .map((ns: string) => ns.trim());
493
+ }
494
+
495
+ if (Object.keys(updates).length === 0) {
496
+ console.error("Error: No updates specified.");
497
+ console.log("\nOptions:");
498
+ console.log(" --auto-renew <true|false>");
499
+ console.log(" --privacy <true|false>");
500
+ console.log(" --nameservers <ns1,ns2,...>");
501
+ process.exit(1);
502
+ }
503
+
504
+ console.log(`Updating ${domain}...`);
505
+ const result = await domainApi.updateDomain(domain, updates);
506
+
507
+ if (options.json) {
508
+ console.log(JSON.stringify(result, null, 2));
509
+ return;
510
+ }
511
+
512
+ console.log("\nDomain updated successfully!");
513
+ console.log(`Applied changes: ${JSON.stringify(updates)}`);
514
+ } catch (error) {
515
+ console.error("Error:", error instanceof Error ? error.message : error);
516
+ process.exit(1);
517
+ }
518
+ });
519
+
520
+ // ============ RENEW COMMAND ============
521
+
522
+ program
523
+ .command("renew <domain>")
524
+ .description("Renew a domain registration")
525
+ .option("-p, --period <years>", "Renewal period in years", "1")
526
+ .option("--json", "Output as JSON")
527
+ .action(async (domain, options) => {
528
+ try {
529
+ console.log(`Renewing ${domain} for ${options.period} year(s)...`);
530
+ const result = await domainApi.renewDomain(domain, parseInt(options.period));
531
+
532
+ if (options.json) {
533
+ console.log(JSON.stringify(result, null, 2));
534
+ return;
535
+ }
536
+
537
+ console.log("\nRenewal completed!");
538
+ console.log(`Domain: ${domain}`);
539
+ console.log(`Period: ${options.period} year(s)`);
540
+ } catch (error) {
541
+ console.error("Error:", error instanceof Error ? error.message : error);
542
+ process.exit(1);
543
+ }
544
+ });
545
+
546
+ // ============ TRANSFER COMMAND ============
547
+
548
+ program
549
+ .command("transfer <domain>")
550
+ .description("Transfer a domain to your account")
551
+ .requiredOption("--auth-code <code>", "Authorization/EPP code from current registrar")
552
+ .requiredOption("--contact-json <path>", "Path to JSON file with contact info")
553
+ .option("--json", "Output as JSON")
554
+ .action(async (domain, options) => {
555
+ try {
556
+ // Get TLD from domain
557
+ const tld = domain.split(".").slice(1).join(".");
558
+
559
+ // Get agreements
560
+ console.log(`Fetching transfer agreements for .${tld}...`);
561
+ const agreements = await purchaseApi.getAgreements([tld], false);
562
+ const agreementKeys = agreements.map((a) => a.agreementKey);
563
+
564
+ // Load contact info
565
+ const contactFile = await Bun.file(options.contactJson);
566
+ const contact: Contact = await contactFile.json();
567
+
568
+ // Get public IP for consent
569
+ const ipResponse = await fetch("https://api.ipify.org?format=json");
570
+ const ipData = await ipResponse.json() as { ip: string };
571
+
572
+ const consent = {
573
+ agreedAt: new Date().toISOString(),
574
+ agreedBy: ipData.ip,
575
+ agreementKeys,
576
+ };
577
+
578
+ console.log(`Initiating transfer of ${domain}...`);
579
+ const result = await purchaseApi.initiateTransfer(
580
+ domain,
581
+ options.authCode,
582
+ consent,
583
+ contact
584
+ );
585
+
586
+ if (options.json) {
587
+ console.log(JSON.stringify(result, null, 2));
588
+ return;
589
+ }
590
+
591
+ console.log("\nTransfer initiated!");
592
+ console.log(`Domain: ${domain}`);
593
+ console.log(
594
+ "\nNote: The transfer may take several days to complete."
595
+ );
596
+ console.log("Check your email for any required confirmations.");
597
+ } catch (error) {
598
+ console.error("Error:", error instanceof Error ? error.message : error);
599
+ process.exit(1);
600
+ }
601
+ });
602
+
603
+ // ============ CONTACT-TEMPLATE COMMAND ============
604
+
605
+ program
606
+ .command("contact-template")
607
+ .description("Generate a contact info JSON template")
608
+ .option("-o, --output <path>", "Output file path")
609
+ .action(async (options) => {
610
+ const template = {
611
+ nameFirst: "John",
612
+ nameLast: "Doe",
613
+ email: "john.doe@example.com",
614
+ phone: "+1.5551234567",
615
+ organization: "Example Corp",
616
+ addressMailing: {
617
+ address1: "123 Main Street",
618
+ address2: "Suite 100",
619
+ city: "San Francisco",
620
+ state: "CA",
621
+ postalCode: "94102",
622
+ country: "US",
623
+ },
624
+ encoding: "UTF-8",
625
+ };
626
+
627
+ const json = JSON.stringify(template, null, 2);
628
+
629
+ if (options.output) {
630
+ await Bun.write(options.output, json);
631
+ console.log(`Contact template saved to: ${options.output}`);
632
+ } else {
633
+ console.log("\nContact Info Template:\n");
634
+ console.log(json);
635
+ console.log("\nSave this to a file and use with --contact-json <path>");
636
+ }
637
+ });
638
+
639
+ // ============ SETUP COMMAND ============
640
+
641
+ program
642
+ .command("setup")
643
+ .description("Interactive setup for service-domainpurchase")
644
+ .action(async () => {
645
+ console.log("\nservice-domainpurchase Setup\n");
646
+ console.log("This will configure your Brandsight/GoDaddy API credentials.\n");
647
+
648
+ const config = loadConfig();
649
+
650
+ if (!config.apiKey || !config.apiSecret) {
651
+ console.log("API credentials not configured.\n");
652
+ console.log("Get your API key and secret from:");
653
+ console.log(" https://developer.godaddy.com/keys\n");
654
+ console.log("Then run:");
655
+ console.log(" service-domainpurchase config --api-key <key> --api-secret <secret>");
656
+ console.log(" service-domainpurchase config --customer-id <id>\n");
657
+ } else {
658
+ console.log(`API Key: ***${config.apiKey.slice(-4)}`);
659
+ console.log(`API Secret: ***${config.apiSecret.slice(-4)}`);
660
+ console.log(`Customer ID: ${config.customerId || "(not set)"}`);
661
+ console.log(`API URL: ${config.apiUrl}\n`);
662
+
663
+ // Test connection
664
+ console.log("Testing connection...");
665
+ try {
666
+ const domains = await domainApi.listOwnedDomains(5);
667
+ console.log(` Connected! Found ${domains.length} domains in your account.\n`);
668
+
669
+ console.log("Quick commands:");
670
+ console.log(" service-domainpurchase check example.com");
671
+ console.log(" service-domainpurchase list");
672
+ console.log(" service-domainpurchase contact-template -o contact.json");
673
+ console.log(" service-domainpurchase purchase example.com --contact-json contact.json --dry-run");
674
+ } catch (error) {
675
+ console.error(
676
+ " Connection failed:",
677
+ error instanceof Error ? error.message : error
678
+ );
679
+ }
680
+ }
681
+ });
682
+
683
+ program.parse();