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.
Files changed (187) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/AGENTS.md +592 -16
  4. package/LICENSE +4 -0
  5. package/README.md +203 -8
  6. package/THIRD-PARTY-NOTICES.md +201 -0
  7. package/bin/slidemind.mjs +50 -2
  8. package/package.json +5 -3
  9. package/skills/create-slides/SKILL.md +484 -886
  10. package/skills/search/SKILL.md +46 -23
  11. package/src/bridge/build-and-push.mjs +548 -73
  12. package/src/bridge/bundle.mjs +100 -31
  13. package/src/bridge/capture.mjs +14 -17
  14. package/src/bridge/client/brands.mjs +157 -18
  15. package/src/bridge/client/engine-routing.mjs +48 -13
  16. package/src/bridge/client/engine-search.mjs +24 -1
  17. package/src/bridge/client/render.mjs +27 -1
  18. package/src/bridge/client/transport.mjs +499 -23
  19. package/src/bridge/client.mjs +10 -0
  20. package/src/bridge/config.mjs +67 -6
  21. package/src/bridge/engine-download.mjs +0 -10
  22. package/src/bridge/graph-auth.mjs +55 -3
  23. package/src/bridge/image-intent-envelope.mjs +239 -0
  24. package/src/bridge/package-preview.mjs +67 -0
  25. package/src/bridge/sharepoint.mjs +914 -0
  26. package/src/builders/asset-fetch.mjs +203 -0
  27. package/src/builders/block-dividers.mjs +83 -0
  28. package/src/builders/build.mjs +171 -87
  29. package/src/builders/card-height.mjs +294 -0
  30. package/src/builders/chart-hole.mjs +183 -0
  31. package/src/builders/chart-jsx.mjs +410 -0
  32. package/src/builders/chart-labels.mjs +326 -0
  33. package/src/builders/concept-geometry.mjs +370 -0
  34. package/src/builders/concept-intent.mjs +200 -0
  35. package/src/builders/concept-layout.mjs +79 -0
  36. package/src/builders/concept-lines.mjs +509 -0
  37. package/src/builders/concept-lists.mjs +270 -0
  38. package/src/builders/concept-marks.mjs +84 -0
  39. package/src/builders/concept-relationships.mjs +12 -0
  40. package/src/builders/concept-spec.mjs +645 -0
  41. package/src/builders/concept-text.mjs +140 -0
  42. package/src/builders/concept-waves.mjs +57 -0
  43. package/src/builders/copy-fit.mjs +139 -0
  44. package/src/builders/design-tokens.mjs +347 -0
  45. package/src/builders/draft-check.mjs +552 -340
  46. package/src/builders/draft-lines.mjs +369 -0
  47. package/src/builders/edit-route.mjs +29 -0
  48. package/src/builders/figure-sketch.mjs +375 -0
  49. package/src/builders/fold-sets.mjs +639 -0
  50. package/src/builders/gate-server.mjs +9 -4
  51. package/src/builders/gate-session.js +273 -12
  52. package/src/builders/gate-shell.js +1494 -0
  53. package/src/builders/image-intent-check.mjs +308 -0
  54. package/src/builders/image-use-reconcile.mjs +107 -0
  55. package/src/builders/kit-helpers.mjs +121 -0
  56. package/src/builders/layout-names.mjs +32 -0
  57. package/src/builders/legacy-reference-uses.mjs +179 -0
  58. package/src/builders/line-fit.mjs +224 -0
  59. package/src/builders/line-native.mjs +895 -0
  60. package/src/builders/line-relations.mjs +230 -0
  61. package/src/builders/lint-fix.mjs +117 -9
  62. package/src/builders/lint.mjs +25 -20
  63. package/src/builders/list-jsx.mjs +88 -0
  64. package/src/builders/placement.mjs +133 -0
  65. package/src/builders/plan-checks.mjs +135 -0
  66. package/src/builders/plan-comments.mjs +19 -0
  67. package/src/builders/plan-handlers.mjs +95 -0
  68. package/src/builders/plan-markdown-edit.mjs +3 -3
  69. package/src/builders/plan-overlay.js +1530 -1608
  70. package/src/builders/plan.mjs +689 -186
  71. package/src/builders/preset-definitions.json +1 -0
  72. package/src/builders/preset-eval.mjs +244 -0
  73. package/src/builders/preview.html +51 -120
  74. package/src/builders/red-thread-backbone.mjs +135 -36
  75. package/src/builders/repair.mjs +205 -0
  76. package/src/builders/repeat-groups.mjs +540 -0
  77. package/src/builders/resolve-skill.mjs +5 -4
  78. package/src/builders/review-overlay.js +296 -293
  79. package/src/builders/review.mjs +305 -84
  80. package/src/builders/rule-shift.mjs +96 -0
  81. package/src/builders/seat.mjs +354 -0
  82. package/src/builders/settle-driver.mjs +236 -0
  83. package/src/builders/settle.mjs +1448 -0
  84. package/src/builders/slide-prep.mjs +67 -0
  85. package/src/builders/spec-assets.mjs +236 -0
  86. package/src/builders/spec-match.mjs +56 -0
  87. package/src/builders/stack.mjs +413 -0
  88. package/src/builders/storyboard-markdown.mjs +70 -27
  89. package/src/builders/storyboard-schema.mjs +54 -114
  90. package/src/builders/text-blocks.mjs +212 -0
  91. package/src/builders/text-card-fit.mjs +552 -0
  92. package/src/builders/text-stack.mjs +276 -0
  93. package/src/builders/transcribe.mjs +1069 -0
  94. package/src/cli/assets.mjs +164 -0
  95. package/src/cli/common.mjs +173 -12
  96. package/src/cli/concept-spec-support.mjs +76 -0
  97. package/src/cli/concepts.mjs +1002 -103
  98. package/src/cli/deck.mjs +401 -65
  99. package/src/cli/diagnose.mjs +4 -2
  100. package/src/cli/engine-helpers.mjs +17 -10
  101. package/src/cli/engine-results.mjs +76 -3
  102. package/src/cli/help.mjs +232 -28
  103. package/src/cli/install.mjs +9 -0
  104. package/src/cli/maintenance.mjs +104 -0
  105. package/src/cli/read.mjs +2 -1
  106. package/src/cli/ready.mjs +6 -3
  107. package/src/cli/record.mjs +522 -0
  108. package/src/cli/remote.mjs +818 -0
  109. package/src/cli/revision.mjs +686 -0
  110. package/src/cli/search.mjs +30 -11
  111. package/src/cli/session.mjs +56 -13
  112. package/src/cli/setup.mjs +46 -2
  113. package/src/cli/status.mjs +142 -33
  114. package/src/cli/tasks.mjs +246 -0
  115. package/src/cli/transcribe.mjs +854 -0
  116. package/src/cli/workspace-ui.mjs +260 -0
  117. package/src/cli/workspace.mjs +212 -34
  118. package/src/install-channel.mjs +64 -7
  119. package/src/lib/adopt.mjs +346 -25
  120. package/src/lib/concept-spec-binding.mjs +96 -0
  121. package/src/lib/conversions.mjs +70 -6
  122. package/src/lib/convert-folded.mjs +107 -0
  123. package/src/lib/deck-paths.mjs +418 -0
  124. package/src/lib/durable-ids.mjs +47 -0
  125. package/src/lib/edit-operations.mjs +316 -0
  126. package/src/lib/edit-state.mjs +1244 -0
  127. package/src/lib/edit-transitions.mjs +120 -0
  128. package/src/lib/extensions.mjs +501 -0
  129. package/src/lib/image-assets.mjs +465 -0
  130. package/src/lib/image-derivatives.mjs +234 -0
  131. package/src/lib/image-intent-fingerprint.mjs +70 -0
  132. package/src/lib/image-intent-tags.mjs +176 -0
  133. package/src/lib/image-intent.mjs +802 -0
  134. package/src/lib/image-use-overrides.mjs +279 -0
  135. package/src/lib/inline-components.mjs +613 -0
  136. package/src/lib/lint-converted.mjs +68 -4
  137. package/src/lib/merge-json.mjs +163 -0
  138. package/src/lib/overwrite-guard.mjs +3 -3
  139. package/src/lib/presentation-context.mjs +531 -0
  140. package/src/lib/preservation-tags.mjs +157 -0
  141. package/src/lib/preservation-verdict.mjs +1342 -0
  142. package/src/lib/publish.mjs +1557 -0
  143. package/src/lib/rebase.mjs +945 -0
  144. package/src/lib/reconcile-ack.mjs +4 -6
  145. package/src/lib/reconcile.mjs +62 -24
  146. package/src/lib/record-client.mjs +175 -0
  147. package/src/lib/record-state.mjs +151 -0
  148. package/src/lib/remote.mjs +661 -0
  149. package/src/lib/revision.mjs +1210 -0
  150. package/src/lib/slide-guids.mjs +4 -6
  151. package/src/lib/slide-preservation.mjs +423 -0
  152. package/src/lib/slide-selection.mjs +9 -0
  153. package/src/lib/workspace-transaction.mjs +117 -0
  154. package/src/pptx/content-digest.mjs +334 -0
  155. package/src/pptx/deck-assemble.mjs +1278 -0
  156. package/src/pptx/fill/engine.mjs +2 -3
  157. package/src/pptx/fill/freeform.mjs +6 -3
  158. package/src/pptx/ooxml.mjs +20 -0
  159. package/src/pptx/package-evidence.mjs +383 -0
  160. package/src/pptx/tags.mjs +163 -11
  161. package/src/update-check.mjs +22 -4
  162. package/src/workspace/adapters.mjs +222 -0
  163. package/src/workspace/auth.mjs +256 -0
  164. package/src/workspace/autostart.mjs +204 -0
  165. package/src/workspace/daemon.mjs +360 -0
  166. package/src/workspace/discovery.mjs +180 -0
  167. package/src/workspace/edit.mjs +167 -0
  168. package/src/workspace/events.mjs +52 -0
  169. package/src/workspace/gate-client.mjs +290 -0
  170. package/src/workspace/handback.mjs +73 -0
  171. package/src/workspace/lifecycle.mjs +635 -0
  172. package/src/workspace/operations.mjs +200 -0
  173. package/src/workspace/pick-folder.mjs +152 -0
  174. package/src/workspace/registry.mjs +359 -0
  175. package/src/workspace/remote-links.mjs +397 -0
  176. package/src/workspace/remote-status.mjs +359 -0
  177. package/src/workspace/routes.mjs +1331 -0
  178. package/src/workspace/server.mjs +159 -0
  179. package/src/workspace/sync.mjs +1119 -0
  180. package/src/workspace/task-actions.mjs +215 -0
  181. package/src/workspace/tasks.mjs +507 -0
  182. package/src/workspace/ui/app.js +1886 -0
  183. package/src/workspace/ui/index.html +141 -0
  184. package/src/workspace/ui/plan-bridge.js +120 -0
  185. package/src/workspace/ui/sharepoint.svg +59 -0
  186. package/src/workspace/ui/styles.css +423 -0
  187. package/src/builders/visual-families.mjs +0 -46
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: slidemind-search
3
- description: Discover, search, and reuse content from the active corporate design's engines — image/icon engines and slide libraries — across whatever environment the slidemind PowerPoint add-in is wired to, or from a local PowerPoint file on disk. Finds existing slides and brand imagery — from the engines or from a local .pptx — then reuses them either by inserting them live into an open PowerPoint or by folding them into a deck as native one-slide .pptx files that survive re-render. Use whenever the user asks to find or reuse an existing slide ("is there a slide on X in our library", "find the Q3 results slide", "drop in / reuse our pricing slide"), to reuse a slide from another presentation or deck on disk, to ask what's in a local .pptx file, to search the brand's icon/image engines, or to ask what slide or image libraries exist. Skip when the user wants to author NEW slide content from scratch — that is slidemind-create-slides — or to merely open, present, or rename a deck.
3
+ description: Discover, search, and reuse content from the active corporate design's engines — image/icon engines and slide libraries — or from a local PowerPoint file on disk. Finds existing slides and brand imagery — from the engines or from a local .pptx — then reuses them either by inserting them live into an open PowerPoint or by folding them into a deck as native one-slide .pptx files that survive re-render. Use whenever the user asks to find or reuse an existing slide ("is there a slide on X in our library", "find the Q3 results slide", "drop in / reuse our pricing slide"), to reuse a slide from another presentation or deck on disk, to ask what's in a local .pptx file, to search the brand's icon/image engines, or to ask what slide or image libraries exist. Skip when the user wants to author NEW slide content from scratch — that is slidemind-create-slides — or to merely open, present, or rename a deck.
4
4
  ---
5
5
 
6
6
  # slidemind-search
@@ -41,8 +41,7 @@ identity):
41
41
  itself, because the claim carrying the deployment's address is minted in the add-in. Ask the user
42
42
  to open PowerPoint → slidemind → **Settings → General → Connect CLI**, press the **link button**,
43
43
  and copy the command shown (**CLI already installed?** gives the short `slidemind setup …` form).
44
- Have them paste it to you and run it **verbatim**. `slidemind whoami` lists connected
45
- environments.
44
+ Have them paste it to you and run it **verbatim**.
46
45
 
47
46
  This is the same connection as `slidemind-create-slides`, whose **Connecting the CLI** section
48
47
  carries the full step-by-step. If it was approved there, it is already available here.
@@ -108,18 +107,20 @@ Follow `workflow/search.md` for the discipline; this is the CLI shape of its loo
108
107
  (`--type scope` — `scope:all`, and `scope:sharepoint` once a site is connected), which search the
109
108
  corpus unfiltered. Filter with `--subtype <image|slide|template|content>` (e.g. `slidemind ls
110
109
  engines --type search --subtype slide`). The catalog is **per-user, not per-presentation** —
111
- there is no presId to scope; spanning every paired environment, each row is tagged with its
112
- `env`. (`--to` is accepted but never needed here.) Pick an **id** from the list — do not invent
113
- one. **An empty or thin engine list is not "nothing to search"** (see `workflow/search.md`): fall
114
- through to a scope. An empty list **under a `--type`/`--subtype` filter** says so explicitly — it
110
+ there is no presId to scope. (`--to` is accepted but never needed here.) Pick an **id** from
111
+ the list — do not invent one. **An empty or thin engine list is not "nothing to search"** (see
112
+ `workflow/search.md`): fall through to a scope. An empty list **under a `--type`/`--subtype` filter** says so explicitly — it
115
113
  reports how many engines and scopes exist unfiltered — so the next move there is to drop the
116
114
  filter, not to jump to a scope. A row marked *nothing indexed yet* / *indexing* exists but will
117
115
  return nothing right now; pick another target.
118
- 2. **Choose the target + intent.** Slide engines (`subtype slide`) and scopes support two intents:
119
- **content** (the slide's text is the signal — title, body, tables, notes) and **visual** (the
120
- slide image is the signal). Image/icon engines (`subtype image`) are **visual-only**. Match the
121
- intent to the ask: "a slide that says X" / "covers topic Y" → `--intent content`; "a slide that
122
- looks like X" / brand imagery → `--intent visual`. `--intent auto` lets the engine decide.
116
+ 2. **Choose the target + intent.** Slide engines (`subtype slide`), content collections and scopes
117
+ support two intents: **content** (the slide's text is the signal — title, body, tables, notes)
118
+ and **visual** (the slide image is the signal). Image/icon engines (`subtype image`) are
119
+ **visual-only**, and so are **template collections** (`subtype template`): their text is
120
+ placeholder, so query the structure the content needs ("loop diagram with 5 steps",
121
+ "three-column comparison"), never the topic. Match the intent to the ask: "a slide that says X" /
122
+ "covers topic Y" → `--intent content`; "a slide that looks like X" / brand imagery →
123
+ `--intent visual`. `--intent auto` lets the engine decide.
123
124
  3. **Search — no window to choose.** `slidemind search "<query>" --engine <id> --intent
124
125
  <auto|content|visual> [--top N]` (leave `--to` off). A **scope** target additionally needs
125
126
  `--result-type slide|image` (it has no subtype of its own; the CLI defaults it to `slide`). Omit
@@ -133,8 +134,6 @@ Follow `workflow/search.md` for the discipline; this is the CLI shape of its loo
133
134
  older relayed path, where the id is bound to that window — thread that `presId` in as `--to
134
135
  <presId>`. **Copy the next-step commands the search prints** rather than composing them from
135
136
  memory.
136
- - Connected to **several environments**? Pass `--deck <deck>` so the search routes by that deck's
137
- bound design instead of asking you to choose an environment.
138
137
  - **On `0 result(s)`, read the diagnostic the CLI prints and act on it** — it lists the causes
139
138
  that look identical from here (nothing connected, still indexing, the engine's folder filter
140
139
  excludes the content) and the next moves. Reuse from a scope works exactly like reuse from an
@@ -151,6 +150,11 @@ Follow `workflow/search.md` for the discipline; this is the CLI shape of its loo
151
150
  saved file, and re-search once if it was wrong — two failed downloads for the same need means
152
151
  mark it unresolved and move on. Pick by **selection number(s)**, and **cite the sources** (see
153
152
  the rule below) whenever you report results back.
153
+ **Slides the user picks; imagery you pick.** Before you reuse slide or template results, show
154
+ the user the candidates — the contact sheet path, or the numbered titles with score and source —
155
+ and ask which to reuse through your harness's question tool; reuse exactly their picks. When none
156
+ fit, search again with a different query or engine and ask again. An image or icon result you
157
+ pick yourself.
154
158
  5. **Read the source deck when the story matters.** A found slide came out of a real presentation,
155
159
  and often the answer the user needs is in the *rest* of it — how the slide was framed, what came
156
160
  before and after, whether that deck already covers more of the ask. `slidemind read-source
@@ -172,7 +176,13 @@ Follow `workflow/search.md` for the discipline; this is the CLI shape of its loo
172
176
  ## Reuse targets — insert live, or fold into a deck
173
177
 
174
178
  A found slide can be reused two ways. Both extract the picked result(s) as native PowerPoint slides
175
- — **reuse is JSX-free; reused slides are native `.pptx`, never JSX.**
179
+ — **reuse is JSX-free; reused slides land as native `.pptx` and stay native until the user asks to change one** (`workflow/search.md`).
180
+ Then convert that one slide in place — `slidemind adopt decks/<slug>/.slidemind/slides/<NN-reused-…>.pptx --in-place` — and
181
+ edit its jsx like any deck slide (create-slides → editing). **A picked template is a starting
182
+ layout, not the answer:** when the user asked for slides about something ("build two slides on X
183
+ from our templates"), that request is the ask to change them — adopt each picked template in place
184
+ and fill it with the content the slide must carry; never stop at placeholder text. Plain reuse (the
185
+ user wants the existing slide itself) stays native.
176
186
 
177
187
  - **Insert LIVE into an open PowerPoint** — `slidemind insert-slide --search <searchId> --pick
178
188
  <n[,n,…]> --to <presId> [--at <N>]`. **This is the one host-required step:** the picked slides
@@ -185,7 +195,7 @@ A found slide can be reused two ways. Both extract the picked result(s) as nativ
185
195
  - **Fold into a DECK on disk** — `slidemind add-slide --search <searchId> --pick <n[,n,…]> --deck
186
196
  <deck> [--at <N>]` (add `--to <searchWindow>` only on the relayed path, where the extraction must
187
197
  run on the window that holds the `searchId`). Each picked result is written as a native one-slide
188
- file into `decks/<slug>/slides/NN-reused-*.pptx`, in play order; no live window is changed, and
198
+ file into `decks/<slug>/.slidemind/slides/NN-reused-*.pptx`, in play order; no live window is changed, and
189
199
  nothing needs one. `--json` returns `{ searchId, deck, slides[] }`. Use this when the reused slide
190
200
  should become **part of a deck the user keeps and re-renders** — and prefer it when PowerPoint
191
201
  isn't open: fold now, `slidemind push <deck>` later.
@@ -201,7 +211,7 @@ deck), skip discovery entirely — no host, no window, no engine:
201
211
  <n[,n,…]> --deck <deck> [--at <N>]`. `--from` is the local-file alternative to `--search` (they
202
212
  are **mutually exclusive**), and it needs no `--to` — there is no window in the loop.
203
213
 
204
- This writes the **same** `decks/<slug>/slides/NN-reused-*.pptx` as the engine path, so the durable
214
+ This writes the **same** `decks/<slug>/.slidemind/slides/NN-reused-*.pptx` as the engine path, so the durable
205
215
  rule below applies unchanged (deck source-of-truth, spliced by play-order filename, survives every
206
216
  re-render). To deliver a local slide **live** into an open window there is no `insert-slide --from`:
207
217
  fold it into a deck as above, then `slidemind push <deck>`.
@@ -227,6 +237,19 @@ download-result` — it writes the asset into the deck's `assets/`. That mechani
227
237
  icon-recolor descriptor and `--icon-color`) is documented where it's used, in
228
238
  `slidemind-create-slides`.
229
239
 
240
+ **A download is a found image, not a promised one.** `download-result` registers what it fetched in
241
+ the deck's image registry, with its engine provenance — and that is all it does. Registration
242
+ creates **no** obligation to place the picture on any slide: an image you fetched to satisfy a
243
+ generic illustration stays an ordinary sourced asset, sized and placed like any other. It becomes a
244
+ binding obligation only if the **user** chose that exact result for that exact spot and it is
245
+ recorded as an `assetUses` entry in the plan, which `slidemind-create-slides` owns.
246
+
247
+ **Never fill someone else's obligation with a search result.** If a slide already carries an
248
+ `original` use — an image the user supplied — it is satisfied by those bytes and nothing else.
249
+ Searching for something that looks like it, downloading a close match, or generating a replacement
250
+ is the one failure this whole path exists to prevent, whatever the draft looks like. A missing or
251
+ changed source is repaired by restoring or re-importing it, never by substitution.
252
+
230
253
  Image results print their **intrinsic `width×height`** next to the title — the engine indexes it, so
231
254
  the aspect ratio is yours *before* you fetch anything. Carry it into the pick: a result whose shape
232
255
  doesn't suit the slot you have in mind is the wrong pick, whatever it depicts. (`download-result`
@@ -236,7 +259,7 @@ re-states the size, measured from the delivered bytes.)
236
259
 
237
260
  These two skills compose. When the user is **authoring** a deck (that's `slidemind-create-slides`)
238
261
  and wants an **existing** slide incorporated, reach for this skill's `add-slide`: it folds the
239
- existing slide into the same `decks/<slug>/slides/` directory as the authored JSX. The reused
262
+ existing slide into the same `decks/<slug>/.slidemind/slides/` directory as the authored JSX. The reused
240
263
  `.pptx` and the authored `.jsx` coexist in play order (numeric filename prefix) and the reused slide
241
264
  is **not lost on re-push**. Hand back to `slidemind-create-slides` for any new content authoring.
242
265
 
@@ -247,16 +270,16 @@ insert live, fold into a deck, engine fetch). You are the local harness — this
247
270
 
248
271
  | Verb (`workflow/search.md`) | Your equivalent (local harness) |
249
272
  |---|---|
250
- | **discover engines** ("list what you can reach") | `slidemind ls engines [--type collection\|search\|scope] [--subtype …]` — returns the engine catalog **plus the search scopes** (pick an `id`; never guess one). The catalog is backend/user-scoped; `--to` is accepted but never needed. No window needed where the add-in serves the pane-free routes. |
251
- | **engine search** (with `intent`) | `slidemind search "<query>" --engine <id> --intent <auto\|content\|visual> [--top N] [--deck <deck>]` — leave `--to` off → a `searchId` + numbered results, plus the exact follow-up commands for the path it took (`--deck` routes by that deck's design when several environments are connected); each result may carry a `source:` link — **always cite it back** |
273
+ | **discover engines** ("list what you can reach") | `slidemind ls engines [--type collection\|search\|scope] [--subtype …]` — returns the engine catalog **plus the search scopes** (pick an `id`; never guess one). The catalog is per-user; `--to` is accepted but never needed. No window needed where the add-in serves the pane-free routes. |
274
+ | **engine search** (with `intent`) | `slidemind search "<query>" --engine <id> --intent <auto\|content\|visual> [--top N] [--deck <deck>]` — leave `--to` off → a `searchId` + numbered results, plus the exact follow-up commands for the path it took; each result may carry a `source:` link — **always cite it back** |
252
275
  | **search a scope** (unfiltered corpus, no engine) | `slidemind search "<query>" --engine <scope:all\|scope:sharepoint> --result-type <slide\|image> [--intent …]` — `--result-type` is required for a scope (defaults to `slide`). Results reuse identically to engine results. |
253
276
  | **pull an on-demand thumbnail** for a stored result | `slidemind view-slide --search <searchId> --pick <n>` — SLIDE-library results only; image/icon results have no preview ("no image returned") — download and Read the file instead (add `--to <searchWindow>` only on the relayed path) · or `slidemind search … --json` for the structured payload. |
254
277
  | **read a result's SOURCE deck** (the presentation it came from) | `slidemind read-source --search <searchId> --pick <n> [--from-slide N] [--to-slide N] [--out <file.md>]` — Markdown of the whole source presentation, one section per slide (add `--to <searchWindow>` only on the relayed path). Indexed text, not the live file. Slide results only. |
255
278
  | **insert live** (reuse a slide → the open window) | `slidemind insert-slide --search <searchId> --pick <n[,n,…]> --to <presId> [--at N]` — **host-required**: the slide lands in that open window |
256
- | **fold into a deck** (reuse a slide → deck source) | `slidemind add-slide --search <searchId> --pick <n[,n,…]> --deck <deck> [--at N] [--json]` → writes `decks/<slug>/slides/NN-reused-*.pptx` (add `--to <searchWindow>` only on the relayed path, where extraction runs on the search's window) |
279
+ | **fold into a deck** (reuse a slide → deck source) | `slidemind add-slide --search <searchId> --pick <n[,n,…]> --deck <deck> [--at N] [--json]` → writes `decks/<slug>/.slidemind/slides/NN-reused-*.pptx` (add `--to <searchWindow>` only on the relayed path, where extraction runs on the search's window) |
257
280
  | **read a local `.pptx`** (host-free — no engine, no window) | `slidemind read <file.pptx> --mode summary\|raw` — list/read a local file's slides in play order without a host; use the printed numbers as `--pick` for `add-slide --from` |
258
- | **fold a LOCAL slide into a deck** (`--from`, host-free) | `slidemind add-slide --from <file.pptx> --pick <n[,n,…]> --deck <deck> [--at N]` → same `decks/<slug>/slides/NN-reused-*.pptx` output as the engine path; `--from` replaces `--search`/`--to` (mutually exclusive with `--search`; no host). Live delivery = fold + `slidemind push <deck>` |
259
- | **engine fetch** (reuse an image asset) | `slidemind download-result --search <searchId> --pick <n[,n,…]> --deck <deck> [--icon-color <hex[,hex,…]>]` — writes into `decks/<slug>/assets/` (add `--to <searchWindow>` only on the relayed path; recolor descriptor + tinting are covered in `slidemind-create-slides`) |
281
+ | **fold a LOCAL slide into a deck** (`--from`, host-free) | `slidemind add-slide --from <file.pptx> --pick <n[,n,…]> --deck <deck> [--at N]` → same `decks/<slug>/.slidemind/slides/NN-reused-*.pptx` output as the engine path; `--from` replaces `--search`/`--to` (mutually exclusive with `--search`; no host). Live delivery = fold + `slidemind push <deck>` |
282
+ | **engine fetch** (reuse an image asset) | `slidemind download-result --search <searchId> --pick <n[,n,…]> --deck <deck> [--icon-color <hex[,hex,…]>]` — writes into `decks/<slug>/.slidemind/assets/` (add `--to <searchWindow>` only on the relayed path; recolor descriptor + tinting are covered in `slidemind-create-slides`) |
260
283
 
261
284
  Everything else in `workflow/search.md` — the engine-discovery discipline, content-vs-visual
262
285
  judgement, the picking and reuse craft — applies to you unchanged.