slidemind 0.1.7 → 0.1.9
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.md +10 -7
- package/README.md +20 -7
- package/bin/slidemind.mjs +393 -39
- package/package.json +2 -1
- package/skills/create-slides/SKILL.md +68 -16
- package/skills/search/SKILL.md +15 -2
- package/src/bridge/build-and-push.mjs +11 -0
- package/src/bridge/bundle.mjs +15 -4
- package/src/bridge/capture.mjs +20 -2
- package/src/bridge/client.mjs +99 -0
- package/src/builders/build.mjs +83 -11
- package/src/builders/gate-server.mjs +364 -0
- package/src/builders/plan-markdown-edit.mjs +120 -0
- package/src/builders/plan-md.mjs +216 -0
- package/src/builders/plan-overlay.js +1778 -0
- package/src/builders/plan.mjs +696 -0
- package/src/builders/red-thread-backbone.mjs +194 -0
- package/src/builders/resolve-skill.mjs +40 -5
- package/src/builders/review-overlay.js +191 -13
- package/src/builders/review.mjs +196 -68
- package/src/builders/storyboard-markdown.mjs +118 -0
- package/src/builders/storyboard-schema.mjs +180 -0
- package/src/builders/visual-families.mjs +32 -0
- package/src/pptx/app-props.mjs +222 -0
- package/src/pptx/hidden-ole.mjs +125 -0
- package/src/pptx/image-extensions.mjs +190 -0
- package/src/pptx/ooxml.mjs +169 -0
- package/src/pptx/read-local.mjs +206 -0
- package/src/pptx/slide-swap.mjs +429 -0
- package/src/pptx/zip.mjs +30 -0
package/CLAUDE.md
CHANGED
|
@@ -78,7 +78,8 @@ slidemind/
|
|
|
78
78
|
│ READ from the bundle's workflow/search.md — owned by the add-in.
|
|
79
79
|
├── src/ implementation of the slidemind CLI
|
|
80
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), resolve-skill.mjs (→ bundle), lint.mjs (runs the add-in's engine)
|
|
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)
|
|
82
|
+
│ ├── pptx/ host-free local-.pptx support (fflate-based): read-local.mjs (read a file's slides — output-identical to the host read), slide-swap.mjs (fold a picked slide into a deck as native .pptx — swaps it into the lowest slot the splicer reads, then prunes the package to that slide's dependency closure so a slice carries only what it needs), zip.mjs + ooxml.mjs (shared unzip/order helpers)
|
|
82
83
|
│ └── installers/ per-harness installers: claude.mjs, codex.mjs, opencode.mjs, lib.mjs
|
|
83
84
|
├── archive/ retired code/assets (local exporter, icon library, brand design files) — NOT shipped
|
|
84
85
|
├── decks/ the user's working decks; sources are slides/*.jsx, design via .bundle-ref.json
|
|
@@ -96,9 +97,10 @@ We **do not** ship separate slash commands. Earlier versions had a top-level `co
|
|
|
96
97
|
slidemind ready [deck] # one-shot session start: connection ladder + design resolution + bundle download + deck bind; --to/--force/--connect-only/--json (HOST REQUIRED)
|
|
97
98
|
slidemind doctor # read-only connection diagnostics (ordered next-action ladder; does NOT materialize or bind — `ready` is the preflight)
|
|
98
99
|
slidemind presentations # list PowerPoint windows registered with the add-in
|
|
99
|
-
slidemind read [presId]
|
|
100
|
+
slidemind read [presId|file.pptx] # pull an open presentation's content (presId; HOST REQUIRED) OR read a local .pptx on disk (file path; host-free) — same per-slide output (--mode summary|raw)
|
|
100
101
|
slidemind download-bundle [deck] # materialize the active corporate design's bundle locally
|
|
101
102
|
slidemind new <name> # scaffold ./decks/<name>/ (auto-binds to the open design when unambiguous + bundle already materialized; --to/--no-bind)
|
|
103
|
+
slidemind plan <deck> # plan sign-off gate on <deck>/plan.md; markdown editor + live preview + overall feedback, blocks for approve/comments (host-free)
|
|
102
104
|
slidemind build <deck> # build self-contained HTML preview
|
|
103
105
|
slidemind review <deck> # spatial preview-review gate; blocks for approve/comments (host-free)
|
|
104
106
|
slidemind build-pptx <deck> # render native .pptx via the add-in (HOST REQUIRED)
|
|
@@ -107,7 +109,7 @@ slidemind push <deck> # render + push slides into a running PowerPo
|
|
|
107
109
|
slidemind ls engines # list the live engine catalog (image + slide; --type/--subtype) (HOST REQUIRED)
|
|
108
110
|
slidemind search "<query>" # search an engine for imagery or slides (--engine/--intent/--top) (HOST REQUIRED)
|
|
109
111
|
slidemind insert-slide [opts] # reuse found slide(s) live into a window (--search/--pick/--to/--at) (HOST REQUIRED)
|
|
110
|
-
slidemind add-slide [opts] # fold
|
|
112
|
+
slidemind add-slide [opts] # fold slide(s) into a deck as native .pptx — from an engine (--search/--pick/--deck/--to/--at; HOST REQUIRED) or a local file (--from <file.pptx>/--pick/--deck/--at; host-free, mutually exclusive with --search)
|
|
111
113
|
slidemind pair <code> # pair with an add-in environment (copy from its "Connect CLI")
|
|
112
114
|
slidemind whoami # list every paired environment (* = default)
|
|
113
115
|
slidemind use <url|env> # set the default environment
|
|
@@ -126,10 +128,10 @@ slidemind uninstall --for <target> # remove the skill (also clears the bundle
|
|
|
126
128
|
|
|
127
129
|
The corporate design is **served by the add-in, not shipped by the CLI.** `slidemind download-bundle` materializes it (keyed by the deck's `.bundle-ref.json`) into `${XDG_CACHE_HOME:-~/.cache}/slidemind/bundles/<presFP>/`:
|
|
128
130
|
|
|
129
|
-
- `design.md` — the **single source of brand rules** (tokens, type scale, layout palette, the authoring contract
|
|
131
|
+
- `design.md` — the **single source of brand rules** (tokens, type scale, layout palette, the authoring contract). **Read it; never restate it.**
|
|
130
132
|
- `corporate-design.css` — the design tokens to link/inline and compose with token classes.
|
|
131
133
|
- `layouts/*.jsx` + `layouts/layouts.css` — the closed layout palette to compose against.
|
|
132
|
-
- `assets
|
|
134
|
+
- `assets/` — brand assets. (Engine discovery is **live-only** via `slidemind ls engines` — new backends no longer ship an engine list on the bundle wire; `engines.json` is still written for older backends but is `[]` going forward.)
|
|
133
135
|
|
|
134
136
|
Both skills are **brand-agnostic workflow guidance** and must not duplicate any brand rule — `scripts/check-skill-parity.mjs` (`npm run lint:parity`) scans **every** `skills/<name>/SKILL.md` and fails the build if a hardcoded color, design token, or layout name leaks into any skill doc.
|
|
135
137
|
|
|
@@ -146,17 +148,18 @@ Both skills are **brand-agnostic workflow guidance** and must not duplicate any
|
|
|
146
148
|
```bash
|
|
147
149
|
slidemind ready <deck> # do this first: connection ladder + resolve the open design + materialize its bundle + bind the deck (host required)
|
|
148
150
|
slidemind download-bundle <deck> # lower-level: materialize-only (no connection ladder, no bind) — `ready` now covers this
|
|
151
|
+
slidemind plan <deck> # plan sign-off gate on <deck>/plan.md; blocks until approve/comments (host-free)
|
|
149
152
|
slidemind build <deck> # HTML preview (reads the materialized bundle)
|
|
150
153
|
slidemind build <deck> --open # HTML + open in browser
|
|
151
154
|
slidemind review <deck> # spatial preview-review gate; blocks until approve/comments (host-free)
|
|
152
155
|
slidemind build-pptx <deck> # native PPTX rendered server-side via the add-in (host required)
|
|
153
156
|
slidemind view-draft <deck> # per-slide PNG draft preview, no push/no .pptx — the agent's look-before-review self-check (host-free once the bundle is cached)
|
|
154
157
|
slidemind push <deck> # render + push into a running PowerPoint (host required)
|
|
155
|
-
slidemind read [presId]
|
|
158
|
+
slidemind read [presId|file.pptx] # pull current content of an open presentation (presId; host required) OR read a local .pptx (file path; host-free) (--mode summary|raw)
|
|
156
159
|
slidemind ls engines # list the live engine catalog (image + slide) (host required)
|
|
157
160
|
slidemind search "<query>" # search an engine for imagery or slides (host required)
|
|
158
161
|
slidemind insert-slide [opts] # reuse found slide(s) live into a window (host required)
|
|
159
|
-
slidemind add-slide [opts] # fold
|
|
162
|
+
slidemind add-slide [opts] # fold slide(s) into a deck as native .pptx — engine (--search; host required) or local file (--from <file.pptx>; host-free)
|
|
160
163
|
npm run lint:parity # assert EVERY skill (create-slides + search) carries no brand rules (CI guard)
|
|
161
164
|
```
|
|
162
165
|
|
package/README.md
CHANGED
|
@@ -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 (`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>`).
|
|
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. Reading a local PowerPoint file (`read <file.pptx>`) or folding a slide from one into a deck (`add-slide --from <file.pptx>`) is host-free too — no PowerPoint, no pairing, no bundle needed. `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
|
|
|
@@ -100,7 +100,18 @@ The global install lands in `%APPDATA%\npm`, which the Node installer puts on yo
|
|
|
100
100
|
slidemind --version
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
-
If `npm install -g` fails with `EACCES`, you've hit a permissions issue with
|
|
103
|
+
If `npm install -g` fails with `EACCES` on `/usr/local/lib/node_modules`, you've hit a permissions issue with the official macOS Node installer: npm's global package directory is system-owned. Avoid `sudo npm`; it can leave root-owned files in npm's cache and makes later updates brittle. Either install a user-owned Node with [Homebrew](https://brew.sh) or [nvm](https://github.com/nvm-sh/nvm), or move npm's global prefix into your home directory:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
mkdir -p ~/.npm-global
|
|
107
|
+
npm config set prefix ~/.npm-global
|
|
108
|
+
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.zshrc
|
|
109
|
+
source ~/.zshrc
|
|
110
|
+
npm install -g slidemind
|
|
111
|
+
slidemind init --for all
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Credentials are stored under `~/.config/slidemind/`.
|
|
104
115
|
|
|
105
116
|
### Linux
|
|
106
117
|
|
|
@@ -161,11 +172,11 @@ slidemind build my-deck # build a self-contained HTML preview (offline
|
|
|
161
172
|
slidemind review my-deck # spatial preview review: leave comments / approve in the browser (offline)
|
|
162
173
|
slidemind build-pptx my-deck # render a native .pptx via the add-in (host required)
|
|
163
174
|
slidemind push my-deck # stream slides straight into an open PowerPoint (host required)
|
|
164
|
-
slidemind read <presId>
|
|
175
|
+
slidemind read <presId|file.pptx> # read an open presentation (host required) or a local .pptx on disk (host-free)
|
|
165
176
|
slidemind ls engines # list the active design's image + slide engines (host required)
|
|
166
177
|
slidemind search "shield" # search an engine for imagery or slides (host required)
|
|
167
178
|
slidemind insert-slide ... # reuse a found slide live into an open PowerPoint (host required)
|
|
168
|
-
slidemind add-slide ... # fold a found slide into a deck as a native .pptx
|
|
179
|
+
slidemind add-slide ... # fold a found slide — or one from a local .pptx (--from, host-free) — into a deck as a native .pptx
|
|
169
180
|
```
|
|
170
181
|
|
|
171
182
|
`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.
|
|
@@ -197,6 +208,7 @@ slidemind ready [deck] One-shot session start: connect + resolve the o
|
|
|
197
208
|
--to <presId> --force --connect-only --json
|
|
198
209
|
slidemind new <name> Scaffold ./decks/<name>/ (auto-binds to the open design when available)
|
|
199
210
|
--to <presId> --no-bind
|
|
211
|
+
slidemind plan <deck> Plan sign-off gate on <deck>/plan.md; blocks for approve/comments (offline)
|
|
200
212
|
slidemind build <deck> Build a self-contained HTML preview (offline)
|
|
201
213
|
slidemind review <deck> Spatial preview review; blocks for approve/comments (offline)
|
|
202
214
|
slidemind build-pptx <deck> Render a native .pptx via the add-in (host required)
|
|
@@ -210,13 +222,14 @@ slidemind view-slide [opts] Fetch a slide result's preview image to a file
|
|
|
210
222
|
--search <id> --pick <n> --to <presId> [--out <dir>]
|
|
211
223
|
slidemind insert-slide [opts] Insert reused slide results live into a window (host required)
|
|
212
224
|
--search <id> --pick <n[,n,...]> --to <presId> [--at <N>]
|
|
213
|
-
slidemind add-slide [opts] Fold
|
|
225
|
+
slidemind add-slide [opts] Fold slide(s) into a deck as native .pptx — from an engine (host required) or a local file (host-free)
|
|
214
226
|
--search <id> --pick <n[,n,...]> --deck <deck> [--to <presId>] [--at <N>]
|
|
227
|
+
--from <file.pptx> --pick <n[,n,...]> --deck <deck> [--at <N>] (local file; host-free; not with --search)
|
|
215
228
|
slidemind download-result [opts] Download image/icon result(s) into a deck's assets/ (host required)
|
|
216
229
|
--search <id> --pick <n[,n,...]> --deck <deck> --to <presId> [--icon-color <hex[,hex,...]>]
|
|
217
230
|
slidemind download-bundle [deck] Materialize the active corporate design locally (host required; lower-level — `ready` covers this)
|
|
218
231
|
slidemind presentations List PowerPoint windows registered with the add-in
|
|
219
|
-
slidemind read [presId]
|
|
232
|
+
slidemind read [presId|file.pptx] Read an open presentation (presId; host required) or a local .pptx on disk (file path; host-free)
|
|
220
233
|
--mode summary|raw (default raw) [--to <presId>] [--json]
|
|
221
234
|
slidemind pair <code> Pair with an add-in (copy the code from "Connect CLI")
|
|
222
235
|
slidemind whoami Show paired environment(s)
|
|
@@ -307,7 +320,7 @@ Equivalently: `npm install -g slidemind@latest && slidemind init --for all`.
|
|
|
307
320
|
| `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. |
|
|
308
321
|
| `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. |
|
|
309
322
|
| `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. |
|
|
310
|
-
| `EACCES` on `npm install -g` (macOS/Linux) | Don't `sudo npm`. Use a user-owned Node via [nvm](https://github.com/nvm-sh/nvm) or Homebrew, or set
|
|
323
|
+
| `EACCES` on `npm install -g` (macOS/Linux) | Don't `sudo npm`. Use a user-owned Node via [nvm](https://github.com/nvm-sh/nvm) or Homebrew, or run `mkdir -p ~/.npm-global && npm config set prefix ~/.npm-global`, add `~/.npm-global/bin` to `PATH`, then retry. |
|
|
311
324
|
|
|
312
325
|
---
|
|
313
326
|
|