@hasna/skills 0.1.27 → 0.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (671) hide show
  1. package/LICENSE +1 -10
  2. package/README.md +141 -39
  3. package/bin/index.js +30121 -27576
  4. package/bin/mcp.js +22073 -18556
  5. package/dist/cli/cli.test-utils.d.ts +15 -0
  6. package/dist/cli/commands/auth.d.ts +2 -0
  7. package/dist/cli/commands/install.d.ts +1 -1
  8. package/dist/cli/commands/runtime-mcp.d.ts +4 -0
  9. package/dist/index.d.ts +9 -4
  10. package/dist/index.js +11606 -598
  11. package/dist/lib/auth-store.d.ts +13 -0
  12. package/dist/lib/installer.d.ts +58 -55
  13. package/dist/lib/mcp-contracts.d.ts +86 -0
  14. package/dist/lib/project-state.d.ts +43 -0
  15. package/dist/lib/registry-data/business-marketing.d.ts +2 -0
  16. package/dist/lib/registry-data/communication.d.ts +2 -0
  17. package/dist/lib/registry-data/content-generation.d.ts +2 -0
  18. package/dist/lib/registry-data/data-analysis.d.ts +2 -0
  19. package/dist/lib/registry-data/design-branding.d.ts +2 -0
  20. package/dist/lib/registry-data/development-tools.d.ts +2 -0
  21. package/dist/lib/registry-data/education-learning.d.ts +2 -0
  22. package/dist/lib/registry-data/event-management.d.ts +2 -0
  23. package/dist/lib/registry-data/finance-compliance.d.ts +2 -0
  24. package/dist/lib/registry-data/health-wellness.d.ts +2 -0
  25. package/dist/lib/registry-data/index.d.ts +2 -0
  26. package/dist/lib/registry-data/media-processing.d.ts +2 -0
  27. package/dist/lib/registry-data/productivity-organization.d.ts +2 -0
  28. package/dist/lib/registry-data/project-management.d.ts +2 -0
  29. package/dist/lib/registry-data/research-writing.d.ts +2 -0
  30. package/dist/lib/registry-data/science-academic.d.ts +2 -0
  31. package/dist/lib/registry-data/travel-lifestyle.d.ts +2 -0
  32. package/dist/lib/registry-data/web-browser.d.ts +2 -0
  33. package/dist/lib/registry-types.d.ts +27 -0
  34. package/dist/lib/registry.d.ts +6 -18
  35. package/dist/lib/remote-registry.d.ts +3 -0
  36. package/dist/lib/run-state.d.ts +60 -0
  37. package/dist/lib/skill-aliases.d.ts +17 -0
  38. package/dist/lib/skillinfo.d.ts +5 -1
  39. package/dist/mcp/discovery-tools.d.ts +2 -0
  40. package/dist/mcp/helpers.d.ts +26 -0
  41. package/dist/mcp/http.d.ts +11 -0
  42. package/dist/mcp/index.d.ts +3 -2
  43. package/dist/mcp/operation-tools.d.ts +2 -0
  44. package/dist/mcp/resource-meta-tools.d.ts +2 -0
  45. package/dist/mcp/schedule-tools.d.ts +2 -0
  46. package/dist/mcp/server.d.ts +4 -0
  47. package/dist/types/api.d.ts +7 -4
  48. package/package.json +22 -11
  49. package/skills/_common/http-client.ts +1 -1
  50. package/skills/_common/index.ts +2 -3
  51. package/skills/_common/install.sh +5 -110
  52. package/skills/_common/installer.ts +31 -282
  53. package/skills/_common/skill-install.ts +14 -181
  54. package/skills/ad-creative-pack/SKILL.md +45 -0
  55. package/skills/ad-creative-pack/package.json +14 -0
  56. package/skills/advanced-math/package.json +3 -1
  57. package/skills/advanced-math/src/calculators.ts +118 -0
  58. package/skills/advanced-math/src/cli.ts +130 -0
  59. package/skills/advanced-math/src/conversion.ts +90 -0
  60. package/skills/advanced-math/src/finance.ts +75 -0
  61. package/skills/advanced-math/src/formatting.ts +95 -0
  62. package/skills/advanced-math/src/index.ts +24 -702
  63. package/skills/advanced-math/src/runtime.ts +49 -0
  64. package/skills/advanced-math/src/symbolic.ts +110 -0
  65. package/skills/advanced-math/src/types.ts +36 -0
  66. package/skills/analyze-data/SKILL.md +2 -2
  67. package/skills/analyze-data/src/analysis.ts +401 -0
  68. package/skills/analyze-data/src/cli.ts +66 -0
  69. package/skills/analyze-data/src/formatters.ts +235 -0
  70. package/skills/analyze-data/src/index.ts +6 -1027
  71. package/skills/analyze-data/src/logger.ts +36 -0
  72. package/skills/analyze-data/src/parsers.ts +57 -0
  73. package/skills/analyze-data/src/stats.ts +151 -0
  74. package/skills/analyze-data/src/types.ts +85 -0
  75. package/skills/api-docs-portal/SKILL.md +46 -0
  76. package/skills/api-docs-portal/package.json +9 -0
  77. package/skills/api-test-suite/src/index.ts +13 -0
  78. package/skills/apidocs/package.json +1 -1
  79. package/skills/apidocs/src/index.ts +3 -0
  80. package/skills/audio/package.json +2 -3
  81. package/skills/audio-cleanup-lab/SKILL.md +2 -2
  82. package/skills/audio-extract/CLAUDE.md +1 -1
  83. package/skills/audio-transcript-pack/SKILL.md +43 -0
  84. package/skills/audio-transcript-pack/package.json +10 -0
  85. package/skills/blog-article/CLAUDE.md +12 -0
  86. package/skills/blog-article/SKILL.md +45 -0
  87. package/skills/{create-blog-article → blog-article}/package.json +3 -3
  88. package/skills/brand-kit/SKILL.md +45 -0
  89. package/skills/brand-kit/package.json +14 -0
  90. package/skills/brand-photo-shoot/SKILL.md +28 -0
  91. package/skills/brand-photo-shoot/package.json +10 -0
  92. package/skills/brand-style-guide/SKILL.md +2 -2
  93. package/skills/brand-style-guide/src/index.ts +0 -0
  94. package/skills/budget-variance-analyzer/SKILL.md +2 -2
  95. package/skills/businessactivity/package.json +1 -1
  96. package/skills/businessactivity/src/index.ts +3 -0
  97. package/skills/calendar-events/src/ai-parser.ts +103 -0
  98. package/skills/calendar-events/src/api.ts +157 -0
  99. package/skills/calendar-events/src/auth.ts +22 -0
  100. package/skills/calendar-events/src/config.ts +6 -0
  101. package/skills/calendar-events/src/format.ts +96 -0
  102. package/skills/calendar-events/src/help.ts +54 -0
  103. package/skills/calendar-events/src/index.ts +21 -524
  104. package/skills/calendar-events/src/logger.ts +34 -0
  105. package/skills/calendar-events/src/types.ts +67 -0
  106. package/skills/compress-video/SKILL.md +2 -2
  107. package/skills/consolelog/exports/products-2025-12-14T13-50-53-041Z.csv +16 -0
  108. package/skills/consolelog/exports/products-2025-12-14T13-50-53-041Z.json +227 -0
  109. package/skills/consolelog/package.json +1 -1
  110. package/skills/consolelog/src/index.ts +3 -0
  111. package/skills/contract-review-report/SKILL.md +43 -0
  112. package/skills/contract-review-report/package.json +10 -0
  113. package/skills/convert/SKILL.md +2 -3
  114. package/skills/customer-feedback-report/SKILL.md +44 -0
  115. package/skills/customer-feedback-report/package.json +10 -0
  116. package/skills/dashboard-builder/package.json +3 -1
  117. package/skills/database-explorer/package.json +3 -1
  118. package/skills/deepresearch/README.md +4 -13
  119. package/skills/deploy/src/http-client.ts +1 -1
  120. package/skills/diff-viewer/package.json +4 -1
  121. package/skills/doc-generate/package.json +0 -1
  122. package/skills/doc-generate/src/ai.ts +50 -0
  123. package/skills/doc-generate/src/cli.ts +203 -0
  124. package/skills/doc-generate/src/dependencies.ts +44 -0
  125. package/skills/doc-generate/src/document-builder.ts +299 -0
  126. package/skills/doc-generate/src/index.ts +40 -764
  127. package/skills/doc-generate/src/markdown-parser.ts +125 -0
  128. package/skills/doc-generate/src/types.ts +68 -0
  129. package/skills/domainpurchase/SKILL.md +1 -1
  130. package/skills/domainpurchase/package.json +1 -1
  131. package/skills/domainpurchase/src/index.ts +3 -0
  132. package/skills/domainsearch/SKILL.md +1 -1
  133. package/skills/domainsearch/package.json +1 -1
  134. package/skills/domainsearch/src/index.ts +3 -0
  135. package/skills/email-sequence/SKILL.md +44 -0
  136. package/skills/email-sequence/package.json +14 -0
  137. package/skills/excel/CLAUDE.md +2 -2
  138. package/skills/experiment-power-calculator/package.json +3 -1
  139. package/skills/extract-invoice/src/cli.ts +97 -0
  140. package/skills/extract-invoice/src/extractor.ts +170 -0
  141. package/skills/extract-invoice/src/file-utils.ts +46 -0
  142. package/skills/extract-invoice/src/formatters.ts +144 -0
  143. package/skills/extract-invoice/src/index.ts +44 -629
  144. package/skills/extract-invoice/src/runtime.ts +46 -0
  145. package/skills/extract-invoice/src/types.ts +88 -0
  146. package/skills/folder-tree/package.json +3 -1
  147. package/skills/form-filler/package.json +3 -1
  148. package/skills/generate-api-client/package.json +3 -1
  149. package/skills/generate-api-client/src/generator.ts +47 -0
  150. package/skills/generate-api-client/src/index.ts +3 -777
  151. package/skills/generate-api-client/src/logger.ts +34 -0
  152. package/skills/generate-api-client/src/python-generator.ts +245 -0
  153. package/skills/generate-api-client/src/spec-loader.ts +48 -0
  154. package/skills/generate-api-client/src/type-mappers.ts +79 -0
  155. package/skills/generate-api-client/src/types.ts +76 -0
  156. package/skills/generate-api-client/src/typescript-generator.ts +247 -0
  157. package/skills/generate-book-cover/package.json +3 -1
  158. package/skills/generate-dockerfile/src/cli.ts +78 -0
  159. package/skills/generate-dockerfile/src/dockerfile-templates.ts +392 -0
  160. package/skills/generate-dockerfile/src/index.ts +12 -790
  161. package/skills/generate-dockerfile/src/logger.ts +30 -0
  162. package/skills/generate-dockerfile/src/project-detection.ts +68 -0
  163. package/skills/generate-dockerfile/src/support-files.ts +171 -0
  164. package/skills/generate-dockerfile/src/types.ts +29 -0
  165. package/skills/generate-documentation/src/ai.ts +131 -0
  166. package/skills/generate-documentation/src/cli.ts +71 -0
  167. package/skills/generate-documentation/src/code-parser.ts +300 -0
  168. package/skills/generate-documentation/src/file-processing.ts +182 -0
  169. package/skills/generate-documentation/src/index.ts +13 -753
  170. package/skills/generate-documentation/src/runtime.ts +35 -0
  171. package/skills/generate-documentation/src/types.ts +30 -0
  172. package/skills/generate-env/package.json +3 -1
  173. package/skills/generate-env/src/cli.ts +85 -0
  174. package/skills/generate-env/src/detection.ts +161 -0
  175. package/skills/generate-env/src/env-data.ts +66 -0
  176. package/skills/generate-env/src/generators.ts +240 -0
  177. package/skills/generate-env/src/index.ts +76 -676
  178. package/skills/generate-env/src/runtime.ts +30 -0
  179. package/skills/generate-env/src/types.ts +32 -0
  180. package/skills/generate-favicon/package.json +3 -1
  181. package/skills/generate-mock-data/package.json +3 -1
  182. package/skills/generate-mock-data/src/ai.ts +102 -0
  183. package/skills/generate-mock-data/src/formatters.ts +84 -0
  184. package/skills/generate-mock-data/src/generator.ts +377 -0
  185. package/skills/generate-mock-data/src/index.ts +15 -716
  186. package/skills/generate-mock-data/src/logger.ts +37 -0
  187. package/skills/generate-mock-data/src/presets.ts +110 -0
  188. package/skills/generate-mock-data/src/types.ts +21 -0
  189. package/skills/generate-pr-description/src/ai.ts +144 -0
  190. package/skills/generate-pr-description/src/cli.ts +80 -0
  191. package/skills/generate-pr-description/src/clipboard.ts +30 -0
  192. package/skills/generate-pr-description/src/formatters.ts +231 -0
  193. package/skills/generate-pr-description/src/git.ts +153 -0
  194. package/skills/generate-pr-description/src/index.ts +21 -714
  195. package/skills/generate-pr-description/src/types.ts +49 -0
  196. package/skills/generate-presentation/src/ai-clients.ts +61 -0
  197. package/skills/generate-presentation/src/cli.ts +126 -0
  198. package/skills/generate-presentation/src/index.ts +3 -751
  199. package/skills/generate-presentation/src/logger.ts +67 -0
  200. package/skills/generate-presentation/src/presentation-generator.ts +425 -0
  201. package/skills/generate-presentation/src/runtime.ts +6 -0
  202. package/skills/generate-presentation/src/security.ts +12 -0
  203. package/skills/generate-presentation/src/types.ts +28 -0
  204. package/skills/generate-qrcode/package.json +4 -1
  205. package/skills/generate-regex/package.json +3 -1
  206. package/skills/generate-resume/src/cli.ts +157 -0
  207. package/skills/generate-resume/src/index.ts +13 -917
  208. package/skills/generate-resume/src/parsers.ts +95 -0
  209. package/skills/generate-resume/src/renderers.ts +538 -0
  210. package/skills/generate-resume/src/security.ts +39 -0
  211. package/skills/generate-resume/src/types.ts +86 -0
  212. package/skills/generate-social-posts/src/ai.ts +88 -0
  213. package/skills/generate-social-posts/src/cli.ts +118 -0
  214. package/skills/generate-social-posts/src/exporters.ts +126 -0
  215. package/skills/generate-social-posts/src/generator.ts +130 -0
  216. package/skills/generate-social-posts/src/index.ts +19 -709
  217. package/skills/generate-social-posts/src/platforms.ts +39 -0
  218. package/skills/generate-social-posts/src/runtime.ts +34 -0
  219. package/skills/generate-social-posts/src/source.ts +116 -0
  220. package/skills/generate-social-posts/src/types.ts +58 -0
  221. package/skills/gif-maker/package.json +4 -1
  222. package/skills/github-manager/package.json +3 -1
  223. package/skills/gmail/CLAUDE.md +1 -1
  224. package/skills/highlight-reel-generator/src/index.ts +19 -0
  225. package/skills/hook/src/commands/create.ts +20 -845
  226. package/skills/hook/src/templates/root.ts +196 -0
  227. package/skills/hook/src/templates/source.ts +647 -0
  228. package/skills/http-server/package.json +3 -1
  229. package/skills/icon-pack/README.md +28 -0
  230. package/skills/icon-pack/SKILL.md +23 -0
  231. package/skills/icon-pack/package.json +29 -0
  232. package/skills/{audio → icon-pack}/tsconfig.json +10 -12
  233. package/skills/image/package.json +1 -2
  234. package/skills/implementation-agent/package.json +3 -1
  235. package/skills/implementation-agent/src/ai-generation.ts +225 -0
  236. package/skills/implementation-agent/src/index.ts +3 -960
  237. package/skills/implementation-agent/src/minimist.d.ts +15 -0
  238. package/skills/implementation-agent/src/templates.ts +686 -0
  239. package/skills/implementation-agent/src/types.ts +53 -0
  240. package/skills/implementation-plan/package.json +3 -1
  241. package/skills/implementation-todo/package.json +3 -1
  242. package/skills/invoice/package.json +1 -1
  243. package/skills/invoice/src/index.ts +3 -0
  244. package/skills/invoice-reconciliation/SKILL.md +42 -0
  245. package/skills/invoice-reconciliation/package.json +10 -0
  246. package/skills/landing-page-pack/SKILL.md +47 -0
  247. package/skills/landing-page-pack/package.json +14 -0
  248. package/skills/latex-table-generator/package.json +3 -1
  249. package/skills/logo-design/SKILL.md +25 -44
  250. package/skills/logo-design/package.json +3 -15
  251. package/skills/lorem-generator/package.json +3 -1
  252. package/skills/lorem-generator/src/index.ts +13 -0
  253. package/skills/managehook/package.json +1 -1
  254. package/skills/managehook/src/index.ts +3 -0
  255. package/skills/managemcp/package.json +1 -1
  256. package/skills/managemcp/src/index.ts +3 -0
  257. package/skills/manageskill/package.json +1 -1
  258. package/skills/manageskill/src/index.ts +3 -0
  259. package/skills/markdown-validator/package.json +3 -1
  260. package/skills/markdown-validator/src/index.ts +1 -4
  261. package/skills/market-research-report/SKILL.md +41 -0
  262. package/skills/market-research-report/package.json +10 -0
  263. package/skills/mcp-builder/package.json +4 -1
  264. package/skills/mcp-builder/src/ai-descriptions.ts +37 -0
  265. package/skills/mcp-builder/src/generators.ts +513 -0
  266. package/skills/mcp-builder/src/index.ts +7 -908
  267. package/skills/mcp-builder/src/minimist.d.ts +15 -0
  268. package/skills/mcp-builder/src/naming.ts +12 -0
  269. package/skills/mcp-builder/src/options.ts +170 -0
  270. package/skills/mcp-builder/src/templates.ts +149 -0
  271. package/skills/mcp-builder/src/types.ts +42 -0
  272. package/skills/meeting-pack/SKILL.md +43 -0
  273. package/skills/meeting-pack/package.json +10 -0
  274. package/skills/merge-pdfs/package.json +5 -1
  275. package/skills/migration-plan-pack/SKILL.md +45 -0
  276. package/skills/migration-plan-pack/package.json +10 -0
  277. package/skills/music/package.json +2 -3
  278. package/skills/music-album/SKILL.md +37 -0
  279. package/skills/music-album/package.json +10 -0
  280. package/skills/notion-manager/package.json +3 -1
  281. package/skills/npmpublish/CLAUDE.md +5 -8
  282. package/skills/npmpublish/README.md +5 -26
  283. package/skills/npmpublish/src/index.ts +9 -147
  284. package/skills/one-page-website/SKILL.md +46 -0
  285. package/skills/one-page-website/package.json +10 -0
  286. package/skills/one-page-website/tsconfig.json +8 -0
  287. package/skills/pdf-generate/src/cli.ts +162 -0
  288. package/skills/pdf-generate/src/html.ts +84 -0
  289. package/skills/pdf-generate/src/index.ts +11 -800
  290. package/skills/pdf-generate/src/markdown.ts +27 -0
  291. package/skills/pdf-generate/src/pdf-writer.ts +78 -0
  292. package/skills/pdf-generate/src/runtime.ts +34 -0
  293. package/skills/pdf-generate/src/security.ts +37 -0
  294. package/skills/pdf-generate/src/templates.ts +311 -0
  295. package/skills/pdf-generate/src/types.ts +28 -0
  296. package/skills/pdf-read/SKILL.md +10 -10
  297. package/skills/pdf-to-dataset/SKILL.md +45 -0
  298. package/skills/pdf-to-dataset/package.json +10 -0
  299. package/skills/pdf-to-markdown/SKILL.md +49 -0
  300. package/skills/pdf-to-markdown/package.json +10 -0
  301. package/skills/pdf-to-markdown/tsconfig.json +10 -0
  302. package/skills/performance-audit-report/SKILL.md +42 -0
  303. package/skills/performance-audit-report/package.json +10 -0
  304. package/skills/persona-based-adwriter/src/index.ts +19 -0
  305. package/skills/photo-album/SKILL.md +29 -0
  306. package/skills/photo-album/package.json +9 -0
  307. package/skills/photo-album/tsconfig.json +4 -0
  308. package/skills/pitch-deck/SKILL.md +43 -0
  309. package/skills/pitch-deck/package.json +9 -0
  310. package/skills/playlist-maker/SKILL.md +33 -0
  311. package/skills/playlist-maker/package.json +9 -0
  312. package/skills/playlist-maker/tsconfig.json +4 -0
  313. package/skills/product-mockup/SKILL.md +45 -0
  314. package/skills/product-mockup/package.json +3 -20
  315. package/skills/product-mockup/tsconfig.json +3 -5
  316. package/skills/project-retro-companion/src/index.ts +19 -0
  317. package/skills/proposal-pack/SKILL.md +45 -0
  318. package/skills/proposal-pack/package.json +10 -0
  319. package/skills/read-pdf/SKILL.md +5 -4
  320. package/skills/repo-onboarding-report/SKILL.md +42 -0
  321. package/skills/repo-onboarding-report/package.json +10 -0
  322. package/skills/sales-call-recapper/src/index.ts +20 -0
  323. package/skills/salescopy/package.json +1 -1
  324. package/skills/salescopy/src/index.ts +3 -0
  325. package/skills/scaffold-project/src/ai-detect.ts +136 -0
  326. package/skills/scaffold-project/src/file-generators.ts +292 -0
  327. package/skills/scaffold-project/src/index.ts +8 -991
  328. package/skills/scaffold-project/src/project-config.ts +338 -0
  329. package/skills/scaffold-project/src/templates.ts +173 -0
  330. package/skills/scaffold-project/src/types.ts +58 -0
  331. package/skills/scientific-figure-check/package.json +3 -1
  332. package/skills/sdk-generator/SKILL.md +45 -0
  333. package/skills/sdk-generator/package.json +10 -0
  334. package/skills/sdk-generator/tsconfig.json +8 -0
  335. package/skills/security-audit/src/index.ts +25 -6
  336. package/skills/security-audit-report/SKILL.md +40 -0
  337. package/skills/security-audit-report/package.json +10 -0
  338. package/skills/seo-content-pack/SKILL.md +44 -0
  339. package/skills/seo-content-pack/package.json +9 -0
  340. package/skills/short-video-pack/SKILL.md +30 -0
  341. package/skills/short-video-pack/package.json +10 -0
  342. package/skills/skill-academic-journal-matcher/bin/cli.ts +34 -0
  343. package/skills/skill-action-item-router/bin/cli.ts +34 -0
  344. package/skills/skill-ad-creative-generator/bin/cli.ts +34 -0
  345. package/skills/skill-advanced-math/bin/cli.ts +34 -0
  346. package/skills/skill-analyze-data/bin/cli.ts +19 -0
  347. package/skills/skill-anomaly-investigator/bin/cli.ts +34 -0
  348. package/skills/skill-api-test-suite/bin/cli.ts +34 -0
  349. package/skills/skill-apidocs/bin/cli.ts +87 -0
  350. package/skills/skill-audio-cleanup-lab/bin/cli.ts +6 -0
  351. package/skills/skill-audiobook-chapter-proofer/bin/cli.ts +34 -0
  352. package/skills/skill-banner-ad-suite/bin/cli.ts +34 -0
  353. package/skills/skill-benchmark-finder/bin/cli.ts +34 -0
  354. package/skills/skill-bio-sequence-tool/bin/cli.ts +34 -0
  355. package/skills/skill-blog-topic-cluster/bin/cli.ts +34 -0
  356. package/skills/skill-brand-style-guide/bin/cli.ts +19 -0
  357. package/skills/skill-brand-voice-audit/bin/cli.ts +34 -0
  358. package/skills/skill-budget-variance-analyzer/bin/cli.ts +6 -0
  359. package/skills/skill-businessactivity/bin/cli.ts +28 -0
  360. package/skills/skill-calendar-events/bin/cli.ts +34 -0
  361. package/skills/skill-campaign-metric-brief/bin/cli.ts +34 -0
  362. package/skills/skill-campaign-moodboard/bin/cli.ts +34 -0
  363. package/skills/skill-caption-style-stylist/bin/cli.ts +34 -0
  364. package/skills/skill-chemistry-calculator/bin/cli.ts +34 -0
  365. package/skills/skill-churn-risk-notifier/bin/cli.ts +34 -0
  366. package/skills/skill-citation-formatter/bin/cli.ts +34 -0
  367. package/skills/skill-classroom-newsletter-kit/bin/cli.ts +34 -0
  368. package/skills/skill-color-palette-harmonizer/bin/cli.ts +34 -0
  369. package/skills/skill-competitor-ad-analyzer/bin/cli.ts +34 -0
  370. package/skills/skill-compliance-copy-check/bin/cli.ts +34 -0
  371. package/skills/skill-compliance-report-pack/bin/cli.ts +34 -0
  372. package/skills/skill-compress-video/bin/cli.ts +19 -0
  373. package/skills/skill-consolelog/bin/cli.ts +884 -0
  374. package/skills/skill-contract-plainlanguage/bin/cli.ts +34 -0
  375. package/skills/skill-copytone-translator/bin/cli.ts +34 -0
  376. package/skills/skill-create-blog-article/bin/cli.ts +34 -0
  377. package/skills/skill-create-ebook/bin/cli.ts +34 -0
  378. package/skills/skill-crm-note-enhancer/bin/cli.ts +34 -0
  379. package/skills/skill-customer-journey-mapper/bin/cli.ts +34 -0
  380. package/skills/skill-dashboard-builder/bin/cli.ts +34 -0
  381. package/skills/skill-dashboard-narrator/bin/cli.ts +34 -0
  382. package/skills/skill-data-anonymizer/bin/cli.ts +34 -0
  383. package/skills/skill-database-explorer/bin/cli.ts +34 -0
  384. package/skills/skill-dataset-health-check/bin/cli.ts +34 -0
  385. package/skills/skill-decision-journal/bin/cli.ts +34 -0
  386. package/skills/skill-delegation-brief-writer/bin/cli.ts +34 -0
  387. package/skills/skill-destination-briefing/bin/cli.ts +34 -0
  388. package/skills/skill-diff-viewer/bin/cli.ts +34 -0
  389. package/skills/skill-domainpurchase/bin/cli.ts +683 -0
  390. package/skills/skill-domainsearch/bin/cli.ts +410 -0
  391. package/skills/skill-educational-resource-finder/bin/cli.ts +34 -0
  392. package/skills/skill-email-campaign/bin/cli.ts +34 -0
  393. package/skills/skill-exam-readiness-check/bin/cli.ts +34 -0
  394. package/skills/skill-experiment-power-calculator/bin/cli.ts +34 -0
  395. package/skills/skill-extract-audio/bin/cli.ts +19 -0
  396. package/skills/skill-extract-frames/bin/cli.ts +34 -0
  397. package/skills/skill-extract-invoice/bin/cli.ts +34 -0
  398. package/skills/skill-family-activity-curator/bin/cli.ts +34 -0
  399. package/skills/skill-faq-packager/bin/cli.ts +34 -0
  400. package/skills/skill-feedback-survey-designer/bin/cli.ts +34 -0
  401. package/skills/skill-field-trip-planner/bin/cli.ts +34 -0
  402. package/skills/skill-file-organizer/bin/cli.ts +34 -0
  403. package/skills/skill-folder-tree/bin/cli.ts +34 -0
  404. package/skills/skill-forecast-scenario-lab/bin/cli.ts +34 -0
  405. package/skills/skill-form-filler/bin/cli.ts +34 -0
  406. package/skills/skill-generate-api-client/bin/cli.ts +34 -0
  407. package/skills/skill-generate-book-cover/bin/cli.ts +34 -0
  408. package/skills/skill-generate-chart/bin/cli.ts +34 -0
  409. package/skills/skill-generate-diagram/bin/cli.ts +34 -0
  410. package/skills/skill-generate-dockerfile/bin/cli.ts +34 -0
  411. package/skills/skill-generate-documentation/bin/cli.ts +34 -0
  412. package/skills/skill-generate-docx/bin/cli.ts +6 -0
  413. package/skills/skill-generate-env/bin/cli.ts +34 -0
  414. package/skills/skill-generate-excel/bin/cli.ts +34 -0
  415. package/skills/skill-generate-favicon/bin/cli.ts +34 -0
  416. package/skills/skill-generate-mock-data/bin/cli.ts +34 -0
  417. package/skills/skill-generate-pdf/bin/cli.ts +6 -0
  418. package/skills/skill-generate-pr-description/bin/cli.ts +34 -0
  419. package/skills/skill-generate-presentation/bin/cli.ts +34 -0
  420. package/skills/skill-generate-qrcode/bin/cli.ts +34 -0
  421. package/skills/skill-generate-regex/bin/cli.ts +34 -0
  422. package/skills/skill-generate-resume/bin/cli.ts +34 -0
  423. package/skills/skill-generate-sitemap/bin/cli.ts +34 -0
  424. package/skills/skill-generate-social-posts/bin/cli.ts +34 -0
  425. package/skills/skill-generate-sql/bin/cli.ts +34 -0
  426. package/skills/skill-gif-maker/bin/cli.ts +34 -0
  427. package/skills/skill-github-manager/bin/cli.ts +34 -0
  428. package/skills/skill-gmail/bin/cli.ts +34 -0
  429. package/skills/skill-goal-quarterly-roadmap/bin/cli.ts +34 -0
  430. package/skills/skill-grant-application-drafter/bin/cli.ts +34 -0
  431. package/skills/skill-grocery-basket-optimizer/bin/cli.ts +34 -0
  432. package/skills/skill-guest-communication-suite/bin/cli.ts +34 -0
  433. package/skills/skill-habit-reflection-digest/bin/cli.ts +34 -0
  434. package/skills/skill-highlight-reel-generator/bin/cli.ts +34 -0
  435. package/skills/skill-homework-feedback-coach/bin/cli.ts +34 -0
  436. package/skills/skill-household-maintenance-mgr/bin/cli.ts +34 -0
  437. package/skills/skill-http-server/bin/cli.ts +34 -0
  438. package/skills/skill-implementation-agent/bin/cli.ts +34 -0
  439. package/skills/skill-implementation-plan/bin/cli.ts +34 -0
  440. package/skills/skill-implementation-todo/bin/cli.ts +34 -0
  441. package/skills/skill-inbox-priority-planner/bin/cli.ts +34 -0
  442. package/skills/skill-invoice/bin/cli.ts +20 -0
  443. package/skills/skill-invoice-dispute-helper/bin/cli.ts +34 -0
  444. package/skills/skill-itinerary-architect/bin/cli.ts +34 -0
  445. package/skills/skill-jingle-composer/bin/cli.ts +34 -0
  446. package/skills/skill-kpi-digest-generator/bin/cli.ts +34 -0
  447. package/skills/skill-lab-notebook-formatter/bin/cli.ts +34 -0
  448. package/skills/skill-landing-page-copy/bin/cli.ts +34 -0
  449. package/skills/skill-latex-table-generator/bin/cli.ts +34 -0
  450. package/skills/skill-learning-style-profiler/bin/cli.ts +34 -0
  451. package/skills/skill-lesson-plan-customizer/bin/cli.ts +34 -0
  452. package/skills/skill-livestream-runofshow/bin/cli.ts +34 -0
  453. package/skills/skill-longform-structurer/bin/cli.ts +34 -0
  454. package/skills/skill-lorem-generator/bin/cli.ts +34 -0
  455. package/skills/skill-managehook/bin/cli.ts +241 -0
  456. package/skills/skill-managemcp/bin/cli.ts +241 -0
  457. package/skills/skill-manageskill/bin/cli.ts +241 -0
  458. package/skills/skill-markdown-validator/bin/cli.ts +34 -0
  459. package/skills/skill-mcp-builder/bin/cli.ts +34 -0
  460. package/skills/skill-meal-plan-designer/bin/cli.ts +34 -0
  461. package/skills/skill-meeting-insight-summarizer/bin/cli.ts +34 -0
  462. package/skills/skill-merge-pdfs/bin/cli.ts +34 -0
  463. package/skills/skill-microcopy-generator/bin/cli.ts +34 -0
  464. package/skills/skill-mindfulness-prompt-cache/bin/cli.ts +34 -0
  465. package/skills/skill-notion-manager/bin/cli.ts +34 -0
  466. package/skills/skill-onboarding-sequence-builder/bin/cli.ts +34 -0
  467. package/skills/skill-onsite-ops-checklist/bin/cli.ts +34 -0
  468. package/skills/skill-outreach-cadence-designer/bin/cli.ts +34 -0
  469. package/skills/skill-packaging-concept-studio/bin/cli.ts +34 -0
  470. package/skills/skill-packing-plan-pro/bin/cli.ts +34 -0
  471. package/skills/skill-parent-teacher-brief/bin/cli.ts +34 -0
  472. package/skills/skill-partner-kit-assembler/bin/cli.ts +34 -0
  473. package/skills/skill-payroll-change-prepper/bin/cli.ts +34 -0
  474. package/skills/skill-persona-based-adwriter/bin/cli.ts +34 -0
  475. package/skills/skill-persona-generator/bin/cli.ts +34 -0
  476. package/skills/skill-personal-daily-ops/bin/cli.ts +34 -0
  477. package/skills/skill-pet-care-scheduler/bin/cli.ts +34 -0
  478. package/skills/skill-podcast-show-notes/bin/cli.ts +34 -0
  479. package/skills/skill-presentation-theme-maker/bin/cli.ts +34 -0
  480. package/skills/skill-press-release-drafter/bin/cli.ts +34 -0
  481. package/skills/skill-print-collateral-designer/bin/cli.ts +34 -0
  482. package/skills/skill-procurement-scorecard/bin/cli.ts +34 -0
  483. package/skills/skill-product-demo-script/bin/cli.ts +34 -0
  484. package/skills/skill-product-mockup/bin/cli.ts +34 -0
  485. package/skills/skill-project-retro-companion/bin/cli.ts +34 -0
  486. package/skills/skill-proposal-redline-advisor/bin/cli.ts +34 -0
  487. package/skills/skill-regex-tester/bin/cli.ts +34 -0
  488. package/skills/skill-remove-background/bin/cli.ts +34 -0
  489. package/skills/skill-risk-disclosure-kit/bin/cli.ts +34 -0
  490. package/skills/skill-roi-comparison-tool/bin/cli.ts +34 -0
  491. package/skills/skill-sales-call-recapper/bin/cli.ts +34 -0
  492. package/skills/skill-salescopy/bin/cli.ts +20 -0
  493. package/skills/skill-scaffold-project/bin/cli.ts +34 -0
  494. package/skills/skill-scholarship-tracker/bin/cli.ts +34 -0
  495. package/skills/skill-scientific-figure-check/bin/cli.ts +34 -0
  496. package/skills/skill-seating-chart-maker/bin/cli.ts +34 -0
  497. package/skills/skill-security-audit/bin/cli.ts +34 -0
  498. package/skills/skill-seo-brief-builder/bin/cli.ts +34 -0
  499. package/skills/skill-slack-assistant/bin/cli.ts +34 -0
  500. package/skills/skill-sleep-routine-analyzer/bin/cli.ts +34 -0
  501. package/skills/skill-social-media-kit/bin/cli.ts +34 -0
  502. package/skills/skill-split-pdf/bin/cli.ts +34 -0
  503. package/skills/skill-sponsorship-proposal-lab/bin/cli.ts +34 -0
  504. package/skills/skill-spreadsheet-cleanroom/bin/cli.ts +34 -0
  505. package/skills/skill-statistical-test-selector/bin/cli.ts +34 -0
  506. package/skills/skill-stress-relief-playbook/bin/cli.ts +34 -0
  507. package/skills/skill-study-guide-builder/bin/cli.ts +34 -0
  508. package/skills/skill-subscription-spend-watcher/bin/cli.ts +34 -0
  509. package/skills/skill-subtitle/bin/cli.ts +20 -0
  510. package/skills/skill-survey-insight-extractor/bin/cli.ts +34 -0
  511. package/skills/skill-terraform-generator/bin/cli.ts +34 -0
  512. package/skills/skill-testimonial-graphics/bin/cli.ts +34 -0
  513. package/skills/skill-timesheet/bin/cli.ts +47 -0
  514. package/skills/skill-travel-budget-balancer/bin/cli.ts +34 -0
  515. package/skills/skill-validate-config/bin/cli.ts +34 -0
  516. package/skills/skill-video-cut-suggester/bin/cli.ts +34 -0
  517. package/skills/skill-video-downloader/bin/cli.ts +34 -0
  518. package/skills/skill-video-thumbnail/bin/cli.ts +34 -0
  519. package/skills/skill-voiceover-casting-assistant/bin/cli.ts +34 -0
  520. package/skills/skill-watermark/bin/cli.ts +34 -0
  521. package/skills/skill-webcrawling/bin/cli.ts +21 -0
  522. package/skills/skill-webinar-script-coach/bin/cli.ts +34 -0
  523. package/skills/skill-wellness-progress-reporter/bin/cli.ts +34 -0
  524. package/skills/skill-workout-cycle-planner/bin/cli.ts +34 -0
  525. package/skills/slack-assistant/package.json +3 -1
  526. package/skills/slide-deck-generator/SKILL.md +44 -0
  527. package/skills/slide-deck-generator/package.json +10 -0
  528. package/skills/sms/package.json +1 -1
  529. package/skills/sms/src/index.ts +15 -0
  530. package/skills/social-content-calendar/SKILL.md +45 -0
  531. package/skills/social-content-calendar/package.json +14 -0
  532. package/skills/split-pdf/package.json +4 -1
  533. package/skills/subtitle/package.json +2 -1
  534. package/skills/subtitle/src/index.ts +3 -0
  535. package/skills/terraform-generator/package.json +3 -1
  536. package/skills/test-suite-generator/SKILL.md +41 -0
  537. package/skills/test-suite-generator/package.json +10 -0
  538. package/skills/timesheet/package.json +1 -1
  539. package/skills/timesheet/src/index.ts +3 -0
  540. package/skills/transcript/SKILL.md +1 -8
  541. package/skills/validate-config/package.json +3 -1
  542. package/skills/video/package.json +6 -4
  543. package/skills/video-downloader/package.json +3 -1
  544. package/skills/video-highlight-pack/SKILL.md +44 -0
  545. package/skills/video-highlight-pack/package.json +10 -0
  546. package/skills/voiceover-jingle-pack/SKILL.md +28 -0
  547. package/skills/voiceover-jingle-pack/package.json +10 -0
  548. package/skills/watermark/package.json +6 -1
  549. package/skills/webcrawling/package.json +2 -1
  550. package/skills/write/SKILL.md +6 -6
  551. package/dist/server/serve.d.ts +0 -11
  552. package/skills/apidocs/.claude/settings.json +0 -5
  553. package/skills/audio/.env.example +0 -14
  554. package/skills/audio/QUICKSTART.md +0 -158
  555. package/skills/audio/README.md +0 -256
  556. package/skills/audio/src/index-local.ts +0 -206
  557. package/skills/audio/src/index.ts +0 -95
  558. package/skills/audio/src/providers/elevenlabs.ts +0 -115
  559. package/skills/audio/src/providers/google.ts +0 -116
  560. package/skills/audio/src/providers/minimax.ts +0 -83
  561. package/skills/audio/src/providers/openai.ts +0 -115
  562. package/skills/audio/src/types.ts +0 -79
  563. package/skills/audiobook-chapter-proofer/CLAUDE.md +0 -19
  564. package/skills/audiobook-chapter-proofer/package.json +0 -27
  565. package/skills/audiobook-chapter-proofer/src/index.ts +0 -285
  566. package/skills/browse/src/client.ts +0 -373
  567. package/skills/browse/src/index-local.ts +0 -430
  568. package/skills/browse/src/index.ts +0 -110
  569. package/skills/browse/src/sse-server.ts +0 -919
  570. package/skills/browse/src/types.ts +0 -104
  571. package/skills/consolelog/src/server/index.ts +0 -508
  572. package/skills/create-blog-article/CLAUDE.md +0 -19
  573. package/skills/create-blog-article/src/index.ts +0 -745
  574. package/skills/create-blog-article/tsconfig.json +0 -10
  575. package/skills/deepresearch/src/agents/query-generator.ts +0 -91
  576. package/skills/deepresearch/src/agents/synthesizer.ts +0 -111
  577. package/skills/deepresearch/src/index.ts +0 -224
  578. package/skills/deepresearch/src/research.ts +0 -166
  579. package/skills/deepresearch/src/services/anthropic.ts +0 -69
  580. package/skills/deepresearch/src/services/exa.ts +0 -108
  581. package/skills/deepresearch/src/services/firecrawl.ts +0 -88
  582. package/skills/deepresearch/src/services/openai.ts +0 -81
  583. package/skills/deepresearch/src/types.ts +0 -76
  584. package/skills/deepresearch/src/utils/file.ts +0 -111
  585. package/skills/deepresearch/src/utils/logger.ts +0 -84
  586. package/skills/domainpurchase/src/server/index.ts +0 -332
  587. package/skills/domainsearch/src/server/index.ts +0 -229
  588. package/skills/e2bswarm/README.md +0 -135
  589. package/skills/e2bswarm/SKILL.md +0 -118
  590. package/skills/e2bswarm/examples/tasks-example.json +0 -38
  591. package/skills/e2bswarm/package.json +0 -59
  592. package/skills/e2bswarm/src/commands/collect.ts +0 -135
  593. package/skills/e2bswarm/src/commands/install.ts +0 -164
  594. package/skills/e2bswarm/src/commands/kill.ts +0 -62
  595. package/skills/e2bswarm/src/commands/spawn.ts +0 -134
  596. package/skills/e2bswarm/src/commands/status.ts +0 -90
  597. package/skills/e2bswarm/src/commands/sync.ts +0 -208
  598. package/skills/e2bswarm/src/index.ts +0 -121
  599. package/skills/e2bswarm/src/lib/config.ts +0 -75
  600. package/skills/e2bswarm/src/lib/e2b.ts +0 -490
  601. package/skills/e2bswarm/src/lib/github.ts +0 -253
  602. package/skills/e2bswarm/src/lib/logger.ts +0 -41
  603. package/skills/e2bswarm/src/lib/paths.ts +0 -75
  604. package/skills/e2bswarm/src/lib/tasks.ts +0 -320
  605. package/skills/e2bswarm/src/types/index.ts +0 -107
  606. package/skills/e2bswarm/templates/codebox/e2b.Dockerfile +0 -38
  607. package/skills/e2bswarm/templates/codebox/e2b.toml +0 -3
  608. package/skills/e2bswarm/templates/setup.sh +0 -21
  609. package/skills/e2bswarm/tsconfig.json +0 -19
  610. package/skills/generate-book-cover/src/index.ts +0 -694
  611. package/skills/image/src/index-local.ts +0 -206
  612. package/skills/image/src/index.ts +0 -96
  613. package/skills/image/src/providers/google.ts +0 -79
  614. package/skills/image/src/providers/minimax.ts +0 -94
  615. package/skills/image/src/providers/openai.ts +0 -80
  616. package/skills/image/src/providers/xai.ts +0 -73
  617. package/skills/image/src/types.ts +0 -37
  618. package/skills/logo-design/CLAUDE.md +0 -30
  619. package/skills/logo-design/src/index.ts +0 -322
  620. package/skills/managehook/src/server/index.ts +0 -108
  621. package/skills/managemcp/src/server/index.ts +0 -108
  622. package/skills/manageskill/src/server/index.ts +0 -108
  623. package/skills/music/CLAUDE.md +0 -9
  624. package/skills/music/src/index.ts +0 -94
  625. package/skills/music/tsconfig.json +0 -10
  626. package/skills/pdf-read/src/index.ts +0 -320
  627. package/skills/product-mockup/CLAUDE.md +0 -19
  628. package/skills/product-mockup/src/index.ts +0 -290
  629. package/skills/read-pdf/src/index.ts +0 -388
  630. package/skills/remove-background/src/index.ts +0 -405
  631. package/skills/sound-effects/SKILL.md +0 -34
  632. package/skills/sound-effects/package.json +0 -21
  633. package/skills/sound-effects/src/index.ts +0 -172
  634. package/skills/sound-effects/tsconfig.json +0 -8
  635. package/skills/transcript/src/chunker.ts +0 -215
  636. package/skills/transcript/src/formatter.ts +0 -134
  637. package/skills/transcript/src/index-local.ts +0 -226
  638. package/skills/transcript/src/index.ts +0 -110
  639. package/skills/transcript/src/providers/elevenlabs.ts +0 -133
  640. package/skills/transcript/src/providers/gemini.ts +0 -192
  641. package/skills/transcript/src/providers/index.ts +0 -54
  642. package/skills/transcript/src/providers/openai.ts +0 -203
  643. package/skills/transcript/src/types.ts +0 -106
  644. package/skills/video/.env.example +0 -14
  645. package/skills/video/EXAMPLES.md +0 -266
  646. package/skills/video/LICENSE +0 -192
  647. package/skills/video/README.md +0 -174
  648. package/skills/video/src/cli.ts +0 -155
  649. package/skills/video/src/index-local.ts +0 -148
  650. package/skills/video/src/index.ts +0 -96
  651. package/skills/video/src/providers/google-veo.ts +0 -126
  652. package/skills/video/src/providers/index.ts +0 -22
  653. package/skills/video/src/providers/minimax.ts +0 -100
  654. package/skills/video/src/providers/openai-sora.ts +0 -164
  655. package/skills/video/src/providers/runway.ts +0 -159
  656. package/skills/video/src/types.ts +0 -35
  657. package/skills/video/tsconfig.json +0 -22
  658. package/skills/voiceover-casting-assistant/CLAUDE.md +0 -19
  659. package/skills/voiceover-casting-assistant/package.json +0 -27
  660. package/skills/voiceover-casting-assistant/src/index.ts +0 -255
  661. package/skills/voiceover-casting-assistant/tsconfig.json +0 -10
  662. package/skills/webcrawling/src/commands/config.ts +0 -34
  663. package/skills/webcrawling/src/commands/crawl.ts +0 -33
  664. package/skills/webcrawling/src/commands/scrape.ts +0 -32
  665. package/skills/webcrawling/src/commands/sessions.ts +0 -42
  666. package/skills/webcrawling/src/lib/crawler.ts +0 -174
  667. package/skills/webcrawling/src/lib/storage.ts +0 -130
  668. package/skills/webcrawling/src/types/index.ts +0 -45
  669. package/skills/webcrawling/src/utils/logger.ts +0 -30
  670. package/skills/webcrawling/src/utils/paths.ts +0 -28
  671. /package/skills/{audiobook-chapter-proofer → blog-article}/tsconfig.json +0 -0
@@ -0,0 +1,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
+ }