@hasna/skills 0.1.26 → 0.1.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/LICENSE +1 -10
  2. package/README.md +141 -39
  3. package/bin/index.js +30122 -27575
  4. package/bin/mcp.js +22112 -18593
  5. package/dist/cli/cli.test-utils.d.ts +15 -0
  6. package/dist/cli/commands/auth.d.ts +2 -0
  7. package/dist/cli/commands/install.d.ts +1 -1
  8. package/dist/cli/commands/runtime-mcp.d.ts +4 -0
  9. package/dist/index.d.ts +9 -4
  10. package/dist/index.js +11607 -597
  11. package/dist/lib/auth-store.d.ts +13 -0
  12. package/dist/lib/installer.d.ts +58 -55
  13. package/dist/lib/mcp-contracts.d.ts +86 -0
  14. package/dist/lib/project-state.d.ts +43 -0
  15. package/dist/lib/registry-data/business-marketing.d.ts +2 -0
  16. package/dist/lib/registry-data/communication.d.ts +2 -0
  17. package/dist/lib/registry-data/content-generation.d.ts +2 -0
  18. package/dist/lib/registry-data/data-analysis.d.ts +2 -0
  19. package/dist/lib/registry-data/design-branding.d.ts +2 -0
  20. package/dist/lib/registry-data/development-tools.d.ts +2 -0
  21. package/dist/lib/registry-data/education-learning.d.ts +2 -0
  22. package/dist/lib/registry-data/event-management.d.ts +2 -0
  23. package/dist/lib/registry-data/finance-compliance.d.ts +2 -0
  24. package/dist/lib/registry-data/health-wellness.d.ts +2 -0
  25. package/dist/lib/registry-data/index.d.ts +2 -0
  26. package/dist/lib/registry-data/media-processing.d.ts +2 -0
  27. package/dist/lib/registry-data/productivity-organization.d.ts +2 -0
  28. package/dist/lib/registry-data/project-management.d.ts +2 -0
  29. package/dist/lib/registry-data/research-writing.d.ts +2 -0
  30. package/dist/lib/registry-data/science-academic.d.ts +2 -0
  31. package/dist/lib/registry-data/travel-lifestyle.d.ts +2 -0
  32. package/dist/lib/registry-data/web-browser.d.ts +2 -0
  33. package/dist/lib/registry-types.d.ts +27 -0
  34. package/dist/lib/registry.d.ts +6 -18
  35. package/dist/lib/remote-registry.d.ts +3 -0
  36. package/dist/lib/run-state.d.ts +60 -0
  37. package/dist/lib/skill-aliases.d.ts +17 -0
  38. package/dist/lib/skillinfo.d.ts +5 -1
  39. package/dist/mcp/discovery-tools.d.ts +2 -0
  40. package/dist/mcp/helpers.d.ts +26 -0
  41. package/dist/mcp/http.d.ts +10 -0
  42. package/dist/mcp/index.d.ts +3 -2
  43. package/dist/mcp/operation-tools.d.ts +2 -0
  44. package/dist/mcp/resource-meta-tools.d.ts +2 -0
  45. package/dist/mcp/schedule-tools.d.ts +2 -0
  46. package/dist/mcp/server.d.ts +4 -0
  47. package/dist/types/api.d.ts +7 -4
  48. package/package.json +23 -10
  49. package/skills/_common/http-client.ts +1 -1
  50. package/skills/_common/index.ts +2 -3
  51. package/skills/_common/install.sh +5 -110
  52. package/skills/_common/installer.ts +31 -282
  53. package/skills/_common/skill-install.ts +14 -181
  54. package/skills/ad-creative-pack/SKILL.md +45 -0
  55. package/skills/ad-creative-pack/package.json +14 -0
  56. package/skills/advanced-math/package.json +3 -1
  57. package/skills/advanced-math/src/calculators.ts +118 -0
  58. package/skills/advanced-math/src/cli.ts +130 -0
  59. package/skills/advanced-math/src/conversion.ts +90 -0
  60. package/skills/advanced-math/src/finance.ts +75 -0
  61. package/skills/advanced-math/src/formatting.ts +95 -0
  62. package/skills/advanced-math/src/index.ts +24 -702
  63. package/skills/advanced-math/src/runtime.ts +49 -0
  64. package/skills/advanced-math/src/symbolic.ts +110 -0
  65. package/skills/advanced-math/src/types.ts +36 -0
  66. package/skills/analyze-data/SKILL.md +2 -2
  67. package/skills/analyze-data/src/analysis.ts +401 -0
  68. package/skills/analyze-data/src/cli.ts +66 -0
  69. package/skills/analyze-data/src/formatters.ts +235 -0
  70. package/skills/analyze-data/src/index.ts +6 -1027
  71. package/skills/analyze-data/src/logger.ts +36 -0
  72. package/skills/analyze-data/src/parsers.ts +57 -0
  73. package/skills/analyze-data/src/stats.ts +151 -0
  74. package/skills/analyze-data/src/types.ts +85 -0
  75. package/skills/api-docs-portal/SKILL.md +46 -0
  76. package/skills/api-docs-portal/package.json +9 -0
  77. package/skills/api-test-suite/src/index.ts +13 -0
  78. package/skills/apidocs/package.json +1 -1
  79. package/skills/apidocs/src/index.ts +3 -0
  80. package/skills/audio/package.json +2 -3
  81. package/skills/audio-cleanup-lab/SKILL.md +2 -2
  82. package/skills/audio-extract/CLAUDE.md +1 -1
  83. package/skills/audio-transcript-pack/SKILL.md +43 -0
  84. package/skills/audio-transcript-pack/package.json +10 -0
  85. package/skills/blog-article/CLAUDE.md +12 -0
  86. package/skills/blog-article/SKILL.md +45 -0
  87. package/skills/{create-blog-article → blog-article}/package.json +3 -3
  88. package/skills/brand-kit/SKILL.md +45 -0
  89. package/skills/brand-kit/package.json +14 -0
  90. package/skills/brand-photo-shoot/SKILL.md +28 -0
  91. package/skills/brand-photo-shoot/package.json +10 -0
  92. package/skills/brand-style-guide/SKILL.md +2 -2
  93. package/skills/brand-style-guide/src/index.ts +0 -0
  94. package/skills/budget-variance-analyzer/SKILL.md +2 -2
  95. package/skills/businessactivity/package.json +1 -1
  96. package/skills/businessactivity/src/index.ts +3 -0
  97. package/skills/calendar-events/src/ai-parser.ts +103 -0
  98. package/skills/calendar-events/src/api.ts +157 -0
  99. package/skills/calendar-events/src/auth.ts +22 -0
  100. package/skills/calendar-events/src/config.ts +6 -0
  101. package/skills/calendar-events/src/format.ts +96 -0
  102. package/skills/calendar-events/src/help.ts +54 -0
  103. package/skills/calendar-events/src/index.ts +21 -524
  104. package/skills/calendar-events/src/logger.ts +34 -0
  105. package/skills/calendar-events/src/types.ts +67 -0
  106. package/skills/compress-video/SKILL.md +2 -2
  107. package/skills/consolelog/package.json +1 -1
  108. package/skills/consolelog/src/index.ts +3 -0
  109. package/skills/contract-review-report/SKILL.md +43 -0
  110. package/skills/contract-review-report/package.json +10 -0
  111. package/skills/convert/SKILL.md +2 -3
  112. package/skills/customer-feedback-report/SKILL.md +44 -0
  113. package/skills/customer-feedback-report/package.json +10 -0
  114. package/skills/dashboard-builder/package.json +3 -1
  115. package/skills/database-explorer/package.json +3 -1
  116. package/skills/deepresearch/README.md +4 -13
  117. package/skills/deploy/src/http-client.ts +1 -1
  118. package/skills/diff-viewer/package.json +4 -1
  119. package/skills/doc-generate/package.json +0 -1
  120. package/skills/doc-generate/src/ai.ts +50 -0
  121. package/skills/doc-generate/src/cli.ts +203 -0
  122. package/skills/doc-generate/src/dependencies.ts +44 -0
  123. package/skills/doc-generate/src/document-builder.ts +299 -0
  124. package/skills/doc-generate/src/index.ts +40 -764
  125. package/skills/doc-generate/src/markdown-parser.ts +125 -0
  126. package/skills/doc-generate/src/types.ts +68 -0
  127. package/skills/domainpurchase/SKILL.md +1 -1
  128. package/skills/domainpurchase/package.json +1 -1
  129. package/skills/domainpurchase/src/index.ts +3 -0
  130. package/skills/domainsearch/SKILL.md +1 -1
  131. package/skills/domainsearch/package.json +1 -1
  132. package/skills/domainsearch/src/index.ts +3 -0
  133. package/skills/email-sequence/SKILL.md +44 -0
  134. package/skills/email-sequence/package.json +14 -0
  135. package/skills/excel/CLAUDE.md +2 -2
  136. package/skills/experiment-power-calculator/package.json +3 -1
  137. package/skills/extract-invoice/src/cli.ts +97 -0
  138. package/skills/extract-invoice/src/extractor.ts +170 -0
  139. package/skills/extract-invoice/src/file-utils.ts +46 -0
  140. package/skills/extract-invoice/src/formatters.ts +144 -0
  141. package/skills/extract-invoice/src/index.ts +44 -629
  142. package/skills/extract-invoice/src/runtime.ts +46 -0
  143. package/skills/extract-invoice/src/types.ts +88 -0
  144. package/skills/folder-tree/package.json +3 -1
  145. package/skills/form-filler/package.json +3 -1
  146. package/skills/generate-api-client/package.json +3 -1
  147. package/skills/generate-api-client/src/generator.ts +47 -0
  148. package/skills/generate-api-client/src/index.ts +3 -777
  149. package/skills/generate-api-client/src/logger.ts +34 -0
  150. package/skills/generate-api-client/src/python-generator.ts +245 -0
  151. package/skills/generate-api-client/src/spec-loader.ts +48 -0
  152. package/skills/generate-api-client/src/type-mappers.ts +79 -0
  153. package/skills/generate-api-client/src/types.ts +76 -0
  154. package/skills/generate-api-client/src/typescript-generator.ts +247 -0
  155. package/skills/generate-book-cover/package.json +3 -1
  156. package/skills/generate-dockerfile/src/cli.ts +78 -0
  157. package/skills/generate-dockerfile/src/dockerfile-templates.ts +392 -0
  158. package/skills/generate-dockerfile/src/index.ts +12 -790
  159. package/skills/generate-dockerfile/src/logger.ts +30 -0
  160. package/skills/generate-dockerfile/src/project-detection.ts +68 -0
  161. package/skills/generate-dockerfile/src/support-files.ts +171 -0
  162. package/skills/generate-dockerfile/src/types.ts +29 -0
  163. package/skills/generate-documentation/src/ai.ts +131 -0
  164. package/skills/generate-documentation/src/cli.ts +71 -0
  165. package/skills/generate-documentation/src/code-parser.ts +300 -0
  166. package/skills/generate-documentation/src/file-processing.ts +182 -0
  167. package/skills/generate-documentation/src/index.ts +13 -753
  168. package/skills/generate-documentation/src/runtime.ts +35 -0
  169. package/skills/generate-documentation/src/types.ts +30 -0
  170. package/skills/generate-env/package.json +3 -1
  171. package/skills/generate-env/src/cli.ts +85 -0
  172. package/skills/generate-env/src/detection.ts +161 -0
  173. package/skills/generate-env/src/env-data.ts +66 -0
  174. package/skills/generate-env/src/generators.ts +240 -0
  175. package/skills/generate-env/src/index.ts +76 -676
  176. package/skills/generate-env/src/runtime.ts +30 -0
  177. package/skills/generate-env/src/types.ts +32 -0
  178. package/skills/generate-favicon/package.json +3 -1
  179. package/skills/generate-mock-data/package.json +3 -1
  180. package/skills/generate-mock-data/src/ai.ts +102 -0
  181. package/skills/generate-mock-data/src/formatters.ts +84 -0
  182. package/skills/generate-mock-data/src/generator.ts +377 -0
  183. package/skills/generate-mock-data/src/index.ts +15 -716
  184. package/skills/generate-mock-data/src/logger.ts +37 -0
  185. package/skills/generate-mock-data/src/presets.ts +110 -0
  186. package/skills/generate-mock-data/src/types.ts +21 -0
  187. package/skills/generate-pr-description/src/ai.ts +144 -0
  188. package/skills/generate-pr-description/src/cli.ts +80 -0
  189. package/skills/generate-pr-description/src/clipboard.ts +30 -0
  190. package/skills/generate-pr-description/src/formatters.ts +231 -0
  191. package/skills/generate-pr-description/src/git.ts +153 -0
  192. package/skills/generate-pr-description/src/index.ts +21 -714
  193. package/skills/generate-pr-description/src/types.ts +49 -0
  194. package/skills/generate-presentation/src/ai-clients.ts +61 -0
  195. package/skills/generate-presentation/src/cli.ts +126 -0
  196. package/skills/generate-presentation/src/index.ts +3 -751
  197. package/skills/generate-presentation/src/logger.ts +67 -0
  198. package/skills/generate-presentation/src/presentation-generator.ts +425 -0
  199. package/skills/generate-presentation/src/runtime.ts +6 -0
  200. package/skills/generate-presentation/src/security.ts +12 -0
  201. package/skills/generate-presentation/src/types.ts +28 -0
  202. package/skills/generate-qrcode/package.json +4 -1
  203. package/skills/generate-regex/package.json +3 -1
  204. package/skills/generate-resume/src/cli.ts +157 -0
  205. package/skills/generate-resume/src/index.ts +13 -917
  206. package/skills/generate-resume/src/parsers.ts +95 -0
  207. package/skills/generate-resume/src/renderers.ts +538 -0
  208. package/skills/generate-resume/src/security.ts +39 -0
  209. package/skills/generate-resume/src/types.ts +86 -0
  210. package/skills/generate-social-posts/src/ai.ts +88 -0
  211. package/skills/generate-social-posts/src/cli.ts +118 -0
  212. package/skills/generate-social-posts/src/exporters.ts +126 -0
  213. package/skills/generate-social-posts/src/generator.ts +130 -0
  214. package/skills/generate-social-posts/src/index.ts +19 -709
  215. package/skills/generate-social-posts/src/platforms.ts +39 -0
  216. package/skills/generate-social-posts/src/runtime.ts +34 -0
  217. package/skills/generate-social-posts/src/source.ts +116 -0
  218. package/skills/generate-social-posts/src/types.ts +58 -0
  219. package/skills/gif-maker/package.json +4 -1
  220. package/skills/github-manager/package.json +3 -1
  221. package/skills/gmail/CLAUDE.md +1 -1
  222. package/skills/highlight-reel-generator/src/index.ts +19 -0
  223. package/skills/hook/src/commands/create.ts +20 -845
  224. package/skills/hook/src/templates/root.ts +196 -0
  225. package/skills/hook/src/templates/source.ts +647 -0
  226. package/skills/http-server/package.json +3 -1
  227. package/skills/icon-pack/README.md +28 -0
  228. package/skills/icon-pack/SKILL.md +23 -0
  229. package/skills/icon-pack/package.json +29 -0
  230. package/skills/{audio → icon-pack}/tsconfig.json +10 -12
  231. package/skills/image/package.json +1 -2
  232. package/skills/implementation-agent/package.json +3 -1
  233. package/skills/implementation-agent/src/ai-generation.ts +225 -0
  234. package/skills/implementation-agent/src/index.ts +3 -960
  235. package/skills/implementation-agent/src/minimist.d.ts +15 -0
  236. package/skills/implementation-agent/src/templates.ts +686 -0
  237. package/skills/implementation-agent/src/types.ts +53 -0
  238. package/skills/implementation-plan/package.json +3 -1
  239. package/skills/implementation-todo/package.json +3 -1
  240. package/skills/invoice/package.json +1 -1
  241. package/skills/invoice/src/index.ts +3 -0
  242. package/skills/invoice-reconciliation/SKILL.md +42 -0
  243. package/skills/invoice-reconciliation/package.json +10 -0
  244. package/skills/landing-page-pack/SKILL.md +47 -0
  245. package/skills/landing-page-pack/package.json +14 -0
  246. package/skills/latex-table-generator/package.json +3 -1
  247. package/skills/logo-design/SKILL.md +25 -44
  248. package/skills/logo-design/package.json +3 -15
  249. package/skills/lorem-generator/package.json +3 -1
  250. package/skills/lorem-generator/src/index.ts +13 -0
  251. package/skills/managehook/package.json +1 -1
  252. package/skills/managehook/src/index.ts +3 -0
  253. package/skills/managemcp/package.json +1 -1
  254. package/skills/managemcp/src/index.ts +3 -0
  255. package/skills/manageskill/package.json +1 -1
  256. package/skills/manageskill/src/index.ts +3 -0
  257. package/skills/markdown-validator/package.json +3 -1
  258. package/skills/markdown-validator/src/index.ts +1 -4
  259. package/skills/market-research-report/SKILL.md +41 -0
  260. package/skills/market-research-report/package.json +10 -0
  261. package/skills/mcp-builder/package.json +4 -1
  262. package/skills/mcp-builder/src/ai-descriptions.ts +37 -0
  263. package/skills/mcp-builder/src/generators.ts +513 -0
  264. package/skills/mcp-builder/src/index.ts +7 -908
  265. package/skills/mcp-builder/src/minimist.d.ts +15 -0
  266. package/skills/mcp-builder/src/naming.ts +12 -0
  267. package/skills/mcp-builder/src/options.ts +170 -0
  268. package/skills/mcp-builder/src/templates.ts +149 -0
  269. package/skills/mcp-builder/src/types.ts +42 -0
  270. package/skills/meeting-pack/SKILL.md +43 -0
  271. package/skills/meeting-pack/package.json +10 -0
  272. package/skills/merge-pdfs/package.json +5 -1
  273. package/skills/migration-plan-pack/SKILL.md +45 -0
  274. package/skills/migration-plan-pack/package.json +10 -0
  275. package/skills/music/package.json +2 -3
  276. package/skills/music-album/SKILL.md +37 -0
  277. package/skills/music-album/package.json +10 -0
  278. package/skills/notion-manager/package.json +3 -1
  279. package/skills/npmpublish/CLAUDE.md +5 -8
  280. package/skills/npmpublish/README.md +5 -26
  281. package/skills/npmpublish/src/index.ts +9 -147
  282. package/skills/one-page-website/SKILL.md +46 -0
  283. package/skills/one-page-website/package.json +10 -0
  284. package/skills/one-page-website/tsconfig.json +8 -0
  285. package/skills/pdf-generate/src/cli.ts +162 -0
  286. package/skills/pdf-generate/src/html.ts +84 -0
  287. package/skills/pdf-generate/src/index.ts +11 -800
  288. package/skills/pdf-generate/src/markdown.ts +27 -0
  289. package/skills/pdf-generate/src/pdf-writer.ts +78 -0
  290. package/skills/pdf-generate/src/runtime.ts +34 -0
  291. package/skills/pdf-generate/src/security.ts +37 -0
  292. package/skills/pdf-generate/src/templates.ts +311 -0
  293. package/skills/pdf-generate/src/types.ts +28 -0
  294. package/skills/pdf-read/SKILL.md +10 -10
  295. package/skills/pdf-to-dataset/SKILL.md +45 -0
  296. package/skills/pdf-to-dataset/package.json +10 -0
  297. package/skills/pdf-to-markdown/SKILL.md +49 -0
  298. package/skills/pdf-to-markdown/package.json +10 -0
  299. package/skills/pdf-to-markdown/tsconfig.json +10 -0
  300. package/skills/performance-audit-report/SKILL.md +42 -0
  301. package/skills/performance-audit-report/package.json +10 -0
  302. package/skills/persona-based-adwriter/src/index.ts +19 -0
  303. package/skills/photo-album/SKILL.md +29 -0
  304. package/skills/photo-album/package.json +9 -0
  305. package/skills/photo-album/tsconfig.json +4 -0
  306. package/skills/pitch-deck/SKILL.md +43 -0
  307. package/skills/pitch-deck/package.json +9 -0
  308. package/skills/playlist-maker/SKILL.md +33 -0
  309. package/skills/playlist-maker/package.json +9 -0
  310. package/skills/playlist-maker/tsconfig.json +4 -0
  311. package/skills/product-mockup/SKILL.md +45 -0
  312. package/skills/product-mockup/package.json +3 -20
  313. package/skills/product-mockup/tsconfig.json +3 -5
  314. package/skills/project-retro-companion/src/index.ts +19 -0
  315. package/skills/proposal-pack/SKILL.md +45 -0
  316. package/skills/proposal-pack/package.json +10 -0
  317. package/skills/read-pdf/SKILL.md +5 -4
  318. package/skills/repo-onboarding-report/SKILL.md +42 -0
  319. package/skills/repo-onboarding-report/package.json +10 -0
  320. package/skills/sales-call-recapper/src/index.ts +20 -0
  321. package/skills/salescopy/package.json +1 -1
  322. package/skills/salescopy/src/index.ts +3 -0
  323. package/skills/scaffold-project/src/ai-detect.ts +136 -0
  324. package/skills/scaffold-project/src/file-generators.ts +292 -0
  325. package/skills/scaffold-project/src/index.ts +8 -991
  326. package/skills/scaffold-project/src/project-config.ts +338 -0
  327. package/skills/scaffold-project/src/templates.ts +173 -0
  328. package/skills/scaffold-project/src/types.ts +58 -0
  329. package/skills/scientific-figure-check/package.json +3 -1
  330. package/skills/sdk-generator/SKILL.md +45 -0
  331. package/skills/sdk-generator/package.json +10 -0
  332. package/skills/sdk-generator/tsconfig.json +8 -0
  333. package/skills/security-audit/src/index.ts +25 -6
  334. package/skills/security-audit-report/SKILL.md +40 -0
  335. package/skills/security-audit-report/package.json +10 -0
  336. package/skills/seo-content-pack/SKILL.md +44 -0
  337. package/skills/seo-content-pack/package.json +9 -0
  338. package/skills/short-video-pack/SKILL.md +30 -0
  339. package/skills/short-video-pack/package.json +10 -0
  340. package/skills/slack-assistant/package.json +3 -1
  341. package/skills/slide-deck-generator/SKILL.md +44 -0
  342. package/skills/slide-deck-generator/package.json +10 -0
  343. package/skills/sms/package.json +1 -1
  344. package/skills/sms/src/index.ts +15 -0
  345. package/skills/social-content-calendar/SKILL.md +45 -0
  346. package/skills/social-content-calendar/package.json +14 -0
  347. package/skills/split-pdf/package.json +4 -1
  348. package/skills/subtitle/package.json +2 -1
  349. package/skills/subtitle/src/index.ts +3 -0
  350. package/skills/terraform-generator/package.json +3 -1
  351. package/skills/test-suite-generator/SKILL.md +41 -0
  352. package/skills/test-suite-generator/package.json +10 -0
  353. package/skills/timesheet/package.json +1 -1
  354. package/skills/timesheet/src/index.ts +3 -0
  355. package/skills/transcript/SKILL.md +1 -8
  356. package/skills/validate-config/package.json +3 -1
  357. package/skills/video/package.json +6 -4
  358. package/skills/video-downloader/package.json +3 -1
  359. package/skills/video-highlight-pack/SKILL.md +44 -0
  360. package/skills/video-highlight-pack/package.json +10 -0
  361. package/skills/voiceover-jingle-pack/SKILL.md +28 -0
  362. package/skills/voiceover-jingle-pack/package.json +10 -0
  363. package/skills/watermark/package.json +6 -1
  364. package/skills/webcrawling/package.json +2 -1
  365. package/skills/write/SKILL.md +6 -6
  366. package/dist/server/serve.d.ts +0 -11
  367. package/skills/apidocs/.claude/settings.json +0 -5
  368. package/skills/audio/.env.example +0 -14
  369. package/skills/audio/QUICKSTART.md +0 -158
  370. package/skills/audio/README.md +0 -256
  371. package/skills/audio/src/index-local.ts +0 -206
  372. package/skills/audio/src/index.ts +0 -95
  373. package/skills/audio/src/providers/elevenlabs.ts +0 -115
  374. package/skills/audio/src/providers/google.ts +0 -116
  375. package/skills/audio/src/providers/minimax.ts +0 -83
  376. package/skills/audio/src/providers/openai.ts +0 -115
  377. package/skills/audio/src/types.ts +0 -79
  378. package/skills/audiobook-chapter-proofer/CLAUDE.md +0 -19
  379. package/skills/audiobook-chapter-proofer/package.json +0 -27
  380. package/skills/audiobook-chapter-proofer/src/index.ts +0 -285
  381. package/skills/browse/src/client.ts +0 -373
  382. package/skills/browse/src/index-local.ts +0 -430
  383. package/skills/browse/src/index.ts +0 -110
  384. package/skills/browse/src/sse-server.ts +0 -919
  385. package/skills/browse/src/types.ts +0 -104
  386. package/skills/consolelog/src/server/index.ts +0 -508
  387. package/skills/create-blog-article/CLAUDE.md +0 -19
  388. package/skills/create-blog-article/src/index.ts +0 -745
  389. package/skills/create-blog-article/tsconfig.json +0 -10
  390. package/skills/deepresearch/src/agents/query-generator.ts +0 -91
  391. package/skills/deepresearch/src/agents/synthesizer.ts +0 -111
  392. package/skills/deepresearch/src/index.ts +0 -224
  393. package/skills/deepresearch/src/research.ts +0 -166
  394. package/skills/deepresearch/src/services/anthropic.ts +0 -69
  395. package/skills/deepresearch/src/services/exa.ts +0 -108
  396. package/skills/deepresearch/src/services/firecrawl.ts +0 -88
  397. package/skills/deepresearch/src/services/openai.ts +0 -81
  398. package/skills/deepresearch/src/types.ts +0 -76
  399. package/skills/deepresearch/src/utils/file.ts +0 -111
  400. package/skills/deepresearch/src/utils/logger.ts +0 -84
  401. package/skills/domainpurchase/src/server/index.ts +0 -332
  402. package/skills/domainsearch/src/server/index.ts +0 -229
  403. package/skills/e2bswarm/README.md +0 -135
  404. package/skills/e2bswarm/SKILL.md +0 -118
  405. package/skills/e2bswarm/examples/tasks-example.json +0 -38
  406. package/skills/e2bswarm/package.json +0 -59
  407. package/skills/e2bswarm/src/commands/collect.ts +0 -135
  408. package/skills/e2bswarm/src/commands/install.ts +0 -164
  409. package/skills/e2bswarm/src/commands/kill.ts +0 -62
  410. package/skills/e2bswarm/src/commands/spawn.ts +0 -134
  411. package/skills/e2bswarm/src/commands/status.ts +0 -90
  412. package/skills/e2bswarm/src/commands/sync.ts +0 -208
  413. package/skills/e2bswarm/src/index.ts +0 -121
  414. package/skills/e2bswarm/src/lib/config.ts +0 -75
  415. package/skills/e2bswarm/src/lib/e2b.ts +0 -490
  416. package/skills/e2bswarm/src/lib/github.ts +0 -253
  417. package/skills/e2bswarm/src/lib/logger.ts +0 -41
  418. package/skills/e2bswarm/src/lib/paths.ts +0 -75
  419. package/skills/e2bswarm/src/lib/tasks.ts +0 -320
  420. package/skills/e2bswarm/src/types/index.ts +0 -107
  421. package/skills/e2bswarm/templates/codebox/e2b.Dockerfile +0 -38
  422. package/skills/e2bswarm/templates/codebox/e2b.toml +0 -3
  423. package/skills/e2bswarm/templates/setup.sh +0 -21
  424. package/skills/e2bswarm/tsconfig.json +0 -19
  425. package/skills/generate-book-cover/src/index.ts +0 -694
  426. package/skills/image/src/index-local.ts +0 -206
  427. package/skills/image/src/index.ts +0 -96
  428. package/skills/image/src/providers/google.ts +0 -79
  429. package/skills/image/src/providers/minimax.ts +0 -94
  430. package/skills/image/src/providers/openai.ts +0 -80
  431. package/skills/image/src/providers/xai.ts +0 -73
  432. package/skills/image/src/types.ts +0 -37
  433. package/skills/logo-design/CLAUDE.md +0 -30
  434. package/skills/logo-design/src/index.ts +0 -322
  435. package/skills/managehook/src/server/index.ts +0 -108
  436. package/skills/managemcp/src/server/index.ts +0 -108
  437. package/skills/manageskill/src/server/index.ts +0 -108
  438. package/skills/music/CLAUDE.md +0 -9
  439. package/skills/music/src/index.ts +0 -94
  440. package/skills/music/tsconfig.json +0 -10
  441. package/skills/pdf-read/src/index.ts +0 -320
  442. package/skills/product-mockup/CLAUDE.md +0 -19
  443. package/skills/product-mockup/src/index.ts +0 -290
  444. package/skills/read-pdf/src/index.ts +0 -388
  445. package/skills/remove-background/src/index.ts +0 -405
  446. package/skills/scaffold-project/my-app/.env.example +0 -2
  447. package/skills/scaffold-project/my-app/README.md +0 -72
  448. package/skills/scaffold-project/my-app/package.json +0 -29
  449. package/skills/scaffold-project/my-app/src/index.ts +0 -23
  450. package/skills/scaffold-project/my-app/tsconfig.json +0 -33
  451. package/skills/sound-effects/SKILL.md +0 -34
  452. package/skills/sound-effects/package.json +0 -21
  453. package/skills/sound-effects/src/index.ts +0 -172
  454. package/skills/sound-effects/tsconfig.json +0 -8
  455. package/skills/transcript/src/chunker.ts +0 -215
  456. package/skills/transcript/src/formatter.ts +0 -134
  457. package/skills/transcript/src/index-local.ts +0 -226
  458. package/skills/transcript/src/index.ts +0 -110
  459. package/skills/transcript/src/providers/elevenlabs.ts +0 -133
  460. package/skills/transcript/src/providers/gemini.ts +0 -192
  461. package/skills/transcript/src/providers/index.ts +0 -54
  462. package/skills/transcript/src/providers/openai.ts +0 -203
  463. package/skills/transcript/src/types.ts +0 -106
  464. package/skills/video/.env.example +0 -14
  465. package/skills/video/EXAMPLES.md +0 -266
  466. package/skills/video/LICENSE +0 -192
  467. package/skills/video/README.md +0 -174
  468. package/skills/video/src/cli.ts +0 -155
  469. package/skills/video/src/index-local.ts +0 -148
  470. package/skills/video/src/index.ts +0 -96
  471. package/skills/video/src/providers/google-veo.ts +0 -126
  472. package/skills/video/src/providers/index.ts +0 -22
  473. package/skills/video/src/providers/minimax.ts +0 -100
  474. package/skills/video/src/providers/openai-sora.ts +0 -164
  475. package/skills/video/src/providers/runway.ts +0 -159
  476. package/skills/video/src/types.ts +0 -35
  477. package/skills/video/tsconfig.json +0 -22
  478. package/skills/voiceover-casting-assistant/CLAUDE.md +0 -19
  479. package/skills/voiceover-casting-assistant/package.json +0 -27
  480. package/skills/voiceover-casting-assistant/src/index.ts +0 -255
  481. package/skills/voiceover-casting-assistant/tsconfig.json +0 -10
  482. package/skills/webcrawling/src/commands/config.ts +0 -34
  483. package/skills/webcrawling/src/commands/crawl.ts +0 -33
  484. package/skills/webcrawling/src/commands/scrape.ts +0 -32
  485. package/skills/webcrawling/src/commands/sessions.ts +0 -42
  486. package/skills/webcrawling/src/lib/crawler.ts +0 -174
  487. package/skills/webcrawling/src/lib/storage.ts +0 -130
  488. package/skills/webcrawling/src/types/index.ts +0 -45
  489. package/skills/webcrawling/src/utils/logger.ts +0 -30
  490. package/skills/webcrawling/src/utils/paths.ts +0 -28
  491. /package/skills/{audiobook-chapter-proofer → blog-article}/tsconfig.json +0 -0
@@ -0,0 +1,27 @@
1
+ import { escapeHtml, sanitizeUrl } from "./security";
2
+
3
+ export function markdownToHtml(markdown: string): string {
4
+ let html = markdown
5
+ .replace(/^### (.*$)/gim, "<h3>$1</h3>")
6
+ .replace(/^## (.*$)/gim, "<h2>$1</h2>")
7
+ .replace(/^# (.*$)/gim, "<h1>$1</h1>")
8
+ .replace(/\*\*(.+?)\*\*/g, "<strong>$1</strong>")
9
+ .replace(/__(.+?)__/g, "<strong>$1</strong>")
10
+ .replace(/\*(.+?)\*/g, "<em>$1</em>")
11
+ .replace(/_(.+?)_/g, "<em>$1</em>")
12
+ .replace(/```(\w*)\n([\s\S]*?)```/g, '<pre><code class="language-$1">$2</code></pre>')
13
+ .replace(/`(.+?)`/g, "<code>$1</code>")
14
+ .replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_, text, url) => {
15
+ const safeUrl = sanitizeUrl(url);
16
+ const safeText = escapeHtml(text);
17
+ return safeUrl ? `<a href="${safeUrl}">${safeText}</a>` : safeText;
18
+ })
19
+ .replace(/^\s*[-*]\s+(.*)$/gim, "<li>$1</li>")
20
+ .replace(/^\s*\d+\.\s+(.*)$/gim, "<li>$1</li>")
21
+ .replace(/^---$/gim, "<hr>")
22
+ .replace(/\n\n/g, "</p><p>")
23
+ .replace(/\n/g, "<br>");
24
+
25
+ html = html.replace(/(<li>.*?<\/li>)+/gs, "<ul>$&</ul>");
26
+ return `<p>${html}</p>`;
27
+ }
@@ -0,0 +1,78 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { htmlToPlainText } from "./html";
3
+ import { loadPdfLib } from "./runtime";
4
+ import { PAGE_FORMATS, type GenerateOptions } from "./types";
5
+
6
+ function pageSizeToPoints(format: string, orientation: "portrait" | "landscape"): [number, number] {
7
+ const size = PAGE_FORMATS[format] ?? PAGE_FORMATS.A4;
8
+ const width = (size.width / 25.4) * 72;
9
+ const height = (size.height / 25.4) * 72;
10
+ return orientation === "landscape" ? [height, width] : [width, height];
11
+ }
12
+
13
+ function wrapText(text: string, maxCharacters: number): string[] {
14
+ const lines: string[] = [];
15
+ for (const paragraph of text.split("\n")) {
16
+ let current = "";
17
+ for (const word of paragraph.split(/\s+/).filter(Boolean)) {
18
+ const candidate = current ? `${current} ${word}` : word;
19
+ if (candidate.length > maxCharacters && current) {
20
+ lines.push(current);
21
+ current = word;
22
+ } else {
23
+ current = candidate;
24
+ }
25
+ }
26
+ if (current) lines.push(current);
27
+ lines.push("");
28
+ }
29
+ return lines;
30
+ }
31
+
32
+ export async function writePdfDocument(html: string, options: GenerateOptions, outputPath: string): Promise<void> {
33
+ const { PDFDocument, StandardFonts, rgb } = await loadPdfLib();
34
+ const pdfDoc = await PDFDocument.create();
35
+ const font = await pdfDoc.embedFont(StandardFonts.Helvetica);
36
+ const boldFont = await pdfDoc.embedFont(StandardFonts.HelveticaBold);
37
+ const [width, height] = pageSizeToPoints(options.format, options.orientation);
38
+ const margin = 54;
39
+ const fontSize = 11;
40
+ const lineHeight = 16;
41
+ const maxCharacters = Math.max(40, Math.floor((width - margin * 2) / (fontSize * 0.52)));
42
+ const lines = wrapText(htmlToPlainText(html), maxCharacters);
43
+
44
+ let page = pdfDoc.addPage([width, height]);
45
+ let y = height - margin;
46
+
47
+ if (options.title) {
48
+ page.drawText(options.title, {
49
+ x: margin,
50
+ y,
51
+ size: 18,
52
+ font: boldFont,
53
+ color: rgb(0.12, 0.18, 0.26),
54
+ });
55
+ y -= lineHeight * 2;
56
+ }
57
+
58
+ for (const line of lines) {
59
+ if (y < margin) {
60
+ page = pdfDoc.addPage([width, height]);
61
+ y = height - margin;
62
+ }
63
+
64
+ if (line) {
65
+ page.drawText(line, {
66
+ x: margin,
67
+ y,
68
+ size: fontSize,
69
+ font,
70
+ color: rgb(0.1, 0.1, 0.1),
71
+ });
72
+ }
73
+ y -= lineHeight;
74
+ }
75
+
76
+ const bytes = await pdfDoc.save();
77
+ writeFileSync(outputPath, bytes);
78
+ }
@@ -0,0 +1,34 @@
1
+ import { appendFileSync, existsSync, mkdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+
4
+ export type PdfLibModule = typeof import("pdf-lib");
5
+
6
+ export const SKILL_NAME = "generate-pdf";
7
+ export const SESSION_ID = `${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
8
+ export const EXPORTS_DIR = process.env.SKILLS_EXPORTS_DIR || join(process.cwd(), "exports");
9
+ export const LOGS_DIR = process.env.SKILLS_LOGS_DIR || join(process.cwd(), "logs");
10
+ export const SKILLS_INPUT = process.env.SKILLS_INPUT || "";
11
+ export const LOG_FILE = join(LOGS_DIR, `${SESSION_ID}.log`);
12
+
13
+ [EXPORTS_DIR, LOGS_DIR].forEach((dir) => {
14
+ if (!existsSync(dir)) {
15
+ mkdirSync(dir, { recursive: true });
16
+ }
17
+ });
18
+
19
+ export function log(message: string, level: "info" | "error" | "warn" = "info") {
20
+ const timestamp = new Date().toISOString();
21
+ const logMessage = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
22
+ appendFileSync(LOG_FILE, logMessage);
23
+ if (level === "error") {
24
+ console.error(message);
25
+ }
26
+ }
27
+
28
+ export async function loadPdfLib(): Promise<PdfLibModule> {
29
+ try {
30
+ return await import("pdf-lib");
31
+ } catch {
32
+ throw new Error("Missing dependency 'pdf-lib'. Run bun install in this skill directory.");
33
+ }
34
+ }
@@ -0,0 +1,37 @@
1
+ export function escapeHtml(str: string | undefined | null): string {
2
+ if (str === undefined || str === null) return "";
3
+ return String(str)
4
+ .replace(/&/g, "&amp;")
5
+ .replace(/</g, "&lt;")
6
+ .replace(/>/g, "&gt;")
7
+ .replace(/"/g, "&quot;")
8
+ .replace(/'/g, "&#x27;");
9
+ }
10
+
11
+ export function sanitizeUrl(url: string | undefined | null): string {
12
+ if (!url) return "";
13
+ const trimmed = url.trim();
14
+ const lowerUrl = trimmed.toLowerCase();
15
+ if (lowerUrl.startsWith("javascript:") || lowerUrl.startsWith("data:") || lowerUrl.startsWith("vbscript:")) {
16
+ return "";
17
+ }
18
+ return escapeHtml(trimmed);
19
+ }
20
+
21
+ export function sanitizeTemplateData(data: Record<string, string>): Record<string, string> {
22
+ const sanitized: Record<string, string> = {};
23
+ for (const [key, value] of Object.entries(data)) {
24
+ const lowerKey = key.toLowerCase();
25
+ if (
26
+ lowerKey.includes("linkedin") ||
27
+ lowerKey.includes("website") ||
28
+ lowerKey.includes("url") ||
29
+ lowerKey.includes("href")
30
+ ) {
31
+ sanitized[key] = sanitizeUrl(value);
32
+ } else {
33
+ sanitized[key] = escapeHtml(value);
34
+ }
35
+ }
36
+ return sanitized;
37
+ }
@@ -0,0 +1,311 @@
1
+ // Invoice template
2
+ export const templates: Record<string, (data: Record<string, string>) => string> = {
3
+ invoice: (data) => `
4
+ <!DOCTYPE html>
5
+ <html>
6
+ <head>
7
+ <meta charset="UTF-8">
8
+ <style>
9
+ body { font-family: Arial, sans-serif; margin: 40px; color: #333; }
10
+ .header { display: flex; justify-content: space-between; margin-bottom: 40px; }
11
+ .company-info { font-size: 14px; }
12
+ .invoice-info { text-align: right; }
13
+ .invoice-title { font-size: 28px; color: #2c3e50; margin-bottom: 10px; }
14
+ .invoice-number { font-size: 14px; color: #7f8c8d; }
15
+ .addresses { display: flex; justify-content: space-between; margin-bottom: 40px; }
16
+ .address-block { width: 45%; }
17
+ .address-label { font-weight: bold; color: #2c3e50; margin-bottom: 10px; }
18
+ table { width: 100%; border-collapse: collapse; margin-bottom: 30px; }
19
+ th { background: #2c3e50; color: white; padding: 12px; text-align: left; }
20
+ td { padding: 12px; border-bottom: 1px solid #ddd; }
21
+ .totals { text-align: right; }
22
+ .totals table { width: 300px; margin-left: auto; }
23
+ .totals td { border: none; padding: 8px; }
24
+ .total-row { font-weight: bold; font-size: 18px; background: #f8f9fa; }
25
+ .notes { margin-top: 40px; padding: 20px; background: #f8f9fa; border-radius: 4px; }
26
+ .footer { margin-top: 40px; text-align: center; font-size: 12px; color: #7f8c8d; }
27
+ </style>
28
+ </head>
29
+ <body>
30
+ <div class="header">
31
+ <div class="company-info">
32
+ <h2>${data.companyName || 'Company Name'}</h2>
33
+ <p>${data.companyAddress || ''}<br>
34
+ ${data.companyCity || ''}, ${data.companyState || ''} ${data.companyZip || ''}<br>
35
+ ${data.companyPhone || ''}</p>
36
+ </div>
37
+ <div class="invoice-info">
38
+ <div class="invoice-title">INVOICE</div>
39
+ <div class="invoice-number">#${data.invoiceNumber || 'INV-001'}</div>
40
+ <p>Date: ${data.invoiceDate || new Date().toLocaleDateString()}<br>
41
+ Due: ${data.dueDate || ''}</p>
42
+ </div>
43
+ </div>
44
+
45
+ <div class="addresses">
46
+ <div class="address-block">
47
+ <div class="address-label">Bill To:</div>
48
+ <p>${data.clientName || 'Client Name'}<br>
49
+ ${data.clientAddress || ''}<br>
50
+ ${data.clientCity || ''}, ${data.clientState || ''} ${data.clientZip || ''}</p>
51
+ </div>
52
+ <div class="address-block">
53
+ <div class="address-label">Payment Details:</div>
54
+ <p>Terms: ${data.paymentTerms || 'Net 30'}<br>
55
+ Method: ${data.paymentMethod || 'Bank Transfer'}</p>
56
+ </div>
57
+ </div>
58
+
59
+ <table>
60
+ <thead>
61
+ <tr>
62
+ <th>Description</th>
63
+ <th>Qty</th>
64
+ <th>Rate</th>
65
+ <th>Amount</th>
66
+ </tr>
67
+ </thead>
68
+ <tbody>
69
+ ${data.items || '<tr><td>Service</td><td>1</td><td>$0</td><td>$0</td></tr>'}
70
+ </tbody>
71
+ </table>
72
+
73
+ <div class="totals">
74
+ <table>
75
+ <tr><td>Subtotal:</td><td>${data.subtotal || '$0'}</td></tr>
76
+ <tr><td>Tax (${data.taxRate || '0'}%):</td><td>${data.tax || '$0'}</td></tr>
77
+ <tr class="total-row"><td>Total:</td><td>${data.total || '$0'}</td></tr>
78
+ </table>
79
+ </div>
80
+
81
+ ${data.notes ? `<div class="notes"><strong>Notes:</strong><br>${data.notes}</div>` : ''}
82
+
83
+ <div class="footer">Thank you for your business!</div>
84
+ </body>
85
+ </html>`,
86
+
87
+ report: (data) => `
88
+ <!DOCTYPE html>
89
+ <html>
90
+ <head>
91
+ <meta charset="UTF-8">
92
+ <style>
93
+ body { font-family: Georgia, serif; margin: 40px; color: #333; line-height: 1.6; }
94
+ .title-page { text-align: center; margin-bottom: 60px; padding-top: 100px; }
95
+ .title { font-size: 36px; color: #2c3e50; margin-bottom: 10px; }
96
+ .subtitle { font-size: 20px; color: #7f8c8d; margin-bottom: 40px; }
97
+ .meta { font-size: 14px; color: #95a5a6; }
98
+ h2 { color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; margin-top: 40px; }
99
+ .executive-summary { background: #f8f9fa; padding: 20px; border-left: 4px solid #3498db; margin: 30px 0; }
100
+ .section { margin-bottom: 30px; }
101
+ .conclusion { background: #e8f4f8; padding: 20px; border-radius: 4px; margin-top: 40px; }
102
+ .footer { margin-top: 60px; text-align: center; font-size: 12px; color: #7f8c8d; border-top: 1px solid #ddd; padding-top: 20px; }
103
+ </style>
104
+ </head>
105
+ <body>
106
+ <div class="title-page">
107
+ <div class="title">${data.title || 'Report Title'}</div>
108
+ <div class="subtitle">${data.subtitle || ''}</div>
109
+ <div class="meta">
110
+ <p>Date: ${data.reportDate || new Date().toLocaleDateString()}</p>
111
+ <p>Author: ${data.author || ''}</p>
112
+ </div>
113
+ </div>
114
+
115
+ <div class="executive-summary">
116
+ <h2>Executive Summary</h2>
117
+ <p>${data.executiveSummary || ''}</p>
118
+ </div>
119
+
120
+ <div class="section">
121
+ <h2>${data.section1Title || 'Introduction'}</h2>
122
+ <p>${data.section1Content || ''}</p>
123
+ </div>
124
+
125
+ <div class="section">
126
+ <h2>${data.section2Title || 'Analysis'}</h2>
127
+ <p>${data.section2Content || ''}</p>
128
+ </div>
129
+
130
+ <div class="conclusion">
131
+ <h2>Conclusion</h2>
132
+ <p>${data.conclusion || ''}</p>
133
+ </div>
134
+
135
+ <div class="footer">
136
+ <p>${data.companyName || ''} | ${data.companyContact || ''}</p>
137
+ </div>
138
+ </body>
139
+ </html>`,
140
+
141
+ resume: (data) => `
142
+ <!DOCTYPE html>
143
+ <html>
144
+ <head>
145
+ <meta charset="UTF-8">
146
+ <style>
147
+ body { font-family: 'Helvetica Neue', Arial, sans-serif; margin: 40px; color: #333; line-height: 1.5; }
148
+ .header { text-align: center; margin-bottom: 30px; border-bottom: 2px solid #2c3e50; padding-bottom: 20px; }
149
+ .name { font-size: 32px; color: #2c3e50; margin-bottom: 10px; }
150
+ .contact { font-size: 14px; color: #7f8c8d; }
151
+ .contact a { color: #3498db; text-decoration: none; }
152
+ h2 { color: #2c3e50; font-size: 16px; text-transform: uppercase; letter-spacing: 1px; margin-top: 25px; border-bottom: 1px solid #ddd; padding-bottom: 5px; }
153
+ .summary { font-style: italic; color: #555; margin-bottom: 20px; }
154
+ .experience-item, .education-item { margin-bottom: 20px; }
155
+ .job-title { font-weight: bold; }
156
+ .company { color: #3498db; }
157
+ .date { font-size: 12px; color: #7f8c8d; float: right; }
158
+ .skills { display: flex; flex-wrap: wrap; gap: 8px; }
159
+ .skill-tag { background: #e8f4f8; color: #2c3e50; padding: 4px 12px; border-radius: 15px; font-size: 12px; }
160
+ </style>
161
+ </head>
162
+ <body>
163
+ <div class="header">
164
+ <div class="name">${data.name || 'Your Name'}</div>
165
+ <div class="contact">
166
+ ${data.email || ''} | ${data.phone || ''} | ${data.location || ''}<br>
167
+ ${data.linkedin ? `<a href="${data.linkedin}">${data.linkedin}</a>` : ''}
168
+ ${data.website ? `| <a href="${data.website}">${data.website}</a>` : ''}
169
+ </div>
170
+ </div>
171
+
172
+ <h2>Professional Summary</h2>
173
+ <p class="summary">${data.summary || ''}</p>
174
+
175
+ <h2>Experience</h2>
176
+ ${data.experience || '<div class="experience-item"><span class="job-title">Position</span> at <span class="company">Company</span></div>'}
177
+
178
+ <h2>Education</h2>
179
+ ${data.education || '<div class="education-item">Degree - Institution</div>'}
180
+
181
+ <h2>Skills</h2>
182
+ <div class="skills">
183
+ ${data.skills || '<span class="skill-tag">Skill</span>'}
184
+ </div>
185
+ </body>
186
+ </html>`,
187
+
188
+ letter: (data) => `
189
+ <!DOCTYPE html>
190
+ <html>
191
+ <head>
192
+ <meta charset="UTF-8">
193
+ <style>
194
+ body { font-family: 'Times New Roman', serif; margin: 60px; color: #333; line-height: 1.8; font-size: 14px; }
195
+ .sender-info { margin-bottom: 40px; }
196
+ .date { margin-bottom: 40px; }
197
+ .recipient-info { margin-bottom: 40px; }
198
+ .body { margin-bottom: 40px; text-align: justify; }
199
+ .closing { margin-top: 40px; }
200
+ .signature { margin-top: 60px; }
201
+ </style>
202
+ </head>
203
+ <body>
204
+ <div class="sender-info">
205
+ <strong>${data.senderName || ''}</strong><br>
206
+ ${data.senderAddress || ''}<br>
207
+ ${data.senderCity || ''}, ${data.senderState || ''} ${data.senderZip || ''}
208
+ </div>
209
+
210
+ <div class="date">${data.date || new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}</div>
211
+
212
+ <div class="recipient-info">
213
+ ${data.recipientName || ''}<br>
214
+ ${data.recipientTitle ? data.recipientTitle + '<br>' : ''}
215
+ ${data.recipientCompany ? data.recipientCompany + '<br>' : ''}
216
+ ${data.recipientAddress || ''}<br>
217
+ ${data.recipientCity || ''}, ${data.recipientState || ''} ${data.recipientZip || ''}
218
+ </div>
219
+
220
+ <div class="body">
221
+ <p>Dear ${data.recipientName || 'Sir/Madam'},</p>
222
+ <p>${data.body || ''}</p>
223
+ </div>
224
+
225
+ <div class="closing">
226
+ ${data.closing || 'Sincerely'},
227
+ </div>
228
+
229
+ <div class="signature">
230
+ ${data.senderName || ''}
231
+ </div>
232
+ </body>
233
+ </html>`,
234
+
235
+ contract: (data) => `
236
+ <!DOCTYPE html>
237
+ <html>
238
+ <head>
239
+ <meta charset="UTF-8">
240
+ <style>
241
+ body { font-family: 'Times New Roman', serif; margin: 50px; color: #333; line-height: 1.6; font-size: 12px; }
242
+ .title { text-align: center; font-size: 24px; font-weight: bold; margin-bottom: 30px; text-transform: uppercase; }
243
+ .date { text-align: center; margin-bottom: 30px; }
244
+ h2 { font-size: 14px; margin-top: 25px; }
245
+ .parties { margin-bottom: 30px; }
246
+ .section { margin-bottom: 20px; text-align: justify; }
247
+ .signatures { margin-top: 60px; display: flex; justify-content: space-between; }
248
+ .signature-block { width: 45%; }
249
+ .signature-line { border-top: 1px solid #333; margin-top: 60px; padding-top: 10px; }
250
+ </style>
251
+ </head>
252
+ <body>
253
+ <div class="title">${data.contractTitle || 'SERVICE AGREEMENT'}</div>
254
+ <div class="date">Effective Date: ${data.effectiveDate || new Date().toLocaleDateString()}</div>
255
+
256
+ <div class="parties">
257
+ <p>This Agreement is entered into by and between:</p>
258
+ <p><strong>${data.party1Name || 'Party 1'}</strong> ("${data.party1Label || 'Provider'}")<br>
259
+ Address: ${data.party1Address || ''}</p>
260
+ <p>AND</p>
261
+ <p><strong>${data.party2Name || 'Party 2'}</strong> ("${data.party2Label || 'Client'}")<br>
262
+ Address: ${data.party2Address || ''}</p>
263
+ </div>
264
+
265
+ <div class="section">
266
+ <h2>1. PURPOSE</h2>
267
+ <p>${data.purpose || ''}</p>
268
+ </div>
269
+
270
+ <div class="section">
271
+ <h2>2. TERM</h2>
272
+ <p>This Agreement shall be effective for a period of ${data.term || '12 months'} from the Effective Date.</p>
273
+ </div>
274
+
275
+ <div class="section">
276
+ <h2>3. OBLIGATIONS</h2>
277
+ <p>${data.obligations || ''}</p>
278
+ </div>
279
+
280
+ <div class="section">
281
+ <h2>4. COMPENSATION</h2>
282
+ <p>${data.compensation || ''}</p>
283
+ </div>
284
+
285
+ <div class="section">
286
+ <h2>5. TERMINATION</h2>
287
+ <p>${data.termination || ''}</p>
288
+ </div>
289
+
290
+ <div class="section">
291
+ <h2>6. GOVERNING LAW</h2>
292
+ <p>This Agreement shall be governed by the laws of ${data.governingLaw || 'the applicable jurisdiction'}.</p>
293
+ </div>
294
+
295
+ <div class="signatures">
296
+ <div class="signature-block">
297
+ <div class="signature-line">
298
+ ${data.party1Name || 'Party 1'}<br>
299
+ ${data.party1Label || 'Provider'}
300
+ </div>
301
+ </div>
302
+ <div class="signature-block">
303
+ <div class="signature-line">
304
+ ${data.party2Name || 'Party 2'}<br>
305
+ ${data.party2Label || 'Client'}
306
+ </div>
307
+ </div>
308
+ </div>
309
+ </body>
310
+ </html>`
311
+ };
@@ -0,0 +1,28 @@
1
+ export const PAGE_FORMATS: Record<string, { width: number; height: number }> = {
2
+ A4: { width: 210, height: 297 },
3
+ Letter: { width: 216, height: 279 },
4
+ Legal: { width: 216, height: 356 },
5
+ A3: { width: 297, height: 420 },
6
+ A5: { width: 148, height: 210 },
7
+ Tabloid: { width: 279, height: 432 },
8
+ };
9
+
10
+ export interface GenerateOptions {
11
+ content?: string;
12
+ contentType: "markdown" | "html" | "text";
13
+ format: string;
14
+ orientation: "portrait" | "landscape";
15
+ margin: { top: string; right: string; bottom: string; left: string };
16
+ header?: string;
17
+ footer?: string;
18
+ displayHeaderFooter: boolean;
19
+ printBackground: boolean;
20
+ css?: string;
21
+ title?: string;
22
+ author?: string;
23
+ subject?: string;
24
+ filename?: string;
25
+ template?: string;
26
+ data?: Record<string, string>;
27
+ url?: string;
28
+ }
@@ -28,29 +28,29 @@ Read and extract text from PDF files. Supports multiple PDFs at once, page-range
28
28
 
29
29
  ```bash
30
30
  # Read entire PDF
31
- pdf-read read document.pdf
31
+ skills run pdf-read -- read document.pdf
32
32
 
33
33
  # Read specific pages
34
- pdf-read read report.pdf --pages 1-5
34
+ skills run pdf-read -- read report.pdf --pages 1-5
35
35
 
36
36
  # Read multiple PDFs
37
- pdf-read read file1.pdf file2.pdf file3.pdf
37
+ skills run pdf-read -- read file1.pdf file2.pdf file3.pdf
38
38
 
39
39
  # Read in chunks of 10 pages
40
- pdf-read read large-book.pdf --chunk-size 10
40
+ skills run pdf-read -- read large-book.pdf --chunk-size 10
41
41
 
42
42
  # Get metadata only
43
- pdf-read info document.pdf
43
+ skills run pdf-read -- info document.pdf
44
44
 
45
45
  # Output as JSON with page structure
46
- pdf-read read document.pdf --format json --output result.json
46
+ skills run pdf-read -- read document.pdf --format json --output result.json
47
47
  ```
48
48
 
49
- ## Environment Variables
49
+ ## Runtime
50
50
 
51
- - None required (pure local processing)
51
+ This is a premium remote skill. Authenticate with `skills auth login` and run it through Skills MCP or `skills run`.
52
52
 
53
53
  ## Requirements
54
54
 
55
- - Bun runtime
56
- - pdf-parse (auto-installed)
55
+ - Skills CLI/MCP registration
56
+ - Hosted Skills runtime access
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: pdf-to-dataset
3
+ description: Extract tables, forms, invoices, and semi-structured PDF content into CSV and JSON datasets through the hosted Skills runtime.
4
+ ---
5
+
6
+ # PDF to Dataset
7
+
8
+ Convert PDF content into structured datasets and extraction reports. The implementation runs through the hosted Skills runtime, so agents get the instruction file and generated artifacts without receiving parser source, scripts, or model code.
9
+
10
+ ## What It Does
11
+
12
+ - Extracts table-like rows, key-value fields, invoice fields, and semi-structured records from PDFs.
13
+ - Produces `dataset.json`, `dataset.csv`, `schema.json`, `extraction-report.md`, and `manifest.json`.
14
+ - Includes confidence notes and source metadata for review.
15
+ - Supports schema hints for naming columns and expected fields.
16
+ - Stores generated outputs as run artifacts for later download.
17
+
18
+ ## Usage
19
+
20
+ ```bash
21
+ skills run pdf-to-dataset -- --input ./invoice.pdf --schema "invoice_number,date,total,vendor"
22
+ ```
23
+
24
+ ```bash
25
+ skills run pdf-to-dataset -- --input ./reports --mode tables --output ./exports/pdf-data
26
+ ```
27
+
28
+ ## Options
29
+
30
+ | Option | Description | Default |
31
+ |--------|-------------|---------|
32
+ | `--input <path-or-url>` | PDF file, folder, or URL | required |
33
+ | `--schema <fields>` | Comma-separated field hints | inferred |
34
+ | `--mode <mode>` | `tables`, `forms`, `invoice`, or `auto` | auto |
35
+ | `--output <dir>` | Output directory | current run export directory |
36
+ | `--pages <ranges>` | Page ranges like `1-3,8` | all pages |
37
+
38
+ ## Requirements
39
+
40
+ - Authenticate with `skills auth login`.
41
+ - Keep the Skills MCP server registered with your agent:
42
+
43
+ ```bash
44
+ skills mcp --register all
45
+ ```
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "pdf-to-dataset",
3
+ "version": "0.1.0",
4
+ "description": "Extract PDF tables and forms into CSV and JSON datasets through the hosted Skills runtime",
5
+ "type": "module",
6
+ "bin": {
7
+ "pdf-to-dataset": "src/index.ts"
8
+ },
9
+ "dependencies": {}
10
+ }
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: pdf-to-markdown
3
+ description: Convert PDFs into clean markdown through the hosted Skills runtime.
4
+ ---
5
+
6
+ # PDF to Markdown
7
+
8
+ Convert a PDF into clean, structured markdown using the hosted Skills runtime. The implementation runs remotely so local agent installs only need this usage contract; no parser source, scripts, or hosted runtime code is copied to the user's machine.
9
+
10
+ ## What It Does
11
+
12
+ - Extracts text, headings, lists, and tables from PDFs.
13
+ - Preserves useful page boundaries and source references.
14
+ - Cleans noisy extraction output into readable markdown.
15
+ - Supports selected page ranges for large documents.
16
+ - Uses the platform runtime for paid execution and billing.
17
+
18
+ ## Runtime
19
+
20
+ This is a premium remote skill. The hosted runtime handles extraction and cleanup after deterministic PDF processing. Agents should run it through Skills MCP or the CLI, not through copied local source.
21
+
22
+ ## Usage
23
+
24
+ ```bash
25
+ skills run pdf-to-markdown --input ./report.pdf --output ./report.md
26
+ ```
27
+
28
+ ```bash
29
+ skills run pdf-to-markdown --input ./contract.pdf --pages 1-5,12 --preserve-pages
30
+ ```
31
+
32
+ ## Options
33
+
34
+ | Option | Description | Default |
35
+ |--------|-------------|---------|
36
+ | `--input <path-or-url>` | PDF file path or URL | required |
37
+ | `--pages <ranges>` | Page ranges like `1-5,8,10-12` | all pages |
38
+ | `--output <path>` | Save markdown to a file | stdout |
39
+ | `--preserve-pages` | Include page boundary comments | false |
40
+ | `--table-mode <mode>` | `markdown` or `html` table output | markdown |
41
+
42
+ ## Requirements
43
+
44
+ - Authenticate with `skills auth login`.
45
+ - Keep the Skills MCP server registered with your agent:
46
+
47
+ ```bash
48
+ skills setup agents
49
+ ```
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "pdf-to-markdown",
3
+ "version": "0.1.0",
4
+ "description": "Convert PDFs into clean markdown through the hosted Skills runtime",
5
+ "type": "module",
6
+ "bin": {
7
+ "pdf-to-markdown": "src/index.ts"
8
+ },
9
+ "dependencies": {}
10
+ }