dsh-ppt 0.5.1 → 0.7.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.
package/README.en.md CHANGED
@@ -1,170 +1,221 @@
1
1
  # dsh-ppt
2
2
 
3
- ## 0.5.0 update (2026-09-27)
4
-
5
- Includes presenter previews, thumbnails and timer controls. Unsupported or rejected fullscreen requests now show an actionable message instead of silently failing.
6
-
7
- Validation host: Harness `0.2.0-rc.1` built from official sources (commit `407e65c8`) with Node `24.16.0` on 2026-09-28. All 70 plugin tests pass in an isolated environment; all 18 plugins mount together in one host registering 1 skills and 2 tools, with tool schemas and health-check contracts passing. No live ports or external services were exercised in this round.
8
-
9
- ![npm](https://img.shields.io/npm/v/dsh-ppt) ![downloads](https://img.shields.io/npm/dm/dsh-ppt) ![license](https://img.shields.io/github/license/STARDUSTLC666/dsh-ppt) ![stars](https://img.shields.io/github/stars/STARDUSTLC666/dsh-ppt?style=social)
10
-
11
- [![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)](https://awesome-dsh-plugin.com)
12
-
13
- > **One sentence or one document → a complete presentation**: HTML web slideshow + PPTX export, 5 visual themes, slide transitions + bullet entrance animations, bilingual Chinese/English.
14
-
15
- DeepSeek Harness (DSH) presentation skill + tool plugin: turns a sentence, a paragraph, or a Markdown document into a ready-to-present **HTML slideshow** and an editable **PPTX**. Pure Node, **zero runtime dependencies**, one codebase for Windows / macOS / Linux.
16
-
17
- ## Capabilities
18
-
19
- | Capability | Description |
20
- | --- | --- |
21
- | `ppt_create` tool | Markdown / structured slides → `*.html` + `*.pptx` + `*.json` |
22
- | `ppt_themes` tool | Lists the 5 built-in themes and their best use cases; pass `preview: true` with `outputDir` to write a side-by-side gallery plus one SVG palette card per theme |
23
- | 7 layouts | cover / section / bullets / statement / **quote** / **table** / closing |
24
- | Speaker notes | `<!-- note: ... -->` comments or the `notes` field: press `S` in the HTML player; native PPTX notes slides (presenter view) |
25
- | Motion | On by default: HTML slide-in transitions + staggered bullet entrances; native PPTX fade transitions + click-to-reveal bullets. `motion: 'off'` / `--motion off` for a fully static deck |
26
- | Markdown extras | Tables (`\| ... \|`), blockquotes (`>`), and note comments are auto-detected into matching layouts |
27
- | `dsh-ppt` skill | A complete six-step SOP registered into DSH |
28
- | Standalone SKILL.md | Copy `skills/dsh-ppt/` into Claude Code / Cursor / Gemini CLI / Codex for cross-harness use |
29
- | Visual engine | Reuses the hyperframes visual style library; HTML and PPTX share the same theme source |
30
-
31
- Example:
32
-
33
- > Turn this sentence into a deck: "AI support cuts first response time to 8 seconds", with a dark tech theme.
34
- >
35
- > Turn `docs/quarterly-review.md` into a bilingual presentation and export PPTX.
36
-
37
- ## Compatibility
38
-
39
- ## Installation
40
-
41
- ```bash
42
- dsh plugin --profile web add dsh-ppt
43
- ```
44
-
45
- After restart, the `ppt_create` / `ppt_themes` tools and the `dsh-ppt` skill are available. The plugin ships with an empty config and **won't crash startup**.
46
-
47
- ## Uninstall
48
-
49
- ```bash
50
- dsh plugin --profile web remove dsh-ppt
51
- ```
52
-
53
- Then restart the web service. To clean up fully, also remove the plugin entry from your profile `cordis.patch.yml` if you overrode it.
54
-
55
-
56
- ## Quick start
57
-
58
- ### Inside DSH (recommended)
59
-
60
- ```
61
- 1. ppt_themes { preview: true, outputDir: "dist" } # themes + gallery
62
- 2. ppt_create {
63
- title: "Fewer Meetings",
64
- content: "# Problem\n- Too many meetings\n\n# Solution\n- Async decisions",
65
- theme: "data",
66
- lang: "en"
67
- }
68
- 3. Open the returned HTML path in a browser; edit the PPTX in PowerPoint / WPS / Keynote
69
- ```
70
-
71
- ### Any harness (standalone SKILL.md)
72
-
73
- Copy `skills/dsh-ppt/` to any Agent Skills directory, then:
74
-
75
- ```bash
76
- node <skill-dir>/scripts/build-deck.mjs \
77
- --title "Product Launch" \
78
- --content deck.md \
79
- --theme data \
80
- --lang en \
81
- --out dist/deck
82
- ```
83
-
84
- Artifacts:
85
-
86
- Existing artifacts are not overwritten by default: if any member of the trio already exists, the whole set receives a shared `-1`, `-2`, ... suffix. Replacement requires explicit `overwrite: true` (or `--overwrite` in the CLI).
87
-
88
- | File | Purpose |
89
- | --- | --- |
90
- | `*.html` | Standalone slideshow: arrow keys, V presenter view (separate window with real current/next previews, thumbnail strip, notes, timer, progress, pause, font size, blank screen), S notes, G thumbnail overview, F fullscreen, P print, ? shortcuts, Esc close |
91
- | `*.pptx` | Editable 16:9 presentation (hand-written OOXML, zip via `node:zlib`, no third-party deps) |
92
- | `*.json` | Structured manifest (version, theme, language, slides) |
93
-
94
- ## Built-in themes
95
-
96
- | ID | Name | Mood | Best for |
97
- | --- | --- | --- | --- |
98
- | `data` | Data Drift (default) | Futuristic / immersive | AI, tech launches, research |
99
- | `swiss` | Swiss Pulse | Precise / rational | Data, SaaS, developer tools |
100
- | `velvet` | Velvet Standard | Premium / restrained | Executive decks, brand, investor pitches |
101
- | `soft` | Soft Signal | Warm / human | Brand stories, training, personal talks |
102
- | `bold` | Maximalist Type | Loud / kinetic | Product launches, events, big moments |
103
-
104
- Themes are derived from [dsh-hyperframes](https://github.com/STARDUSTLC666/dsh-hyperframes) `visual-styles.md`. Full palettes: `skills/dsh-ppt/references/themes.md`. Run `ppt_themes { preview: true, outputDir: "dist" }` for a side-by-side gallery and SVG palette cards.
105
-
106
- ## Markdown input rules
107
-
108
- - The first `# heading` becomes the cover title; its first paragraph becomes the cover subtitle.
109
- - Each `## section` becomes one slide: lists produce `bullets` slides; empty sections produce `section` dividers.
110
- - Plain text without headings: the first paragraph is the cover, then every 5 sentences become one slide.
111
- - A single sentence automatically produces a complete 3-slide structure: cover → core idea → closing.
112
- - Long tables paginate automatically with repeated headers and up to 8 data rows per page. Notes stay on the first page. Tables support 8 columns and 60 characters per cell; oversized input returns an actionable error. Short rows are padded consistently in all artifacts.
113
- - `maxSlides` counts pages after expansion. Exceeding it fails before writing files; raise the limit (up to 120) or split the deck. Middle slides are never silently discarded.
114
- - For precise control, use structured `slides` (`cover | section | bullets | statement | quote | table | closing`), with `rows` for tables and `notes` for speaker notes.
115
-
116
- ## Configuration
117
-
118
- No required configuration. Optional:
119
-
120
- ```yaml
121
- - id: dsh-ppt
122
- config:
123
- outputDir: E:\decks # optional; defaults to the session working directory
124
- maxSlides: 40 # optional; default 60 (3–120)
125
- defaultTheme: data # optional; used when ppt_create has no theme
126
- defaultLang: en # optional; used when ppt_create has no lang (zh/en/bilingual)
127
- ```
128
-
129
- The `DSH_PPT_OUTPUT_DIR` env var can also set the default output directory; the `ppt_create` `outputDir`/`theme`/`lang` arguments have the highest priority.
130
-
131
- Output paths resolve against each tool call's `exec.agent.session.header.cwd`: omitted paths use the session directory, relative paths (including plugin configuration) resolve within it, and absolute paths keep their meaning. Direct calls without a session fall back to the process working directory; concurrent sessions never change process cwd. Tools check `exec.signal` before and after loading the engine, so cancelled calls do not proceed to generation. Rendering and writing are synchronous and finish the artifact trio once started.
132
-
133
- ## Bilingual support
134
-
135
- - `lang` argument: `zh` (default) / `en` / `bilingual` controls the player UI, page numbers, and closing defaults.
136
- - Content language is up to the author: for a bilingual deck, prefer "Chinese title + English subtitle" or generate two decks from the same outline.
137
- - Plugin docs come in Chinese (README.md) and English (this file); CLI and skill error messages are in Chinese.
138
-
139
- ## Engineering quality
140
-
141
- - Pure Node, zero runtime dependencies: HTML template, OOXML, and zip are hand-written using only `node:fs` / `node:path` / `node:zlib`.
142
- - The skill and tools share one engine (`skills/dsh-ppt/scripts/deck-core.mjs`), so DSH and bare-skill output are identical.
143
- - Unit tests cover registration contracts, JSON Schema, theme resolution, Markdown parsing, artifact generation, PPTX part integrity, and the CLI.
144
- - No `eval` / `child_process` / secrets; artifacts are only written to the user-specified local directory.
145
-
146
- ## Development
147
-
148
- ```sh
149
- pnpm install
150
- pnpm run build # tsc → lib/
151
- pnpm test # build + node --test (registration/config/engine/CLI)
152
- pnpm run smoke:cli # bare CLI smoke test, generates .smoke-deck
153
- ```
154
-
155
- ## Known limitations
156
-
157
- - The PPTX uses a blank layout plus text boxes: text is editable in PowerPoint / WPS, but no smart master placeholders yet.
158
- - A one-sentence input produces a minimal 3-slide structure; for richer decks, expand the content into a Markdown outline first.
159
- - `bilingual` only localizes the player UI; it does not translate content.
160
- - Charts and images are not supported yet; speaker notes and HTML/PPTX motion are already supported.
161
-
162
- ## License
163
-
164
- MIT. Community plugin, not affiliated with DeepSeek; `@deepseek-ai/*` is an officially reserved namespace.
165
-
166
- ## Related projects
167
-
168
- - [dsh-hyperframes](https://github.com/STARDUSTLC666/dsh-hyperframes) — HTML video skills (source of this plugin's visual styles)
169
- - [dsh-remotion](https://github.com/STARDUSTLC666/dsh-remotion) — React programmatic video skills
170
- - [dsh-email](https://github.com/STARDUSTLC666/dsh-email) — Email toolset
3
+ ## 0.7.0 (2026-10-02)
4
+
5
+ - Generated HTML decks now have previous/next buttons and page-number navigation, with keyboard, touch and a usable 390px layout.
6
+ - A Review and export panel shows quality findings and the outline, links findings to their slides, and offers editable PPTX and project JSON downloads.
7
+ - Incomplete drafts are clearly labeled. Static checks are guidance and require visual review before delivery; layout editing remains available through Agent project tools or PowerPoint/WPS.
8
+ - Download links target the actual sibling files, including Unicode filenames and collision renaming. The existing three-file offline delivery format is preserved.
9
+ - All 103 tests pass on Windows, with Chinese and English browser interaction checks. Native Office and the DSH desktop window were not verified in this round.
10
+
11
+ ## 0.6.0 (2026-10-01)
12
+
13
+ Adds image/text layouts, four native editable chart types, selected-page edits and undo, page-specific quality reports, four scenario outlines and shared branding. Optional official LibreOffice Kit rendering reads the final PPTX to produce PNG/PDF with font diagnostics. Fixes overlapping overview thumbnails, undersized table titles, image-caption spacing and chart labels.
14
+
15
+ The goal remains a usable finished deck. The agent prepares actual facts and content; the deterministic generator does not research or invent missing facts. Template-only output is explicitly an unfilled **draft** and must not be delivered as a finished presentation.
16
+
17
+ Default PPTX fonts use platform fallbacks and explicit East Asian families separately from HTML's CSS font stacks. Replace missing fonts, regenerate and review the pages; unresolved font problems must be disclosed instead of claiming acceptance.
18
+
19
+ Validation: Windows / Node 24.16.0, 100 passing tests; 18 components mount together on official-source Harness 0.2.0-rc.2 (639ed01539) with 104 tools and 35 skills. Fifteen default-theme pages without brand overrides passed native PNG/PDF rendering and individual visual review; an eleven-page image/chart/brand sample was checked in the browser, Microsoft PowerPoint and the official Kit. This covers those samples, not automatic acceptance of arbitrary decks.
20
+
21
+ ## 0.5.0 update (2026-09-27)
22
+
23
+ Includes presenter previews, thumbnails and timer controls. Unsupported or rejected fullscreen requests now show an actionable message instead of silently failing.
24
+
25
+ Validation host: Harness `0.2.0-rc.1` built from official sources (commit `407e65c8`) with Node `24.16.0` on 2026-09-28. All 70 plugin tests pass in an isolated environment; all 18 plugins mount together in one host registering 1 skills and 2 tools, with tool schemas and health-check contracts passing. No live ports or external services were exercised in this round.
26
+
27
+ ![npm](https://img.shields.io/npm/v/dsh-ppt) ![downloads](https://img.shields.io/npm/dm/dsh-ppt) ![license](https://img.shields.io/github/license/STARDUSTLC666/dsh-ppt) ![stars](https://img.shields.io/github/stars/STARDUSTLC666/dsh-ppt?style=social)
28
+
29
+ [![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)](https://awesome-dsh-plugin.com)
30
+
31
+ > **One sentence or one document → a complete presentation**: HTML web slideshow + PPTX export, 5 visual themes, slide transitions + bullet entrance animations, bilingual Chinese/English.
32
+
33
+ DeepSeek Harness (DSH) presentation skill and tools: the agent prepares content, then generates an offline **HTML slideshow**, editable **PPTX** and **JSON project**. Images/charts use exact-version `@office-kit/pptx@0.21.0`; the shared Node generator supports Windows/macOS/Linux.
34
+
35
+ ## Capabilities
36
+
37
+ | Capability | Description |
38
+ | --- | --- |
39
+ | `ppt_create` tool | Markdown / structured slides → `*.html` + `*.pptx` + `*.json` |
40
+ | `ppt_themes` tool | Lists the 5 built-in themes and their best use cases; pass `preview: true` with `outputDir` to write a side-by-side gallery plus one SVG palette card per theme |
41
+ | 11 layouts | cover / section / bullets / statement / quote / table / closing / image / image-left / image-right / chart |
42
+ | Speaker notes | `<!-- note: ... -->` comments or the `notes` field: press `S` in the HTML player; native PPTX notes slides (presenter view) |
43
+ | Motion | On by default: HTML slide-in transitions + staggered bullet entrances; native PPTX fade transitions + click-to-reveal bullets. `motion: 'off'` / `--motion off` for a fully static deck |
44
+ | Markdown extras | Tables (`\| ... \|`), blockquotes (`>`), and note comments are auto-detected into matching layouts |
45
+ | `dsh-ppt` skill | A complete six-step SOP registered into DSH |
46
+ | Standalone SKILL.md | Copy `skills/dsh-ppt/` into Claude Code / Cursor / Gemini CLI / Codex for cross-harness use |
47
+ | Visual engine | Reuses the hyperframes visual style library; HTML and PPTX share the same theme source |
48
+
49
+ Example:
50
+
51
+ > Turn this sentence into a deck: "AI support cuts first response time to 8 seconds", with a dark tech theme.
52
+ >
53
+ > Turn `docs/quarterly-review.md` into a bilingual presentation and export PPTX.
54
+
55
+ ## Compatibility
56
+
57
+ Plugin and standalone skill require Node `^22.19.0 || >=24.0.0`. No API key or mandatory configuration. The optional renderer is loaded on demand and its absence does not prevent startup or ordinary creation. Windows samples have been exercised in the browser, opened/exported in Microsoft PowerPoint, and rendered using the official Kit; review the actual pages for each new deck.
58
+
59
+ ## Installation
60
+
61
+ ```bash
62
+ dsh plugin --profile web add dsh-ppt
63
+ ```
64
+
65
+ On desktop, install `dsh-ppt` through plugin management. Restart the host after updating to load seven tools and the skill. Ask naturally to include screenshots/charts, edit only slide three, or undo the last edit; users do not need to write JSON.
66
+
67
+ ## Uninstall
68
+
69
+ ```bash
70
+ dsh plugin --profile web remove dsh-ppt
71
+ ```
72
+
73
+ Then restart the web service. To clean up fully, also remove the plugin entry from your profile `cordis.patch.yml` if you overrode it.
74
+
75
+
76
+ ## Quick start
77
+
78
+ ### Inside DSH (recommended)
79
+
80
+ ```
81
+ 1. ppt_themes { preview: true, outputDir: "dist" } # themes + gallery
82
+ 2. ppt_create {
83
+ title: "Fewer Meetings",
84
+ content: "# Problem\n- Too many meetings\n\n# Solution\n- Async decisions",
85
+ theme: "data",
86
+ lang: "en"
87
+ }
88
+ 3. Open the returned HTML path in a browser; edit the PPTX in PowerPoint / WPS / Keynote
89
+ ```
90
+
91
+ ### Any harness (standalone SKILL.md)
92
+
93
+ Copy `skills/dsh-ppt/` to any Agent Skills directory, then:
94
+
95
+ ```bash
96
+ node <skill-dir>/scripts/build-deck.mjs \
97
+ --title "Product Launch" \
98
+ --content deck.md \
99
+ --theme data \
100
+ --lang en \
101
+ --out dist/deck
102
+ ```
103
+
104
+ Artifacts:
105
+
106
+ Existing artifacts are not overwritten by default: if any member of the trio already exists, the whole set receives a shared `-1`, `-2`, ... suffix. Replacement requires explicit `overwrite: true` (or `--overwrite` in the CLI).
107
+
108
+ | File | Purpose |
109
+ | --- | --- |
110
+ | `*.html` | Standalone slideshow: arrow keys, V presenter view (separate window with real current/next previews, thumbnail strip, notes, timer, progress, pause, font size, blank screen), S notes, G thumbnail overview, F fullscreen, P print, ? shortcuts, Esc close |
111
+ | `*.pptx` | Editable 16:9 presentation (hand-written OOXML, zip via `node:zlib`, no third-party deps) |
112
+ | `*.json` | Structured manifest (version, theme, language, slides) |
113
+
114
+ ## Images, charts, editing and review
115
+
116
+ The additional tools are `ppt_templates`, `ppt_edit`, `ppt_undo`, `ppt_check`, and `ppt_render`. New layouts are `image`, `image-left`, `image-right` and `chart`, alongside the seven existing layouts.
117
+
118
+ An image slide accepts `image: {src, alt, fit: "contain"|"cover", caption}`. Use local PNG/JPEG paths relative to session cwd or matching data URIs. Assets are embedded in all outputs and undo works after original files move. Limits: 5 MiB / 32 megapixels per image, 32 MiB total project assets. Remote links and SVG are not automatically downloaded or converted.
119
+
120
+ A chart accepts `chart: {kind:"column"|"bar"|"line"|"pie", categories, series:[{name,values}], unit, caption}` or `rows` with a category/series header. Values must be finite with matching lengths. Pie requires one nonnegative series with a positive total. HTML uses accessible SVG and data tables; PPTX contains native charts and embedded editable workbooks.
121
+
122
+ `brand` supports `name`, `primaryColor`, `backgroundColor`, `textColor`, `fontFamily`, `logo` and `footer`. Colors are `#RRGGBB`; select a font available on the recipient computer. `template` is `weekly|defense|project|pitch` and does not overwrite a supplied narrative.
123
+
124
+ Edit example: `{deckPath:"report.json",expectedRevision:0,edits:[{slide:3,patch:{title:"A clearer conclusion",bullets:["Evidence","Next action"]}}]}`. Use `ppt_check` to obtain stable IDs and the revision; `ppt_undo` restores the latest edit including assets/brand. Keeps up to 20 edits and rejects stale revisions. The artifact trio is regenerated atomically with rollback on commit failure.
125
+
126
+ `deliveryStatus: draft` means unfilled slots; `ready-for-review` means review can start. Static estimates, rendering and visual inspection are recorded separately. Generation/rendering never automatically certifies visual quality. Inspect HTML and every page image before delivery.
127
+
128
+ ## Optional PNG/PDF renderer
129
+
130
+ Install in the plugin's project or standalone skill directory:
131
+
132
+ ```bash
133
+ npm install --ignore-scripts @deepseek-ai/libreoffice-kit@0.1.3
134
+ ```
135
+
136
+ The exact optional peer is not a mandatory engine download for ordinary consumers. Windows also needs the Microsoft Visual C++ v14 runtime matching Node's architecture. Missing dependency/engine returns `unavailable` with guidance.
137
+
138
+ `ppt_render {pptxPath:"report.pptx",format:"both"}` reads the final PPTX without resaving it and returns page PNGs, PDF and `receiptPath`. Pass that path as `renderReceipt` to `ppt_check` to recheck the current PPTX and every output's digest. Editing the source or outputs invalidates the receipt. Static artifacts do not retain animation. LibreOffice/PowerPoint/WPS may lay out files differently; font diagnostics do not guarantee every glyph or install fonts. See [integration details](docs/LIBREOFFICE-INTEGRATION-2026-10-01.md).
139
+
140
+ CLI supports `--slides @slides.json`, `--brand @brand.json`, `--template weekly`, `--edit report.json --edits @edits.json --revision 0`, `--undo report.json --revision 1`, `--check report.json`, and `--render report.pptx --format both`. Explicit receipt validation uses `--check report.json --render-receipt path/to/render-receipt.json`; failure returns a nonzero exit code.
141
+
142
+ For standalone usage copy the entire skill directory and run `npm install --ignore-scripts` there. Plain text remains usable without Office Kit; image/chart/logo/footer PPTX export needs Office Kit 0.21.0. `dsh-ppt/deck-advanced` exports `buildDeckAsync`, `editDeck`, `undoDeck`, `checkDeckAsync` and `renderDeck`. The legacy synchronous `deck-core` API supports plain text and explicitly rejects unsupported media inputs.
143
+
144
+ ## Theme palette
145
+
146
+ | ID | Name | Mood | Best for |
147
+ | --- | --- | --- | --- |
148
+ | `data` | Data Drift (default) | Futuristic / immersive | AI, tech launches, research |
149
+ | `swiss` | Swiss Pulse | Precise / rational | Data, SaaS, developer tools |
150
+ | `velvet` | Velvet Standard | Premium / restrained | Executive decks, brand, investor pitches |
151
+ | `soft` | Soft Signal | Warm / human | Brand stories, training, personal talks |
152
+ | `bold` | Maximalist Type | Loud / kinetic | Product launches, events, big moments |
153
+
154
+ Themes are derived from [dsh-hyperframes](https://github.com/STARDUSTLC666/dsh-hyperframes) `visual-styles.md`. Full palettes: `skills/dsh-ppt/references/themes.md`. Run `ppt_themes { preview: true, outputDir: "dist" }` for a side-by-side gallery and SVG palette cards.
155
+
156
+ ## Markdown input rules
157
+
158
+ - The first `# heading` becomes the cover title; its first paragraph becomes the cover subtitle.
159
+ - Each `## section` becomes one slide: lists produce `bullets` slides; empty sections produce `section` dividers.
160
+ - Plain text without headings: the first paragraph is the cover, then every 5 sentences become one slide.
161
+ - A single sentence automatically produces a complete 3-slide structure: cover → core idea → closing.
162
+ - Long tables paginate automatically with repeated headers and up to 8 data rows per page. Notes stay on the first page. Tables support 8 columns and 60 characters per cell; oversized input returns an actionable error. Short rows are padded consistently in all artifacts.
163
+ - `maxSlides` counts pages after expansion. Exceeding it fails before writing files; raise the limit (up to 120) or split the deck. Middle slides are never silently discarded.
164
+ - For precise control, use structured `slides` (`cover | section | bullets | statement | quote | table | closing`), with `rows` for tables and `notes` for speaker notes.
165
+
166
+ ## Configuration
167
+
168
+ No required configuration. Optional:
169
+
170
+ ```yaml
171
+ - id: dsh-ppt
172
+ config:
173
+ outputDir: E:\decks # optional; defaults to the session working directory
174
+ maxSlides: 40 # optional; default 60 (3–120)
175
+ defaultTheme: data # optional; used when ppt_create has no theme
176
+ defaultLang: en # optional; used when ppt_create has no lang (zh/en/bilingual)
177
+ ```
178
+
179
+ The `DSH_PPT_OUTPUT_DIR` env var can also set the default output directory; the `ppt_create` `outputDir`/`theme`/`lang` arguments have the highest priority.
180
+
181
+ Relative paths and configured output directories resolve per session cwd without changing process cwd. Cancellation is checked during generation and before atomic commit of the trio. Optional rendering defaults to a unique `<deck>-render` directory beside the PPTX.
182
+
183
+ ## Bilingual support
184
+
185
+ - `lang` argument: `zh` (default) / `en` / `bilingual` controls the player UI, page numbers, and closing defaults.
186
+ - Content language is up to the author: for a bilingual deck, prefer "Chinese title + English subtitle" or generate two decks from the same outline.
187
+ - Plugin docs come in Chinese (README.md) and English (this file); CLI and skill error messages are in Chinese.
188
+
189
+ ## Engineering quality
190
+
191
+ - Tools and the skill share an asynchronous generator. The legacy synchronous plain-text API remains available.
192
+ - Images and native charts use MIT-licensed `@office-kit/pptx@0.21.0`; optional rendering is loaded on demand.
193
+ - Unit tests cover registration contracts, JSON Schema, theme resolution, Markdown parsing, artifact generation, PPTX part integrity, and the CLI.
194
+ - No `eval` / `child_process` / secrets; artifacts are only written to the user-specified local directory.
195
+
196
+ ## Development
197
+
198
+ ```sh
199
+ pnpm install
200
+ pnpm run build # tsc → lib/
201
+ pnpm test # build + node --test (registration/config/engine/CLI)
202
+ pnpm run smoke:cli # bare CLI smoke test, generates .smoke-deck
203
+ ```
204
+
205
+ ## Known limitations
206
+
207
+ - The PPTX uses a blank layout plus text boxes: text is editable in PowerPoint / WPS, but no smart master placeholders yet.
208
+ - A one-sentence input produces a minimal 3-slide structure; for richer decks, expand the content into a Markdown outline first.
209
+ - `bilingual` only localizes the player UI; it does not translate content.
210
+ - Selected-page editing supports this plugin's JSON project, not arbitrary external PPTX editing.
211
+ - Text fit checks are static estimates; inspect actual rendered output for clipping and font substitution.
212
+
213
+ ## License
214
+
215
+ Plugin: MIT. Office Kit: MIT. Optional official LibreOffice Kit and its engine retain their own source/license/third-party notices. This community plugin is not officially maintained by DeepSeek.
216
+
217
+ ## Related projects
218
+
219
+ - [dsh-hyperframes](https://github.com/STARDUSTLC666/dsh-hyperframes) — HTML video skills (source of this plugin's visual styles)
220
+ - [dsh-remotion](https://github.com/STARDUSTLC666/dsh-remotion) — React programmatic video skills
221
+ - [dsh-email](https://github.com/STARDUSTLC666/dsh-email) — Email toolset