slidemind 0.1.6 → 0.1.8
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/.claude-plugin/plugin.json +1 -7
- package/CLAUDE.md +21 -15
- package/README.md +21 -10
- package/bin/slidemind.mjs +836 -35
- package/package.json +2 -5
- package/skills/create-slides/SKILL.md +85 -60
- package/skills/search/SKILL.md +27 -27
- package/src/bridge/build-and-push.mjs +166 -55
- package/src/bridge/bundle.mjs +49 -7
- package/src/bridge/capture.mjs +2 -2
- package/src/bridge/client.mjs +374 -44
- package/src/bridge/engine-download.mjs +89 -0
- package/src/{mcp → bridge}/recolor.mjs +10 -9
- package/src/builders/build.mjs +261 -23
- package/src/builders/gate-server.mjs +223 -0
- package/src/builders/lint.mjs +2 -2
- package/src/builders/plan-md.mjs +216 -0
- package/src/builders/plan-overlay.js +747 -0
- package/src/builders/plan.mjs +575 -0
- package/src/builders/resolve-skill.mjs +40 -5
- package/src/builders/review-overlay.js +172 -16
- package/src/builders/review.mjs +139 -80
- package/src/installers/claude.mjs +10 -17
- package/src/installers/codex.mjs +14 -77
- package/src/installers/opencode.mjs +10 -18
- package/src/lib/reused-slides.mjs +2 -4
- package/src/mcp/server.mjs +0 -958
package/CLAUDE.md
CHANGED
|
@@ -9,7 +9,7 @@ This repository (`STATWORX/intern-slidemind-cli`) publishes **slidemind** — th
|
|
|
9
9
|
The package contains two layers:
|
|
10
10
|
|
|
11
11
|
1. **An installable skill** (canonical markdown + assets) that ships into a coding-agent harness so the agent knows how to plan, compose, and review slides on-brand — reading every brand rule from the add-in's design bundle.
|
|
12
|
-
2. **A Node CLI
|
|
12
|
+
2. **A Node CLI** (`slidemind`) that exposes the add-in bridge (render `.pptx`, push slides into an open window, search the brand engine) to the user and the agent directly. The agent drives it by running `slidemind <command>` in its shell — there is no separate tool layer.
|
|
13
13
|
|
|
14
14
|
Both drive the same add-in bridge, so an agent and a human end up producing the same artefact: native PowerPoint slides on the active corporate design.
|
|
15
15
|
|
|
@@ -64,25 +64,26 @@ slidemind/
|
|
|
64
64
|
├── .claude-plugin/
|
|
65
65
|
│ └── plugin.json Claude Code plugin manifest
|
|
66
66
|
├── bin/
|
|
67
|
-
│ └── slidemind.mjs CLI dispatcher (presentations, read, download-bundle, init, build, build-pptx, view-draft, push, ls engines, search, insert-slide, add-slide, install, pair/whoami/use/logout)
|
|
67
|
+
│ └── slidemind.mjs CLI dispatcher (ready, doctor, presentations, read, download-bundle, new, init, build, build-pptx, view-draft, push, ls engines, search, insert-slide, add-slide, install, pair/whoami/use/logout)
|
|
68
68
|
├── skills/ canonical, installable skill payload — thin CLI workflow glue only
|
|
69
69
|
│ ├── create-slides/
|
|
70
|
-
│ │ └── SKILL.md authoring skill: host gate + intake/plan + create flow +
|
|
71
|
-
│ │
|
|
72
|
-
│ │
|
|
70
|
+
│ │ └── SKILL.md authoring skill: stage-todo bootstrap + host gate + intake/plan + create flow +
|
|
71
|
+
│ │ the vocabulary→CLI command map (the harness-neutral verbs of the bundle's
|
|
72
|
+
│ │ workflow/flow.md). Brand AND the authoring workflow craft (flow/create/edit/
|
|
73
|
+
│ │ composition/layouts/authoring/build-export) are READ from the materialized
|
|
74
|
+
│ │ bundle — owned by the add-in.
|
|
73
75
|
│ └── search/
|
|
74
76
|
│ └── SKILL.md engine-search + slide-reuse skill (installs as slidemind-search): host gate +
|
|
75
|
-
│ discover → search → pick → reuse loop + CLI
|
|
76
|
-
│ from the bundle's workflow/search.md — owned by the add-in.
|
|
77
|
+
│ discover → search → pick → reuse loop + vocabulary→CLI command map. The craft is
|
|
78
|
+
│ READ from the bundle's workflow/search.md — owned by the add-in.
|
|
77
79
|
├── src/ implementation of the slidemind CLI
|
|
78
|
-
│ ├── bridge/ add-in local-bridge: client.mjs, bundle.mjs (materialize), build-and-push.mjs (server render; native-slide splicing)
|
|
79
|
-
│ ├── builders/ build.mjs (HTML preview), review.mjs (spatial preview-review gate + local server), resolve-skill.mjs (→ bundle), lint.mjs (runs the add-in's engine)
|
|
80
|
-
│ ├── mcp/ MCP server: list/read/push + list_engines/search_engine/view_slide/insert_slide/add_slide_to_deck/download_result
|
|
80
|
+
│ ├── bridge/ add-in local-bridge: client.mjs, bundle.mjs (materialize), build-and-push.mjs (server render; native-slide splicing), engine-download.mjs + recolor.mjs (image/icon fetch + recolour)
|
|
81
|
+
│ ├── builders/ build.mjs (HTML preview), review.mjs (spatial preview-review gate + local server; stable per-deck port, graceful fallback, tab reuse across rounds), plan.mjs (plan sign-off gate) + plan-overlay.js + plan-md.mjs (markdown→HTML) + gate-server.mjs (shared gate primitives), resolve-skill.mjs (→ bundle), lint.mjs (runs the add-in's engine)
|
|
81
82
|
│ └── installers/ per-harness installers: claude.mjs, codex.mjs, opencode.mjs, lib.mjs
|
|
82
83
|
├── archive/ retired code/assets (local exporter, icon library, brand design files) — NOT shipped
|
|
83
84
|
├── decks/ the user's working decks; sources are slides/*.jsx, design via .bundle-ref.json
|
|
84
85
|
├── docs/slidemind-cli-connect/ the connect architecture (bridge contract, bundle, engine, phasing)
|
|
85
|
-
└── test/ node:test suites (bridge client/bundle/build-and-push/resolve-skill/lint-wrapper/packaging/engine-search/native-slides/cli-dispatch/
|
|
86
|
+
└── test/ node:test suites (bridge client/bundle/build-and-push/resolve-skill/lint-wrapper/packaging/engine-search/native-slides/cli-dispatch/cli-download-result)
|
|
86
87
|
```
|
|
87
88
|
|
|
88
89
|
The skills at the **root** of `skills/` are deliberate: that's the layout Claude Code, Codex (0.128+), and opencode all expect for skill auto-discovery — `<harness-root>/skills/<name>/SKILL.md`. There are **two** skills, each auto-discovered by `listSkills()` (no installer change to add one): `create-slides` (installs as `slidemind-create-slides`) owns the user-facing plan / create / edit / render workflow, and `search` (installs as `slidemind-search`) owns engine discovery + slide reuse (search → insert live / fold into a deck). Both are **brand-agnostic** — every brand rule lives in the per-CD bundle's `design.md` / `workflow/*.md`, which the skills point the agent at. (Pre-skills opencode versions used an `agent/` shim under `~/.config/opencode/`; the installer removes any leftover from those installs on every run.)
|
|
@@ -92,10 +93,13 @@ We **do not** ship separate slash commands. Earlier versions had a top-level `co
|
|
|
92
93
|
## CLI surface
|
|
93
94
|
|
|
94
95
|
```bash
|
|
96
|
+
slidemind ready [deck] # one-shot session start: connection ladder + design resolution + bundle download + deck bind; --to/--force/--connect-only/--json (HOST REQUIRED)
|
|
97
|
+
slidemind doctor # read-only connection diagnostics (ordered next-action ladder; does NOT materialize or bind — `ready` is the preflight)
|
|
95
98
|
slidemind presentations # list PowerPoint windows registered with the add-in
|
|
96
99
|
slidemind read [presId] # pull the current content of an open presentation (--mode summary|raw) (HOST REQUIRED)
|
|
97
100
|
slidemind download-bundle [deck] # materialize the active corporate design's bundle locally
|
|
98
|
-
slidemind new <name> # scaffold ./decks/<name>/
|
|
101
|
+
slidemind new <name> # scaffold ./decks/<name>/ (auto-binds to the open design when unambiguous + bundle already materialized; --to/--no-bind)
|
|
102
|
+
slidemind plan <deck> # plan sign-off gate on <deck>/plan.md; markdown editor + live preview + overall feedback, blocks for approve/comments (host-free)
|
|
99
103
|
slidemind build <deck> # build self-contained HTML preview
|
|
100
104
|
slidemind review <deck> # spatial preview-review gate; blocks for approve/comments (host-free)
|
|
101
105
|
slidemind build-pptx <deck> # render native .pptx via the add-in (HOST REQUIRED)
|
|
@@ -110,7 +114,7 @@ slidemind whoami # list every paired environment (* = default)
|
|
|
110
114
|
slidemind use <url|env> # set the default environment
|
|
111
115
|
slidemind logout [url|env] # unpair one environment (--all unpairs every one)
|
|
112
116
|
slidemind init --for <target> # install skill into claude | codex | opencode | all (also clears the bundle cache)
|
|
113
|
-
slidemind uninstall --for <target> # remove skill
|
|
117
|
+
slidemind uninstall --for <target> # remove the skill (also clears the bundle cache)
|
|
114
118
|
```
|
|
115
119
|
|
|
116
120
|
`<deck>` resolves as: absolute path → `./<arg>` if it exists → `./decks/<arg>`. The decks directory is `./decks/` by default; override with `SLIDEMIND_DECKS=/abs/path`.
|
|
@@ -136,12 +140,14 @@ Both skills are **brand-agnostic workflow guidance** and must not duplicate any
|
|
|
136
140
|
- No hardcoded colors, sizes, or fonts in slide files. Everything goes through the tokens in the bundle's `corporate-design.css`.
|
|
137
141
|
- **Never add a layout.** The layout palette is the closed set in `<bundle>/layouts/` — read-only. Need markup a layout doesn't expose? Build it as Mode B children of the blank-content layout the bundle's `design.md` names — never a new layout file.
|
|
138
142
|
- Re-run `slidemind push <deck>` (or `build-pptx`) after any `.jsx` change — the .pptx is rendered server-side, not edited by hand; the HTML preview is generated.
|
|
139
|
-
- For generic concept icons/images, use the brand engine: `
|
|
143
|
+
- For generic concept icons/images, use the brand engine: `slidemind search` → pick a result → `slidemind download-result` (writes into the deck's `assets/`). Don't invent SVGs. The full authoring workflow is read from the materialized bundle's `workflow/*.md` (owned by the add-in).
|
|
140
144
|
|
|
141
145
|
## Build commands (terse reference)
|
|
142
146
|
|
|
143
147
|
```bash
|
|
144
|
-
slidemind
|
|
148
|
+
slidemind ready <deck> # do this first: connection ladder + resolve the open design + materialize its bundle + bind the deck (host required)
|
|
149
|
+
slidemind download-bundle <deck> # lower-level: materialize-only (no connection ladder, no bind) — `ready` now covers this
|
|
150
|
+
slidemind plan <deck> # plan sign-off gate on <deck>/plan.md; blocks until approve/comments (host-free)
|
|
145
151
|
slidemind build <deck> # HTML preview (reads the materialized bundle)
|
|
146
152
|
slidemind build <deck> --open # HTML + open in browser
|
|
147
153
|
slidemind review <deck> # spatial preview-review gate; blocks until approve/comments (host-free)
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ Connect **Claude Code, Codex, and opencode** to the **slidemind PowerPoint add-i
|
|
|
10
10
|
|
|
11
11
|
slidemind is a **thin client**. The corporate design, the layout palette, and the native `.pptx` render all live in the **slidemind PowerPoint add-in** — this package is the bridge that lets a coding agent drive it. It ships two things:
|
|
12
12
|
|
|
13
|
-
1. **A CLI
|
|
13
|
+
1. **A CLI** that talks to a running PowerPoint over the add-in's cloud bridge — render native `.pptx`, push slides straight into an open window, and search the active design's brand engine for imagery. The agent drives it by running `slidemind <command>` in its shell.
|
|
14
14
|
2. **An installable skill** for Claude Code, Codex, and opencode — so the agent in your editor knows how to plan, compose, and review slides on-brand from the design bundle the add-in serves.
|
|
15
15
|
|
|
16
16
|
Both drive the same add-in bridge, so an agent and a human end up producing the same artefact: native PowerPoint slides on the active corporate design.
|
|
@@ -49,7 +49,7 @@ Both drive the same add-in bridge, so an agent and a human end up producing the
|
|
|
49
49
|
|
|
50
50
|
The CLI reaches PowerPoint through the add-in's **cloud relay** (no localhost, no certificates). Because of that, the machine running the CLI **does not have to be the same machine running PowerPoint** — pair once and commands route to wherever your add-in is registered.
|
|
51
51
|
|
|
52
|
-
Commands that read the design, render, push, or reach an engine (`download-bundle`, `build-pptx`, `push`, `ls engines`, `search`, `insert-slide`, `add-slide`) **require an open PowerPoint host with the add-in and an active corporate design.**
|
|
52
|
+
Commands that read the design, render, push, or reach an engine (`ready`, `download-bundle`, `build-pptx`, `push`, `ls engines`, `search`, `insert-slide`, `add-slide`) **require an open PowerPoint host with the add-in and an active corporate design.** `build`, `review`, and `view-draft` work fully offline against a previously materialized bundle. `new` scaffolds offline too; when you're paired and a design is open it also best-effort binds the new deck (otherwise it just scaffolds and hints to run `slidemind ready <slug>`).
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
@@ -59,7 +59,7 @@ The package is published to **public npm** as [`slidemind`](https://www.npmjs.co
|
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
61
|
npm install -g slidemind
|
|
62
|
-
slidemind init --for all #
|
|
62
|
+
slidemind init --for all # deploy the skill into Claude Code / Codex / opencode
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
Then confirm it's on your `PATH`:
|
|
@@ -155,7 +155,8 @@ slidemind logout # unpair this machine
|
|
|
155
155
|
## Quick start
|
|
156
156
|
|
|
157
157
|
```bash
|
|
158
|
-
slidemind
|
|
158
|
+
slidemind ready # one-shot session start: check the connection, resolve the open design, fetch its bundle (host required)
|
|
159
|
+
slidemind new my-deck # scaffold ./decks/my-deck/ (auto-binds to the open design when one is available)
|
|
159
160
|
slidemind build my-deck # build a self-contained HTML preview (offline)
|
|
160
161
|
slidemind review my-deck # spatial preview review: leave comments / approve in the browser (offline)
|
|
161
162
|
slidemind build-pptx my-deck # render a native .pptx via the add-in (host required)
|
|
@@ -167,6 +168,8 @@ slidemind insert-slide ... # reuse a found slide live into an open PowerP
|
|
|
167
168
|
slidemind add-slide ... # fold a found slide into a deck as a native .pptx (host required)
|
|
168
169
|
```
|
|
169
170
|
|
|
171
|
+
`slidemind ready` is the one command to run at the start of a session — it verifies the connection, resolves whichever corporate design the add-in has open, and downloads its bundle in a single call, printing exactly one next step if anything's missing. Continuing an existing deck? `slidemind ready <deck>` also binds the deck to that design.
|
|
172
|
+
|
|
170
173
|
Decks live under `./decks/` in your current working directory — one folder per deck: `decks/<name>/slides/*.jsx`. Override the location with `SLIDEMIND_DECKS=/abs/path`.
|
|
171
174
|
|
|
172
175
|
You don't hand-write OOXML or hardcode brand colors — slides are small `.jsx` files that compose the layouts and tokens the add-in serves. The render happens server-side in PowerPoint; `slidemind build` gives you a quick HTML preview while you iterate.
|
|
@@ -183,14 +186,18 @@ Your agent (Claude Code, Codex, or opencode) auto-discovers the `slidemind-creat
|
|
|
183
186
|
|
|
184
187
|
A second skill, `slidemind-search`, owns engine discovery and **slide reuse**: ask "is there a slide on X in our library?" or "drop in our pricing slide" and the agent searches the brand's image/slide engines, then either inserts a found slide live into PowerPoint or folds it into a deck as a native `.pptx`.
|
|
185
188
|
|
|
186
|
-
|
|
189
|
+
Under the hood the skill just runs the `slidemind` CLI in the agent's shell — list open presentations, push decks, list engines, search for imagery or slides, view a result, insert a slide live, fold a slide into a deck, and download brand imagery are all plain subcommands (see the command reference below).
|
|
187
190
|
|
|
188
191
|
---
|
|
189
192
|
|
|
190
193
|
## Command reference
|
|
191
194
|
|
|
192
195
|
```text
|
|
193
|
-
slidemind
|
|
196
|
+
slidemind ready [deck] One-shot session start: connect + resolve the open design + fetch bundle + bind deck (host required)
|
|
197
|
+
--to <presId> --force --connect-only --json
|
|
198
|
+
slidemind new <name> Scaffold ./decks/<name>/ (auto-binds to the open design when available)
|
|
199
|
+
--to <presId> --no-bind
|
|
200
|
+
slidemind plan <deck> Plan sign-off gate on <deck>/plan.md; blocks for approve/comments (offline)
|
|
194
201
|
slidemind build <deck> Build a self-contained HTML preview (offline)
|
|
195
202
|
slidemind review <deck> Spatial preview review; blocks for approve/comments (offline)
|
|
196
203
|
slidemind build-pptx <deck> Render a native .pptx via the add-in (host required)
|
|
@@ -200,11 +207,15 @@ slidemind push <deck> Build + push slides into an open PowerPoint (h
|
|
|
200
207
|
slidemind ls engines List the live engine catalog (image + slide) (host required)
|
|
201
208
|
slidemind search "<query>" Search an engine for imagery or slides (host required)
|
|
202
209
|
--engine <id> --intent auto|content|visual --top <N>
|
|
210
|
+
slidemind view-slide [opts] Fetch a slide result's preview image to a file (host required)
|
|
211
|
+
--search <id> --pick <n> --to <presId> [--out <dir>]
|
|
203
212
|
slidemind insert-slide [opts] Insert reused slide results live into a window (host required)
|
|
204
213
|
--search <id> --pick <n[,n,...]> --to <presId> [--at <N>]
|
|
205
214
|
slidemind add-slide [opts] Fold reused slide results into a deck as native .pptx (host required)
|
|
206
215
|
--search <id> --pick <n[,n,...]> --deck <deck> [--to <presId>] [--at <N>]
|
|
207
|
-
slidemind download-
|
|
216
|
+
slidemind download-result [opts] Download image/icon result(s) into a deck's assets/ (host required)
|
|
217
|
+
--search <id> --pick <n[,n,...]> --deck <deck> --to <presId> [--icon-color <hex[,hex,...]>]
|
|
218
|
+
slidemind download-bundle [deck] Materialize the active corporate design locally (host required; lower-level — `ready` covers this)
|
|
208
219
|
slidemind presentations List PowerPoint windows registered with the add-in
|
|
209
220
|
slidemind read [presId] Pull the current content of an open presentation (host required)
|
|
210
221
|
--mode summary|raw (default raw) [--to <presId>] [--json]
|
|
@@ -212,7 +223,7 @@ slidemind pair <code> Pair with an add-in (copy the code from "Connec
|
|
|
212
223
|
slidemind whoami Show paired environment(s)
|
|
213
224
|
slidemind use <url|env> Set the default environment
|
|
214
225
|
slidemind logout [url|env] Unpair an environment (--all unpairs every one)
|
|
215
|
-
slidemind init --for <target> Install the skill
|
|
226
|
+
slidemind init --for <target> Install the skill into a harness (clears the bundle cache)
|
|
216
227
|
slidemind uninstall --for <t> Remove a previously-installed skill (clears the bundle cache)
|
|
217
228
|
slidemind update [--for <t>] Fetch the latest release and redeploy
|
|
218
229
|
slidemind --help Full usage
|
|
@@ -293,7 +304,7 @@ Equivalently: `npm install -g slidemind@latest && slidemind init --for all`.
|
|
|
293
304
|
|---|---|
|
|
294
305
|
| `slidemind: command not found` (or not recognized) | The npm global bin isn't on your `PATH`. Run `npm prefix -g` and add its `bin` (Windows: `%APPDATA%\npm`) to `PATH`, or use `npx slidemind`. |
|
|
295
306
|
| PowerShell: *running scripts is disabled* | npm's `.ps1` shim hit the execution policy. Use `slidemind.cmd <command>`, or `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`. |
|
|
296
|
-
|
|
|
307
|
+
| A command can't reach PowerPoint (empty `presentations`, "no host", nothing seems connected) | Run **`slidemind ready`** — it checks pairing, the connection, the CLI version, and open windows in one shot and prints the single next step to take (open PowerPoint / click the pane / pair / update). |
|
|
297
308
|
| `slidemind presentations` is empty right after pairing (PowerPoint + add-in already open) | The just-paired task pane never registered. **Restart the add-in** — close the slidemind task pane and reopen it from the ribbon (or reopen the presentation). The pairing wizard doesn't prompt for this. |
|
|
298
309
|
| `Not paired` | In the add-in, open **Settings → General → Connect CLI**, press **Pair**, and run the shown `slidemind pair <code>`. Codes are one-time and expire — generate a fresh one if it's stale. |
|
|
299
310
|
| `build-pptx` / `push` / `search` error about no host | These require an open PowerPoint host with an active corporate design. `slidemind build` (HTML) is the only fully-offline preview. |
|
|
@@ -304,7 +315,7 @@ Equivalently: `npm install -g slidemind@latest && slidemind init --for all`.
|
|
|
304
315
|
## Uninstall
|
|
305
316
|
|
|
306
317
|
```bash
|
|
307
|
-
slidemind uninstall --for all # remove the skill
|
|
318
|
+
slidemind uninstall --for all # remove the skill from each harness
|
|
308
319
|
npm uninstall -g slidemind # remove the CLI
|
|
309
320
|
```
|
|
310
321
|
|