@hasna/skills 0.1.26 → 0.1.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/LICENSE +1 -10
  2. package/README.md +141 -39
  3. package/bin/index.js +30122 -27575
  4. package/bin/mcp.js +22112 -18593
  5. package/dist/cli/cli.test-utils.d.ts +15 -0
  6. package/dist/cli/commands/auth.d.ts +2 -0
  7. package/dist/cli/commands/install.d.ts +1 -1
  8. package/dist/cli/commands/runtime-mcp.d.ts +4 -0
  9. package/dist/index.d.ts +9 -4
  10. package/dist/index.js +11607 -597
  11. package/dist/lib/auth-store.d.ts +13 -0
  12. package/dist/lib/installer.d.ts +58 -55
  13. package/dist/lib/mcp-contracts.d.ts +86 -0
  14. package/dist/lib/project-state.d.ts +43 -0
  15. package/dist/lib/registry-data/business-marketing.d.ts +2 -0
  16. package/dist/lib/registry-data/communication.d.ts +2 -0
  17. package/dist/lib/registry-data/content-generation.d.ts +2 -0
  18. package/dist/lib/registry-data/data-analysis.d.ts +2 -0
  19. package/dist/lib/registry-data/design-branding.d.ts +2 -0
  20. package/dist/lib/registry-data/development-tools.d.ts +2 -0
  21. package/dist/lib/registry-data/education-learning.d.ts +2 -0
  22. package/dist/lib/registry-data/event-management.d.ts +2 -0
  23. package/dist/lib/registry-data/finance-compliance.d.ts +2 -0
  24. package/dist/lib/registry-data/health-wellness.d.ts +2 -0
  25. package/dist/lib/registry-data/index.d.ts +2 -0
  26. package/dist/lib/registry-data/media-processing.d.ts +2 -0
  27. package/dist/lib/registry-data/productivity-organization.d.ts +2 -0
  28. package/dist/lib/registry-data/project-management.d.ts +2 -0
  29. package/dist/lib/registry-data/research-writing.d.ts +2 -0
  30. package/dist/lib/registry-data/science-academic.d.ts +2 -0
  31. package/dist/lib/registry-data/travel-lifestyle.d.ts +2 -0
  32. package/dist/lib/registry-data/web-browser.d.ts +2 -0
  33. package/dist/lib/registry-types.d.ts +27 -0
  34. package/dist/lib/registry.d.ts +6 -18
  35. package/dist/lib/remote-registry.d.ts +3 -0
  36. package/dist/lib/run-state.d.ts +60 -0
  37. package/dist/lib/skill-aliases.d.ts +17 -0
  38. package/dist/lib/skillinfo.d.ts +5 -1
  39. package/dist/mcp/discovery-tools.d.ts +2 -0
  40. package/dist/mcp/helpers.d.ts +26 -0
  41. package/dist/mcp/http.d.ts +10 -0
  42. package/dist/mcp/index.d.ts +3 -2
  43. package/dist/mcp/operation-tools.d.ts +2 -0
  44. package/dist/mcp/resource-meta-tools.d.ts +2 -0
  45. package/dist/mcp/schedule-tools.d.ts +2 -0
  46. package/dist/mcp/server.d.ts +4 -0
  47. package/dist/types/api.d.ts +7 -4
  48. package/package.json +23 -10
  49. package/skills/_common/http-client.ts +1 -1
  50. package/skills/_common/index.ts +2 -3
  51. package/skills/_common/install.sh +5 -110
  52. package/skills/_common/installer.ts +31 -282
  53. package/skills/_common/skill-install.ts +14 -181
  54. package/skills/ad-creative-pack/SKILL.md +45 -0
  55. package/skills/ad-creative-pack/package.json +14 -0
  56. package/skills/advanced-math/package.json +3 -1
  57. package/skills/advanced-math/src/calculators.ts +118 -0
  58. package/skills/advanced-math/src/cli.ts +130 -0
  59. package/skills/advanced-math/src/conversion.ts +90 -0
  60. package/skills/advanced-math/src/finance.ts +75 -0
  61. package/skills/advanced-math/src/formatting.ts +95 -0
  62. package/skills/advanced-math/src/index.ts +24 -702
  63. package/skills/advanced-math/src/runtime.ts +49 -0
  64. package/skills/advanced-math/src/symbolic.ts +110 -0
  65. package/skills/advanced-math/src/types.ts +36 -0
  66. package/skills/analyze-data/SKILL.md +2 -2
  67. package/skills/analyze-data/src/analysis.ts +401 -0
  68. package/skills/analyze-data/src/cli.ts +66 -0
  69. package/skills/analyze-data/src/formatters.ts +235 -0
  70. package/skills/analyze-data/src/index.ts +6 -1027
  71. package/skills/analyze-data/src/logger.ts +36 -0
  72. package/skills/analyze-data/src/parsers.ts +57 -0
  73. package/skills/analyze-data/src/stats.ts +151 -0
  74. package/skills/analyze-data/src/types.ts +85 -0
  75. package/skills/api-docs-portal/SKILL.md +46 -0
  76. package/skills/api-docs-portal/package.json +9 -0
  77. package/skills/api-test-suite/src/index.ts +13 -0
  78. package/skills/apidocs/package.json +1 -1
  79. package/skills/apidocs/src/index.ts +3 -0
  80. package/skills/audio/package.json +2 -3
  81. package/skills/audio-cleanup-lab/SKILL.md +2 -2
  82. package/skills/audio-extract/CLAUDE.md +1 -1
  83. package/skills/audio-transcript-pack/SKILL.md +43 -0
  84. package/skills/audio-transcript-pack/package.json +10 -0
  85. package/skills/blog-article/CLAUDE.md +12 -0
  86. package/skills/blog-article/SKILL.md +45 -0
  87. package/skills/{create-blog-article → blog-article}/package.json +3 -3
  88. package/skills/brand-kit/SKILL.md +45 -0
  89. package/skills/brand-kit/package.json +14 -0
  90. package/skills/brand-photo-shoot/SKILL.md +28 -0
  91. package/skills/brand-photo-shoot/package.json +10 -0
  92. package/skills/brand-style-guide/SKILL.md +2 -2
  93. package/skills/brand-style-guide/src/index.ts +0 -0
  94. package/skills/budget-variance-analyzer/SKILL.md +2 -2
  95. package/skills/businessactivity/package.json +1 -1
  96. package/skills/businessactivity/src/index.ts +3 -0
  97. package/skills/calendar-events/src/ai-parser.ts +103 -0
  98. package/skills/calendar-events/src/api.ts +157 -0
  99. package/skills/calendar-events/src/auth.ts +22 -0
  100. package/skills/calendar-events/src/config.ts +6 -0
  101. package/skills/calendar-events/src/format.ts +96 -0
  102. package/skills/calendar-events/src/help.ts +54 -0
  103. package/skills/calendar-events/src/index.ts +21 -524
  104. package/skills/calendar-events/src/logger.ts +34 -0
  105. package/skills/calendar-events/src/types.ts +67 -0
  106. package/skills/compress-video/SKILL.md +2 -2
  107. package/skills/consolelog/package.json +1 -1
  108. package/skills/consolelog/src/index.ts +3 -0
  109. package/skills/contract-review-report/SKILL.md +43 -0
  110. package/skills/contract-review-report/package.json +10 -0
  111. package/skills/convert/SKILL.md +2 -3
  112. package/skills/customer-feedback-report/SKILL.md +44 -0
  113. package/skills/customer-feedback-report/package.json +10 -0
  114. package/skills/dashboard-builder/package.json +3 -1
  115. package/skills/database-explorer/package.json +3 -1
  116. package/skills/deepresearch/README.md +4 -13
  117. package/skills/deploy/src/http-client.ts +1 -1
  118. package/skills/diff-viewer/package.json +4 -1
  119. package/skills/doc-generate/package.json +0 -1
  120. package/skills/doc-generate/src/ai.ts +50 -0
  121. package/skills/doc-generate/src/cli.ts +203 -0
  122. package/skills/doc-generate/src/dependencies.ts +44 -0
  123. package/skills/doc-generate/src/document-builder.ts +299 -0
  124. package/skills/doc-generate/src/index.ts +40 -764
  125. package/skills/doc-generate/src/markdown-parser.ts +125 -0
  126. package/skills/doc-generate/src/types.ts +68 -0
  127. package/skills/domainpurchase/SKILL.md +1 -1
  128. package/skills/domainpurchase/package.json +1 -1
  129. package/skills/domainpurchase/src/index.ts +3 -0
  130. package/skills/domainsearch/SKILL.md +1 -1
  131. package/skills/domainsearch/package.json +1 -1
  132. package/skills/domainsearch/src/index.ts +3 -0
  133. package/skills/email-sequence/SKILL.md +44 -0
  134. package/skills/email-sequence/package.json +14 -0
  135. package/skills/excel/CLAUDE.md +2 -2
  136. package/skills/experiment-power-calculator/package.json +3 -1
  137. package/skills/extract-invoice/src/cli.ts +97 -0
  138. package/skills/extract-invoice/src/extractor.ts +170 -0
  139. package/skills/extract-invoice/src/file-utils.ts +46 -0
  140. package/skills/extract-invoice/src/formatters.ts +144 -0
  141. package/skills/extract-invoice/src/index.ts +44 -629
  142. package/skills/extract-invoice/src/runtime.ts +46 -0
  143. package/skills/extract-invoice/src/types.ts +88 -0
  144. package/skills/folder-tree/package.json +3 -1
  145. package/skills/form-filler/package.json +3 -1
  146. package/skills/generate-api-client/package.json +3 -1
  147. package/skills/generate-api-client/src/generator.ts +47 -0
  148. package/skills/generate-api-client/src/index.ts +3 -777
  149. package/skills/generate-api-client/src/logger.ts +34 -0
  150. package/skills/generate-api-client/src/python-generator.ts +245 -0
  151. package/skills/generate-api-client/src/spec-loader.ts +48 -0
  152. package/skills/generate-api-client/src/type-mappers.ts +79 -0
  153. package/skills/generate-api-client/src/types.ts +76 -0
  154. package/skills/generate-api-client/src/typescript-generator.ts +247 -0
  155. package/skills/generate-book-cover/package.json +3 -1
  156. package/skills/generate-dockerfile/src/cli.ts +78 -0
  157. package/skills/generate-dockerfile/src/dockerfile-templates.ts +392 -0
  158. package/skills/generate-dockerfile/src/index.ts +12 -790
  159. package/skills/generate-dockerfile/src/logger.ts +30 -0
  160. package/skills/generate-dockerfile/src/project-detection.ts +68 -0
  161. package/skills/generate-dockerfile/src/support-files.ts +171 -0
  162. package/skills/generate-dockerfile/src/types.ts +29 -0
  163. package/skills/generate-documentation/src/ai.ts +131 -0
  164. package/skills/generate-documentation/src/cli.ts +71 -0
  165. package/skills/generate-documentation/src/code-parser.ts +300 -0
  166. package/skills/generate-documentation/src/file-processing.ts +182 -0
  167. package/skills/generate-documentation/src/index.ts +13 -753
  168. package/skills/generate-documentation/src/runtime.ts +35 -0
  169. package/skills/generate-documentation/src/types.ts +30 -0
  170. package/skills/generate-env/package.json +3 -1
  171. package/skills/generate-env/src/cli.ts +85 -0
  172. package/skills/generate-env/src/detection.ts +161 -0
  173. package/skills/generate-env/src/env-data.ts +66 -0
  174. package/skills/generate-env/src/generators.ts +240 -0
  175. package/skills/generate-env/src/index.ts +76 -676
  176. package/skills/generate-env/src/runtime.ts +30 -0
  177. package/skills/generate-env/src/types.ts +32 -0
  178. package/skills/generate-favicon/package.json +3 -1
  179. package/skills/generate-mock-data/package.json +3 -1
  180. package/skills/generate-mock-data/src/ai.ts +102 -0
  181. package/skills/generate-mock-data/src/formatters.ts +84 -0
  182. package/skills/generate-mock-data/src/generator.ts +377 -0
  183. package/skills/generate-mock-data/src/index.ts +15 -716
  184. package/skills/generate-mock-data/src/logger.ts +37 -0
  185. package/skills/generate-mock-data/src/presets.ts +110 -0
  186. package/skills/generate-mock-data/src/types.ts +21 -0
  187. package/skills/generate-pr-description/src/ai.ts +144 -0
  188. package/skills/generate-pr-description/src/cli.ts +80 -0
  189. package/skills/generate-pr-description/src/clipboard.ts +30 -0
  190. package/skills/generate-pr-description/src/formatters.ts +231 -0
  191. package/skills/generate-pr-description/src/git.ts +153 -0
  192. package/skills/generate-pr-description/src/index.ts +21 -714
  193. package/skills/generate-pr-description/src/types.ts +49 -0
  194. package/skills/generate-presentation/src/ai-clients.ts +61 -0
  195. package/skills/generate-presentation/src/cli.ts +126 -0
  196. package/skills/generate-presentation/src/index.ts +3 -751
  197. package/skills/generate-presentation/src/logger.ts +67 -0
  198. package/skills/generate-presentation/src/presentation-generator.ts +425 -0
  199. package/skills/generate-presentation/src/runtime.ts +6 -0
  200. package/skills/generate-presentation/src/security.ts +12 -0
  201. package/skills/generate-presentation/src/types.ts +28 -0
  202. package/skills/generate-qrcode/package.json +4 -1
  203. package/skills/generate-regex/package.json +3 -1
  204. package/skills/generate-resume/src/cli.ts +157 -0
  205. package/skills/generate-resume/src/index.ts +13 -917
  206. package/skills/generate-resume/src/parsers.ts +95 -0
  207. package/skills/generate-resume/src/renderers.ts +538 -0
  208. package/skills/generate-resume/src/security.ts +39 -0
  209. package/skills/generate-resume/src/types.ts +86 -0
  210. package/skills/generate-social-posts/src/ai.ts +88 -0
  211. package/skills/generate-social-posts/src/cli.ts +118 -0
  212. package/skills/generate-social-posts/src/exporters.ts +126 -0
  213. package/skills/generate-social-posts/src/generator.ts +130 -0
  214. package/skills/generate-social-posts/src/index.ts +19 -709
  215. package/skills/generate-social-posts/src/platforms.ts +39 -0
  216. package/skills/generate-social-posts/src/runtime.ts +34 -0
  217. package/skills/generate-social-posts/src/source.ts +116 -0
  218. package/skills/generate-social-posts/src/types.ts +58 -0
  219. package/skills/gif-maker/package.json +4 -1
  220. package/skills/github-manager/package.json +3 -1
  221. package/skills/gmail/CLAUDE.md +1 -1
  222. package/skills/highlight-reel-generator/src/index.ts +19 -0
  223. package/skills/hook/src/commands/create.ts +20 -845
  224. package/skills/hook/src/templates/root.ts +196 -0
  225. package/skills/hook/src/templates/source.ts +647 -0
  226. package/skills/http-server/package.json +3 -1
  227. package/skills/icon-pack/README.md +28 -0
  228. package/skills/icon-pack/SKILL.md +23 -0
  229. package/skills/icon-pack/package.json +29 -0
  230. package/skills/{audio → icon-pack}/tsconfig.json +10 -12
  231. package/skills/image/package.json +1 -2
  232. package/skills/implementation-agent/package.json +3 -1
  233. package/skills/implementation-agent/src/ai-generation.ts +225 -0
  234. package/skills/implementation-agent/src/index.ts +3 -960
  235. package/skills/implementation-agent/src/minimist.d.ts +15 -0
  236. package/skills/implementation-agent/src/templates.ts +686 -0
  237. package/skills/implementation-agent/src/types.ts +53 -0
  238. package/skills/implementation-plan/package.json +3 -1
  239. package/skills/implementation-todo/package.json +3 -1
  240. package/skills/invoice/package.json +1 -1
  241. package/skills/invoice/src/index.ts +3 -0
  242. package/skills/invoice-reconciliation/SKILL.md +42 -0
  243. package/skills/invoice-reconciliation/package.json +10 -0
  244. package/skills/landing-page-pack/SKILL.md +47 -0
  245. package/skills/landing-page-pack/package.json +14 -0
  246. package/skills/latex-table-generator/package.json +3 -1
  247. package/skills/logo-design/SKILL.md +25 -44
  248. package/skills/logo-design/package.json +3 -15
  249. package/skills/lorem-generator/package.json +3 -1
  250. package/skills/lorem-generator/src/index.ts +13 -0
  251. package/skills/managehook/package.json +1 -1
  252. package/skills/managehook/src/index.ts +3 -0
  253. package/skills/managemcp/package.json +1 -1
  254. package/skills/managemcp/src/index.ts +3 -0
  255. package/skills/manageskill/package.json +1 -1
  256. package/skills/manageskill/src/index.ts +3 -0
  257. package/skills/markdown-validator/package.json +3 -1
  258. package/skills/markdown-validator/src/index.ts +1 -4
  259. package/skills/market-research-report/SKILL.md +41 -0
  260. package/skills/market-research-report/package.json +10 -0
  261. package/skills/mcp-builder/package.json +4 -1
  262. package/skills/mcp-builder/src/ai-descriptions.ts +37 -0
  263. package/skills/mcp-builder/src/generators.ts +513 -0
  264. package/skills/mcp-builder/src/index.ts +7 -908
  265. package/skills/mcp-builder/src/minimist.d.ts +15 -0
  266. package/skills/mcp-builder/src/naming.ts +12 -0
  267. package/skills/mcp-builder/src/options.ts +170 -0
  268. package/skills/mcp-builder/src/templates.ts +149 -0
  269. package/skills/mcp-builder/src/types.ts +42 -0
  270. package/skills/meeting-pack/SKILL.md +43 -0
  271. package/skills/meeting-pack/package.json +10 -0
  272. package/skills/merge-pdfs/package.json +5 -1
  273. package/skills/migration-plan-pack/SKILL.md +45 -0
  274. package/skills/migration-plan-pack/package.json +10 -0
  275. package/skills/music/package.json +2 -3
  276. package/skills/music-album/SKILL.md +37 -0
  277. package/skills/music-album/package.json +10 -0
  278. package/skills/notion-manager/package.json +3 -1
  279. package/skills/npmpublish/CLAUDE.md +5 -8
  280. package/skills/npmpublish/README.md +5 -26
  281. package/skills/npmpublish/src/index.ts +9 -147
  282. package/skills/one-page-website/SKILL.md +46 -0
  283. package/skills/one-page-website/package.json +10 -0
  284. package/skills/one-page-website/tsconfig.json +8 -0
  285. package/skills/pdf-generate/src/cli.ts +162 -0
  286. package/skills/pdf-generate/src/html.ts +84 -0
  287. package/skills/pdf-generate/src/index.ts +11 -800
  288. package/skills/pdf-generate/src/markdown.ts +27 -0
  289. package/skills/pdf-generate/src/pdf-writer.ts +78 -0
  290. package/skills/pdf-generate/src/runtime.ts +34 -0
  291. package/skills/pdf-generate/src/security.ts +37 -0
  292. package/skills/pdf-generate/src/templates.ts +311 -0
  293. package/skills/pdf-generate/src/types.ts +28 -0
  294. package/skills/pdf-read/SKILL.md +10 -10
  295. package/skills/pdf-to-dataset/SKILL.md +45 -0
  296. package/skills/pdf-to-dataset/package.json +10 -0
  297. package/skills/pdf-to-markdown/SKILL.md +49 -0
  298. package/skills/pdf-to-markdown/package.json +10 -0
  299. package/skills/pdf-to-markdown/tsconfig.json +10 -0
  300. package/skills/performance-audit-report/SKILL.md +42 -0
  301. package/skills/performance-audit-report/package.json +10 -0
  302. package/skills/persona-based-adwriter/src/index.ts +19 -0
  303. package/skills/photo-album/SKILL.md +29 -0
  304. package/skills/photo-album/package.json +9 -0
  305. package/skills/photo-album/tsconfig.json +4 -0
  306. package/skills/pitch-deck/SKILL.md +43 -0
  307. package/skills/pitch-deck/package.json +9 -0
  308. package/skills/playlist-maker/SKILL.md +33 -0
  309. package/skills/playlist-maker/package.json +9 -0
  310. package/skills/playlist-maker/tsconfig.json +4 -0
  311. package/skills/product-mockup/SKILL.md +45 -0
  312. package/skills/product-mockup/package.json +3 -20
  313. package/skills/product-mockup/tsconfig.json +3 -5
  314. package/skills/project-retro-companion/src/index.ts +19 -0
  315. package/skills/proposal-pack/SKILL.md +45 -0
  316. package/skills/proposal-pack/package.json +10 -0
  317. package/skills/read-pdf/SKILL.md +5 -4
  318. package/skills/repo-onboarding-report/SKILL.md +42 -0
  319. package/skills/repo-onboarding-report/package.json +10 -0
  320. package/skills/sales-call-recapper/src/index.ts +20 -0
  321. package/skills/salescopy/package.json +1 -1
  322. package/skills/salescopy/src/index.ts +3 -0
  323. package/skills/scaffold-project/src/ai-detect.ts +136 -0
  324. package/skills/scaffold-project/src/file-generators.ts +292 -0
  325. package/skills/scaffold-project/src/index.ts +8 -991
  326. package/skills/scaffold-project/src/project-config.ts +338 -0
  327. package/skills/scaffold-project/src/templates.ts +173 -0
  328. package/skills/scaffold-project/src/types.ts +58 -0
  329. package/skills/scientific-figure-check/package.json +3 -1
  330. package/skills/sdk-generator/SKILL.md +45 -0
  331. package/skills/sdk-generator/package.json +10 -0
  332. package/skills/sdk-generator/tsconfig.json +8 -0
  333. package/skills/security-audit/src/index.ts +25 -6
  334. package/skills/security-audit-report/SKILL.md +40 -0
  335. package/skills/security-audit-report/package.json +10 -0
  336. package/skills/seo-content-pack/SKILL.md +44 -0
  337. package/skills/seo-content-pack/package.json +9 -0
  338. package/skills/short-video-pack/SKILL.md +30 -0
  339. package/skills/short-video-pack/package.json +10 -0
  340. package/skills/slack-assistant/package.json +3 -1
  341. package/skills/slide-deck-generator/SKILL.md +44 -0
  342. package/skills/slide-deck-generator/package.json +10 -0
  343. package/skills/sms/package.json +1 -1
  344. package/skills/sms/src/index.ts +15 -0
  345. package/skills/social-content-calendar/SKILL.md +45 -0
  346. package/skills/social-content-calendar/package.json +14 -0
  347. package/skills/split-pdf/package.json +4 -1
  348. package/skills/subtitle/package.json +2 -1
  349. package/skills/subtitle/src/index.ts +3 -0
  350. package/skills/terraform-generator/package.json +3 -1
  351. package/skills/test-suite-generator/SKILL.md +41 -0
  352. package/skills/test-suite-generator/package.json +10 -0
  353. package/skills/timesheet/package.json +1 -1
  354. package/skills/timesheet/src/index.ts +3 -0
  355. package/skills/transcript/SKILL.md +1 -8
  356. package/skills/validate-config/package.json +3 -1
  357. package/skills/video/package.json +6 -4
  358. package/skills/video-downloader/package.json +3 -1
  359. package/skills/video-highlight-pack/SKILL.md +44 -0
  360. package/skills/video-highlight-pack/package.json +10 -0
  361. package/skills/voiceover-jingle-pack/SKILL.md +28 -0
  362. package/skills/voiceover-jingle-pack/package.json +10 -0
  363. package/skills/watermark/package.json +6 -1
  364. package/skills/webcrawling/package.json +2 -1
  365. package/skills/write/SKILL.md +6 -6
  366. package/dist/server/serve.d.ts +0 -11
  367. package/skills/apidocs/.claude/settings.json +0 -5
  368. package/skills/audio/.env.example +0 -14
  369. package/skills/audio/QUICKSTART.md +0 -158
  370. package/skills/audio/README.md +0 -256
  371. package/skills/audio/src/index-local.ts +0 -206
  372. package/skills/audio/src/index.ts +0 -95
  373. package/skills/audio/src/providers/elevenlabs.ts +0 -115
  374. package/skills/audio/src/providers/google.ts +0 -116
  375. package/skills/audio/src/providers/minimax.ts +0 -83
  376. package/skills/audio/src/providers/openai.ts +0 -115
  377. package/skills/audio/src/types.ts +0 -79
  378. package/skills/audiobook-chapter-proofer/CLAUDE.md +0 -19
  379. package/skills/audiobook-chapter-proofer/package.json +0 -27
  380. package/skills/audiobook-chapter-proofer/src/index.ts +0 -285
  381. package/skills/browse/src/client.ts +0 -373
  382. package/skills/browse/src/index-local.ts +0 -430
  383. package/skills/browse/src/index.ts +0 -110
  384. package/skills/browse/src/sse-server.ts +0 -919
  385. package/skills/browse/src/types.ts +0 -104
  386. package/skills/consolelog/src/server/index.ts +0 -508
  387. package/skills/create-blog-article/CLAUDE.md +0 -19
  388. package/skills/create-blog-article/src/index.ts +0 -745
  389. package/skills/create-blog-article/tsconfig.json +0 -10
  390. package/skills/deepresearch/src/agents/query-generator.ts +0 -91
  391. package/skills/deepresearch/src/agents/synthesizer.ts +0 -111
  392. package/skills/deepresearch/src/index.ts +0 -224
  393. package/skills/deepresearch/src/research.ts +0 -166
  394. package/skills/deepresearch/src/services/anthropic.ts +0 -69
  395. package/skills/deepresearch/src/services/exa.ts +0 -108
  396. package/skills/deepresearch/src/services/firecrawl.ts +0 -88
  397. package/skills/deepresearch/src/services/openai.ts +0 -81
  398. package/skills/deepresearch/src/types.ts +0 -76
  399. package/skills/deepresearch/src/utils/file.ts +0 -111
  400. package/skills/deepresearch/src/utils/logger.ts +0 -84
  401. package/skills/domainpurchase/src/server/index.ts +0 -332
  402. package/skills/domainsearch/src/server/index.ts +0 -229
  403. package/skills/e2bswarm/README.md +0 -135
  404. package/skills/e2bswarm/SKILL.md +0 -118
  405. package/skills/e2bswarm/examples/tasks-example.json +0 -38
  406. package/skills/e2bswarm/package.json +0 -59
  407. package/skills/e2bswarm/src/commands/collect.ts +0 -135
  408. package/skills/e2bswarm/src/commands/install.ts +0 -164
  409. package/skills/e2bswarm/src/commands/kill.ts +0 -62
  410. package/skills/e2bswarm/src/commands/spawn.ts +0 -134
  411. package/skills/e2bswarm/src/commands/status.ts +0 -90
  412. package/skills/e2bswarm/src/commands/sync.ts +0 -208
  413. package/skills/e2bswarm/src/index.ts +0 -121
  414. package/skills/e2bswarm/src/lib/config.ts +0 -75
  415. package/skills/e2bswarm/src/lib/e2b.ts +0 -490
  416. package/skills/e2bswarm/src/lib/github.ts +0 -253
  417. package/skills/e2bswarm/src/lib/logger.ts +0 -41
  418. package/skills/e2bswarm/src/lib/paths.ts +0 -75
  419. package/skills/e2bswarm/src/lib/tasks.ts +0 -320
  420. package/skills/e2bswarm/src/types/index.ts +0 -107
  421. package/skills/e2bswarm/templates/codebox/e2b.Dockerfile +0 -38
  422. package/skills/e2bswarm/templates/codebox/e2b.toml +0 -3
  423. package/skills/e2bswarm/templates/setup.sh +0 -21
  424. package/skills/e2bswarm/tsconfig.json +0 -19
  425. package/skills/generate-book-cover/src/index.ts +0 -694
  426. package/skills/image/src/index-local.ts +0 -206
  427. package/skills/image/src/index.ts +0 -96
  428. package/skills/image/src/providers/google.ts +0 -79
  429. package/skills/image/src/providers/minimax.ts +0 -94
  430. package/skills/image/src/providers/openai.ts +0 -80
  431. package/skills/image/src/providers/xai.ts +0 -73
  432. package/skills/image/src/types.ts +0 -37
  433. package/skills/logo-design/CLAUDE.md +0 -30
  434. package/skills/logo-design/src/index.ts +0 -322
  435. package/skills/managehook/src/server/index.ts +0 -108
  436. package/skills/managemcp/src/server/index.ts +0 -108
  437. package/skills/manageskill/src/server/index.ts +0 -108
  438. package/skills/music/CLAUDE.md +0 -9
  439. package/skills/music/src/index.ts +0 -94
  440. package/skills/music/tsconfig.json +0 -10
  441. package/skills/pdf-read/src/index.ts +0 -320
  442. package/skills/product-mockup/CLAUDE.md +0 -19
  443. package/skills/product-mockup/src/index.ts +0 -290
  444. package/skills/read-pdf/src/index.ts +0 -388
  445. package/skills/remove-background/src/index.ts +0 -405
  446. package/skills/scaffold-project/my-app/.env.example +0 -2
  447. package/skills/scaffold-project/my-app/README.md +0 -72
  448. package/skills/scaffold-project/my-app/package.json +0 -29
  449. package/skills/scaffold-project/my-app/src/index.ts +0 -23
  450. package/skills/scaffold-project/my-app/tsconfig.json +0 -33
  451. package/skills/sound-effects/SKILL.md +0 -34
  452. package/skills/sound-effects/package.json +0 -21
  453. package/skills/sound-effects/src/index.ts +0 -172
  454. package/skills/sound-effects/tsconfig.json +0 -8
  455. package/skills/transcript/src/chunker.ts +0 -215
  456. package/skills/transcript/src/formatter.ts +0 -134
  457. package/skills/transcript/src/index-local.ts +0 -226
  458. package/skills/transcript/src/index.ts +0 -110
  459. package/skills/transcript/src/providers/elevenlabs.ts +0 -133
  460. package/skills/transcript/src/providers/gemini.ts +0 -192
  461. package/skills/transcript/src/providers/index.ts +0 -54
  462. package/skills/transcript/src/providers/openai.ts +0 -203
  463. package/skills/transcript/src/types.ts +0 -106
  464. package/skills/video/.env.example +0 -14
  465. package/skills/video/EXAMPLES.md +0 -266
  466. package/skills/video/LICENSE +0 -192
  467. package/skills/video/README.md +0 -174
  468. package/skills/video/src/cli.ts +0 -155
  469. package/skills/video/src/index-local.ts +0 -148
  470. package/skills/video/src/index.ts +0 -96
  471. package/skills/video/src/providers/google-veo.ts +0 -126
  472. package/skills/video/src/providers/index.ts +0 -22
  473. package/skills/video/src/providers/minimax.ts +0 -100
  474. package/skills/video/src/providers/openai-sora.ts +0 -164
  475. package/skills/video/src/providers/runway.ts +0 -159
  476. package/skills/video/src/types.ts +0 -35
  477. package/skills/video/tsconfig.json +0 -22
  478. package/skills/voiceover-casting-assistant/CLAUDE.md +0 -19
  479. package/skills/voiceover-casting-assistant/package.json +0 -27
  480. package/skills/voiceover-casting-assistant/src/index.ts +0 -255
  481. package/skills/voiceover-casting-assistant/tsconfig.json +0 -10
  482. package/skills/webcrawling/src/commands/config.ts +0 -34
  483. package/skills/webcrawling/src/commands/crawl.ts +0 -33
  484. package/skills/webcrawling/src/commands/scrape.ts +0 -32
  485. package/skills/webcrawling/src/commands/sessions.ts +0 -42
  486. package/skills/webcrawling/src/lib/crawler.ts +0 -174
  487. package/skills/webcrawling/src/lib/storage.ts +0 -130
  488. package/skills/webcrawling/src/types/index.ts +0 -45
  489. package/skills/webcrawling/src/utils/logger.ts +0 -30
  490. package/skills/webcrawling/src/utils/paths.ts +0 -28
  491. /package/skills/{audiobook-chapter-proofer → blog-article}/tsconfig.json +0 -0
@@ -1,285 +0,0 @@
1
- #!/usr/bin/env bun
2
- /**
3
- * audiobook-chapter-proofer
4
- * Generates audiobook proofing notes using OpenAI.
5
- */
6
-
7
- import { parseArgs } from "util";
8
- import { existsSync, mkdirSync, appendFileSync, readFileSync } from "fs";
9
- import { join, dirname, resolve } from "path";
10
- import { randomUUID } from "crypto";
11
-
12
- type OutputFormat = "markdown" | "json";
13
-
14
- interface SkillOptions {
15
- transcript: string;
16
- genre?: string;
17
- narrator?: string;
18
- accents?: string;
19
- issues?: string;
20
- format: OutputFormat;
21
- model: string;
22
- output?: string;
23
- }
24
-
25
- interface OpenAIChatResponse {
26
- choices?: Array<{
27
- message?: {
28
- content?: string | null;
29
- };
30
- }>;
31
- error?: {
32
- message?: string;
33
- };
34
- }
35
-
36
- const SKILL_SLUG = "audiobook-chapter-proofer";
37
- const SESSION_ID = randomUUID().slice(0, 8);
38
-
39
- function ensureDir(path: string) {
40
- if (!existsSync(path)) {
41
- mkdirSync(path, { recursive: true });
42
- }
43
- }
44
-
45
- function getPaths() {
46
- const sessionStamp = new Date().toISOString().replace(/[:.]/g, "_").replace(/-/g, "_");
47
- const exportsRoot = process.env.SKILLS_EXPORTS_DIR || join(process.cwd(), ".skills", "exports");
48
- const logsRoot = process.env.SKILLS_LOGS_DIR || join(process.cwd(), ".skills", "logs");
49
-
50
- const skillExportsDir = join(exportsRoot, SKILL_SLUG);
51
- const skillLogsDir = join(logsRoot, SKILL_SLUG);
52
-
53
- ensureDir(skillExportsDir);
54
- ensureDir(skillLogsDir);
55
-
56
- return {
57
- sessionStamp,
58
- skillExportsDir,
59
- skillLogsDir,
60
- };
61
- }
62
-
63
- function createLogger(logDir: string, sessionStamp: string) {
64
- const logFile = join(logDir, `log_${sessionStamp}_${SESSION_ID}.log`);
65
-
66
- function write(level: "info" | "success" | "error", message: string) {
67
- const timestamp = new Date().toISOString();
68
- const entry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
69
- appendFileSync(logFile, entry);
70
- const prefix = level === "success" ? "✅" : level === "error" ? "❌" : "ℹ️";
71
- if (level === "error") {
72
- console.error(`${prefix} ${message}`);
73
- } else {
74
- console.log(`${prefix} ${message}`);
75
- }
76
- }
77
-
78
- return {
79
- info: (message: string) => write("info", message),
80
- success: (message: string) => write("success", message),
81
- error: (message: string) => write("error", message),
82
- logFile,
83
- };
84
- }
85
-
86
- function slugify(value: string): string {
87
- return value
88
- .toLowerCase()
89
- .replace(/[^a-z0-9]+/g, "-")
90
- .replace(/^-+|-+$/g, "")
91
- .slice(0, 40) || "chapter";
92
- }
93
-
94
- function parseOptions(): SkillOptions {
95
- const { values, positionals } = parseArgs({
96
- args: Bun.argv.slice(2),
97
- options: {
98
- text: { type: "string" },
99
- genre: { type: "string" },
100
- narrator: { type: "string" },
101
- accents: { type: "string" },
102
- issues: { type: "string" },
103
- format: { type: "string", default: "markdown" },
104
- model: { type: "string", default: "gpt-4o-mini" },
105
- output: { type: "string" },
106
- help: { type: "boolean", short: "h" },
107
- },
108
- allowPositionals: true,
109
- });
110
-
111
- if (values.help) {
112
- console.log(`
113
- Audiobook Chapter Proofer - Generates proofing notes for audiobook chapters
114
-
115
- Usage:
116
- skills run audiobook-chapter-proofer -- [options] <transcript-file>
117
-
118
- Options:
119
- --text <string> Raw transcript text
120
- --genre <string> Genre (e.g. "Sci-Fi", "Romance")
121
- --narrator <string> Narrator name
122
- --accents <string> Required accents
123
- --issues <string> Known issues to check for
124
- --format <fmt> Output format: markdown, json (default: markdown)
125
- --model <model> OpenAI model to use (default: gpt-4o-mini)
126
- --output <path> Save report to file
127
- --help, -h Show this help
128
- `);
129
- process.exit(0);
130
- }
131
-
132
- let transcript = values.text || "";
133
-
134
- if (!transcript && positionals[0]) {
135
- const filePath = resolve(positionals[0]);
136
- if (!existsSync(filePath)) {
137
- throw new Error(`File not found: ${filePath}`);
138
- }
139
- transcript = readFileSync(filePath, "utf-8");
140
- }
141
-
142
- if (!transcript.trim()) {
143
- throw new Error("Provide a chapter transcript via file path or --text.");
144
- }
145
-
146
- const format: OutputFormat =
147
- values.format === "json" ? "json" : values.format === "markdown" ? "markdown" : "markdown";
148
-
149
- return {
150
- transcript: transcript as string,
151
- genre: values.genre as string,
152
- narrator: values.narrator as string,
153
- accents: values.accents as string,
154
- issues: values.issues as string,
155
- format,
156
- model: values.model as string,
157
- output: values.output as string,
158
- };
159
- }
160
-
161
- function buildPrompt(options: SkillOptions) {
162
- const system = `You are an audiobook proof director and dialogue coach.
163
- Given transcript content, produce a proofing report that includes:
164
- - Summary of overall pacing, energy, and tone fit for ${options.genre || "the genre"}.
165
- - Pronunciation risks (names, locations, foreign terms) with phonetic guidance.
166
- - Character voice consistency notes (if narrator plays multiple roles${options.accents ? `; required accents: ${options.accents}` : ""}).
167
- - Noise/artifacts checklist (mouth clicks, breaths, page turns, ${options.issues || "background noise"}).
168
- - Suggested retakes with timestamps or line references, including coaching prompts.
169
- - Editing/mastering notes for engineers (leveling, EQ, ambience matching).
170
- - Accessibility compliance reminders (chapter markers, metadata).
171
- - Final approval checklist for producer and narrator.`;
172
-
173
- const instructions =
174
- options.format === "json"
175
- ? "Respond in JSON with keys: overview, pacing, pronunciation, characters, noise, retakes, engineering, checklist. Retakes array should include location, issue, coaching_tip."
176
- : "Respond in polished Markdown. Start with an executive summary blockquote, use tables for pronunciations and retakes, bullet lists for noise issues and engineering notes.";
177
-
178
- const userPayload = {
179
- transcript_excerpt: options.transcript.substring(0, 20000), // limit length to keep prompt manageable
180
- narrator: options.narrator,
181
- genre: options.genre,
182
- accents: options.accents,
183
- known_issues: options.issues,
184
- format: options.format,
185
- };
186
-
187
- const user = `${instructions}\n\n${JSON.stringify(userPayload, null, 2)}`;
188
-
189
- return { system, user };
190
- }
191
-
192
- async function callOpenAI(options: SkillOptions, system: string, user: string): Promise<string> {
193
- const apiKey = process.env.OPENAI_API_KEY;
194
-
195
- if (!apiKey) {
196
- throw new Error("OPENAI_API_KEY environment variable is required.");
197
- }
198
-
199
- const body = {
200
- model: options.model,
201
- messages: [
202
- { role: "system", content: system },
203
- { role: "user", content: user },
204
- ],
205
- temperature: 0.45,
206
- max_tokens: options.format === "json" ? 2300 : 2000,
207
- };
208
-
209
- const response = await fetch("https://api.openai.com/v1/chat/completions", {
210
- method: "POST",
211
- headers: {
212
- "Content-Type": "application/json",
213
- Authorization: `Bearer ${apiKey}`,
214
- },
215
- body: JSON.stringify(body),
216
- });
217
-
218
- const data: OpenAIChatResponse = await response.json();
219
-
220
- if (!response.ok) {
221
- throw new Error(data.error?.message || `OpenAI API error (${response.status})`);
222
- }
223
-
224
- const content = data.choices?.[0]?.message?.content;
225
-
226
- if (!content) {
227
- throw new Error("OpenAI response did not include content.");
228
- }
229
-
230
- return content.trim();
231
- }
232
-
233
- async function writeExport(path: string, content: string) {
234
- ensureDir(dirname(path));
235
- await Bun.write(path, content);
236
- }
237
-
238
- async function run() {
239
- const { sessionStamp, skillExportsDir, skillLogsDir } = getPaths();
240
- const logger = createLogger(skillLogsDir, sessionStamp);
241
-
242
- try {
243
- logger.info(`Starting ${SKILL_SLUG} session: ${SESSION_ID}`);
244
- const options = parseOptions();
245
- logger.info("Proofing audiobook chapter.");
246
- logger.info(`Format: ${options.format.toUpperCase()}, Model: ${options.model}`);
247
-
248
- const { system, user } = buildPrompt(options);
249
- const content = await callOpenAI(options, system, user);
250
-
251
- const slugBase = options.narrator || options.genre || "chapter";
252
- const proofSlug = slugify(slugBase);
253
- const extension = options.format === "json" ? "json" : "md";
254
- const defaultPath = join(skillExportsDir, `audiobook-proof-${proofSlug}-${sessionStamp}.${extension}`);
255
- const targetPath = options.output ? options.output : defaultPath;
256
-
257
- let finalContent = content;
258
-
259
- if (options.format === "json") {
260
- try {
261
- finalContent = JSON.stringify(JSON.parse(content), null, 2);
262
- } catch {
263
- logger.error("Model response was not valid JSON. Wrapping raw response.");
264
- finalContent = JSON.stringify({ raw: content }, null, 2);
265
- }
266
- }
267
-
268
- await writeExport(targetPath, finalContent);
269
-
270
- logger.success("Audiobook proofing report generated successfully.");
271
- console.log("\n=== Proofing Preview ===\n");
272
- console.log(finalContent.slice(0, 1500));
273
- if (finalContent.length > 1500) {
274
- console.log("\n… (truncated)");
275
- }
276
- console.log(`\nExport saved to: ${targetPath}`);
277
- console.log(`Logs written to: ${skillLogsDir}`);
278
- } catch (error) {
279
- const message = error instanceof Error ? error.message : String(error);
280
- logger.error(message);
281
- process.exit(1);
282
- }
283
- }
284
-
285
- run();
@@ -1,373 +0,0 @@
1
- /**
2
- * Browser-Use API Client
3
- * Wrapper around the Browser-Use Cloud API
4
- */
5
-
6
- import type {
7
- BrowseOptions,
8
- BrowseResult,
9
- ExtractOptions,
10
- ExtractResult,
11
- TaskInfo,
12
- TaskResult,
13
- TaskStep,
14
- } from './types';
15
-
16
- export class BrowserUseClient {
17
- private apiKey: string;
18
- private baseUrl = 'https://api.browser-use.com/api/v1';
19
- private defaultModel: string;
20
- private defaultProxy: boolean;
21
- private defaultProxyCountry: string;
22
-
23
- constructor(apiKey?: string) {
24
- this.apiKey = apiKey || process.env.BROWSER_USE_API_KEY || '';
25
- if (!this.apiKey) {
26
- throw new Error(
27
- 'BROWSER_USE_API_KEY environment variable is required. ' +
28
- 'Get your key from: https://cloud.browser-use.com/billing'
29
- );
30
- }
31
- this.defaultModel = process.env.BROWSER_USE_MODEL || 'gpt-4o';
32
- this.defaultProxy = process.env.BROWSER_USE_PROXY === 'true';
33
- this.defaultProxyCountry = process.env.BROWSER_USE_PROXY_COUNTRY || 'us';
34
- }
35
-
36
- private async request<T>(
37
- endpoint: string,
38
- method: 'GET' | 'POST' | 'PUT' = 'GET',
39
- body?: Record<string, unknown>
40
- ): Promise<T> {
41
- const url = `${this.baseUrl}${endpoint}`;
42
- const options: RequestInit = {
43
- method,
44
- headers: {
45
- Authorization: `Bearer ${this.apiKey}`,
46
- 'Content-Type': 'application/json',
47
- },
48
- };
49
-
50
- if (body) {
51
- options.body = JSON.stringify(body);
52
- }
53
-
54
- const response = await fetch(url, options);
55
-
56
- if (!response.ok) {
57
- const errorText = await response.text();
58
- throw new Error(
59
- `Browser-Use API error (${response.status}): ${errorText}`
60
- );
61
- }
62
-
63
- return response.json() as T;
64
- }
65
-
66
- /**
67
- * Run a browser automation task
68
- */
69
- async runTask(options: BrowseOptions): Promise<TaskResult> {
70
- const payload: Record<string, unknown> = {
71
- task: options.task,
72
- llm_model: options.model || this.defaultModel,
73
- use_proxy: options.useProxy ?? this.defaultProxy,
74
- proxy_country_code: options.proxyCountry || this.defaultProxyCountry,
75
- use_adblock: options.useAdblock ?? false,
76
- highlight_elements: options.highlightElements ?? true,
77
- };
78
-
79
- // Add secrets/credentials if provided
80
- if (options.secrets && Object.keys(options.secrets).length > 0) {
81
- payload.secrets = options.secrets;
82
- }
83
-
84
- // Add allowed domains if provided
85
- if (options.allowedDomains && options.allowedDomains.length > 0) {
86
- payload.allowed_domains = options.allowedDomains;
87
- }
88
-
89
- const result = await this.request<{
90
- id: string;
91
- status: string;
92
- live_url?: string;
93
- output?: string;
94
- error?: string;
95
- }>('/run-task', 'POST', payload);
96
-
97
- return {
98
- taskId: result.id,
99
- status: result.status as TaskResult['status'],
100
- liveUrl: result.live_url,
101
- output: result.output,
102
- error: result.error,
103
- };
104
- }
105
-
106
- /**
107
- * Run a task and wait for completion
108
- */
109
- async browse(options: BrowseOptions): Promise<BrowseResult> {
110
- const task = await this.runTask(options);
111
- const timeout = options.timeout || 300000; // 5 minutes default
112
- const startTime = Date.now();
113
- const pollInterval = 2000; // 2 seconds
114
-
115
- console.log(`Task started: ${task.taskId}`);
116
- if (task.liveUrl) {
117
- console.log(`Live view: ${task.liveUrl}`);
118
- }
119
-
120
- // Poll for completion
121
- while (Date.now() - startTime < timeout) {
122
- const status = await this.getTaskStatus(task.taskId);
123
-
124
- if (status.status === 'finished') {
125
- const result = await this.getTask(task.taskId);
126
- return {
127
- success: true,
128
- taskId: task.taskId,
129
- output: result.output,
130
- liveUrl: task.liveUrl,
131
- steps: result.steps,
132
- };
133
- }
134
-
135
- if (status.status === 'failed' || status.status === 'stopped') {
136
- return {
137
- success: false,
138
- taskId: task.taskId,
139
- error: status.error || `Task ${status.status}`,
140
- liveUrl: task.liveUrl,
141
- };
142
- }
143
-
144
- // Wait before next poll
145
- await new Promise((resolve) => setTimeout(resolve, pollInterval));
146
- }
147
-
148
- return {
149
- success: false,
150
- taskId: task.taskId,
151
- error: 'Task timed out',
152
- liveUrl: task.liveUrl,
153
- };
154
- }
155
-
156
- /**
157
- * Extract structured data from a website
158
- */
159
- async extract(options: ExtractOptions): Promise<ExtractResult> {
160
- const payload: Record<string, unknown> = {
161
- task: options.task,
162
- llm_model: options.model || this.defaultModel,
163
- use_proxy: options.useProxy ?? this.defaultProxy,
164
- proxy_country_code: options.proxyCountry || this.defaultProxyCountry,
165
- use_adblock: options.useAdblock ?? false,
166
- highlight_elements: options.highlightElements ?? true,
167
- };
168
-
169
- if (options.schema) {
170
- payload.structured_output_json = options.schema;
171
- }
172
-
173
- // Add secrets/credentials if provided
174
- if (options.secrets && Object.keys(options.secrets).length > 0) {
175
- payload.secrets = options.secrets;
176
- }
177
-
178
- // Add allowed domains if provided
179
- if (options.allowedDomains && options.allowedDomains.length > 0) {
180
- payload.allowed_domains = options.allowedDomains;
181
- }
182
-
183
- const task = await this.request<{
184
- id: string;
185
- status: string;
186
- live_url?: string;
187
- }>('/run-task', 'POST', payload);
188
-
189
- const timeout = options.timeout || 300000;
190
- const startTime = Date.now();
191
- const pollInterval = 2000;
192
-
193
- console.log(`Extraction task started: ${task.id}`);
194
- if (task.live_url) {
195
- console.log(`Live view: ${task.live_url}`);
196
- }
197
-
198
- // Poll for completion
199
- while (Date.now() - startTime < timeout) {
200
- const result = await this.getTask(task.id);
201
-
202
- if (result.status === 'finished') {
203
- let data: unknown = result.output;
204
- let savedTo: string | undefined;
205
-
206
- // Try to parse JSON output
207
- if (typeof result.output === 'string') {
208
- try {
209
- data = JSON.parse(result.output);
210
- } catch {
211
- // Keep as string if not valid JSON
212
- }
213
- }
214
-
215
- // Save to file if path provided
216
- if (options.outputPath && data) {
217
- const content =
218
- typeof data === 'string' ? data : JSON.stringify(data, null, 2);
219
- await Bun.write(options.outputPath, content);
220
- savedTo = options.outputPath;
221
- console.log(`Data saved to: ${savedTo}`);
222
- }
223
-
224
- return {
225
- success: true,
226
- taskId: task.id,
227
- output: result.output,
228
- data,
229
- savedTo,
230
- liveUrl: task.live_url,
231
- steps: result.steps,
232
- };
233
- }
234
-
235
- if (result.status === 'failed' || result.status === 'stopped') {
236
- return {
237
- success: false,
238
- taskId: task.id,
239
- error: result.error || `Task ${result.status}`,
240
- liveUrl: task.live_url,
241
- };
242
- }
243
-
244
- await new Promise((resolve) => setTimeout(resolve, pollInterval));
245
- }
246
-
247
- return {
248
- success: false,
249
- taskId: task.id,
250
- error: 'Task timed out',
251
- liveUrl: task.live_url,
252
- };
253
- }
254
-
255
- /**
256
- * Get task details
257
- */
258
- async getTask(taskId: string): Promise<TaskResult> {
259
- const result = await this.request<{
260
- id: string;
261
- status: string;
262
- output?: string;
263
- error?: string;
264
- steps?: Array<{
265
- id: string;
266
- step: number;
267
- evaluation_previous_goal?: string;
268
- next_goal?: string;
269
- url?: string;
270
- }>;
271
- }>(`/task/${taskId}`);
272
-
273
- // Transform steps to our format
274
- const steps = result.steps?.map((s) => ({
275
- index: s.step,
276
- action: s.next_goal || s.evaluation_previous_goal || `Step ${s.step}`,
277
- result: s.evaluation_previous_goal,
278
- timestamp: new Date().toISOString(),
279
- }));
280
-
281
- return {
282
- taskId: result.id,
283
- status: result.status as TaskResult['status'],
284
- output: result.output,
285
- error: result.error,
286
- steps,
287
- };
288
- }
289
-
290
- /**
291
- * Get task status
292
- */
293
- async getTaskStatus(
294
- taskId: string
295
- ): Promise<{ status: string; error?: string }> {
296
- const url = `${this.baseUrl}/task/${taskId}/status`;
297
- const response = await fetch(url, {
298
- method: 'GET',
299
- headers: {
300
- Authorization: `Bearer ${this.apiKey}`,
301
- 'Content-Type': 'application/json',
302
- },
303
- });
304
-
305
- if (!response.ok) {
306
- const errorText = await response.text();
307
- throw new Error(
308
- `Browser-Use API error (${response.status}): ${errorText}`
309
- );
310
- }
311
-
312
- const text = await response.text();
313
- // Status endpoint returns just the status string, not an object
314
- const status = text.replace(/"/g, '');
315
- return { status };
316
- }
317
-
318
- /**
319
- * Pause a running task
320
- */
321
- async pauseTask(taskId: string): Promise<{ success: boolean }> {
322
- return this.request<{ success: boolean }>(`/task/${taskId}/pause`, 'POST');
323
- }
324
-
325
- /**
326
- * Resume a paused task
327
- */
328
- async resumeTask(taskId: string): Promise<{ success: boolean }> {
329
- return this.request<{ success: boolean }>(`/task/${taskId}/resume`, 'POST');
330
- }
331
-
332
- /**
333
- * Stop a running task permanently
334
- */
335
- async stopTask(taskId: string): Promise<{ success: boolean }> {
336
- return this.request<{ success: boolean }>(`/task/${taskId}/stop`, 'POST');
337
- }
338
-
339
- /**
340
- * List all tasks
341
- */
342
- async listTasks(): Promise<TaskInfo[]> {
343
- const result = await this.request<{
344
- tasks: Array<{
345
- id: string;
346
- status: string;
347
- task: string;
348
- live_url?: string;
349
- created_at: string;
350
- completed_at?: string;
351
- }>;
352
- }>('/tasks');
353
-
354
- return (result.tasks || []).map((t) => ({
355
- id: t.id,
356
- status: t.status as TaskInfo['status'],
357
- task: t.task,
358
- liveUrl: t.live_url,
359
- createdAt: t.created_at,
360
- completedAt: t.completed_at,
361
- }));
362
- }
363
-
364
- /**
365
- * Get screenshots from a task
366
- */
367
- async getTaskScreenshots(taskId: string): Promise<string[]> {
368
- const result = await this.request<{ screenshots: string[] }>(
369
- `/task/${taskId}/screenshots`
370
- );
371
- return result.screenshots || [];
372
- }
373
- }