slidemind 0.3.20 → 0.4.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/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/AGENTS.md +592 -16
- package/LICENSE +4 -0
- package/README.md +203 -8
- package/THIRD-PARTY-NOTICES.md +201 -0
- package/bin/slidemind.mjs +50 -2
- package/package.json +5 -3
- package/skills/create-slides/SKILL.md +484 -886
- package/skills/search/SKILL.md +46 -23
- package/src/bridge/build-and-push.mjs +548 -73
- package/src/bridge/bundle.mjs +100 -31
- package/src/bridge/capture.mjs +14 -17
- package/src/bridge/client/brands.mjs +157 -18
- package/src/bridge/client/engine-routing.mjs +48 -13
- package/src/bridge/client/engine-search.mjs +24 -1
- package/src/bridge/client/render.mjs +27 -1
- package/src/bridge/client/transport.mjs +499 -23
- package/src/bridge/client.mjs +10 -0
- package/src/bridge/config.mjs +67 -6
- package/src/bridge/engine-download.mjs +0 -10
- package/src/bridge/graph-auth.mjs +55 -3
- package/src/bridge/image-intent-envelope.mjs +239 -0
- package/src/bridge/package-preview.mjs +67 -0
- package/src/bridge/sharepoint.mjs +914 -0
- package/src/builders/asset-fetch.mjs +203 -0
- package/src/builders/block-dividers.mjs +83 -0
- package/src/builders/build.mjs +171 -87
- package/src/builders/card-height.mjs +294 -0
- package/src/builders/chart-hole.mjs +183 -0
- package/src/builders/chart-jsx.mjs +410 -0
- package/src/builders/chart-labels.mjs +326 -0
- package/src/builders/concept-geometry.mjs +370 -0
- package/src/builders/concept-intent.mjs +200 -0
- package/src/builders/concept-layout.mjs +79 -0
- package/src/builders/concept-lines.mjs +509 -0
- package/src/builders/concept-lists.mjs +270 -0
- package/src/builders/concept-marks.mjs +84 -0
- package/src/builders/concept-relationships.mjs +12 -0
- package/src/builders/concept-spec.mjs +645 -0
- package/src/builders/concept-text.mjs +140 -0
- package/src/builders/concept-waves.mjs +57 -0
- package/src/builders/copy-fit.mjs +139 -0
- package/src/builders/design-tokens.mjs +347 -0
- package/src/builders/draft-check.mjs +552 -340
- package/src/builders/draft-lines.mjs +369 -0
- package/src/builders/edit-route.mjs +29 -0
- package/src/builders/figure-sketch.mjs +375 -0
- package/src/builders/fold-sets.mjs +639 -0
- package/src/builders/gate-server.mjs +9 -4
- package/src/builders/gate-session.js +273 -12
- package/src/builders/gate-shell.js +1494 -0
- package/src/builders/image-intent-check.mjs +308 -0
- package/src/builders/image-use-reconcile.mjs +107 -0
- package/src/builders/kit-helpers.mjs +121 -0
- package/src/builders/layout-names.mjs +32 -0
- package/src/builders/legacy-reference-uses.mjs +179 -0
- package/src/builders/line-fit.mjs +224 -0
- package/src/builders/line-native.mjs +895 -0
- package/src/builders/line-relations.mjs +230 -0
- package/src/builders/lint-fix.mjs +117 -9
- package/src/builders/lint.mjs +25 -20
- package/src/builders/list-jsx.mjs +88 -0
- package/src/builders/placement.mjs +133 -0
- package/src/builders/plan-checks.mjs +135 -0
- package/src/builders/plan-comments.mjs +19 -0
- package/src/builders/plan-handlers.mjs +95 -0
- package/src/builders/plan-markdown-edit.mjs +3 -3
- package/src/builders/plan-overlay.js +1530 -1608
- package/src/builders/plan.mjs +689 -186
- package/src/builders/preset-definitions.json +1 -0
- package/src/builders/preset-eval.mjs +244 -0
- package/src/builders/preview.html +51 -120
- package/src/builders/red-thread-backbone.mjs +135 -36
- package/src/builders/repair.mjs +205 -0
- package/src/builders/repeat-groups.mjs +540 -0
- package/src/builders/resolve-skill.mjs +5 -4
- package/src/builders/review-overlay.js +296 -293
- package/src/builders/review.mjs +305 -84
- package/src/builders/rule-shift.mjs +96 -0
- package/src/builders/seat.mjs +354 -0
- package/src/builders/settle-driver.mjs +236 -0
- package/src/builders/settle.mjs +1448 -0
- package/src/builders/slide-prep.mjs +67 -0
- package/src/builders/spec-assets.mjs +236 -0
- package/src/builders/spec-match.mjs +56 -0
- package/src/builders/stack.mjs +413 -0
- package/src/builders/storyboard-markdown.mjs +70 -27
- package/src/builders/storyboard-schema.mjs +54 -114
- package/src/builders/text-blocks.mjs +212 -0
- package/src/builders/text-card-fit.mjs +552 -0
- package/src/builders/text-stack.mjs +276 -0
- package/src/builders/transcribe.mjs +1069 -0
- package/src/cli/assets.mjs +164 -0
- package/src/cli/common.mjs +173 -12
- package/src/cli/concept-spec-support.mjs +76 -0
- package/src/cli/concepts.mjs +1002 -103
- package/src/cli/deck.mjs +401 -65
- package/src/cli/diagnose.mjs +4 -2
- package/src/cli/engine-helpers.mjs +17 -10
- package/src/cli/engine-results.mjs +76 -3
- package/src/cli/help.mjs +232 -28
- package/src/cli/install.mjs +9 -0
- package/src/cli/maintenance.mjs +104 -0
- package/src/cli/read.mjs +2 -1
- package/src/cli/ready.mjs +6 -3
- package/src/cli/record.mjs +522 -0
- package/src/cli/remote.mjs +818 -0
- package/src/cli/revision.mjs +686 -0
- package/src/cli/search.mjs +30 -11
- package/src/cli/session.mjs +56 -13
- package/src/cli/setup.mjs +46 -2
- package/src/cli/status.mjs +142 -33
- package/src/cli/tasks.mjs +246 -0
- package/src/cli/transcribe.mjs +854 -0
- package/src/cli/workspace-ui.mjs +260 -0
- package/src/cli/workspace.mjs +212 -34
- package/src/install-channel.mjs +64 -7
- package/src/lib/adopt.mjs +346 -25
- package/src/lib/concept-spec-binding.mjs +96 -0
- package/src/lib/conversions.mjs +70 -6
- package/src/lib/convert-folded.mjs +107 -0
- package/src/lib/deck-paths.mjs +418 -0
- package/src/lib/durable-ids.mjs +47 -0
- package/src/lib/edit-operations.mjs +316 -0
- package/src/lib/edit-state.mjs +1244 -0
- package/src/lib/edit-transitions.mjs +120 -0
- package/src/lib/extensions.mjs +501 -0
- package/src/lib/image-assets.mjs +465 -0
- package/src/lib/image-derivatives.mjs +234 -0
- package/src/lib/image-intent-fingerprint.mjs +70 -0
- package/src/lib/image-intent-tags.mjs +176 -0
- package/src/lib/image-intent.mjs +802 -0
- package/src/lib/image-use-overrides.mjs +279 -0
- package/src/lib/inline-components.mjs +613 -0
- package/src/lib/lint-converted.mjs +68 -4
- package/src/lib/merge-json.mjs +163 -0
- package/src/lib/overwrite-guard.mjs +3 -3
- package/src/lib/presentation-context.mjs +531 -0
- package/src/lib/preservation-tags.mjs +157 -0
- package/src/lib/preservation-verdict.mjs +1342 -0
- package/src/lib/publish.mjs +1557 -0
- package/src/lib/rebase.mjs +945 -0
- package/src/lib/reconcile-ack.mjs +4 -6
- package/src/lib/reconcile.mjs +62 -24
- package/src/lib/record-client.mjs +175 -0
- package/src/lib/record-state.mjs +151 -0
- package/src/lib/remote.mjs +661 -0
- package/src/lib/revision.mjs +1210 -0
- package/src/lib/slide-guids.mjs +4 -6
- package/src/lib/slide-preservation.mjs +423 -0
- package/src/lib/slide-selection.mjs +9 -0
- package/src/lib/workspace-transaction.mjs +117 -0
- package/src/pptx/content-digest.mjs +334 -0
- package/src/pptx/deck-assemble.mjs +1278 -0
- package/src/pptx/fill/engine.mjs +2 -3
- package/src/pptx/fill/freeform.mjs +6 -3
- package/src/pptx/ooxml.mjs +20 -0
- package/src/pptx/package-evidence.mjs +383 -0
- package/src/pptx/tags.mjs +163 -11
- package/src/update-check.mjs +22 -4
- package/src/workspace/adapters.mjs +222 -0
- package/src/workspace/auth.mjs +256 -0
- package/src/workspace/autostart.mjs +204 -0
- package/src/workspace/daemon.mjs +360 -0
- package/src/workspace/discovery.mjs +180 -0
- package/src/workspace/edit.mjs +167 -0
- package/src/workspace/events.mjs +52 -0
- package/src/workspace/gate-client.mjs +290 -0
- package/src/workspace/handback.mjs +73 -0
- package/src/workspace/lifecycle.mjs +635 -0
- package/src/workspace/operations.mjs +200 -0
- package/src/workspace/pick-folder.mjs +152 -0
- package/src/workspace/registry.mjs +359 -0
- package/src/workspace/remote-links.mjs +397 -0
- package/src/workspace/remote-status.mjs +359 -0
- package/src/workspace/routes.mjs +1331 -0
- package/src/workspace/server.mjs +159 -0
- package/src/workspace/sync.mjs +1119 -0
- package/src/workspace/task-actions.mjs +215 -0
- package/src/workspace/tasks.mjs +507 -0
- package/src/workspace/ui/app.js +1886 -0
- package/src/workspace/ui/index.html +141 -0
- package/src/workspace/ui/plan-bridge.js +120 -0
- package/src/workspace/ui/sharepoint.svg +59 -0
- package/src/workspace/ui/styles.css +423 -0
- package/src/builders/visual-families.mjs +0 -46
package/LICENSE
ADDED
package/README.md
CHANGED
|
@@ -298,6 +298,9 @@ slidemind new <name> Scaffold ./decks/<name>/ (auto-binds to the ope
|
|
|
298
298
|
slidemind plan <deck> Plan sign-off gate on <deck>/plan.md; blocks for approve/comments (offline)
|
|
299
299
|
slidemind review <deck> Spatial preview review; blocks for approve/comments (offline)
|
|
300
300
|
slidemind build-pptx <deck> Render a native .pptx via the add-in (host required)
|
|
301
|
+
A deck connected to SharePoint (the file you opened, or a folder you
|
|
302
|
+
connected in the workspace) is saved there right after the build;
|
|
303
|
+
--no-publish keeps a build local
|
|
301
304
|
--pack <dir> for an explicit fill-template pack
|
|
302
305
|
slidemind inspect-template-deck <deck> Emit a normalized template-deck model for pack validation
|
|
303
306
|
--pack <dir> --json [--allow-unrendered-freeform]
|
|
@@ -317,10 +320,61 @@ slidemind add-slide [opts] Fold slide(s) into a deck as native .pptx — f
|
|
|
317
320
|
--from <file.pptx> --pick <n[,n,...]> --deck <deck> [--at <N>] (local file; host-free; not with --search)
|
|
318
321
|
slidemind download-result [opts] Download image/icon result(s) into a deck's assets/ (host required)
|
|
319
322
|
--search <id> --pick <n[,n,...]> --deck <deck> --to <presId> [--icon-color <hex[,hex,...]>]
|
|
323
|
+
slidemind assets <sub> The deck's registry of images you supplied. Importing records the bytes;
|
|
324
|
+
what the picture is FOR is approved in the plan, not here
|
|
325
|
+
import <deck> <file> copy a file in and identify it by its own digest
|
|
326
|
+
(file paths only — never a URL)
|
|
327
|
+
list <deck> what this deck has registered
|
|
328
|
+
--json on both
|
|
320
329
|
slidemind adopt <file.pptx> Rebuild a deck workspace from a .pptx — slidemind-authored slides come back
|
|
321
330
|
as their original jsx, foreign ones are converted to editable jsx where the
|
|
322
331
|
add-in offers it, the rest fold in native
|
|
323
332
|
--deck <slug> --brand <presFP> --no-convert
|
|
333
|
+
--slides 2,7 | 2-4 | all hydrate only those slides to editable jsx;
|
|
334
|
+
every other slide stays a lossless native slide with its notes, comments,
|
|
335
|
+
animations and embeddings intact. Re-running is safe: the same file again
|
|
336
|
+
changes nothing, a wider --slides hydrates just the new slides, and a
|
|
337
|
+
different file is reconciled onto the deck
|
|
338
|
+
slidemind revision <sub> <deck> Ownership and acceptance for an adopted deck
|
|
339
|
+
begin take the deck for a whole edit session; export the printed token
|
|
340
|
+
as SLIDEMIND_OWNER so every command under it re-enters
|
|
341
|
+
status accepted base, generation, changed slides, candidates, conflicts
|
|
342
|
+
accept --candidate <id> — make a build the deck's new accepted base
|
|
343
|
+
finish release the session (your work and candidates are kept)
|
|
344
|
+
slidemind rebase <deck> Move an adopted deck onto a newer copy of the same .pptx — their changes
|
|
345
|
+
apply, your unpublished edits stay yours, and anything both sides touched
|
|
346
|
+
stops for you to decide (nothing is applied until you do)
|
|
347
|
+
--incoming <file.pptx|revisionId> [--dry-run] [--json]
|
|
348
|
+
--resolve <resolution.json> apply the skeleton a conflict wrote for you
|
|
349
|
+
slidemind open <link|file.pptx> Open a SharePoint presentation as a deck: the LINK picks the file, one
|
|
350
|
+
consistent snapshot is adopted, and the deck is bound to that item.
|
|
351
|
+
A local path adopts only — it never guesses where to publish
|
|
352
|
+
--deck <slug> --slides 2,7|all
|
|
353
|
+
--rebind point an already-bound deck at this item instead
|
|
354
|
+
--keep | --detach local file, on a deck that is already bound
|
|
355
|
+
slidemind pull <deck> Check the bound file and every linked input it names. Unchanged costs one
|
|
356
|
+
metadata call and downloads nothing. A newer save is kept aside until your
|
|
357
|
+
own work is published, then applied
|
|
358
|
+
--check report freshness only (never stages, never changes anything)
|
|
359
|
+
slidemind publish <deck> Save the deck back to the file you opened. It pulls and reconciles first,
|
|
360
|
+
runs every required check on the bytes it is actually about to upload, and
|
|
361
|
+
replaces the file only if nobody saved in the meantime — if somebody did,
|
|
362
|
+
their save is kept and yours is not lost. build-pptx does this for you;
|
|
363
|
+
run it to retry a save that did not go through
|
|
364
|
+
--candidate <id> --manual --shared-workbook --json
|
|
365
|
+
slidemind rename <deck> --name <file> Rename the file you are bound to. Same file, nothing re-rendered
|
|
366
|
+
slidemind record <sub> Share ONE JSON file so several people and their agents can edit it at
|
|
367
|
+
once; the backend merges, so different fields combine instead of
|
|
368
|
+
overwriting. The CLI never reads what is in the file
|
|
369
|
+
create <deck> --folder <link> --name <file.json> --file <path>
|
|
370
|
+
share it and print the permanent link
|
|
371
|
+
open <link> --deck <slug> --file <path>
|
|
372
|
+
fetch a shared record into a (new) deck
|
|
373
|
+
sync <deck> --file <path> [--approval] [--resolve <file>]
|
|
374
|
+
send yours, get everyone's back merged; a same-field
|
|
375
|
+
clash writes state/record-conflicts.json and exits 3
|
|
376
|
+
status <deck> current | behind (v…) | local edits
|
|
377
|
+
--json on every subcommand
|
|
324
378
|
slidemind download-bundle [deck] Materialize the active corporate design locally (host required; lower-level — `ready` covers this)
|
|
325
379
|
slidemind read [presId|file.pptx] Read an open presentation (presId; host required) or a local .pptx on disk (file path; host-free)
|
|
326
380
|
--mode summary|raw (default raw) [--to <presId>] [--json]
|
|
@@ -328,7 +382,8 @@ slidemind setup <claim> One-command onboarding: connect + global instal
|
|
|
328
382
|
--for <target> --no-install --no-ready --json
|
|
329
383
|
slidemind login [--backend <e>] Sign in to Microsoft 365 (opens your browser) so SharePoint-backed
|
|
330
384
|
downloads and slide extractions work without an open PowerPoint window
|
|
331
|
-
slidemind whoami
|
|
385
|
+
slidemind whoami [--json] Show connected environment(s) and their Microsoft 365 sign-in state,
|
|
386
|
+
named as the account that signed in
|
|
332
387
|
slidemind logout [url|env] Unpair an environment (--all unpairs every one; drops its Microsoft 365 sign-in too)
|
|
333
388
|
slidemind init --for <target> Install the skill into a harness (clears the bundle cache)
|
|
334
389
|
<target> = claude | codex | opencode | all | auto (every harness found here)
|
|
@@ -345,19 +400,67 @@ slidemind --version Print version
|
|
|
345
400
|
|
|
346
401
|
| Command | Output | When to use |
|
|
347
402
|
|---|---|---|
|
|
348
|
-
| `slidemind view-draft <deck>` | `decks/<deck>/.draft
|
|
403
|
+
| `slidemind view-draft <deck>` | `decks/<deck>/.slidemind/preview/draft/*.png` (+ `preview/presentation.html`) | Look at each slide before anyone else does (offline) |
|
|
349
404
|
| `slidemind build-pptx <deck>` | `decks/<deck>/<deck>.pptx` | An editable native PowerPoint file |
|
|
350
405
|
| `slidemind push <deck>` | (streamed via the add-in) | Live insertion into an open PowerPoint window |
|
|
351
406
|
|
|
407
|
+
### What a deck directory looks like
|
|
408
|
+
|
|
409
|
+
A deck keeps the two halves apart. The root holds what you asked for; everything
|
|
410
|
+
the CLI works with sits in a hidden `.slidemind/` beside it:
|
|
411
|
+
|
|
412
|
+
```
|
|
413
|
+
decks/my-deck/
|
|
414
|
+
├── my-deck.pptx the built deck
|
|
415
|
+
├── plan.html the saved plan page (open it any time; `slidemind plan my-deck` to edit)
|
|
416
|
+
└── .slidemind/
|
|
417
|
+
├── plan.md the plan record
|
|
418
|
+
├── slides/ one .jsx per slide (filename order IS slide order)
|
|
419
|
+
├── assets/ images and icons this deck downloaded
|
|
420
|
+
├── conversions/ identity records for adopted PowerPoint slides
|
|
421
|
+
├── concepts/ the concept mockups
|
|
422
|
+
├── state/ gate decisions, slide identity, the design binding
|
|
423
|
+
└── preview/ presentation.html, fonts/, draft/, build/ — all regenerable
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
You never need to name `.slidemind/` — every command takes the deck directory and
|
|
427
|
+
finds it. One command manages the directory itself:
|
|
428
|
+
|
|
429
|
+
```bash
|
|
430
|
+
slidemind clean <deck> # drop preview/ and abandoned downloads; a build recreates them
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
`clean` touches nothing a build cannot reproduce: gate decisions, concepts and a
|
|
434
|
+
download still in flight all stay.
|
|
435
|
+
|
|
436
|
+
`plan.html` has one owner, recorded in `.slidemind/state/plan-owner.json`. The CLI
|
|
437
|
+
renders it from `plan.md`; an extension pack renders
|
|
438
|
+
its own from its own record. Whoever does not own it leaves it alone and names the
|
|
439
|
+
command that opens it, so a pack deck's plan page survives a generic `slidemind
|
|
440
|
+
plan` or `build` untouched.
|
|
441
|
+
|
|
352
442
|
### Reviewing before you export
|
|
353
443
|
|
|
354
|
-
`slidemind
|
|
444
|
+
Your agent asks you to review in the **slidemind workspace** — a page on your computer (`127.0.0.1`) that `slidemind setup` starts and keeps running from every login. The agent ends its turn with a link; click it. In the Codex app it opens in Codex's own browser pane, next to the chat; elsewhere in your browser.
|
|
445
|
+
|
|
446
|
+
- **Plan:** read and edit the storyline, comment on any slide (press Enter to add each comment), then **Send** your comments or **Approve plan**. Approve is off while a comment is waiting to be sent.
|
|
447
|
+
- **Preview:** click any element on a slide to pin a comment to that spot — each is anchored to the exact slide source (`slides/<file>.jsx:line:col`) — then **Send** your comments or **Approve**. On the next round your earlier notes come back as faded "ghost" pins so you can confirm each was addressed.
|
|
448
|
+
- **Then paste.** Your answer is saved and a message is copied to your clipboard. Paste it into the chat with your agent and send it. That is the one thing to do after every answer: nothing can reach an agent whose turn has ended, so the message — which names the deck and the command that receives your answer — brings it back, in the same chat or a new one.
|
|
449
|
+
|
|
450
|
+
It runs entirely offline (no open PowerPoint needed) — review happens *before* the native render.
|
|
355
451
|
|
|
356
|
-
|
|
357
|
-
- **Approve & continue** when it looks right — the command unblocks and your agent proceeds to the export you asked for (`push` / `build-pptx`).
|
|
358
|
-
- **Send comments** to hand your notes back to the agent; it edits the cited files and re-runs `review`, where your previous notes appear as faded "ghost" pins so you can confirm each was addressed.
|
|
452
|
+
### The workspace
|
|
359
453
|
|
|
360
|
-
|
|
454
|
+
One page for everything you answer: a library of your decks, the plan editor, the preview, and an inbox of what your agents asked you to decide. Close the browser — the page and the questions stay; it restarts by itself after a reboot.
|
|
455
|
+
|
|
456
|
+
- **Add a folder** (or `slidemind workspace add <path>` / `discover <root>`) to see a deck. Nothing is rendered or uploaded because you looked at it.
|
|
457
|
+
- **Paste a SharePoint link** (or `slidemind workspace open-remote <url>`) to open a presentation, a shared plan, or a folder; a folder shows its children and you pick.
|
|
458
|
+
- **Local vs remote saving.** Every edit is saved locally at once. A plan that is shared on SharePoint syncs in the background afterwards; the status reads *Saved → Saving to SharePoint… → Saved to SharePoint*, and *Action needed* when the backend refused, you are signed out, or writes are disabled. Selecting a folder with `connect` only records a destination; the plan is *shared* once it actually exists there.
|
|
459
|
+
- **Conflicts** are shown as mine / theirs / merged with the exact fields; nothing is sent until you resolve them.
|
|
460
|
+
- **Access** is per person: the page uses your own Microsoft 365 sign-in for remote work, and the daemon answers only this machine's browser.
|
|
461
|
+
- **Running it yourself.** `slidemind workspace` prints its link (and opens it in a terminal); `slidemind workspace stop` ends it and keeps everything queued. `SLIDEMIND_WORKSPACE=0` brings back the old standalone review pages.
|
|
462
|
+
|
|
463
|
+
Both commands are documented in `slidemind --help`; the design is in `docs/slidemind-cli-connect/21-persistent-workspace.md`.
|
|
361
464
|
|
|
362
465
|
---
|
|
363
466
|
|
|
@@ -448,4 +551,96 @@ So an open PowerPoint host with the slidemind add-in and an active corporate des
|
|
|
448
551
|
|
|
449
552
|
---
|
|
450
553
|
|
|
451
|
-
slidemind is published by **statworx**. Source lives in a private repository; the npm tarball is the install artifact.
|
|
554
|
+
slidemind is published by **statworx**. Source lives in a private repository; the npm tarball is the install artifact. Proprietary, © statworx GmbH, all rights reserved: publicly installable, but not to be modified or redistributed — see [`LICENSE`](LICENSE) and [`THIRD-PARTY-NOTICES.md`](THIRD-PARTY-NOTICES.md).
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
### Concept-based authoring and existing-slide edits
|
|
558
|
+
|
|
559
|
+
After plan approval, run `slidemind concepts <deck>` then `slidemind transcribe <deck>`.
|
|
560
|
+
Concepts are read into compact specifications; transcription creates editable JSX, settles
|
|
561
|
+
initial geometry and fetches requested assets. Compare the concept and draft images, repair
|
|
562
|
+
`slides/*.jsx`, then run the usual draft, review and delivery commands. Missing assets stay
|
|
563
|
+
explicit. `SLIDEMIND_SPEC_SCHEMA=legacy` supports an older reader deployment.
|
|
564
|
+
|
|
565
|
+
Existing-slide edits patch current JSX directly. Imported PowerPoint slides retain the
|
|
566
|
+
PPTX → JSX conversion and native-object preservation workflow; they do not need concepts.
|
|
567
|
+
`transcribe --only NN` can settle a generated slide during reconstruction, but may move
|
|
568
|
+
neighbouring content. Do not use it as an automatic step for a small edit or converted slide.
|
|
569
|
+
|
|
570
|
+
Existing-slide edits are not limited to changing words: adding elements and restructuring
|
|
571
|
+
them is supported. What is protected is what the slide promised to keep.
|
|
572
|
+
|
|
573
|
+
If a generated slide is right in substance but slightly off in layout, `slidemind transcribe
|
|
574
|
+
<deck> --repair` nudges it back rather than rebuilding it. It runs inside a scope you open first
|
|
575
|
+
(`slidemind revision begin <deck> --operation repair --slides <sel>`), and that scope is what
|
|
576
|
+
authorizes it — the file's own contents never do. What you are agreeing to is bounded and
|
|
577
|
+
measured from the original slide, not from the previous attempt: at most three passes, at most a
|
|
578
|
+
few slot-pixels of movement and a ten-percent size change per element, and **no** change to text,
|
|
579
|
+
images, the number of elements, or what a connector joins. It refuses an imported slide, a slide
|
|
580
|
+
it has no transcription record for, and a slide it cannot parse — each before touching anything.
|
|
581
|
+
|
|
582
|
+
**Edits cannot quietly drop things.** A deck rebuilt from a PowerPoint file (`slidemind adopt`)
|
|
583
|
+
records, per slide, the elements that have to survive an edit — connectors and what they join,
|
|
584
|
+
images and the file each points at, tables, and preserved native objects. If an edit loses one,
|
|
585
|
+
`slidemind view-draft` names it:
|
|
586
|
+
|
|
587
|
+
```
|
|
588
|
+
[preserve:warn] 04-pricing — #conn-tier-a-tier-b: missing — is required on this slide and is
|
|
589
|
+
not in the evidence — restore it in slides/04-pricing.jsx, or supersede the obligation
|
|
590
|
+
explicitly (`slidemind revision begin pricing --operation targeted-edit`); a final
|
|
591
|
+
replacement refuses while it stands.
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
`view-draft` only reports it; `slidemind build-pptx` and `slidemind push` refuse until it is
|
|
595
|
+
resolved. You do **not** have to start a session for this — an adopted deck is protected from
|
|
596
|
+
the moment it is adopted, and a deck you authored from scratch is never gated by it. If you
|
|
597
|
+
meant to remove the element, say so once with
|
|
598
|
+
`slidemind revision begin <deck> --operation targeted-edit --slides <sel>`; that scope is what
|
|
599
|
+
authorizes the removal.
|
|
600
|
+
|
|
601
|
+
Evidence a draft cannot give is *unknown*, never a pass, and whether it stops the build
|
|
602
|
+
depends on the slide — one deck can hold both kinds:
|
|
603
|
+
|
|
604
|
+
- **A slide that came from a PowerPoint file** can be checked against that file. Things like a
|
|
605
|
+
connector's endpoints and a native object's embedded package normally resolve and the build goes
|
|
606
|
+
ahead. If one of them could have been checked and was not, the build **stops**, the same as for a
|
|
607
|
+
`[preserve:warn]`.
|
|
608
|
+
- **A slide you authored from scratch** has no original file to check against, so some obligations
|
|
609
|
+
cannot be proved either way. Those **ship**, with one line naming exactly what was not proved.
|
|
610
|
+
Stopping there would demand evidence that cannot exist.
|
|
611
|
+
|
|
612
|
+
The build also stops if you changed a slide and have not run `slidemind view-draft` since, because
|
|
613
|
+
then nothing has checked the bytes you are about to ship.
|
|
614
|
+
|
|
615
|
+
Both places you can use slidemind follow the same rule — proof is demanded where proof is possible —
|
|
616
|
+
and on most decks they behave identically. A deck you authored has no original file on either side,
|
|
617
|
+
so the same slides ship with the same note whether you build from the command line or the PowerPoint
|
|
618
|
+
add-in. They differ on one case only: a slide that came from a PowerPoint file, which the command
|
|
619
|
+
line can check and the add-in currently cannot. So the add-in is not a way around a refusal — if the
|
|
620
|
+
command line stopped on such a slide, that slide has something to fix.
|
|
621
|
+
|
|
622
|
+
### Images you supply
|
|
623
|
+
|
|
624
|
+
An image you hand the agent — a screenshot, a diagram, a photo — is kept as itself. Two steps,
|
|
625
|
+
deliberately separate:
|
|
626
|
+
|
|
627
|
+
1. **Import the bytes.** `slidemind assets import <deck> <file>` copies the file into the deck and
|
|
628
|
+
identifies it by its own digest. It takes file paths, never URLs, and it promises nothing about
|
|
629
|
+
where the picture goes.
|
|
630
|
+
2. **Approve what it is for.** The agent records a *use* on a slide in `plan.md`, and you see it on
|
|
631
|
+
that slide's card at the plan gate: `original` (place exactly this file), `reconstruct` (rebuild
|
|
632
|
+
it as editable slide content — the whole slide, or one element inside it), or `reference` (it
|
|
633
|
+
guides the look; no picture required). One file can have several uses, on several slides.
|
|
634
|
+
|
|
635
|
+
An `original` is never searched for, regenerated, recoloured or swapped for something similar. If
|
|
636
|
+
its file goes missing or its bytes change, `slidemind view-draft` says so per slide, and
|
|
637
|
+
`slidemind build-pptx` / `slidemind push` refuse until it is restored — including when the add-in
|
|
638
|
+
returned no verdict at all, because a skipped check is not a pass.
|
|
639
|
+
|
|
640
|
+
This needs a slidemind add-in that supports image intent. On an older deployment a deck with
|
|
641
|
+
approved image uses stops **before** anything is generated, names the capability, and leaves your
|
|
642
|
+
plan and your files exactly as they were. Decks with no image uses are unaffected.
|
|
643
|
+
|
|
644
|
+
What the checks prove is structural: the right bytes, on the right slide, once, inside the slide,
|
|
645
|
+
not hidden. They cannot prove the picture is visible — something drawn over it would still pass —
|
|
646
|
+
so the draft preview and the review gate remain the place that is caught.
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
The slidemind package contains the following third-party material. It is
|
|
4
|
+
licensed under its own terms, reproduced below; the package's own LICENSE does
|
|
5
|
+
not restrict the rights those terms grant.
|
|
6
|
+
|
|
7
|
+
## DrawingML preset shape definitions
|
|
8
|
+
|
|
9
|
+
- **File:** `src/builders/preset-definitions.json` (derived; converted by
|
|
10
|
+
`scripts/convert-preset-definitions.mjs`, which is not shipped)
|
|
11
|
+
- **Source:** Apache POI,
|
|
12
|
+
`poi/src/main/resources/org/apache/poi/sl/draw/geom/presetShapeDefinitions.xml`
|
|
13
|
+
— Apache POI's redistribution of the ECMA-376 Part 1 (5th edition) §20.1.9
|
|
14
|
+
DrawingML preset shape geometry definitions
|
|
15
|
+
- **Copyright:** The Apache Software Foundation; the definitions are published
|
|
16
|
+
by Ecma International as part of the ECMA-376 standard
|
|
17
|
+
- **License:** Apache License, Version 2.0 (text below)
|
|
18
|
+
- **Modifications:** the XML definitions were converted to a compact JSON form
|
|
19
|
+
(adjust values, guides, paths and connection sites); no source XML is
|
|
20
|
+
included
|
|
21
|
+
|
|
22
|
+
## Apache License, Version 2.0
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Apache License
|
|
26
|
+
Version 2.0, January 2004
|
|
27
|
+
http://www.apache.org/licenses/
|
|
28
|
+
|
|
29
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
30
|
+
|
|
31
|
+
1. Definitions.
|
|
32
|
+
|
|
33
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
34
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
35
|
+
|
|
36
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
37
|
+
the copyright owner that is granting the License.
|
|
38
|
+
|
|
39
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
40
|
+
other entities that control, are controlled by, or are under common
|
|
41
|
+
control with that entity. For the purposes of this definition,
|
|
42
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
43
|
+
direction or management of such entity, whether by contract or
|
|
44
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
45
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
46
|
+
|
|
47
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
48
|
+
exercising permissions granted by this License.
|
|
49
|
+
|
|
50
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
51
|
+
including but not limited to software source code, documentation
|
|
52
|
+
source, and configuration files.
|
|
53
|
+
|
|
54
|
+
"Object" form shall mean any form resulting from mechanical
|
|
55
|
+
transformation or translation of a Source form, including but
|
|
56
|
+
not limited to compiled object code, generated documentation,
|
|
57
|
+
and conversions to other media types.
|
|
58
|
+
|
|
59
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
60
|
+
Object form, made available under the License, as indicated by a
|
|
61
|
+
copyright notice that is included in or attached to the work
|
|
62
|
+
(an example is provided in the Appendix below).
|
|
63
|
+
|
|
64
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
65
|
+
form, that is based on (or derived from) the Work and for which the
|
|
66
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
67
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
68
|
+
of this License, Derivative Works shall not include works that remain
|
|
69
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
70
|
+
the Work and Derivative Works thereof.
|
|
71
|
+
|
|
72
|
+
"Contribution" shall mean any work of authorship, including
|
|
73
|
+
the original version of the Work and any modifications or additions
|
|
74
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
75
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
76
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
77
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
78
|
+
means any form of electronic, verbal, or written communication sent
|
|
79
|
+
to the Licensor or its representatives, including but not limited to
|
|
80
|
+
communication on electronic mailing lists, source code control systems,
|
|
81
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
82
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
83
|
+
excluding communication that is conspicuously marked or otherwise
|
|
84
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
85
|
+
|
|
86
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
87
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
88
|
+
subsequently incorporated within the Work.
|
|
89
|
+
|
|
90
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
91
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
92
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
93
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
94
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
95
|
+
Work and such Derivative Works in Source or Object form.
|
|
96
|
+
|
|
97
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
98
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
99
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
100
|
+
(except as stated in this section) patent license to make, have made,
|
|
101
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
102
|
+
where such license applies only to those patent claims licensable
|
|
103
|
+
by such Contributor that are necessarily infringed by their
|
|
104
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
105
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
106
|
+
institute patent litigation against any entity (including a
|
|
107
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
108
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
109
|
+
or contributory patent infringement, then any patent licenses
|
|
110
|
+
granted to You under this License for that Work shall terminate
|
|
111
|
+
as of the date such litigation is filed.
|
|
112
|
+
|
|
113
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
114
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
115
|
+
modifications, and in Source or Object form, provided that You
|
|
116
|
+
meet the following conditions:
|
|
117
|
+
|
|
118
|
+
(a) You must give any other recipients of the Work or
|
|
119
|
+
Derivative Works a copy of this License; and
|
|
120
|
+
|
|
121
|
+
(b) You must cause any modified files to carry prominent notices
|
|
122
|
+
stating that You changed the files; and
|
|
123
|
+
|
|
124
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
125
|
+
that You distribute, all copyright, patent, trademark, and
|
|
126
|
+
attribution notices from the Source form of the Work,
|
|
127
|
+
excluding those notices that do not pertain to any part of
|
|
128
|
+
the Derivative Works; and
|
|
129
|
+
|
|
130
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
131
|
+
distribution, then any Derivative Works that You distribute must
|
|
132
|
+
include a readable copy of the attribution notices contained
|
|
133
|
+
within such NOTICE file, excluding those notices that do not
|
|
134
|
+
pertain to any part of the Derivative Works, in at least one
|
|
135
|
+
of the following places: within a NOTICE text file distributed
|
|
136
|
+
as part of the Derivative Works; within the Source form or
|
|
137
|
+
documentation, if provided along with the Derivative Works; or,
|
|
138
|
+
within a display generated by the Derivative Works, if and
|
|
139
|
+
wherever such third-party notices normally appear. The contents
|
|
140
|
+
of the NOTICE file are for informational purposes only and
|
|
141
|
+
do not modify the License. You may add Your own attribution
|
|
142
|
+
notices within Derivative Works that You distribute, alongside
|
|
143
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
144
|
+
that such additional attribution notices cannot be construed
|
|
145
|
+
as modifying the License.
|
|
146
|
+
|
|
147
|
+
You may add Your own copyright statement to Your modifications and
|
|
148
|
+
may provide additional or different license terms and conditions
|
|
149
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
150
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
151
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
152
|
+
the conditions stated in this License.
|
|
153
|
+
|
|
154
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
155
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
156
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
157
|
+
this License, without any additional terms or conditions.
|
|
158
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
159
|
+
the terms of any separate license agreement you may have executed
|
|
160
|
+
with Licensor regarding such Contributions.
|
|
161
|
+
|
|
162
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
163
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
164
|
+
except as required for reasonable and customary use in describing the
|
|
165
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
166
|
+
|
|
167
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
168
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
169
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
170
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
171
|
+
implied, including, without limitation, any warranties or conditions
|
|
172
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
173
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
174
|
+
appropriateness of using or redistributing the Work and assume any
|
|
175
|
+
risks associated with Your exercise of permissions under this License.
|
|
176
|
+
|
|
177
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
178
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
179
|
+
unless required by applicable law (such as deliberate and grossly
|
|
180
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
181
|
+
liable to You for damages, including any direct, indirect, special,
|
|
182
|
+
incidental, or consequential damages of any character arising as a
|
|
183
|
+
result of this License or out of the use or inability to use the
|
|
184
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
185
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
186
|
+
other commercial damages or losses), even if such Contributor
|
|
187
|
+
has been advised of the possibility of such damages.
|
|
188
|
+
|
|
189
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
190
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
191
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
192
|
+
or other liability obligations and/or rights consistent with this
|
|
193
|
+
License. However, in accepting such obligations, You may act only
|
|
194
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
195
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
196
|
+
defend, and hold each Contributor harmless for any liability
|
|
197
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
198
|
+
of your accepting any such warranty or additional liability.
|
|
199
|
+
|
|
200
|
+
END OF TERMS AND CONDITIONS
|
|
201
|
+
```
|
package/bin/slidemind.mjs
CHANGED
|
@@ -30,19 +30,27 @@ import fs from "node:fs";
|
|
|
30
30
|
import { register as registerSecret, scrub } from "../src/bridge/secrets.mjs";
|
|
31
31
|
import { announceUpdate } from "../src/update-check.mjs";
|
|
32
32
|
import { readPackageJson, fail } from "../src/cli/common.mjs";
|
|
33
|
+
import { cmdAssets } from "../src/cli/assets.mjs";
|
|
33
34
|
import { cmdConceptImages } from "../src/cli/concepts.mjs";
|
|
35
|
+
import { cmdTranscribe } from "../src/cli/transcribe.mjs";
|
|
34
36
|
import { cmdPlan, cmdReview, cmdImagen, cmdInspectTemplateDeck, cmdBuildPptx, cmdViewDraft } from "../src/cli/deck.mjs";
|
|
35
37
|
import { cmdDownloadBundle } from "../src/cli/download-bundle.mjs";
|
|
36
38
|
import { cmdViewSlide, cmdReadSource, cmdDownloadResult } from "../src/cli/engine-results.mjs";
|
|
37
39
|
import { printHelp } from "../src/cli/help.mjs";
|
|
38
40
|
import { cmdInstall, cmdUninstall, cmdUpdate } from "../src/cli/install.mjs";
|
|
41
|
+
import { cmdClean } from "../src/cli/maintenance.mjs";
|
|
39
42
|
import { cmdRead } from "../src/cli/read.mjs";
|
|
43
|
+
import { cmdRecord } from "../src/cli/record.mjs";
|
|
40
44
|
import { cmdReady } from "../src/cli/ready.mjs";
|
|
41
45
|
import { cmdSearch, cmdLs } from "../src/cli/search.mjs";
|
|
42
46
|
import { cmdLogin, cmdWhoami, cmdLogout } from "../src/cli/session.mjs";
|
|
43
47
|
import { cmdSetup } from "../src/cli/setup.mjs";
|
|
44
48
|
import { cmdInsertSlide, cmdAddSlide } from "../src/cli/slide-reuse.mjs";
|
|
45
49
|
import { cmdAdopt, cmdPush, cmdNew } from "../src/cli/workspace.mjs";
|
|
50
|
+
import { cmdWorkspace } from "../src/cli/workspace-ui.mjs";
|
|
51
|
+
import { cmdTasks } from "../src/cli/tasks.mjs";
|
|
52
|
+
import { cmdRebase, cmdRevision } from "../src/cli/revision.mjs";
|
|
53
|
+
import { cmdOpen, cmdPull, cmdPublish, cmdRename } from "../src/cli/remote.mjs";
|
|
46
54
|
|
|
47
55
|
// Pull a global `--backend <url|env>` out of argv (it may appear anywhere) and
|
|
48
56
|
// expose it as SLIDEMIND_BACKEND, which scopes the fan-out across paired
|
|
@@ -182,9 +190,15 @@ async function main(rawArgv) {
|
|
|
182
190
|
case "download-result":
|
|
183
191
|
await cmdDownloadResult(rest);
|
|
184
192
|
return 0;
|
|
193
|
+
case "assets":
|
|
194
|
+
await cmdAssets(rest);
|
|
195
|
+
return 0;
|
|
185
196
|
case "concepts":
|
|
186
197
|
await cmdConceptImages(rest);
|
|
187
198
|
return 0;
|
|
199
|
+
case "transcribe":
|
|
200
|
+
await cmdTranscribe(rest);
|
|
201
|
+
return 0;
|
|
188
202
|
case "download-bundle":
|
|
189
203
|
await cmdDownloadBundle(rest);
|
|
190
204
|
return 0;
|
|
@@ -209,12 +223,45 @@ async function main(rawArgv) {
|
|
|
209
223
|
case "read":
|
|
210
224
|
await cmdRead(rest);
|
|
211
225
|
return 0;
|
|
226
|
+
case "record":
|
|
227
|
+
await cmdRecord(rest);
|
|
228
|
+
return 0;
|
|
212
229
|
case "adopt":
|
|
213
230
|
await cmdAdopt(rest);
|
|
214
231
|
return 0;
|
|
232
|
+
case "workspace":
|
|
233
|
+
// The persistent local workspace (src/cli/workspace-ui.mjs); sets its own
|
|
234
|
+
// exit code (0/1/2/3) on process.exitCode instead of throwing.
|
|
235
|
+
await cmdWorkspace(rest);
|
|
236
|
+
return 0;
|
|
237
|
+
case "tasks":
|
|
238
|
+
// Durable tasks (src/cli/tasks.mjs); exit code on process.exitCode like `workspace`.
|
|
239
|
+
await cmdTasks(rest);
|
|
240
|
+
return 0;
|
|
241
|
+
case "revision":
|
|
242
|
+
await cmdRevision(rest);
|
|
243
|
+
return 0;
|
|
244
|
+
case "rebase":
|
|
245
|
+
await cmdRebase(rest);
|
|
246
|
+
return 0;
|
|
247
|
+
case "open":
|
|
248
|
+
await cmdOpen(rest);
|
|
249
|
+
return 0;
|
|
250
|
+
case "pull":
|
|
251
|
+
await cmdPull(rest);
|
|
252
|
+
return 0;
|
|
253
|
+
case "publish":
|
|
254
|
+
await cmdPublish(rest);
|
|
255
|
+
return 0;
|
|
256
|
+
case "rename":
|
|
257
|
+
await cmdRename(rest);
|
|
258
|
+
return 0;
|
|
215
259
|
case "push":
|
|
216
260
|
await cmdPush(rest);
|
|
217
|
-
|
|
261
|
+
break;
|
|
262
|
+
case "clean":
|
|
263
|
+
await cmdClean(rest);
|
|
264
|
+
break;
|
|
218
265
|
case "init":
|
|
219
266
|
case "install":
|
|
220
267
|
// Set slidemind up in a coding harness (deploy the skill).
|
|
@@ -255,6 +302,7 @@ main(rawArgv)
|
|
|
255
302
|
});
|
|
256
303
|
if (err) {
|
|
257
304
|
process.stderr.write(`slidemind: ${err.message || err}\n`);
|
|
258
|
-
|
|
305
|
+
// a script that ran under us keeps its exit code (runNode): 2 = blocked
|
|
306
|
+
process.exit(Number.isInteger(err.exitCode) && err.exitCode > 0 ? err.exitCode : 1);
|
|
259
307
|
}
|
|
260
308
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "slidemind",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Connect Claude Code, Codex & opencode to the slidemind PowerPoint add-in — let your coding agent build and edit native, on-brand PowerPoint decks against your active corporate design, from the terminal.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -25,14 +25,16 @@
|
|
|
25
25
|
"install.sh",
|
|
26
26
|
"install.ps1",
|
|
27
27
|
"AGENTS.md",
|
|
28
|
-
"README.md"
|
|
28
|
+
"README.md",
|
|
29
|
+
"LICENSE",
|
|
30
|
+
"THIRD-PARTY-NOTICES.md"
|
|
29
31
|
],
|
|
30
32
|
"scripts": {
|
|
31
33
|
"build": "node bin/slidemind.mjs build",
|
|
32
34
|
"build-pptx": "node bin/slidemind.mjs build-pptx",
|
|
33
35
|
"lint:parity": "node scripts/check-skill-parity.mjs",
|
|
34
36
|
"release": "node scripts/release.mjs",
|
|
35
|
-
"test": "node
|
|
37
|
+
"test": "node scripts/run-tests.mjs"
|
|
36
38
|
},
|
|
37
39
|
"dependencies": {
|
|
38
40
|
"@clack/prompts": "^1.3.0",
|