@hasna/skills 0.1.21 → 0.1.23

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 (270) hide show
  1. package/bin/index.js +341 -287
  2. package/bin/mcp.js +297 -245
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +79 -24
  5. package/dist/lib/basic-skills.test.d.ts +1 -0
  6. package/dist/lib/registry.d.ts +5 -0
  7. package/dist/lib/search.d.ts +2 -2
  8. package/package.json +1 -1
  9. package/skills/skill-academic-journal-matcher/package.json +1 -7
  10. package/skills/skill-action-item-router/package.json +1 -7
  11. package/skills/skill-ad-creative-generator/package.json +1 -7
  12. package/skills/skill-advanced-math/package.json +1 -7
  13. package/skills/skill-anomaly-investigator/package.json +1 -7
  14. package/skills/skill-api-test-suite/package.json +1 -7
  15. package/skills/skill-apidocs/package.json +0 -6
  16. package/skills/skill-audio/SKILL.md +3 -1
  17. package/skills/skill-audio/package.json +0 -5
  18. package/skills/skill-audio/src/index-local.ts +4 -1
  19. package/skills/skill-audio/src/providers/minimax.ts +83 -0
  20. package/skills/skill-audio/src/types.ts +1 -1
  21. package/skills/skill-audio-cleanup-lab/package.json +1 -5
  22. package/skills/{skill-extract-audio → skill-audio-extract}/SKILL.md +3 -3
  23. package/skills/{skill-extract-audio → skill-audio-extract}/package.json +3 -7
  24. package/skills/skill-audiobook-chapter-proofer/package.json +1 -7
  25. package/skills/skill-banner-ad-suite/package.json +1 -7
  26. package/skills/skill-benchmark-finder/package.json +1 -7
  27. package/skills/skill-bio-sequence-tool/package.json +1 -7
  28. package/skills/skill-blog-topic-cluster/package.json +1 -7
  29. package/skills/skill-brand-voice-audit/package.json +1 -7
  30. package/skills/skill-browse/package.json +0 -5
  31. package/skills/skill-businessactivity/package.json +1 -3
  32. package/skills/skill-calendar-events/package.json +1 -7
  33. package/skills/skill-campaign-metric-brief/package.json +1 -7
  34. package/skills/skill-campaign-moodboard/package.json +1 -7
  35. package/skills/skill-caption-style-stylist/package.json +1 -7
  36. package/skills/skill-chemistry-calculator/package.json +1 -7
  37. package/skills/skill-churn-risk-notifier/package.json +1 -7
  38. package/skills/skill-citation-formatter/package.json +1 -7
  39. package/skills/skill-classroom-newsletter-kit/package.json +1 -7
  40. package/skills/skill-codefix/package.json +0 -4
  41. package/skills/skill-color-palette-harmonizer/package.json +1 -7
  42. package/skills/skill-colorextract/package.json +17 -5
  43. package/skills/skill-commitpush/package.json +0 -1
  44. package/skills/skill-commitpushpr/package.json +0 -1
  45. package/skills/skill-competitor-ad-analyzer/package.json +1 -7
  46. package/skills/skill-compliance-copy-check/package.json +1 -7
  47. package/skills/skill-compliance-report-pack/package.json +1 -7
  48. package/skills/skill-compress-video/package.json +1 -5
  49. package/skills/skill-consolelog/package.json +1 -7
  50. package/skills/skill-contract-plainlanguage/package.json +1 -7
  51. package/skills/skill-convert/SKILL.md +7 -0
  52. package/skills/skill-convert/package.json +0 -4
  53. package/skills/skill-copytone-translator/package.json +1 -7
  54. package/skills/skill-create-blog-article/package.json +1 -7
  55. package/skills/skill-create-ebook/package.json +1 -7
  56. package/skills/skill-crm-note-enhancer/package.json +1 -7
  57. package/skills/skill-customer-journey-mapper/package.json +1 -7
  58. package/skills/skill-dashboard-builder/package.json +1 -7
  59. package/skills/skill-dashboard-narrator/package.json +1 -7
  60. package/skills/skill-data-anonymizer/package.json +1 -7
  61. package/skills/skill-database-explorer/package.json +1 -7
  62. package/skills/skill-dataset-health-check/package.json +1 -7
  63. package/skills/skill-decision-journal/package.json +1 -7
  64. package/skills/skill-deepresearch/package.json +0 -5
  65. package/skills/skill-delegation-brief-writer/package.json +1 -7
  66. package/skills/skill-deploy/package.json +0 -4
  67. package/skills/skill-destination-briefing/package.json +1 -7
  68. package/skills/skill-diff-viewer/package.json +1 -7
  69. package/skills/{skill-generate-docx → skill-doc-generate}/SKILL.md +2 -2
  70. package/skills/{skill-generate-pdf → skill-doc-generate}/package.json +9 -4
  71. package/skills/{skill-generate-docx → skill-doc-generate}/src/index.ts +91 -28
  72. package/skills/skill-doc-read/SKILL.md +45 -0
  73. package/skills/skill-doc-read/package.json +29 -0
  74. package/skills/skill-doc-read/src/index.ts +324 -0
  75. package/skills/skill-doc-read/tsconfig.json +8 -0
  76. package/skills/skill-domainpurchase/package.json +1 -7
  77. package/skills/skill-domainsearch/package.json +1 -7
  78. package/skills/skill-e2bswarm/package.json +0 -6
  79. package/skills/skill-educational-resource-finder/package.json +1 -7
  80. package/skills/skill-email-campaign/package.json +1 -7
  81. package/skills/skill-emoji/package.json +0 -1
  82. package/skills/skill-exam-readiness-check/package.json +1 -7
  83. package/skills/skill-excel/SKILL.md +38 -0
  84. package/skills/skill-excel/package.json +30 -0
  85. package/skills/{skill-generate-excel → skill-excel}/src/index.ts +41 -14
  86. package/skills/skill-experiment-power-calculator/package.json +1 -7
  87. package/skills/skill-extract/package.json +0 -5
  88. package/skills/skill-extract-frames/package.json +1 -7
  89. package/skills/skill-extract-invoice/package.json +1 -7
  90. package/skills/skill-family-activity-curator/package.json +1 -7
  91. package/skills/skill-faq-packager/package.json +1 -7
  92. package/skills/skill-feedback-survey-designer/package.json +1 -7
  93. package/skills/skill-field-trip-planner/package.json +1 -7
  94. package/skills/skill-file-organizer/package.json +1 -7
  95. package/skills/skill-folder-tree/package.json +1 -7
  96. package/skills/skill-forecast-scenario-lab/package.json +1 -7
  97. package/skills/skill-form-filler/package.json +1 -7
  98. package/skills/skill-generate-api-client/package.json +1 -7
  99. package/skills/skill-generate-book-cover/package.json +1 -7
  100. package/skills/skill-generate-chart/package.json +1 -7
  101. package/skills/skill-generate-diagram/package.json +1 -7
  102. package/skills/skill-generate-dockerfile/package.json +1 -7
  103. package/skills/skill-generate-documentation/package.json +1 -7
  104. package/skills/skill-generate-env/package.json +1 -7
  105. package/skills/skill-generate-favicon/package.json +1 -7
  106. package/skills/skill-generate-mock-data/package.json +1 -7
  107. package/skills/skill-generate-pr-description/package.json +1 -7
  108. package/skills/skill-generate-presentation/package.json +1 -7
  109. package/skills/skill-generate-qrcode/package.json +1 -7
  110. package/skills/skill-generate-regex/package.json +1 -7
  111. package/skills/skill-generate-resume/package.json +1 -7
  112. package/skills/skill-generate-sitemap/package.json +1 -7
  113. package/skills/skill-generate-social-posts/package.json +1 -7
  114. package/skills/skill-generate-sql/package.json +1 -7
  115. package/skills/skill-gif-maker/package.json +1 -7
  116. package/skills/skill-github-manager/package.json +1 -7
  117. package/skills/skill-gmail/package.json +1 -7
  118. package/skills/skill-goal-quarterly-roadmap/package.json +1 -7
  119. package/skills/skill-grant-application-drafter/package.json +1 -7
  120. package/skills/skill-grocery-basket-optimizer/package.json +1 -7
  121. package/skills/skill-guest-communication-suite/package.json +1 -7
  122. package/skills/skill-habit-reflection-digest/package.json +1 -7
  123. package/skills/skill-highlight-reel-generator/package.json +1 -7
  124. package/skills/skill-homework-feedback-coach/package.json +1 -7
  125. package/skills/skill-hook/package.json +0 -6
  126. package/skills/skill-household-maintenance-mgr/package.json +1 -7
  127. package/skills/skill-http-server/package.json +1 -7
  128. package/skills/skill-image/SKILL.md +2 -0
  129. package/skills/skill-image/package.json +0 -5
  130. package/skills/skill-image/src/index-local.ts +5 -3
  131. package/skills/skill-image/src/providers/minimax.ts +94 -0
  132. package/skills/skill-image/src/types.ts +1 -1
  133. package/skills/skill-implementation/package.json +0 -6
  134. package/skills/skill-implementation-agent/package.json +1 -7
  135. package/skills/skill-implementation-plan/package.json +1 -7
  136. package/skills/skill-implementation-todo/package.json +1 -7
  137. package/skills/skill-inbox-priority-planner/package.json +1 -7
  138. package/skills/skill-invoice-dispute-helper/package.json +1 -7
  139. package/skills/skill-itinerary-architect/package.json +1 -7
  140. package/skills/skill-kpi-digest-generator/package.json +1 -7
  141. package/skills/skill-lab-notebook-formatter/package.json +1 -7
  142. package/skills/skill-landing-page-copy/package.json +1 -7
  143. package/skills/skill-latex-table-generator/package.json +1 -7
  144. package/skills/skill-learning-style-profiler/package.json +1 -7
  145. package/skills/skill-lesson-plan-customizer/package.json +1 -7
  146. package/skills/skill-livestream-runofshow/package.json +1 -7
  147. package/skills/skill-longform-structurer/package.json +1 -7
  148. package/skills/skill-lorem-generator/package.json +1 -7
  149. package/skills/skill-managehook/package.json +1 -3
  150. package/skills/skill-managemcp/package.json +1 -3
  151. package/skills/skill-manageskill/package.json +1 -3
  152. package/skills/skill-markdown-validator/package.json +1 -7
  153. package/skills/skill-mcp-builder/package.json +1 -7
  154. package/skills/skill-meal-plan-designer/package.json +1 -7
  155. package/skills/skill-meeting-insight-summarizer/package.json +1 -7
  156. package/skills/skill-merge-pdfs/package.json +1 -7
  157. package/skills/skill-microcopy-generator/package.json +1 -7
  158. package/skills/skill-mindfulness-prompt-cache/package.json +1 -7
  159. package/skills/skill-monitor/package.json +0 -1
  160. package/skills/skill-music/CLAUDE.md +9 -0
  161. package/skills/skill-music/SKILL.md +35 -0
  162. package/skills/{skill-generate-excel → skill-music}/package.json +4 -10
  163. package/skills/skill-music/src/index.ts +192 -0
  164. package/skills/skill-notion-manager/package.json +1 -7
  165. package/skills/skill-npmpublish/package.json +0 -5
  166. package/skills/skill-onboarding-sequence-builder/package.json +1 -7
  167. package/skills/skill-onsite-ops-checklist/package.json +1 -7
  168. package/skills/skill-outreach-cadence-designer/package.json +1 -7
  169. package/skills/skill-packaging-concept-studio/package.json +1 -7
  170. package/skills/skill-packing-plan-pro/package.json +1 -7
  171. package/skills/skill-parent-teacher-brief/package.json +1 -7
  172. package/skills/skill-partner-kit-assembler/package.json +1 -7
  173. package/skills/skill-payroll-change-prepper/package.json +1 -7
  174. package/skills/{skill-generate-pdf → skill-pdf-generate}/SKILL.md +2 -2
  175. package/skills/{skill-generate-docx → skill-pdf-generate}/package.json +6 -4
  176. package/skills/{skill-generate-pdf → skill-pdf-generate}/src/index.ts +109 -8
  177. package/skills/skill-pdf-read/SKILL.md +56 -0
  178. package/skills/skill-pdf-read/package.json +29 -0
  179. package/skills/skill-pdf-read/src/index.ts +320 -0
  180. package/skills/skill-pdf-read/tsconfig.json +8 -0
  181. package/skills/skill-persona-based-adwriter/package.json +1 -7
  182. package/skills/skill-persona-generator/package.json +1 -7
  183. package/skills/skill-personal-daily-ops/package.json +1 -7
  184. package/skills/skill-pet-care-scheduler/package.json +1 -7
  185. package/skills/skill-podcast-show-notes/package.json +1 -7
  186. package/skills/skill-presentation-theme-maker/package.json +1 -7
  187. package/skills/skill-press-release-drafter/package.json +1 -7
  188. package/skills/skill-print-collateral-designer/package.json +1 -7
  189. package/skills/skill-procurement-scorecard/package.json +1 -7
  190. package/skills/skill-product-demo-script/package.json +1 -7
  191. package/skills/skill-product-mockup/package.json +1 -7
  192. package/skills/skill-project-retro-companion/package.json +1 -7
  193. package/skills/skill-proposal-redline-advisor/package.json +1 -7
  194. package/skills/skill-read-csv/SKILL.md +1 -1
  195. package/skills/skill-read-csv/package.json +0 -1
  196. package/skills/skill-read-csv/src/index.ts +30 -5
  197. package/skills/skill-read-excel/SKILL.md +1 -1
  198. package/skills/skill-read-excel/package.json +0 -1
  199. package/skills/skill-read-excel/src/index.ts +21 -8
  200. package/skills/skill-read-image/SKILL.md +1 -1
  201. package/skills/skill-read-image/package.json +0 -1
  202. package/skills/skill-read-pdf/SKILL.md +1 -1
  203. package/skills/skill-read-pdf/package.json +0 -1
  204. package/skills/skill-read-pdf/src/index.ts +15 -3
  205. package/skills/skill-regex-tester/package.json +1 -7
  206. package/skills/skill-remove-background/package.json +1 -7
  207. package/skills/skill-risk-disclosure-kit/package.json +1 -7
  208. package/skills/skill-roi-comparison-tool/package.json +1 -7
  209. package/skills/skill-sales-call-recapper/package.json +1 -7
  210. package/skills/skill-scaffold-project/package.json +1 -7
  211. package/skills/skill-scancommitpr/package.json +0 -2
  212. package/skills/skill-scancommitpush/package.json +0 -2
  213. package/skills/skill-scholarship-tracker/package.json +1 -7
  214. package/skills/skill-scientific-figure-check/package.json +1 -7
  215. package/skills/skill-seating-chart-maker/package.json +1 -7
  216. package/skills/skill-security-audit/package.json +1 -7
  217. package/skills/skill-seo-brief-builder/package.json +1 -7
  218. package/skills/skill-siteanalyze/package.json +19 -5
  219. package/skills/skill-slack-assistant/package.json +1 -7
  220. package/skills/skill-sleep-routine-analyzer/package.json +1 -7
  221. package/skills/skill-sms/package.json +0 -1
  222. package/skills/skill-social-media-kit/package.json +1 -7
  223. package/skills/skill-sound-effects/SKILL.md +34 -0
  224. package/skills/{skill-jingle-composer → skill-sound-effects}/package.json +4 -10
  225. package/skills/skill-sound-effects/src/index.ts +172 -0
  226. package/skills/skill-sound-effects/tsconfig.json +8 -0
  227. package/skills/skill-split-pdf/package.json +1 -7
  228. package/skills/skill-sponsorship-proposal-lab/package.json +1 -7
  229. package/skills/skill-spreadsheet-cleanroom/package.json +1 -7
  230. package/skills/skill-statistical-test-selector/package.json +1 -7
  231. package/skills/skill-stress-relief-playbook/package.json +1 -7
  232. package/skills/skill-study-guide-builder/package.json +1 -7
  233. package/skills/skill-subscription-spend-watcher/package.json +1 -7
  234. package/skills/skill-subtitle/package.json +0 -6
  235. package/skills/skill-survey-insight-extractor/package.json +1 -7
  236. package/skills/skill-terraform-generator/package.json +1 -7
  237. package/skills/skill-testimonial-graphics/package.json +1 -7
  238. package/skills/skill-timesheet/package.json +0 -6
  239. package/skills/skill-tmux-session/package.json +0 -1
  240. package/skills/skill-transcript/SKILL.md +3 -1
  241. package/skills/skill-transcript/package.json +0 -5
  242. package/skills/skill-travel-budget-balancer/package.json +1 -7
  243. package/skills/skill-validate-config/package.json +1 -7
  244. package/skills/skill-video/SKILL.md +3 -1
  245. package/skills/skill-video/package.json +0 -5
  246. package/skills/skill-video/src/providers/index.ts +4 -1
  247. package/skills/skill-video/src/providers/minimax.ts +100 -0
  248. package/skills/skill-video/src/types.ts +1 -1
  249. package/skills/skill-video-cut-suggester/package.json +1 -7
  250. package/skills/skill-video-downloader/package.json +1 -7
  251. package/skills/skill-video-thumbnail/package.json +1 -7
  252. package/skills/skill-voiceover-casting-assistant/package.json +1 -7
  253. package/skills/skill-watermark/package.json +1 -7
  254. package/skills/skill-webcrawling/package.json +11 -8
  255. package/skills/skill-webinar-script-coach/package.json +1 -7
  256. package/skills/skill-wellness-progress-reporter/package.json +1 -7
  257. package/skills/skill-workout-cycle-planner/package.json +1 -7
  258. package/skills/skill-write/package.json +0 -5
  259. package/skills/skill-jingle-composer/CLAUDE.md +0 -19
  260. package/skills/skill-jingle-composer/src/index.ts +0 -250
  261. /package/skills/{skill-extract-audio → skill-audio-extract}/CLAUDE.md +0 -0
  262. /package/skills/{skill-extract-audio → skill-audio-extract}/src/index.ts +0 -0
  263. /package/skills/{skill-extract-audio → skill-audio-extract}/tsconfig.json +0 -0
  264. /package/skills/{skill-generate-docx → skill-doc-generate}/CLAUDE.md +0 -0
  265. /package/skills/{skill-generate-docx → skill-doc-generate}/tsconfig.json +0 -0
  266. /package/skills/{skill-generate-excel → skill-excel}/CLAUDE.md +0 -0
  267. /package/skills/{skill-generate-excel → skill-excel}/tsconfig.json +0 -0
  268. /package/skills/{skill-jingle-composer → skill-music}/tsconfig.json +0 -0
  269. /package/skills/{skill-generate-pdf → skill-pdf-generate}/CLAUDE.md +0 -0
  270. /package/skills/{skill-generate-pdf → skill-pdf-generate}/tsconfig.json +0 -0
@@ -0,0 +1,9 @@
1
+ # skill-music
2
+
3
+ AI music generation skill using Minimax Music-01.
4
+
5
+ ## Development
6
+
7
+ - Runtime: Bun
8
+ - Use `bun run dev` to run locally
9
+ - Use `bun run typecheck` to check types
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: music
3
+ version: 0.1.0
4
+ description: Generate music tracks using AI models (Minimax Music-01)
5
+ category: Content Generation
6
+ tags:
7
+ - music
8
+ - generation
9
+ - ai
10
+ - minimax
11
+ ---
12
+
13
+ # Music
14
+
15
+ Generate full music tracks from text descriptions using AI. Describe the genre, mood, tempo, and style — get a complete audio track. Supports lyrics, instrumental references, and fine-grained control over the output.
16
+
17
+ ## Features
18
+
19
+ - **Text-to-Music**: Describe any style and get a full track
20
+ - **Lyrics Support**: Provide lyrics for vocal tracks
21
+ - **Genre & Mood Control**: Specify genre, mood, and tempo
22
+ - **Duration Control**: Set desired track length
23
+
24
+ ## Usage
25
+
26
+ ```bash
27
+ skill-music generate --prompt "upbeat jazz piano" --output ./jazz.mp3
28
+ skill-music generate --prompt "rock anthem" --lyrics "We are the champions" --output ./rock.mp3
29
+ skill-music generate --prompt "lo-fi beats" --mood calm --tempo 80 --output ./lofi.mp3
30
+ ```
31
+
32
+ ## Environment Variables
33
+
34
+ - `MINIMAX_API_KEY` — API key for Minimax (required)
35
+ - `MINIMAX_GROUP_ID` — Group ID for Minimax (optional)
@@ -1,10 +1,10 @@
1
1
  {
2
- "name": "@hasnaxyz/skill-generate-excel",
2
+ "name": "@hasnaxyz/skill-music",
3
3
  "version": "0.1.0",
4
- "description": "Generate Excel skill",
4
+ "description": "Generate music tracks using AI models (Minimax Music-01)",
5
5
  "type": "module",
6
6
  "bin": {
7
- "skill-generate-excel": "./src/index.ts"
7
+ "skill-music": "./src/index.ts"
8
8
  },
9
9
  "scripts": {
10
10
  "dev": "bun run src/index.ts",
@@ -23,11 +23,5 @@
23
23
  "files": [
24
24
  "src",
25
25
  "tsconfig.json"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/hasnaxyz/skill-generate-excel.git"
30
- },
31
- "author": "Hasna",
32
- "license": "Apache-2.0"
26
+ ]
33
27
  }
@@ -0,0 +1,192 @@
1
+ #!/usr/bin/env bun
2
+
3
+ import { writeFile, mkdir } from 'fs/promises';
4
+ import { resolve, dirname } from 'path';
5
+ import { handleInstallCommand } from '../../_common';
6
+
7
+ const SKILL_META = {
8
+ name: 'skill-music',
9
+ description: 'Generate music tracks using AI (Minimax Music-01)',
10
+ version: '1.0.0',
11
+ commands: `Use: skill-music --help`,
12
+ requiredEnvVars: ['MINIMAX_API_KEY'],
13
+ };
14
+
15
+ if (await handleInstallCommand(SKILL_META, process.argv.slice(2))) {
16
+ process.exit(0);
17
+ }
18
+
19
+ type Provider = 'minimax';
20
+
21
+ interface GenerateOptions {
22
+ provider: Provider;
23
+ prompt: string;
24
+ output: string;
25
+ lyrics?: string;
26
+ genre?: string;
27
+ mood?: string;
28
+ tempo?: number;
29
+ duration?: number;
30
+ }
31
+
32
+ function parseArgs(): GenerateOptions | null {
33
+ const args = process.argv.slice(2);
34
+
35
+ if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
36
+ printHelp();
37
+ return null;
38
+ }
39
+
40
+ if (args[0] !== 'generate') {
41
+ console.error(`Unknown command: ${args[0]}`);
42
+ process.exit(1);
43
+ }
44
+
45
+ const options: Partial<GenerateOptions> = { provider: 'minimax' };
46
+
47
+ for (let i = 1; i < args.length; i++) {
48
+ switch (args[i]) {
49
+ case '--provider': case '-p': options.provider = args[++i] as Provider; break;
50
+ case '--prompt': options.prompt = args[++i]; break;
51
+ case '--output': case '-o': options.output = args[++i]; break;
52
+ case '--lyrics': options.lyrics = args[++i]; break;
53
+ case '--genre': options.genre = args[++i]; break;
54
+ case '--mood': options.mood = args[++i]; break;
55
+ case '--tempo': options.tempo = parseInt(args[++i]); break;
56
+ case '--duration': options.duration = parseInt(args[++i]); break;
57
+ default: console.error(`Unknown option: ${args[i]}`); process.exit(1);
58
+ }
59
+ }
60
+
61
+ if (!options.prompt) { console.error('Error: --prompt is required'); process.exit(1); }
62
+ if (!options.output) { console.error('Error: --output is required'); process.exit(1); }
63
+
64
+ return options as GenerateOptions;
65
+ }
66
+
67
+ function printHelp() {
68
+ console.log(`
69
+ Music Generation Skill
70
+
71
+ Generate music using AI models (Minimax Music-01)
72
+
73
+ USAGE:
74
+ skill-music generate [OPTIONS]
75
+
76
+ OPTIONS:
77
+ --provider, -p <provider> Provider (minimax) [default: minimax]
78
+ --prompt <text> Description of the music to generate [required]
79
+ --output, -o <path> Output file path [required]
80
+ --lyrics <text> Song lyrics
81
+ --genre <genre> Music genre (pop, rock, jazz, classical, electronic, etc.)
82
+ --mood <mood> Desired mood (happy, sad, energetic, calm, etc.)
83
+ --tempo <bpm> Tempo in BPM
84
+ --duration <seconds> Duration in seconds
85
+
86
+ EXAMPLES:
87
+ skill-music generate --prompt "upbeat jazz piano" --output ./jazz.mp3
88
+ skill-music generate --prompt "rock anthem" --lyrics "We are the champions" --output ./rock.mp3
89
+ skill-music generate --prompt "lo-fi beats" --mood calm --tempo 80 --output ./lofi.mp3
90
+
91
+ ENVIRONMENT VARIABLES:
92
+ MINIMAX_API_KEY API key for Minimax
93
+ MINIMAX_GROUP_ID Group ID for Minimax (optional)
94
+ `);
95
+ }
96
+
97
+ async function generateMinimax(options: GenerateOptions): Promise<Buffer> {
98
+ const apiKey = process.env.MINIMAX_API_KEY;
99
+ if (!apiKey) throw new Error('MINIMAX_API_KEY environment variable is required');
100
+
101
+ const groupId = process.env.MINIMAX_GROUP_ID;
102
+ const baseUrl = 'https://api.minimax.chat/v1';
103
+
104
+ console.log(`Generating music with Minimax Music-01...`);
105
+ console.log(`Prompt: ${options.prompt}`);
106
+
107
+ const body: Record<string, unknown> = {
108
+ model: 'music-01',
109
+ prompt: options.prompt,
110
+ };
111
+ if (options.lyrics) body.lyrics = options.lyrics;
112
+ if (options.genre) body.genre = options.genre;
113
+ if (options.mood) body.mood = options.mood;
114
+ if (options.tempo) body.tempo = options.tempo;
115
+ if (options.duration) body.duration = options.duration;
116
+
117
+ const headers: Record<string, string> = {
118
+ 'Content-Type': 'application/json',
119
+ 'Authorization': `Bearer ${apiKey}`,
120
+ };
121
+ if (groupId) headers['X-Group-Id'] = groupId;
122
+
123
+ const response = await fetch(`${baseUrl}/music_generation`, {
124
+ method: 'POST',
125
+ headers,
126
+ body: JSON.stringify(body),
127
+ });
128
+
129
+ if (!response.ok) {
130
+ const err = await response.text();
131
+ throw new Error(`Minimax API error: ${response.status} - ${err}`);
132
+ }
133
+
134
+ const data = await response.json() as { task_id: string };
135
+ console.log(`Task started: ${data.task_id}`);
136
+ console.log('Polling for completion...');
137
+
138
+ for (let i = 0; i < 120; i++) {
139
+ await new Promise(r => setTimeout(r, 5000));
140
+
141
+ const statusUrl = `${baseUrl}/query/music_generation?task_id=${data.task_id}`;
142
+ const statusRes = await fetch(statusUrl, { headers: { 'Authorization': `Bearer ${apiKey}` } });
143
+ const status = await statusRes.json() as {
144
+ status: string;
145
+ extra_info?: { audio_url?: string };
146
+ audio_file?: string;
147
+ base_resp?: { status_msg: string };
148
+ };
149
+
150
+ if (status.status === 'Success') {
151
+ const audioUrl = status.extra_info?.audio_url || status.audio_file;
152
+ if (!audioUrl) throw new Error('No audio URL in response');
153
+
154
+ console.log('Music generated. Downloading...');
155
+ const audioRes = await fetch(audioUrl);
156
+ if (!audioRes.ok) throw new Error(`Download failed: ${audioRes.status}`);
157
+ return Buffer.from(await audioRes.arrayBuffer());
158
+ }
159
+
160
+ if (status.status === 'Fail') {
161
+ throw new Error(`Music generation failed: ${status.base_resp?.status_msg || 'Unknown error'}`);
162
+ }
163
+
164
+ if (i % 6 === 0) console.log(` Still processing... (${Math.round((i * 5) / 60)}m elapsed)`);
165
+ }
166
+
167
+ throw new Error('Music generation timed out');
168
+ }
169
+
170
+ async function main() {
171
+ const options = parseArgs();
172
+ if (!options) return;
173
+
174
+ try {
175
+ console.log('\n=== Music Generation ===\n');
176
+
177
+ const buffer = await generateMinimax(options);
178
+
179
+ const outputPath = resolve(options.output);
180
+ await mkdir(dirname(outputPath), { recursive: true });
181
+ await writeFile(outputPath, buffer);
182
+
183
+ console.log(`\nMusic saved to: ${outputPath}`);
184
+ console.log(`Size: ${(buffer.length / 1024).toFixed(1)} KB`);
185
+ console.log('\nDone!\n');
186
+ } catch (error) {
187
+ console.error('\nError:', error instanceof Error ? error.message : error);
188
+ process.exit(1);
189
+ }
190
+ }
191
+
192
+ main();
@@ -23,11 +23,5 @@
23
23
  "files": [
24
24
  "src",
25
25
  "tsconfig.json"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/hasnaxyz/skill-notion-manager.git"
30
- },
31
- "author": "Hasna",
32
- "license": "Apache-2.0"
26
+ ]
33
27
  }
@@ -15,10 +15,6 @@
15
15
  "publishConfig": {
16
16
  "access": "restricted"
17
17
  },
18
- "repository": {
19
- "type": "git",
20
- "url": "https://github.com/hasnaxyz/skill-npmpublish.git"
21
- },
22
18
  "keywords": [
23
19
  "npm",
24
20
  "publish",
@@ -27,7 +23,6 @@
27
23
  "claude",
28
24
  "codex"
29
25
  ],
30
- "license": "Apache-2.0",
31
26
  "scripts": {
32
27
  "start": "bun run src/index.ts",
33
28
  "typecheck": "tsc --noEmit"
@@ -23,11 +23,5 @@
23
23
  "files": [
24
24
  "src",
25
25
  "tsconfig.json"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/hasnaxyz/skill-onboarding-sequence-builder.git"
30
- },
31
- "author": "Hasna",
32
- "license": "Apache-2.0"
26
+ ]
33
27
  }
@@ -23,11 +23,5 @@
23
23
  "files": [
24
24
  "src",
25
25
  "tsconfig.json"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/hasnaxyz/skill-onsite-ops-checklist.git"
30
- },
31
- "author": "Hasna",
32
- "license": "Apache-2.0"
26
+ ]
33
27
  }
@@ -23,11 +23,5 @@
23
23
  "files": [
24
24
  "src",
25
25
  "tsconfig.json"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/hasnaxyz/skill-outreach-cadence-designer.git"
30
- },
31
- "author": "Hasna",
32
- "license": "Apache-2.0"
26
+ ]
33
27
  }
@@ -23,11 +23,5 @@
23
23
  "files": [
24
24
  "src",
25
25
  "tsconfig.json"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/hasnaxyz/skill-packaging-concept-studio.git"
30
- },
31
- "author": "Hasna",
32
- "license": "Apache-2.0"
26
+ ]
33
27
  }
@@ -23,11 +23,5 @@
23
23
  "files": [
24
24
  "src",
25
25
  "tsconfig.json"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/hasnaxyz/skill-packing-plan-pro.git"
30
- },
31
- "author": "Hasna",
32
- "license": "Apache-2.0"
26
+ ]
33
27
  }
@@ -23,11 +23,5 @@
23
23
  "files": [
24
24
  "src",
25
25
  "tsconfig.json"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/hasnaxyz/skill-parent-teacher-brief.git"
30
- },
31
- "author": "Hasna",
32
- "license": "Apache-2.0"
26
+ ]
33
27
  }
@@ -23,11 +23,5 @@
23
23
  "files": [
24
24
  "src",
25
25
  "tsconfig.json"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/hasnaxyz/skill-partner-kit-assembler.git"
30
- },
31
- "author": "Hasna",
32
- "license": "Apache-2.0"
26
+ ]
33
27
  }
@@ -23,11 +23,5 @@
23
23
  "files": [
24
24
  "src",
25
25
  "tsconfig.json"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "https://github.com/hasnaxyz/skill-payroll-change-prepper.git"
30
- },
31
- "author": "Hasna",
32
- "license": "Apache-2.0"
26
+ ]
33
27
  }
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: Generate Pdf
2
+ name: pdf-generate
3
3
  version: 0.1.0
4
4
  description: Generate high-quality PDF documents from markdown, HTML, or templates
5
5
  category: Productivity
@@ -83,4 +83,4 @@ skills run generate-pdf -- --file README.md \
83
83
 
84
84
  ## Requirements
85
85
 
86
- - Bun runtime.
86
+ - Bun runtime.
@@ -1,17 +1,19 @@
1
1
  {
2
- "name": "@hasnaxyz/skill-generate-docx",
2
+ "name": "@hasnaxyz/skill-pdf-generate",
3
3
  "version": "0.1.0",
4
- "description": "Generate DOCX documents",
4
+ "description": "Generate PDF documents with rich formatting and layouts",
5
5
  "type": "module",
6
6
  "bin": {
7
- "skill-generate-docx": "./src/index.ts"
7
+ "skill-pdf-generate": "./src/index.ts"
8
8
  },
9
9
  "scripts": {
10
10
  "start": "bun run src/index.ts",
11
11
  "dev": "bun run --watch src/index.ts",
12
12
  "cli": "bun run src/index.ts"
13
13
  },
14
- "dependencies": {},
14
+ "dependencies": {
15
+ "pdf-lib": "^1.17.1"
16
+ },
15
17
  "publishConfig": {
16
18
  "registry": "https://registry.npmjs.org",
17
19
  "access": "restricted"
@@ -3,6 +3,8 @@
3
3
  import { existsSync, mkdirSync, appendFileSync, writeFileSync, readFileSync } from "node:fs";
4
4
  import { join } from "node:path";
5
5
 
6
+ type PdfLibModule = typeof import("pdf-lib");
7
+
6
8
  // Skill configuration
7
9
  const SKILL_NAME = "generate-pdf";
8
10
  const SESSION_ID = `${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
@@ -30,6 +32,14 @@ function log(message: string, level: "info" | "error" | "warn" = "info") {
30
32
  }
31
33
  }
32
34
 
35
+ async function loadPdfLib(): Promise<PdfLibModule> {
36
+ try {
37
+ return await import("pdf-lib");
38
+ } catch {
39
+ throw new Error("Missing dependency 'pdf-lib'. Run bun install in this skill directory.");
40
+ }
41
+ }
42
+
33
43
  // =============================================================================
34
44
  // Security: HTML Escaping to prevent XSS
35
45
  // =============================================================================
@@ -685,6 +695,99 @@ function generateHtml(options: GenerateOptions): string {
685
695
  </html>`;
686
696
  }
687
697
 
698
+ function htmlToPlainText(html: string): string {
699
+ return html
700
+ .replace(/<style[\s\S]*?<\/style>/gi, "")
701
+ .replace(/<script[\s\S]*?<\/script>/gi, "")
702
+ .replace(/<\/(h1|h2|h3|p|div|li|tr)>/gi, "\n")
703
+ .replace(/<br\s*\/?>/gi, "\n")
704
+ .replace(/<[^>]+>/g, "")
705
+ .replace(/&nbsp;/g, " ")
706
+ .replace(/&amp;/g, "&")
707
+ .replace(/&lt;/g, "<")
708
+ .replace(/&gt;/g, ">")
709
+ .replace(/&quot;/g, '"')
710
+ .replace(/&#x27;/g, "'")
711
+ .split("\n")
712
+ .map((line) => line.trim())
713
+ .filter(Boolean)
714
+ .join("\n");
715
+ }
716
+
717
+ function pageSizeToPoints(format: string, orientation: "portrait" | "landscape"): [number, number] {
718
+ const size = PAGE_FORMATS[format] ?? PAGE_FORMATS.A4;
719
+ const width = (size.width / 25.4) * 72;
720
+ const height = (size.height / 25.4) * 72;
721
+ return orientation === "landscape" ? [height, width] : [width, height];
722
+ }
723
+
724
+ function wrapText(text: string, maxCharacters: number): string[] {
725
+ const lines: string[] = [];
726
+ for (const paragraph of text.split("\n")) {
727
+ let current = "";
728
+ for (const word of paragraph.split(/\s+/).filter(Boolean)) {
729
+ const candidate = current ? `${current} ${word}` : word;
730
+ if (candidate.length > maxCharacters && current) {
731
+ lines.push(current);
732
+ current = word;
733
+ } else {
734
+ current = candidate;
735
+ }
736
+ }
737
+ if (current) lines.push(current);
738
+ lines.push("");
739
+ }
740
+ return lines;
741
+ }
742
+
743
+ async function writePdfDocument(html: string, options: GenerateOptions, outputPath: string): Promise<void> {
744
+ const { PDFDocument, StandardFonts, rgb } = await loadPdfLib();
745
+ const pdfDoc = await PDFDocument.create();
746
+ const font = await pdfDoc.embedFont(StandardFonts.Helvetica);
747
+ const boldFont = await pdfDoc.embedFont(StandardFonts.HelveticaBold);
748
+ const [width, height] = pageSizeToPoints(options.format, options.orientation);
749
+ const margin = 54;
750
+ const fontSize = 11;
751
+ const lineHeight = 16;
752
+ const maxCharacters = Math.max(40, Math.floor((width - margin * 2) / (fontSize * 0.52)));
753
+ const lines = wrapText(htmlToPlainText(html), maxCharacters);
754
+
755
+ let page = pdfDoc.addPage([width, height]);
756
+ let y = height - margin;
757
+
758
+ if (options.title) {
759
+ page.drawText(options.title, {
760
+ x: margin,
761
+ y,
762
+ size: 18,
763
+ font: boldFont,
764
+ color: rgb(0.12, 0.18, 0.26),
765
+ });
766
+ y -= lineHeight * 2;
767
+ }
768
+
769
+ for (const line of lines) {
770
+ if (y < margin) {
771
+ page = pdfDoc.addPage([width, height]);
772
+ y = height - margin;
773
+ }
774
+
775
+ if (line) {
776
+ page.drawText(line, {
777
+ x: margin,
778
+ y,
779
+ size: fontSize,
780
+ font,
781
+ color: rgb(0.1, 0.1, 0.1),
782
+ });
783
+ }
784
+ y -= lineHeight;
785
+ }
786
+
787
+ const bytes = await pdfDoc.save();
788
+ writeFileSync(outputPath, bytes);
789
+ }
790
+
688
791
  // Main execution
689
792
  async function main() {
690
793
  try {
@@ -709,28 +812,26 @@ async function main() {
709
812
  ? `${options.filename}.pdf`
710
813
  : `document_${SESSION_ID}.pdf`;
711
814
 
712
- // Since we can't use Puppeteer in Bun easily, we'll output the HTML
713
- // and create a simple text-based PDF representation
714
- // In production, this would use a proper PDF library
715
-
716
- // For now, save HTML that can be converted to PDF
717
815
  const htmlFile = join(EXPORTS_DIR, filename.replace('.pdf', '.html'));
718
816
  writeFileSync(htmlFile, html);
719
817
  log(`Saved HTML to: ${htmlFile}`);
818
+ const pdfFile = join(EXPORTS_DIR, filename);
819
+ await writePdfDocument(html, options, pdfFile);
820
+ log(`Saved PDF to: ${pdfFile}`);
720
821
 
721
822
  // Output result
722
823
  const result = {
723
824
  success: true,
724
- message: "HTML document generated successfully",
825
+ message: "PDF document generated successfully",
725
826
  data: {
827
+ pdfFile,
726
828
  htmlFile,
727
- filename: filename.replace('.pdf', '.html'),
829
+ filename,
728
830
  format: options.format,
729
831
  orientation: options.orientation,
730
832
  contentLength: html.length,
731
833
  template: options.template || null,
732
834
  },
733
- note: "PDF conversion requires Puppeteer/Playwright. HTML file exported instead.",
734
835
  };
735
836
 
736
837
  console.log(JSON.stringify(result, null, 2));
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: pdf-read
3
+ version: 0.1.0
4
+ description: Read and extract text from multiple PDF files with page-range selection and parallel processing
5
+ category: Data & Analysis
6
+ tags:
7
+ - pdf
8
+ - documents
9
+ - extraction
10
+ - analysis
11
+ - reader
12
+ ---
13
+
14
+ # PDF Read
15
+
16
+ Read and extract text from PDF files. Supports multiple PDFs at once, page-range selection, chunked reading for large files, and parallel processing. Outputs text, JSON, or structured markdown.
17
+
18
+ ## Features
19
+
20
+ - **Multiple PDFs**: Process many PDFs in a single command
21
+ - **Page Ranges**: Read specific pages (e.g., `1-5`, `3,7,10-15`)
22
+ - **Chunked Reading**: Break large PDFs into manageable chunks
23
+ - **Parallel Processing**: Process multiple files concurrently
24
+ - **Metadata Extraction**: Get page count, author, title, dates
25
+ - **Output Formats**: Plain text, JSON with page structure, or markdown
26
+
27
+ ## Usage
28
+
29
+ ```bash
30
+ # Read entire PDF
31
+ skill-pdf-read read document.pdf
32
+
33
+ # Read specific pages
34
+ skill-pdf-read read report.pdf --pages 1-5
35
+
36
+ # Read multiple PDFs
37
+ skill-pdf-read read file1.pdf file2.pdf file3.pdf
38
+
39
+ # Read in chunks of 10 pages
40
+ skill-pdf-read read large-book.pdf --chunk-size 10
41
+
42
+ # Get metadata only
43
+ skill-pdf-read info document.pdf
44
+
45
+ # Output as JSON with page structure
46
+ skill-pdf-read read document.pdf --format json --output result.json
47
+ ```
48
+
49
+ ## Environment Variables
50
+
51
+ - None required (pure local processing)
52
+
53
+ ## Requirements
54
+
55
+ - Bun runtime
56
+ - pdf-parse (auto-installed)