@rune-kit/rune 2.10.0 → 2.11.0

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 (205) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +8 -6
  3. package/commands/rune.md +168 -168
  4. package/contexts/dev.md +34 -34
  5. package/contexts/research.md +43 -43
  6. package/contexts/review.md +55 -55
  7. package/extensions/ai-ml/PACK.md +88 -88
  8. package/extensions/ai-ml/skills/ai-agents.md +172 -172
  9. package/extensions/ai-ml/skills/code-sandbox.md +187 -187
  10. package/extensions/ai-ml/skills/deep-research.md +146 -146
  11. package/extensions/ai-ml/skills/embedding-search.md +66 -66
  12. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
  13. package/extensions/ai-ml/skills/llm-architect.md +125 -125
  14. package/extensions/ai-ml/skills/llm-integration.md +64 -64
  15. package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
  16. package/extensions/ai-ml/skills/rag-patterns.md +66 -66
  17. package/extensions/ai-ml/skills/web-extraction.md +114 -114
  18. package/extensions/analytics/PACK.md +92 -92
  19. package/extensions/analytics/skills/ab-testing.md +72 -72
  20. package/extensions/analytics/skills/dashboard-patterns.md +83 -83
  21. package/extensions/analytics/skills/data-validation.md +68 -68
  22. package/extensions/analytics/skills/funnel-analysis.md +81 -81
  23. package/extensions/analytics/skills/sql-patterns.md +57 -57
  24. package/extensions/analytics/skills/statistical-analysis.md +79 -79
  25. package/extensions/analytics/skills/tracking-setup.md +71 -71
  26. package/extensions/backend/PACK.md +104 -104
  27. package/extensions/backend/skills/api-patterns.md +84 -84
  28. package/extensions/backend/skills/async-pipeline.md +193 -193
  29. package/extensions/backend/skills/auth-patterns.md +97 -97
  30. package/extensions/backend/skills/background-jobs.md +133 -133
  31. package/extensions/backend/skills/caching-patterns.md +108 -108
  32. package/extensions/backend/skills/cli-generation.md +133 -133
  33. package/extensions/backend/skills/database-patterns.md +87 -87
  34. package/extensions/backend/skills/middleware-patterns.md +104 -104
  35. package/extensions/chrome-ext/PACK.md +93 -93
  36. package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
  37. package/extensions/chrome-ext/skills/cws-publish.md +104 -104
  38. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
  39. package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
  40. package/extensions/chrome-ext/skills/ext-storage.md +133 -133
  41. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
  42. package/extensions/content/PACK.md +96 -96
  43. package/extensions/content/skills/blog-patterns.md +88 -88
  44. package/extensions/content/skills/cms-integration.md +131 -131
  45. package/extensions/content/skills/content-scoring.md +107 -107
  46. package/extensions/content/skills/i18n.md +83 -83
  47. package/extensions/content/skills/mdx-authoring.md +137 -137
  48. package/extensions/content/skills/reference.md +1014 -1014
  49. package/extensions/content/skills/seo-patterns.md +67 -67
  50. package/extensions/content/skills/video-repurpose.md +153 -153
  51. package/extensions/devops/PACK.md +101 -101
  52. package/extensions/devops/skills/chaos-testing.md +67 -67
  53. package/extensions/devops/skills/ci-cd.md +75 -75
  54. package/extensions/devops/skills/docker.md +58 -58
  55. package/extensions/devops/skills/edge-serverless.md +163 -163
  56. package/extensions/devops/skills/infra-as-code.md +158 -158
  57. package/extensions/devops/skills/kubernetes.md +110 -110
  58. package/extensions/devops/skills/monitoring.md +57 -57
  59. package/extensions/devops/skills/server-setup.md +64 -64
  60. package/extensions/devops/skills/ssl-domain.md +42 -42
  61. package/extensions/ecommerce/PACK.md +116 -116
  62. package/extensions/ecommerce/skills/cart-system.md +79 -79
  63. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
  64. package/extensions/ecommerce/skills/order-management.md +126 -126
  65. package/extensions/ecommerce/skills/payment-integration.md +472 -472
  66. package/extensions/ecommerce/skills/shopify-dev.md +69 -69
  67. package/extensions/ecommerce/skills/subscription-billing.md +93 -93
  68. package/extensions/ecommerce/skills/tax-compliance.md +117 -117
  69. package/extensions/gamedev/PACK.md +142 -142
  70. package/extensions/gamedev/skills/asset-pipeline.md +74 -74
  71. package/extensions/gamedev/skills/audio-system.md +129 -129
  72. package/extensions/gamedev/skills/camera-system.md +87 -87
  73. package/extensions/gamedev/skills/ecs.md +98 -98
  74. package/extensions/gamedev/skills/game-loops.md +72 -72
  75. package/extensions/gamedev/skills/input-system.md +199 -199
  76. package/extensions/gamedev/skills/multiplayer.md +180 -180
  77. package/extensions/gamedev/skills/particles.md +105 -105
  78. package/extensions/gamedev/skills/physics-engine.md +89 -89
  79. package/extensions/gamedev/skills/scene-management.md +146 -146
  80. package/extensions/gamedev/skills/threejs-patterns.md +90 -90
  81. package/extensions/gamedev/skills/webgl.md +71 -71
  82. package/extensions/mobile/PACK.md +106 -106
  83. package/extensions/mobile/skills/app-store-connect.md +152 -152
  84. package/extensions/mobile/skills/app-store-prep.md +66 -66
  85. package/extensions/mobile/skills/deep-linking.md +109 -109
  86. package/extensions/mobile/skills/flutter.md +60 -60
  87. package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
  88. package/extensions/mobile/skills/native-bridge.md +66 -66
  89. package/extensions/mobile/skills/ota-updates.md +97 -97
  90. package/extensions/mobile/skills/push-notifications.md +111 -111
  91. package/extensions/mobile/skills/react-native.md +82 -82
  92. package/extensions/saas/PACK.md +116 -116
  93. package/extensions/saas/skills/billing-integration.md +200 -200
  94. package/extensions/saas/skills/feature-flags.md +130 -130
  95. package/extensions/saas/skills/multi-tenant.md +103 -103
  96. package/extensions/saas/skills/onboarding-flow.md +139 -139
  97. package/extensions/saas/skills/subscription-flow.md +95 -95
  98. package/extensions/saas/skills/team-management.md +144 -144
  99. package/extensions/security/PACK.md +99 -99
  100. package/extensions/security/skills/api-security.md +140 -140
  101. package/extensions/security/skills/compliance.md +68 -68
  102. package/extensions/security/skills/owasp-audit.md +64 -64
  103. package/extensions/security/skills/pentest-patterns.md +77 -77
  104. package/extensions/security/skills/secret-mgmt.md +65 -65
  105. package/extensions/security/skills/supply-chain.md +65 -65
  106. package/extensions/trading/PACK.md +80 -80
  107. package/extensions/trading/skills/chart-components.md +55 -55
  108. package/extensions/trading/skills/experiment-loop.md +125 -125
  109. package/extensions/trading/skills/fintech-patterns.md +47 -47
  110. package/extensions/trading/skills/indicator-library.md +58 -58
  111. package/extensions/trading/skills/quant-analysis.md +111 -111
  112. package/extensions/trading/skills/realtime-data.md +58 -58
  113. package/extensions/trading/skills/trade-logic.md +104 -104
  114. package/extensions/ui/PACK.md +130 -130
  115. package/extensions/ui/skills/a11y-audit.md +91 -91
  116. package/extensions/ui/skills/animation-patterns.md +127 -127
  117. package/extensions/ui/skills/component-patterns.md +100 -100
  118. package/extensions/ui/skills/design-decision.md +108 -108
  119. package/extensions/ui/skills/design-system.md +68 -68
  120. package/extensions/ui/skills/landing-patterns.md +155 -155
  121. package/extensions/ui/skills/palette-picker.md +173 -173
  122. package/extensions/ui/skills/react-health.md +90 -90
  123. package/extensions/ui/skills/type-system.md +125 -125
  124. package/extensions/ui/skills/web-vitals.md +153 -153
  125. package/extensions/zalo/PACK.md +145 -145
  126. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
  127. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
  128. package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
  129. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
  130. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
  131. package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
  132. package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
  133. package/hooks/auto-format/index.cjs +48 -48
  134. package/hooks/hooks.json +111 -111
  135. package/hooks/post-session-reflect/index.cjs +189 -189
  136. package/hooks/pre-compact/index.cjs +95 -95
  137. package/hooks/run-hook.cmd +1 -1
  138. package/hooks/secrets-scan/index.cjs +100 -100
  139. package/hooks/session-start/index.cjs +71 -71
  140. package/hooks/typecheck/index.cjs +65 -65
  141. package/package.json +63 -63
  142. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
  143. package/references/ui-pro-max-data/charts.csv +26 -26
  144. package/references/ui-pro-max-data/colors.csv +161 -161
  145. package/references/ui-pro-max-data/styles.csv +68 -68
  146. package/references/ui-pro-max-data/typography.csv +74 -74
  147. package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
  148. package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
  149. package/skills/adversary/SKILL.md +283 -283
  150. package/skills/asset-creator/SKILL.md +157 -157
  151. package/skills/audit/SKILL.md +147 -2
  152. package/skills/autopsy/SKILL.md +335 -335
  153. package/skills/brainstorm/SKILL.md +342 -342
  154. package/skills/browser-pilot/SKILL.md +168 -168
  155. package/skills/constraint-check/SKILL.md +165 -165
  156. package/skills/context-engine/SKILL.md +404 -404
  157. package/skills/cook/SKILL.md +917 -863
  158. package/skills/db/SKILL.md +273 -273
  159. package/skills/debug/SKILL.md +465 -465
  160. package/skills/dependency-doctor/SKILL.md +265 -235
  161. package/skills/deploy/SKILL.md +274 -231
  162. package/skills/design/DESIGN-REFERENCE.md +365 -365
  163. package/skills/design/SKILL.md +589 -589
  164. package/skills/doc-processor/SKILL.md +254 -254
  165. package/skills/docs/SKILL.md +374 -374
  166. package/skills/docs-seeker/SKILL.md +177 -177
  167. package/skills/fix/SKILL.md +330 -330
  168. package/skills/git/SKILL.md +339 -339
  169. package/skills/hallucination-guard/SKILL.md +219 -219
  170. package/skills/incident/SKILL.md +254 -253
  171. package/skills/integrity-check/SKILL.md +169 -169
  172. package/skills/journal/SKILL.md +240 -240
  173. package/skills/launch/SKILL.md +344 -344
  174. package/skills/logic-guardian/SKILL.md +251 -251
  175. package/skills/marketing/SKILL.md +290 -289
  176. package/skills/mcp-builder/SKILL.md +425 -425
  177. package/skills/neural-memory/SKILL.md +362 -362
  178. package/skills/onboard/SKILL.md +404 -403
  179. package/skills/perf/SKILL.md +346 -346
  180. package/skills/plan/SKILL.md +433 -428
  181. package/skills/preflight/SKILL.md +415 -415
  182. package/skills/problem-solver/SKILL.md +380 -284
  183. package/skills/rescue/SKILL.md +474 -474
  184. package/skills/retro/SKILL.md +3 -1
  185. package/skills/review/SKILL.md +612 -588
  186. package/skills/review-intake/SKILL.md +249 -249
  187. package/skills/safeguard/SKILL.md +200 -200
  188. package/skills/sast/SKILL.md +190 -190
  189. package/skills/scaffold/SKILL.md +328 -287
  190. package/skills/scope-guard/SKILL.md +180 -180
  191. package/skills/scout/SKILL.md +263 -263
  192. package/skills/sentinel/SKILL.md +382 -381
  193. package/skills/sentinel-env/SKILL.md +254 -254
  194. package/skills/sequential-thinking/SKILL.md +234 -234
  195. package/skills/session-bridge/SKILL.md +543 -543
  196. package/skills/skill-forge/SKILL.md +581 -581
  197. package/skills/skill-router/SKILL.md +3 -0
  198. package/skills/surgeon/SKILL.md +215 -215
  199. package/skills/team/SKILL.md +556 -537
  200. package/skills/test/SKILL.md +614 -614
  201. package/skills/trend-scout/SKILL.md +145 -145
  202. package/skills/verification/SKILL.md +326 -326
  203. package/skills/video-creator/SKILL.md +201 -201
  204. package/skills/watchdog/SKILL.md +168 -168
  205. package/skills/worktree/SKILL.md +140 -140
@@ -1,254 +1,254 @@
1
- ---
2
- name: doc-processor
3
- description: Generate and parse office documents — PDF, DOCX, XLSX, PPTX, CSV. Pure format utility for creating reports, exporting data, and processing uploaded documents.
4
- metadata:
5
- author: runedev
6
- version: "0.2.0"
7
- layer: L3
8
- model: sonnet
9
- group: utility
10
- tools: "Read, Write, Edit, Bash, Glob, Grep"
11
- ---
12
-
13
- # doc-processor
14
-
15
- ## Purpose
16
-
17
- Document format utility. Generates and parses office documents (PDF, DOCX, XLSX, PPTX, CSV). Pure utility — no business logic, just format handling. Other skills call doc-processor when they need to produce or consume structured documents.
18
-
19
- ## Triggers
20
-
21
- - Called by `docs` when export to PDF/DOCX is requested
22
- - Called by `marketing` for generating PDF reports, PPTX presentations
23
- - Called by Rune Pro packs for business document generation
24
- - `/rune doc-processor generate <format> <source>` — manual document generation
25
- - `/rune doc-processor parse <file>` — manual document parsing
26
-
27
- ## Calls (outbound)
28
-
29
- None — pure L3 utility. Receives content, produces formatted output.
30
-
31
- ## Called By (inbound)
32
-
33
- - `docs` (L2): export documentation to PDF/DOCX
34
- - `marketing` (L2): generate PDF reports, PPTX pitch decks
35
- - Rune Pro packs: business document generation (invoices, proposals, reports)
36
- - User: `/rune doc-processor` direct invocation
37
-
38
- ## Format Reference
39
-
40
- ### Supported Formats
41
-
42
- | Format | Generate | Parse | Node.js Library | Python Library |
43
- |--------|----------|-------|-----------------|----------------|
44
- | PDF | Yes | Yes (via Read tool) | jsPDF, Puppeteer (HTML→PDF) | reportlab, weasyprint |
45
- | DOCX | Yes | Yes | docx (officegen) | python-docx |
46
- | XLSX | Yes | Yes | ExcelJS | openpyxl |
47
- | PPTX | Yes | Yes | pptxgenjs | python-pptx |
48
- | CSV | Yes | Yes | Built-in (fs + string ops) | Built-in (csv module) |
49
- | HTML | Yes | Yes | Built-in | Built-in |
50
-
51
- ### Library Selection
52
-
53
- Detect project language from context:
54
- - If Node.js project → use Node.js libraries
55
- - If Python project → use Python libraries
56
- - If unclear → default to Node.js (wider ecosystem)
57
- - For HTML→PDF → prefer Puppeteer (best fidelity) or weasyprint (Python)
58
-
59
- ## Executable Steps
60
-
61
- ### Generate Mode
62
-
63
- #### Step 1 — Determine Format and Template
64
-
65
- Identify:
66
- - Target format (PDF, DOCX, XLSX, PPTX, CSV)
67
- - Content source (markdown, data object, template + data)
68
- - Styling requirements (brand colors, fonts, layout)
69
- - Output path
70
-
71
- #### Step 2 — Select Generation Strategy
72
-
73
- | Source | Target | Strategy |
74
- |--------|--------|----------|
75
- | Markdown → PDF | HTML intermediate | Render MD → HTML → Puppeteer → PDF |
76
- | Markdown → DOCX | Direct conversion | Parse MD → docx library → DOCX |
77
- | Data → XLSX | Direct write | Map data to sheets/cells → ExcelJS |
78
- | Slides → PPTX | Template + data | Build slides from content → pptxgenjs |
79
- | Data → CSV | Direct write | Serialize rows → CSV string → file |
80
- | Any → HTML | Direct render | Template engine → HTML file |
81
-
82
- #### Step 3 — Generate Code
83
-
84
- Produce the generation script:
85
-
86
- **PDF from Markdown:**
87
- ```javascript
88
- // Strategy: Markdown → HTML → Puppeteer → PDF
89
- const puppeteer = require('puppeteer');
90
- const { marked } = require('marked');
91
-
92
- async function generatePDF(markdownContent, outputPath, options = {}) {
93
- const html = `
94
- <!DOCTYPE html>
95
- <html>
96
- <head><style>${options.css || defaultCSS}</style></head>
97
- <body>${marked(markdownContent)}</body>
98
- </html>
99
- `;
100
- const browser = await puppeteer.launch();
101
- const page = await browser.newPage();
102
- await page.setContent(html, { waitUntil: 'networkidle0' });
103
- await page.pdf({ path: outputPath, format: 'A4', margin: { top: '1in', bottom: '1in', left: '1in', right: '1in' } });
104
- await browser.close();
105
- }
106
- ```
107
-
108
- **XLSX from Data:**
109
- ```javascript
110
- const ExcelJS = require('exceljs');
111
-
112
- async function generateXLSX(data, outputPath, options = {}) {
113
- const workbook = new ExcelJS.Workbook();
114
- const sheet = workbook.addWorksheet(options.sheetName || 'Sheet1');
115
- if (data.length > 0) {
116
- sheet.columns = Object.keys(data[0]).map(key => ({ header: key, key, width: 20 }));
117
- data.forEach(row => sheet.addRow(row));
118
- // Style header row
119
- sheet.getRow(1).font = { bold: true };
120
- sheet.getRow(1).fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFE0E0E0' } };
121
- }
122
- await workbook.xlsx.writeFile(outputPath);
123
- }
124
- ```
125
-
126
- **PPTX from Slides:**
127
- ```javascript
128
- const PptxGenJS = require('pptxgenjs');
129
-
130
- function generatePPTX(slides, outputPath, options = {}) {
131
- const pptx = new PptxGenJS();
132
- pptx.author = options.author || 'Generated by Rune';
133
- slides.forEach(slide => {
134
- const s = pptx.addSlide();
135
- if (slide.title) s.addText(slide.title, { x: 0.5, y: 0.5, fontSize: 28, bold: true });
136
- if (slide.body) s.addText(slide.body, { x: 0.5, y: 1.5, fontSize: 16 });
137
- if (slide.bullets) s.addText(slide.bullets.map(b => ({ text: b, options: { bullet: true } })), { x: 0.5, y: 1.5, fontSize: 16 });
138
- });
139
- return pptx.writeFile({ fileName: outputPath });
140
- }
141
- ```
142
-
143
- #### Step 4 — Execute and Verify
144
-
145
- Run the generation script. Verify:
146
- - Output file exists and is non-empty
147
- - File can be opened (basic format validation)
148
- - Content matches expected structure
149
-
150
- ### Parse Mode
151
-
152
- #### Step 1 — Detect Format
153
-
154
- Identify file format from extension and MIME type.
155
-
156
- #### Step 2 — Extract Content
157
-
158
- | Format | Extraction Strategy |
159
- |--------|-------------------|
160
- | PDF | Use Read tool (Claude can read PDFs natively) |
161
- | DOCX | docx library → extract text, tables, images |
162
- | XLSX | ExcelJS → extract sheets, rows, formulas |
163
- | PPTX | pptxgenjs → extract slides, text, notes |
164
- | CSV | Built-in parser → structured data |
165
-
166
- #### Step 3 — Structure Output
167
-
168
- Return parsed content as structured data:
169
- ```json
170
- {
171
- "format": "xlsx",
172
- "sheets": [
173
- {
174
- "name": "Sheet1",
175
- "headers": ["Name", "Email", "Role"],
176
- "rows": [["Alice", "alice@co.com", "Engineer"], ...],
177
- "rowCount": 100
178
- }
179
- ]
180
- }
181
- ```
182
-
183
- ## Output Format
184
-
185
- ### Generate Mode Output
186
- - Generated document file at specified output path
187
- - Verification report: file exists, non-empty, format valid
188
-
189
- ```
190
- Document Generated:
191
- - Format: [PDF/DOCX/XLSX/PPTX/CSV]
192
- - Path: [output file path]
193
- - Size: [file size]
194
- - Strategy: [e.g., Markdown → HTML → Puppeteer → PDF]
195
- - Status: verified ✓
196
- ```
197
-
198
- ### Parse Mode Output
199
- Structured JSON returned to calling skill:
200
-
201
- ```json
202
- {
203
- "format": "xlsx",
204
- "metadata": { "author": "...", "created": "..." },
205
- "content": {
206
- "sheets": [
207
- {
208
- "name": "Sheet1",
209
- "headers": ["Col1", "Col2"],
210
- "rows": [["val1", "val2"]],
211
- "rowCount": 100
212
- }
213
- ]
214
- }
215
- }
216
- ```
217
-
218
- Format-specific fields: `sheets` (XLSX), `pages` (PDF/DOCX), `slides` (PPTX), `rows` (CSV).
219
-
220
- ## Constraints
221
-
222
- 1. MUST verify output file exists and is non-empty after generation
223
- 2. MUST handle missing libraries gracefully — suggest `npm install` / `pip install` if not found
224
- 3. MUST NOT embed secrets or sensitive data in generated documents
225
- 4. MUST preserve formatting fidelity — generated docs should look professional
226
- 5. Parse mode MUST handle malformed files gracefully — report errors, don't crash
227
- 6. MUST use appropriate library for each format — don't force one library for all formats
228
-
229
- ## Sharp Edges
230
-
231
- | Failure Mode | Severity | Mitigation |
232
- |---|---|---|
233
- | Library not installed in project | HIGH | Check package.json/requirements.txt, suggest install command |
234
- | PDF generation fails without headless browser | HIGH | Puppeteer needs chromium — suggest alternative (jsPDF) if unavailable |
235
- | XLSX with formulas not evaluated | MEDIUM | Use ExcelJS formula support, warn if complex formulas |
236
- | Large file generation runs out of memory | MEDIUM | Stream large datasets instead of loading all at once |
237
- | Generated file is empty or corrupt | HIGH | Step 4 verification catches this — retry or report |
238
-
239
- ## Done When
240
-
241
- ### Generate Mode
242
- - Target format and source identified
243
- - Generation strategy selected
244
- - Code produced and executed
245
- - Output file verified (exists, non-empty, valid format)
246
-
247
- ### Parse Mode
248
- - File format detected
249
- - Content extracted to structured data
250
- - Output returned in consistent JSON format
251
-
252
- ## Cost Profile
253
-
254
- ~1000-3000 tokens input, ~500-2000 tokens output. Sonnet — document processing requires understanding format libraries and generating correct code, but not deep reasoning.
1
+ ---
2
+ name: doc-processor
3
+ description: Generate and parse office documents — PDF, DOCX, XLSX, PPTX, CSV. Pure format utility for creating reports, exporting data, and processing uploaded documents.
4
+ metadata:
5
+ author: runedev
6
+ version: "0.2.0"
7
+ layer: L3
8
+ model: sonnet
9
+ group: utility
10
+ tools: "Read, Write, Edit, Bash, Glob, Grep"
11
+ ---
12
+
13
+ # doc-processor
14
+
15
+ ## Purpose
16
+
17
+ Document format utility. Generates and parses office documents (PDF, DOCX, XLSX, PPTX, CSV). Pure utility — no business logic, just format handling. Other skills call doc-processor when they need to produce or consume structured documents.
18
+
19
+ ## Triggers
20
+
21
+ - Called by `docs` when export to PDF/DOCX is requested
22
+ - Called by `marketing` for generating PDF reports, PPTX presentations
23
+ - Called by Rune Pro packs for business document generation
24
+ - `/rune doc-processor generate <format> <source>` — manual document generation
25
+ - `/rune doc-processor parse <file>` — manual document parsing
26
+
27
+ ## Calls (outbound)
28
+
29
+ None — pure L3 utility. Receives content, produces formatted output.
30
+
31
+ ## Called By (inbound)
32
+
33
+ - `docs` (L2): export documentation to PDF/DOCX
34
+ - `marketing` (L2): generate PDF reports, PPTX pitch decks
35
+ - Rune Pro packs: business document generation (invoices, proposals, reports)
36
+ - User: `/rune doc-processor` direct invocation
37
+
38
+ ## Format Reference
39
+
40
+ ### Supported Formats
41
+
42
+ | Format | Generate | Parse | Node.js Library | Python Library |
43
+ |--------|----------|-------|-----------------|----------------|
44
+ | PDF | Yes | Yes (via Read tool) | jsPDF, Puppeteer (HTML→PDF) | reportlab, weasyprint |
45
+ | DOCX | Yes | Yes | docx (officegen) | python-docx |
46
+ | XLSX | Yes | Yes | ExcelJS | openpyxl |
47
+ | PPTX | Yes | Yes | pptxgenjs | python-pptx |
48
+ | CSV | Yes | Yes | Built-in (fs + string ops) | Built-in (csv module) |
49
+ | HTML | Yes | Yes | Built-in | Built-in |
50
+
51
+ ### Library Selection
52
+
53
+ Detect project language from context:
54
+ - If Node.js project → use Node.js libraries
55
+ - If Python project → use Python libraries
56
+ - If unclear → default to Node.js (wider ecosystem)
57
+ - For HTML→PDF → prefer Puppeteer (best fidelity) or weasyprint (Python)
58
+
59
+ ## Executable Steps
60
+
61
+ ### Generate Mode
62
+
63
+ #### Step 1 — Determine Format and Template
64
+
65
+ Identify:
66
+ - Target format (PDF, DOCX, XLSX, PPTX, CSV)
67
+ - Content source (markdown, data object, template + data)
68
+ - Styling requirements (brand colors, fonts, layout)
69
+ - Output path
70
+
71
+ #### Step 2 — Select Generation Strategy
72
+
73
+ | Source | Target | Strategy |
74
+ |--------|--------|----------|
75
+ | Markdown → PDF | HTML intermediate | Render MD → HTML → Puppeteer → PDF |
76
+ | Markdown → DOCX | Direct conversion | Parse MD → docx library → DOCX |
77
+ | Data → XLSX | Direct write | Map data to sheets/cells → ExcelJS |
78
+ | Slides → PPTX | Template + data | Build slides from content → pptxgenjs |
79
+ | Data → CSV | Direct write | Serialize rows → CSV string → file |
80
+ | Any → HTML | Direct render | Template engine → HTML file |
81
+
82
+ #### Step 3 — Generate Code
83
+
84
+ Produce the generation script:
85
+
86
+ **PDF from Markdown:**
87
+ ```javascript
88
+ // Strategy: Markdown → HTML → Puppeteer → PDF
89
+ const puppeteer = require('puppeteer');
90
+ const { marked } = require('marked');
91
+
92
+ async function generatePDF(markdownContent, outputPath, options = {}) {
93
+ const html = `
94
+ <!DOCTYPE html>
95
+ <html>
96
+ <head><style>${options.css || defaultCSS}</style></head>
97
+ <body>${marked(markdownContent)}</body>
98
+ </html>
99
+ `;
100
+ const browser = await puppeteer.launch();
101
+ const page = await browser.newPage();
102
+ await page.setContent(html, { waitUntil: 'networkidle0' });
103
+ await page.pdf({ path: outputPath, format: 'A4', margin: { top: '1in', bottom: '1in', left: '1in', right: '1in' } });
104
+ await browser.close();
105
+ }
106
+ ```
107
+
108
+ **XLSX from Data:**
109
+ ```javascript
110
+ const ExcelJS = require('exceljs');
111
+
112
+ async function generateXLSX(data, outputPath, options = {}) {
113
+ const workbook = new ExcelJS.Workbook();
114
+ const sheet = workbook.addWorksheet(options.sheetName || 'Sheet1');
115
+ if (data.length > 0) {
116
+ sheet.columns = Object.keys(data[0]).map(key => ({ header: key, key, width: 20 }));
117
+ data.forEach(row => sheet.addRow(row));
118
+ // Style header row
119
+ sheet.getRow(1).font = { bold: true };
120
+ sheet.getRow(1).fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FFE0E0E0' } };
121
+ }
122
+ await workbook.xlsx.writeFile(outputPath);
123
+ }
124
+ ```
125
+
126
+ **PPTX from Slides:**
127
+ ```javascript
128
+ const PptxGenJS = require('pptxgenjs');
129
+
130
+ function generatePPTX(slides, outputPath, options = {}) {
131
+ const pptx = new PptxGenJS();
132
+ pptx.author = options.author || 'Generated by Rune';
133
+ slides.forEach(slide => {
134
+ const s = pptx.addSlide();
135
+ if (slide.title) s.addText(slide.title, { x: 0.5, y: 0.5, fontSize: 28, bold: true });
136
+ if (slide.body) s.addText(slide.body, { x: 0.5, y: 1.5, fontSize: 16 });
137
+ if (slide.bullets) s.addText(slide.bullets.map(b => ({ text: b, options: { bullet: true } })), { x: 0.5, y: 1.5, fontSize: 16 });
138
+ });
139
+ return pptx.writeFile({ fileName: outputPath });
140
+ }
141
+ ```
142
+
143
+ #### Step 4 — Execute and Verify
144
+
145
+ Run the generation script. Verify:
146
+ - Output file exists and is non-empty
147
+ - File can be opened (basic format validation)
148
+ - Content matches expected structure
149
+
150
+ ### Parse Mode
151
+
152
+ #### Step 1 — Detect Format
153
+
154
+ Identify file format from extension and MIME type.
155
+
156
+ #### Step 2 — Extract Content
157
+
158
+ | Format | Extraction Strategy |
159
+ |--------|-------------------|
160
+ | PDF | Use Read tool (Claude can read PDFs natively) |
161
+ | DOCX | docx library → extract text, tables, images |
162
+ | XLSX | ExcelJS → extract sheets, rows, formulas |
163
+ | PPTX | pptxgenjs → extract slides, text, notes |
164
+ | CSV | Built-in parser → structured data |
165
+
166
+ #### Step 3 — Structure Output
167
+
168
+ Return parsed content as structured data:
169
+ ```json
170
+ {
171
+ "format": "xlsx",
172
+ "sheets": [
173
+ {
174
+ "name": "Sheet1",
175
+ "headers": ["Name", "Email", "Role"],
176
+ "rows": [["Alice", "alice@co.com", "Engineer"], ...],
177
+ "rowCount": 100
178
+ }
179
+ ]
180
+ }
181
+ ```
182
+
183
+ ## Output Format
184
+
185
+ ### Generate Mode Output
186
+ - Generated document file at specified output path
187
+ - Verification report: file exists, non-empty, format valid
188
+
189
+ ```
190
+ Document Generated:
191
+ - Format: [PDF/DOCX/XLSX/PPTX/CSV]
192
+ - Path: [output file path]
193
+ - Size: [file size]
194
+ - Strategy: [e.g., Markdown → HTML → Puppeteer → PDF]
195
+ - Status: verified ✓
196
+ ```
197
+
198
+ ### Parse Mode Output
199
+ Structured JSON returned to calling skill:
200
+
201
+ ```json
202
+ {
203
+ "format": "xlsx",
204
+ "metadata": { "author": "...", "created": "..." },
205
+ "content": {
206
+ "sheets": [
207
+ {
208
+ "name": "Sheet1",
209
+ "headers": ["Col1", "Col2"],
210
+ "rows": [["val1", "val2"]],
211
+ "rowCount": 100
212
+ }
213
+ ]
214
+ }
215
+ }
216
+ ```
217
+
218
+ Format-specific fields: `sheets` (XLSX), `pages` (PDF/DOCX), `slides` (PPTX), `rows` (CSV).
219
+
220
+ ## Constraints
221
+
222
+ 1. MUST verify output file exists and is non-empty after generation
223
+ 2. MUST handle missing libraries gracefully — suggest `npm install` / `pip install` if not found
224
+ 3. MUST NOT embed secrets or sensitive data in generated documents
225
+ 4. MUST preserve formatting fidelity — generated docs should look professional
226
+ 5. Parse mode MUST handle malformed files gracefully — report errors, don't crash
227
+ 6. MUST use appropriate library for each format — don't force one library for all formats
228
+
229
+ ## Sharp Edges
230
+
231
+ | Failure Mode | Severity | Mitigation |
232
+ |---|---|---|
233
+ | Library not installed in project | HIGH | Check package.json/requirements.txt, suggest install command |
234
+ | PDF generation fails without headless browser | HIGH | Puppeteer needs chromium — suggest alternative (jsPDF) if unavailable |
235
+ | XLSX with formulas not evaluated | MEDIUM | Use ExcelJS formula support, warn if complex formulas |
236
+ | Large file generation runs out of memory | MEDIUM | Stream large datasets instead of loading all at once |
237
+ | Generated file is empty or corrupt | HIGH | Step 4 verification catches this — retry or report |
238
+
239
+ ## Done When
240
+
241
+ ### Generate Mode
242
+ - Target format and source identified
243
+ - Generation strategy selected
244
+ - Code produced and executed
245
+ - Output file verified (exists, non-empty, valid format)
246
+
247
+ ### Parse Mode
248
+ - File format detected
249
+ - Content extracted to structured data
250
+ - Output returned in consistent JSON format
251
+
252
+ ## Cost Profile
253
+
254
+ ~1000-3000 tokens input, ~500-2000 tokens output. Sonnet — document processing requires understanding format libraries and generating correct code, but not deep reasoning.