slidemind 0.1.9 → 0.2.1
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/marketplace.json +25 -0
- package/.claude-plugin/plugin.json +6 -3
- package/.codex-plugin/plugin.json +29 -0
- package/CLAUDE.md +25 -5
- package/README.md +24 -0
- package/bin/slidemind +7 -0
- package/bin/slidemind.cmd +2 -0
- package/bin/slidemind.mjs +480 -60
- package/package.json +2 -1
- package/skills/create-slides/SKILL.md +6 -5
- package/skills/search/SKILL.md +10 -4
- package/src/bridge/bundle.mjs +23 -4
- package/src/bridge/client.mjs +414 -7
- package/src/bridge/engine-download.mjs +229 -5
- package/src/bridge/image-dimensions.mjs +181 -0
- package/src/builders/resolve-skill.mjs +45 -1
- package/src/builders/review.mjs +4 -1
- package/src/install-channel.mjs +61 -0
- package/src/installers/claude.mjs +22 -0
- package/src/pptx/fill/engine.mjs +1273 -0
- package/src/pptx/fill/freeform.mjs +156 -0
- package/src/pptx/fill/parse-slides.mjs +154 -0
- package/src/pptx/fill/xml.mjs +486 -0
- package/src/pptx/ooxml.mjs +10 -3
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "slidemind",
|
|
3
|
+
"owner": {
|
|
4
|
+
"name": "statworx",
|
|
5
|
+
"url": "https://www.statworx.com"
|
|
6
|
+
},
|
|
7
|
+
"description": "slidemind — on-brand PowerPoint decks from your coding agent, via the slidemind add-in",
|
|
8
|
+
"plugins": [
|
|
9
|
+
{
|
|
10
|
+
"name": "slidemind",
|
|
11
|
+
"source": {
|
|
12
|
+
"source": "npm",
|
|
13
|
+
"package": "slidemind"
|
|
14
|
+
},
|
|
15
|
+
"description": "Build and edit native, on-brand PowerPoint decks against the active corporate design. Ships the slidemind CLI (on PATH inside Claude Code sessions) and both skills.",
|
|
16
|
+
"author": {
|
|
17
|
+
"name": "statworx"
|
|
18
|
+
},
|
|
19
|
+
"homepage": "https://github.com/STATWORX/intern-slidemind-cli",
|
|
20
|
+
"repository": "https://github.com/STATWORX/intern-slidemind-cli",
|
|
21
|
+
"license": "UNLICENSED",
|
|
22
|
+
"category": "productivity"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "slidemind",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Connect Claude Code
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Connect Claude Code to the slidemind PowerPoint add-in — build and edit native, on-brand PowerPoint decks against the active corporate design, from the terminal.",
|
|
5
5
|
"author": {
|
|
6
|
-
"name": "statworx"
|
|
6
|
+
"name": "statworx",
|
|
7
|
+
"url": "https://www.statworx.com"
|
|
7
8
|
},
|
|
8
9
|
"homepage": "https://github.com/STATWORX/intern-slidemind-cli",
|
|
10
|
+
"repository": "https://github.com/STATWORX/intern-slidemind-cli",
|
|
11
|
+
"license": "UNLICENSED",
|
|
9
12
|
"keywords": [
|
|
10
13
|
"presentation",
|
|
11
14
|
"slides",
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "slidemind",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Connect Codex to the slidemind PowerPoint add-in — build and edit native, on-brand PowerPoint decks against the active corporate design. Requires the slidemind CLI (npm install -g slidemind); the skills explain the install when it is missing.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "statworx",
|
|
7
|
+
"url": "https://www.statworx.com"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/STATWORX/intern-slidemind-cli",
|
|
10
|
+
"repository": "https://github.com/STATWORX/intern-slidemind-cli",
|
|
11
|
+
"license": "UNLICENSED",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"presentation",
|
|
14
|
+
"slides",
|
|
15
|
+
"powerpoint",
|
|
16
|
+
"office-addin",
|
|
17
|
+
"slidemind"
|
|
18
|
+
],
|
|
19
|
+
"skills": "./skills",
|
|
20
|
+
"interface": {
|
|
21
|
+
"displayName": "slidemind",
|
|
22
|
+
"shortDescription": "On-brand PowerPoint decks from Codex",
|
|
23
|
+
"developerName": "statworx",
|
|
24
|
+
"category": "Productivity",
|
|
25
|
+
"capabilities": [
|
|
26
|
+
"Skills"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
}
|
package/CLAUDE.md
CHANGED
|
@@ -24,9 +24,18 @@ npm install -g slidemind
|
|
|
24
24
|
slidemind init --for all # claude | codex | opencode | all | none
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
`npx slidemind <command>` runs it without a global install. `slidemind update` is a thin wrapper over `npm install -g slidemind@latest` (`--ref <version>` to pin, `--for <target>` to control the redeploy). The `files` whitelist in `package.json` controls what ships (`bin/ src/ skills/ .claude-plugin/ CLAUDE.md README.md`); `archive/`, `docs/`, `scripts/`, and
|
|
27
|
+
`npx slidemind <command>` runs it without a global install. `slidemind update` is a thin wrapper over `npm install -g slidemind@latest` (`--ref <version>` to pin, `--for <target>` to control the redeploy). The `files` whitelist in `package.json` controls what ships (`bin/ src/ skills/ .claude-plugin/ .codex-plugin/ CLAUDE.md README.md`); `archive/`, `docs/`, `scripts/`, `test/`, and `.agents/` are excluded.
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
Both agent harnesses can also install slidemind as a **plugin** — this private repo doubles as the marketplace (a public marketplace repo can be split out later; the files move as-is). The marketplace is named `slidemind`, NOT `statworx`: the team already registers a `statworx` marketplace from `STATWORX/intern-marketplace-test`, and both harnesses allow only one marketplace per name.
|
|
30
|
+
|
|
31
|
+
- **Claude Code** (one step, no `npm -g`): `/plugin marketplace add STATWORX/intern-slidemind-cli` → `/plugin install slidemind@slidemind`. The marketplace entry (`.claude-plugin/marketplace.json`) points at the **public npm package, unpinned** — Claude installs the latest tarball and the installed version comes from the tarball's `.claude-plugin/plugin.json`, so only the marketplace add needs repo access. The tarball's `bin/slidemind` + `bin/slidemind.cmd` shims land on PATH inside plugin sessions, so the plugin carries the CLI too.
|
|
32
|
+
- **Codex**: `codex plugin marketplace add STATWORX/intern-slidemind-cli` → `codex plugin add slidemind@slidemind`. Codex clones the repo (marketplace file `.agents/plugins/marketplace.json`; plugin manifest `.codex-plugin/plugin.json`; plugin source = repo root) and carries the skills only — the CLI still arrives via `npm install -g slidemind`, which the skills' remediation covers.
|
|
33
|
+
|
|
34
|
+
`slidemind init --for <target>` remains the universal fallback on all three harnesses; the Claude installer prints a dedup hint when it detects the plugin is also installed.
|
|
35
|
+
|
|
36
|
+
**Updating a plugin-installed CLI is `/plugin`, not `slidemind update`.** The Claude plugin ships its own copy of the CLI on the session's PATH, so `npm install -g slidemind@latest` drops a second, unrelated global and the session keeps running the old binary — a user following that advice would watch the update succeed and stay blocked on the add-in's version floor. `src/install-channel.mjs` detects the channel from the running code's path (plus `CLAUDE_PLUGIN_ROOT`) and every too-old-CLI remediation ends with `updateCliInstruction()`, so the message names the updater that actually replaces this binary; the `cli_update_required` rung of the readiness ladder also flips `actor` to `user` there, because the agent cannot drive `/plugin`.
|
|
37
|
+
|
|
38
|
+
> The previous account-free channel (a private Azure Blob container + shared read SAS + `scripts/install.sh` curl-bootstrap) has been **retired** — see `archive/scripts/install.sh`. npm is the sole binary channel now; the plugin marketplaces layer on top of it.
|
|
30
39
|
|
|
31
40
|
## Releasing
|
|
32
41
|
|
|
@@ -36,6 +45,8 @@ Releases are **automatic on every push to `main`**. The workflow at `.github/wor
|
|
|
36
45
|
2. Otherwise → bumps the patch by 1, commits the bumped `package.json` back to `main`, then tags the new version. (No infinite loop: GitHub doesn't trigger workflows from commits made with the default `GITHUB_TOKEN`, and the workflow also skips if the actor is `github-actions[bot]`.)
|
|
37
46
|
3. In both cases → creates a GitHub Release with auto-generated notes, then **`npm publish --access public`**.
|
|
38
47
|
|
|
48
|
+
Before tagging/publishing the workflow runs `scripts/sync-plugin-manifests.mjs`, which copies `package.json`'s version into `.claude-plugin/plugin.json` and `.codex-plugin/plugin.json` (Claude Code keys plugin updates off that version; Codex keys its plugin cache off it — the marketplace entries deliberately carry no version so they never drift). `scripts/release.mjs` runs the same sync locally, and `test/plugin-manifests.test.mjs` fails CI on drift.
|
|
49
|
+
|
|
39
50
|
The publish step is gated on the `NPM_TOKEN` repo secret (an npm automation token with publish rights to `slidemind`): until it's set the workflow warns and skips publish (so tagging/releases keep working during rollout); once set, a publish failure fails the build. So most of the time you just merge to `main` and a new patch release falls out to npm.
|
|
40
51
|
|
|
41
52
|
For a **minor or major** bump, run the local helper before pushing:
|
|
@@ -52,6 +63,8 @@ The script bumps `package.json` and commits — it does not tag (CI does that).
|
|
|
52
63
|
|
|
53
64
|
Teammates pick up the release with `npm install -g slidemind@latest` (or `slidemind update` if already installed); pin with `slidemind@X.Y.Z` / `slidemind update --ref X.Y.Z`.
|
|
54
65
|
|
|
66
|
+
**The add-in's version floor.** The add-in serves the oldest CLI it still speaks two ways: `minCliVersion` in `/api/cli/capabilities` + `/api/cli/readiness`, and an `x-slidemind-min-cli` header on **every** response of its CLI router. `bridgeFetch`/`bridgeStreamToFile` check that header on each call (so the pane routes — search/read/insert — are covered without a probe), `assertCliVersionSupported` pre-flights render/translate, and `doctor`/`ready` opt out via `setDiagnosticMode(true)` because they report the skew as the `cli_update_required` blocker themselves. The remediation the CLI prints is `slidemind update` → `slidemind@latest`, so **the add-in's floor must never exceed the version published to npm** — raise it only in lockstep with the release that satisfies it, or every paired CLI hard-blocks on an instruction that cannot resolve.
|
|
67
|
+
|
|
55
68
|
> **One-time GitHub setup:** the workflow uses the default `GITHUB_TOKEN`. If branch-protection rules on `main` block bot pushes, allow the `github-actions[bot]` actor (or relax "require pull request before merging" for that bot).
|
|
56
69
|
|
|
57
70
|
## Repository layout
|
|
@@ -62,9 +75,15 @@ slidemind/
|
|
|
62
75
|
├── README.md end-user quickstart
|
|
63
76
|
├── CLAUDE.md this file
|
|
64
77
|
├── .claude-plugin/
|
|
65
|
-
│
|
|
78
|
+
│ ├── plugin.json Claude Code plugin manifest (version release-synced to package.json)
|
|
79
|
+
│ └── marketplace.json Claude Code marketplace — serves the plugin from public npm, unpinned
|
|
80
|
+
├── .codex-plugin/
|
|
81
|
+
│ └── plugin.json Codex plugin manifest (version release-synced)
|
|
82
|
+
├── .agents/
|
|
83
|
+
│ └── plugins/marketplace.json Codex marketplace — serves this repo (git clone) as the plugin; NOT in the npm tarball
|
|
66
84
|
├── bin/
|
|
67
|
-
│
|
|
85
|
+
│ ├── 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)
|
|
86
|
+
│ └── slidemind + slidemind.cmd PATH shims for Claude Code plugin sessions (npm links slidemind.mjs itself)
|
|
68
87
|
├── skills/ canonical, installable skill payload — thin CLI workflow glue only
|
|
69
88
|
│ ├── create-slides/
|
|
70
89
|
│ │ └── SKILL.md authoring skill: stage-todo bootstrap + host gate + intake/plan + create flow +
|
|
@@ -84,7 +103,7 @@ slidemind/
|
|
|
84
103
|
├── archive/ retired code/assets (local exporter, icon library, brand design files) — NOT shipped
|
|
85
104
|
├── decks/ the user's working decks; sources are slides/*.jsx, design via .bundle-ref.json
|
|
86
105
|
├── docs/slidemind-cli-connect/ the connect architecture (bridge contract, bundle, engine, phasing)
|
|
87
|
-
└── test/ node:test suites (bridge client/bundle/build-and-push/resolve-skill/lint-wrapper/packaging/engine-search/native-slides/cli-dispatch/cli-download-result)
|
|
106
|
+
└── test/ node:test suites (bridge client/bundle/build-and-push/resolve-skill/lint-wrapper/packaging/plugin-manifests/engine-search/native-slides/cli-dispatch/cli-download-result)
|
|
88
107
|
```
|
|
89
108
|
|
|
90
109
|
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.)
|
|
@@ -109,6 +128,7 @@ slidemind push <deck> # render + push slides into a running PowerPo
|
|
|
109
128
|
slidemind ls engines # list the live engine catalog (image + slide; --type/--subtype) (HOST REQUIRED)
|
|
110
129
|
slidemind search "<query>" # search an engine for imagery or slides (--engine/--intent/--top) (HOST REQUIRED)
|
|
111
130
|
slidemind insert-slide [opts] # reuse found slide(s) live into a window (--search/--pick/--to/--at) (HOST REQUIRED)
|
|
131
|
+
slidemind imagen "<prompt>" [opts] # generate ONE image via the add-in's image model into <deck>/assets/ (--deck/--out/--size/--quality/--brand-style; paired backend, pane-free)
|
|
112
132
|
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)
|
|
113
133
|
slidemind pair <code> # pair with an add-in environment (copy from its "Connect CLI")
|
|
114
134
|
slidemind whoami # list every paired environment (* = default)
|
package/README.md
CHANGED
|
@@ -133,6 +133,30 @@ Run any command without installing globally:
|
|
|
133
133
|
npx slidemind <command>
|
|
134
134
|
```
|
|
135
135
|
|
|
136
|
+
### Install as a plugin (Claude Code / Codex)
|
|
137
|
+
|
|
138
|
+
Both harnesses can install slidemind as a **plugin** from this repo's marketplace instead of the two-command npm flow. The repo is private, so the one-time `marketplace add` uses your existing GitHub credentials (`gh auth login`, a git credential helper, or SSH).
|
|
139
|
+
|
|
140
|
+
**Claude Code — fully self-contained (no `npm install -g` needed):**
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
/plugin marketplace add STATWORX/intern-slidemind-cli
|
|
144
|
+
/plugin install slidemind@slidemind
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The plugin ships both skills *and* the CLI: under the hood Claude Code installs the public npm package and puts `slidemind` on `PATH` inside its sessions (the headless-Chrome heads-up above applies to this install too). Outside Claude Code sessions the command is not on your `PATH` — add the global install if you also want to drive the CLI by hand. Updates ship with every release; apply them via `/plugin`. If background marketplace refreshes fail against the private repo, use SSH for the marketplace add or set `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1`.
|
|
148
|
+
|
|
149
|
+
**Codex — skills via plugin, CLI via npm:**
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
codex plugin marketplace add STATWORX/intern-slidemind-cli
|
|
153
|
+
codex plugin add slidemind@slidemind
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Codex plugins carry the skills only — the CLI still comes from `npm install -g slidemind` (the skills walk you through it if it's missing). `slidemind init --for codex` remains the most robust path; it additionally writes an `~/.codex/AGENTS.md` pointer.
|
|
157
|
+
|
|
158
|
+
> Already ran `slidemind init` and switching to a plugin? Drop the copied skills once with `slidemind uninstall --for claude` (or `--for codex`) so they don't duplicate the plugin's.
|
|
159
|
+
|
|
136
160
|
---
|
|
137
161
|
|
|
138
162
|
## Connect to PowerPoint
|
package/bin/slidemind
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# PATH shim for plugin sessions: Claude Code adds the plugin's bin/ to PATH, so
|
|
3
|
+
# this makes the command literally `slidemind` (bin/slidemind.mjs would resolve
|
|
4
|
+
# as `slidemind.mjs`). npm installs never use this file — npm links
|
|
5
|
+
# bin/slidemind.mjs itself via package.json "bin".
|
|
6
|
+
dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|
7
|
+
exec node "$dir/slidemind.mjs" "$@"
|