Deckforge
The presentation layer for DeepSeek Harness. One project, three loops — create, refine, deliver — and gates that prove the file opens and reads correctly.
Deckforge builds native PowerPoint decks: text stays text, charts stay editable charts with their data workbook embedded, and nothing is rasterised. It also exports a self-contained HTML deck that presents offline, a PDF, page images, and a reproducible bundle.
deck_new → deck_plan → deck_write → deck_check → deck_render → deck_export
Why another presentation tool
Existing DSH presentation plugins are strong at one loop each: pipelines generate well and cannot be touched, workbenches edit well and cannot import, file editors patch a foreign deck and cannot create. Deckforge runs all three loops on one project, with one revision model and one receipt chain.
- Create. Structured pages compile to OOXML with a theme, layout recipes and speaker notes.
- Refine. Select an object, change it, see the diff, undo it — from the model or from the workbench.
- Deliver. Gates that name what was checked, on which bytes, with which engine. A missing renderer is a recorded skip, never a pass.
Install
# Clone the extension and install the checkout
git clone https://github.com/DSH-Extensions-list/dsh-deckforge.git
cd dsh-deckforge
dsh plugin install "$PWD"
The bundle is plain ESM with node builtins only: no compiler, no Python environment, no native module. LibreOffice and pdftoppm are optional and only affect the render gate.
Refresh the Harness window after installation and look for Deck Studio in the sidebar.
Development
Use Node.js 22.19 or later. No dependency install or build step is required.
npm run check
GitHub Actions runs the English check and the test suite on Node.js 22 and 24. The automated checks cover the compiler, project operations and workbench registration/routes. Manual verification on 2026-10-31 confirmed the sidebar entry and workbench in the running local Harness web frontend: empty decks, adding pages, switching between discovered projects, selecting text, quick edits, inspector refresh, history restore, checks, and PowerPoint/HTML export. Semantic requests are explicitly deferred to chat. This does not establish Microsoft PowerPoint compatibility; opening exports in Microsoft PowerPoint remains a separate manual check.
Sixty seconds
deck_new { "dir": "decks/q3-review", "title": "Q3 review", "theme": "midnight", "minutes": 12, "venue": "conference" }
deck_plan { "venue": "conference", "minutes": 12 }
deck_write { "dir": "decks/q3-review", "pages": [
{ "layout": "cover", "title": "Latency fell 40%", "subtitle": "Platform review, Q3", "notes": "Open with the number." },
{ "layout": "chart", "title": "p95 fell every quarter", "chart": { "kind": "column", "categories": ["Q1","Q2","Q3","Q4"], "series": [{ "name": "p95 ms", "values": [210,180,140,126] }] }, "source": "Source: billing export" }
] }
deck_check { "dir": "decks/q3-review" }
deck_export { "dir": "decks/q3-review", "formats": ["pptx", "html"] }
The result is decks/q3-review/export/q3-review-r2.pptx, a file PowerPoint opens without a repair prompt, and an HTML deck that presents with arrow keys, S for notes and Ctrl+P to print.
The tool surface
| Tool | Job |
|---|---|
deck_new |
Create a project with a theme, a venue and a slot. |
deck_plan |
Turn a venue and a duration into a slide budget and a per-beat plan. |
deck_write |
Append pages from structured content; layouts are inferred or named. |
deck_edit |
Atomic operations with a semantic diff: move, restyle, align, add, delete, reorder. |
deck_import |
.pptx or Markdown in, project out, with a loss report. |
deck_patch |
Surgical edits on a foreign .pptx: text, images, order, notes. |
deck_splice |
Replace one slide and prove every other part is byte-identical. |
deck_check |
Schema, layout, content and compatibility gates without a renderer. |
deck_render |
Raster the real file, report pixel statistics and the visual diff. |
deck_review |
A repair plan — proposed operations, never applied. |
deck_export |
pptx, html, pdf, png, notes, bundle; each with a receipt. |
deck_status |
Revision, pages, receipts, engines, talk time. |
deck_verify |
Re-hash a file and say whether its receipt still holds. |
Quality gates
| Gate | Checks | Blocks export |
|---|---|---|
| G1 schema | types, ids, bounds, theme refs | yes |
| G2 layout | out-of-bounds, measured overflow, overlap with declared exceptions, contrast, safe area, design budget | yes on errors |
| G3 content | talk time against the slot, duplicate headlines, unsourced numbers | advisory |
| G4 render | LibreOffice raster of the actual file, blank-page detection | recorded, skipped when unavailable |
| G5 diff | ΔE against the previous render | advisory |
| G6 compat | the minimum Office version the features need | advisory |
Every gate writes a receipt: { gate, engine, engineVersion, input, output, findings, skipped, at }.
The project
deck/
deck.yaml # title, size, theme, meta, page order
pages/01-cover.yaml # elements: text | shape | line | image | table | chart
theme.json # palette, type scale, spacing, radius
assets/ # images
manifest.json # revision, hashes, receipts, export history
revisions/ # append-only snapshots
export/ # pptx, html, pdf, png, bundle
Rules: 1 px = 1 pt, origin top-left, 960x540 default; page order is z-order; element ids survive import and re-export; manifest.revision is the optimistic lock; every export records the SHA-256 of the bytes it produced.
Themes
Eight design systems: slate, paper, midnight, ember, forest, mono, ocean, sand. A theme is data — palette roles, a type scale, spacing and radius — and every surface (PowerPoint, HTML, workbench) reads the same file.
The workbench
Deck Studio is a panel in the Harness UI: a page strip, a vector canvas and an inspector. Drag an object to move it, edit text in place, change a style, add or reorder pages, switch theme, run the gates and export. Every write goes through the same routes the tools use, so the workbench and the model share one revision and one lock.
English only
The repository is English-only by design: tools, skills, errors, docs, templates, tests. npm run check:english fails on any CJK codepoint. The model still answers in the user's language; the product speaks English.
Compatibility
- PowerPoint 2010 or later reads every feature the compiler emits; 2007 reads all but WebP images.
- LibreOffice renders the deck and is used by the render gate when present.
- No network at presentation time: the HTML deck inlines its images and draws its charts as inline SVG.
Licence
MIT. The design was informed by nine MIT/Apache-licensed DSH presentation plugins; see NOTICE for what was studied and what was written fresh.
No comments yet. Be the first to write one.