slidemind 0.3.13 → 0.3.14

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 (49) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/AGENTS.md +86 -21
  4. package/README.md +14 -17
  5. package/bin/slidemind.mjs +65 -4969
  6. package/package.json +1 -1
  7. package/skills/create-slides/SKILL.md +113 -74
  8. package/skills/search/SKILL.md +25 -7
  9. package/src/bridge/build-and-push.mjs +108 -15
  10. package/src/bridge/bundle.mjs +69 -0
  11. package/src/bridge/capture.mjs +19 -0
  12. package/src/bridge/client/brands.mjs +622 -0
  13. package/src/bridge/client/engine-routing.mjs +237 -0
  14. package/src/bridge/client/engine-search.mjs +310 -0
  15. package/src/bridge/client/engine-slides.mjs +435 -0
  16. package/src/bridge/client/pane-ops.mjs +335 -0
  17. package/src/bridge/client/presentations.mjs +587 -0
  18. package/src/bridge/client/render.mjs +317 -0
  19. package/src/bridge/client/transport.mjs +695 -0
  20. package/src/bridge/client.mjs +80 -3452
  21. package/src/bridge/config.mjs +1 -1
  22. package/src/bridge/engine-download.mjs +15 -2
  23. package/src/builders/build.mjs +11 -804
  24. package/src/builders/draft-check.mjs +376 -0
  25. package/src/builders/lint.mjs +38 -2
  26. package/src/builders/preview.html +799 -0
  27. package/src/builders/review.mjs +23 -4
  28. package/src/builders/visual-families.mjs +6 -8
  29. package/src/cli/common.mjs +179 -0
  30. package/src/cli/concepts.mjs +310 -0
  31. package/src/cli/connection.mjs +147 -0
  32. package/src/cli/deck.mjs +608 -0
  33. package/src/cli/designs.mjs +113 -0
  34. package/src/cli/diagnose.mjs +141 -0
  35. package/src/cli/download-bundle.mjs +144 -0
  36. package/src/cli/engine-helpers.mjs +429 -0
  37. package/src/cli/engine-results.mjs +320 -0
  38. package/src/cli/help.mjs +201 -0
  39. package/src/cli/install.mjs +257 -0
  40. package/src/cli/read.mjs +120 -0
  41. package/src/cli/ready.mjs +805 -0
  42. package/src/cli/search.mjs +608 -0
  43. package/src/cli/session.mjs +177 -0
  44. package/src/cli/setup.mjs +282 -0
  45. package/src/cli/slide-reuse.mjs +334 -0
  46. package/src/cli/status.mjs +118 -0
  47. package/src/cli/workspace.mjs +302 -0
  48. package/src/installers/codex.mjs +1 -1
  49. package/src/update-check.mjs +231 -0
@@ -54,7 +54,7 @@ export function sessionConfigPath() {
54
54
 
55
55
  // A short, human env label for a backend URL: localhost → "local", a hostname
56
56
  // containing "dev"/"staging" → that word, otherwise the bare hostname. Used in
57
- // listings and to let `--backend <env>` / `slidemind use <env>` match by name.
57
+ // listings and to let `--backend <env>` (also SLIDEMIND_BACKEND) match by name.
58
58
  export function deriveEnvLabel(backendURL) {
59
59
  let host;
60
60
  try {
@@ -201,9 +201,12 @@ async function streamOneResult({
201
201
  // Set when the pane-free route refused the TINT (not the asset): the download
202
202
  // then repeats without a colour so the caller still gets the icon, and the
203
203
  // recolour is reported as not applied instead of silently claimed.
204
- let recolorRefused = null;
204
+ // The pane-free route never bakes a tint (its classifier is DOM-based and
205
+ // lives in the add-in) — so don't ask it to: fetch the plain bytes once and
206
+ // bake locally below. Only a pane relay carries the colour.
207
+ let recolorRefused = !presId && iconColor ? iconColor : null;
205
208
  try {
206
- res = await fetchOnce(iconColor);
209
+ res = await fetchOnce(recolorRefused ? null : iconColor);
207
210
  } catch (err) {
208
211
  fs.rmSync(tempPath, { force: true });
209
212
  // Route absent → this add-in predates streaming; let the caller fall back.
@@ -236,6 +239,16 @@ async function streamOneResult({
236
239
  markup = local.markup;
237
240
  recolorRefused = null;
238
241
  }
242
+ } else if (!iconColor && describeRecolor(markup, res.mimeType).mode === "mono") {
243
+ // No colour asked for and the glyph is a single fixed paint: make it
244
+ // TINTABLE instead of shipping it black. With `currentColor` the slide's
245
+ // own `color: var(--token)` on the <img> drives the fill in the preview
246
+ // and in the .pptx alike, so one file serves a white glyph on an accent
247
+ // medallion and an accent glyph on white. Every sim builder that baked
248
+ // one hex at download time later lost either the glyph (blue on blue)
249
+ // or the medallion fill; a baked colour stays available via --icon-color.
250
+ const tintable = applyLocalRecolor(markup, "currentColor");
251
+ if (tintable.applied) markup = tintable.markup;
239
252
  }
240
253
  const filename = `engine-${searchId}-${selection}.svg`;
241
254
  const target = path.join(assetsDir, filename);