@aivorynet/slaide 1.0.2 → 1.0.3

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/CHANGELOG.md CHANGED
@@ -6,6 +6,18 @@ All notable changes to slaide are recorded here. The format follows
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.0.3] - 2026-06-30
10
+
11
+ ### Added
12
+
13
+ - `slaide app [deck]` opens a deck in the native viewer/editor. The app (viewer + engine) is fetched and verified (checksum + signature) on first run, and the `.slaide` file type is registered — so `npm install -g @aivorynet/slaide` is the only install step. `slaide upgrade` updates the app in place.
14
+ - `slaide auth login | logout | status` signs in to Slaide Pro from the CLI (unlocks in-place editing).
15
+ - The CLI checks npm for a newer release once a day and prints a one-line update notice. Set `SLAIDE_AUTO_UPDATE=1` to update automatically, or `SLAIDE_NO_UPDATE=1` to silence it.
16
+
17
+ ### Fixed
18
+
19
+ - `slaide --version` now reports the real package version (was hardcoded).
20
+
9
21
  ## [1.0.2] - 2026-06-29
10
22
 
11
23
  ### Fixed
@@ -42,7 +54,8 @@ First public release.
42
54
  - `.slaidec` packing and unpacking, and the `compare` fidelity tool.
43
55
  - The bundled `aurora` theme.
44
56
 
45
- [Unreleased]: https://github.com/aivorynet/slaide/compare/v1.0.2...HEAD
57
+ [Unreleased]: https://github.com/aivorynet/slaide/compare/v1.0.3...HEAD
58
+ [1.0.3]: https://github.com/aivorynet/slaide/releases/tag/v1.0.3
46
59
  [1.0.2]: https://github.com/aivorynet/slaide/releases/tag/v1.0.2
47
60
  [1.0.1]: https://github.com/aivorynet/slaide/releases/tag/v1.0.1
48
61
  [1.0.0]: https://github.com/aivorynet/slaide/releases/tag/v1.0.0
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A new presentation file format, built for AI.
4
4
 
5
+ [![npm](https://img.shields.io/npm/v/@aivorynet/slaide?logo=npm&color=cb3837)](https://www.npmjs.com/package/@aivorynet/slaide) [![Download](https://img.shields.io/github/v/release/aivorynet/slaide?label=download&logo=github)](https://github.com/aivorynet/slaide/releases/latest) [![CI](https://github.com/aivorynet/slaide/actions/workflows/ci.yml/badge.svg)](https://github.com/aivorynet/slaide/actions/workflows/ci.yml) [![Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)
6
+
5
7
  ![The free slaide viewer rendering a deck](https://raw.githubusercontent.com/aivorynet/slaide/main/docs/assets/viewer.png)
6
8
 
7
9
  `.slaide` is a native, plain-text format for presentations: Markdown plus a small YAML theme. PowerPoint's `.pptx` is bulky XML that language models get wrong. A `.slaide` file is a few kilobytes of text an AI writes correctly, every time. One file renders to a navigable web deck, a high-fidelity PDF, and editable PowerPoint. A reusable theme carries the design, so nobody hand-places pixels.
@@ -12,16 +14,17 @@ Most of slaide is free and open source. The language, the renderer, the native v
12
14
 
13
15
  ## Install
14
16
 
15
- Nothing to set up:
17
+ One command — nothing else to set up:
16
18
 
17
19
  ```bash
18
- npx @aivorynet/slaide new talk.slaide
20
+ npm install -g @aivorynet/slaide
19
21
  ```
20
22
 
21
- Or install the command globally:
23
+ That gives you the `slaide` command (write, validate, render, export, import) **and** `slaide app`,
24
+ which opens decks in the native viewer/editor — the app is fetched automatically the first time you
25
+ run it. Want to try it with no install at all? `npx @aivorynet/slaide new talk.slaide`.
22
26
 
23
27
  ```bash
24
- npm install -g @aivorynet/slaide
25
28
  npx playwright install chromium # only for PDF, PPTX, and image export
26
29
  ```
27
30
 
@@ -31,6 +34,7 @@ npx playwright install chromium # only for PDF, PPTX, and image export
31
34
  slaide new talk.slaide # scaffold a deck
32
35
  slaide validate talk.slaide # check it before rendering
33
36
  slaide dev talk.slaide # live preview at http://localhost:4321
37
+ slaide app talk.slaide # open in the native viewer/editor (fetched on first run)
34
38
  slaide build talk.slaide --out out # self-contained out/index.html
35
39
  slaide export talk.slaide --pdf out/talk.pdf
36
40
  slaide export talk.slaide --pptx out/talk.pptx # real text boxes, shapes, images
@@ -64,17 +68,34 @@ layout: title-content
64
68
 
65
69
  Slides split on `---`. `:: name ::` routes Markdown into a theme slot. `>>>` is a build step. `??? ` is a speaker note. Reference layouts, colors, and fonts by name. The full grammar is in [docs/](docs/).
66
70
 
67
- ## The free viewer
71
+ ## The desktop app
72
+
73
+ ```bash
74
+ slaide app talk.slaide
75
+ ```
76
+
77
+ The native viewer opens folders, single files, and packed `.slaidec` bundles, presents full screen, and exports PDF. The first time you run `slaide app`, the CLI downloads the viewer + engine (verified by checksum and signature), registers the `.slaide` file type so double-click works, and opens the deck. `slaide upgrade` updates it in place.
78
+
79
+ **No Node?** Install the standalone app without npm — same signed binaries, fetched, verified, and registered for you:
80
+
81
+ ```bash
82
+ # macOS / Linux
83
+ curl -fsSL https://github.com/aivorynet/slaide/releases/latest/download/install.sh | sh
84
+ # Windows (PowerShell)
85
+ irm https://github.com/aivorynet/slaide/releases/latest/download/install.ps1 | iex
86
+ ```
87
+
88
+ …or a package manager (`scoop install slaide`, `brew install --cask slaide`, `winget install Slaide`), or download the archive from [Releases](https://github.com/aivorynet/slaide/releases), unzip, and run the bundled installer (it installs the binaries shipped inside, no network) — or just run `slaide-view` directly. (Or build from source with `npm run build:viewer`.)
68
89
 
69
- `slaide-view` is a native app that opens any deck in its own window, with no Node on the target. Download it from [Releases](https://github.com/aivorynet/slaide/releases), or build it with `npm run build:viewer`. It opens folders, single files, and packed `.slaidec` bundles, presents full screen, and exports PDF.
90
+ Editing is Pro: run `slaide auth login` (or click **Sign in** in the app) Slaide fetches the Pro engine and unlocks it for a licensed account.
70
91
 
71
92
  ## For AI agents
72
93
 
73
- slaide ships an agent skill and an MCP server. Install the skill into Claude Code, Codex, or Gemini with `slaide install`. Point a custom agent at the server with `slaide mcp`. Both run the same engine as the CLI.
94
+ slaide ships an agent skill and an MCP server. Install the skill into Claude Code, Codex, or Gemini with `slaide install`. Point a custom agent at the server with `slaide mcp`. Both run the same engine as the CLI. (`slaide install` sets up the *agent skill* — distinct from `slaide app`, which installs the *desktop viewer*.)
74
95
 
75
96
  ## Free and Pro
76
97
 
77
- Everything above is free, forever. Slaide Pro adds in-place visual editing and high-fidelity PowerPoint import. The editor engine is proprietary and is not in this repo, so a clone is read-only by design. See [docs/open-core.md](docs/open-core.md). Plans and prices are at [getslaide.com](https://getslaide.com).
98
+ Everything above is free, forever. Slaide Pro adds in-place visual editing and high-fidelity PowerPoint import. Run `slaide auth login` (or click **Sign in**, top-right, in the app): Slaide fetches the Pro engine and unlocks editing for a licensed account — the same binary serves everyone, the license is the only difference. Building from a source clone stays read-only by design: the Pro editor engine is proprietary and isn't in this repo, so there's nothing to patch out (a clone can't *build* Pro; the downloaded app *fetches* it on sign-in). See [docs/open-core.md](docs/open-core.md). Plans and prices are at [getslaide.com](https://getslaide.com).
78
99
 
79
100
  ## How it works
80
101
 
package/dist/cli.js CHANGED
@@ -4,6 +4,7 @@
4
4
  // CLI — thin wrapper over @aivorynet/slaide.
5
5
  import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
6
6
  import { dirname, resolve, join, basename } from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
7
8
  import { tmpdir } from 'node:os';
8
9
  import { createServer } from 'node:http';
9
10
  import { compileFile, renderFileHtml, renderDeckHtml, validateSource, renderPdf, listThemes, openDeck, packDeck, unpackDeck, } from './index.js';
@@ -25,6 +26,16 @@ function positional(n) {
25
26
  function deckStem(p) {
26
27
  return basename(p).replace(/\.(slaidec|slaide)$/i, '');
27
28
  }
29
+ /** The package version, read at runtime (dist/cli.js → ../package.json; src/cli.ts → ../package.json). */
30
+ function pkgVersion() {
31
+ try {
32
+ const here = dirname(fileURLToPath(import.meta.url));
33
+ return JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf8')).version ?? '0.0.0';
34
+ }
35
+ catch {
36
+ return '0.0.0';
37
+ }
38
+ }
28
39
  const COLORS = { red: '\x1b[31m', yellow: '\x1b[33m', green: '\x1b[32m', dim: '\x1b[2m', reset: '\x1b[0m', bold: '\x1b[1m' };
29
40
  function printDiagnostics(diags) {
30
41
  for (const d of diags) {
@@ -40,7 +51,9 @@ Usage:
40
51
  slaide build <deck.slaide> [--out <dir>] [--quality <1-100>] [--max-width <px>] [--no-bake]
41
52
  Self-contained HTML; charts baked to SVG (no engine dep); optional image shrink
42
53
  slaide render <deck.slaide> [--print --meta] Print self-contained HTML to stdout (for the viewer)
43
- slaide view <deck.slaide> Open the deck in your default browser
54
+ slaide view <deck.slaide> Open the deck in your default browser (no install)
55
+ slaide app [deck.slaide] Open in the native viewer/editor (fetches it on first use)
56
+ (--install: set up without launching; --register; --uninstall)
44
57
  slaide export <deck.slaide> [--pdf <file>] Export to PDF (needs Playwright)
45
58
  slaide export <deck.slaide> --pptx [<file>] Export to editable PowerPoint (needs Playwright)
46
59
  (--no-embed-fonts: skip font embedding; --no-builds: skip animations)
@@ -62,9 +75,12 @@ Usage:
62
75
  slaide unpack <file.slaidec> [-o <dir>] Extract a .slaidec back to an editable folder
63
76
  slaide themes List bundled themes & layouts
64
77
  slaide mcp Run the MCP server (stdio)
78
+ slaide upgrade Update the native viewer/engine to the latest release
79
+ slaide auth <login|logout|status> Sign in to Slaide Pro (unlocks in-place editing)
65
80
  slaide install [--cli <id,…>] [--scope project|global|<dir>] [--skills] [--no-mcp] [--yes] [--list]
66
- Detect installed AI coding CLIs and install the slaide skill (+ MCP server)
67
- slaide --help`);
81
+ Install the slaide skill (+ MCP server) into your AI coding CLIs
82
+ (note: this installs the AGENT skill — for the desktop app use \`slaide app\`)
83
+ slaide --help (--version for the version)`);
68
84
  }
69
85
  async function main() {
70
86
  switch (cmd) {
@@ -371,6 +387,48 @@ async function main() {
371
387
  console.log(dim(' * = master-defined custom animation'));
372
388
  break;
373
389
  }
390
+ case 'app': {
391
+ // Open the deck in the native desktop viewer, fetching + verifying it on first use.
392
+ // --install: download/register without launching; --register/--uninstall: file-type assoc.
393
+ const { ensureInstalled, installBinaries, launchApp, uninstall } = await import('./desktop/bootstrap.js');
394
+ const opts = { yes: has('--yes') || has('-y'), force: has('--force') };
395
+ if (has('--uninstall')) {
396
+ uninstall();
397
+ console.log(`${COLORS.green}✓${COLORS.reset} Removed the installed Slaide app binaries.`);
398
+ break;
399
+ }
400
+ if (has('--register')) {
401
+ await ensureInstalled(opts);
402
+ const { detectPlatform, viewerExe } = await import('./desktop/paths.js');
403
+ const { spawnSync } = await import('node:child_process');
404
+ spawnSync(viewerExe(detectPlatform()), ['--register'], { stdio: 'ignore' });
405
+ console.log(`${COLORS.green}✓${COLORS.reset} Registered the .slaide file type.`);
406
+ break;
407
+ }
408
+ if (has('--install')) {
409
+ await installBinaries(opts);
410
+ break;
411
+ }
412
+ await launchApp(positional(1), opts);
413
+ break;
414
+ }
415
+ case 'upgrade': {
416
+ // Re-fetch the latest native viewer + engine in place.
417
+ const { installBinaries } = await import('./desktop/bootstrap.js');
418
+ await installBinaries({ yes: true, force: true });
419
+ break;
420
+ }
421
+ case 'auth': {
422
+ // Sign in / out of Slaide Pro through the engine (upgrades the OSS engine to Pro on login).
423
+ const sub = positional(1) ?? 'status';
424
+ if (!['login', 'logout', 'status'].includes(sub))
425
+ return fail('auth needs login | logout | status');
426
+ const { runAuth } = await import('./desktop/bootstrap.js');
427
+ const code = await runAuth(sub, { yes: has('--yes') || has('-y') });
428
+ if (code)
429
+ process.exit(code);
430
+ break;
431
+ }
374
432
  case 'mcp': {
375
433
  const { runStdio } = await import('./mcp/server.js');
376
434
  await runStdio();
@@ -409,7 +467,8 @@ async function main() {
409
467
  help();
410
468
  break;
411
469
  case '--version':
412
- console.log('0.1.0');
470
+ case '-v':
471
+ console.log(pkgVersion());
413
472
  break;
414
473
  default:
415
474
  fail(`unknown command "${cmd}"`);
@@ -426,7 +485,13 @@ function fail(msg) {
426
485
  console.error(`Run ${COLORS.bold}slaide --help${COLORS.reset} for usage.`);
427
486
  process.exit(1);
428
487
  }
429
- main().catch((e) => {
488
+ main()
489
+ .then(async () => {
490
+ // Best-effort, once-a-day npm update notice (silent on machine/piped output). Never throws.
491
+ const { maybeNotifyUpdate } = await import('./update.js');
492
+ await maybeNotifyUpdate(pkgVersion(), cmd);
493
+ })
494
+ .catch((e) => {
430
495
  console.error(`${COLORS.red}error:${COLORS.reset} ${e.message}`);
431
496
  process.exit(1);
432
497
  });
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type Platform } from './paths.js';
2
+ export interface EnsureOptions {
3
+ /** Skip the download confirmation prompt. */
4
+ yes?: boolean;
5
+ /** Re-download even if the binaries are already present. */
6
+ force?: boolean;
7
+ /** Suppress progress chatter (errors still surface). */
8
+ quiet?: boolean;
9
+ }
10
+ /** Are the native viewer + engine already installed? */
11
+ export declare function isInstalled(p?: Platform): boolean;
12
+ /** Download + verify + extract the full bundle into ~/.slaide/bin, then register + (Windows) WebView2. */
13
+ export declare function installBinaries(opts?: EnsureOptions): Promise<void>;
14
+ /**
15
+ * Ensure the native viewer + engine are installed; download them on first use. Returns the viewer
16
+ * path. Prompts for confirmation when interactive (skip with `yes`); proceeds automatically for an
17
+ * explicit, non-interactive `slaide app` invocation.
18
+ */
19
+ export declare function ensureInstalled(opts?: EnsureOptions): Promise<string>;
20
+ /**
21
+ * Swap the render-only OSS engine for the Pro superset — the same public, signed download the
22
+ * viewer performs on Sign-in (core/viewer/src/upgrade.rs). Idempotent: a no-op if already Pro.
23
+ * A license still gates editing at runtime; the binary itself is public.
24
+ */
25
+ export declare function ensureProEngine(opts?: EnsureOptions): Promise<void>;
26
+ /** Launch the native viewer (installing it first if needed). Detaches so the CLI returns. */
27
+ export declare function launchApp(deck: string | undefined, opts?: EnsureOptions): Promise<void>;
28
+ /** Run the engine's `auth` flow (login/logout/status), upgrading to the Pro engine first. */
29
+ export declare function runAuth(sub: string, opts?: EnsureOptions): Promise<number>;
30
+ /** Remove the installed binaries (leaves auth/license caches under ~/.slaide untouched). */
31
+ export declare function uninstall(): void;
@@ -0,0 +1,203 @@
1
+ // Copyright 2026 AIVory, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ // Lazy bootstrap of the native desktop app from the npm CLI. `slaide app` fetches the signed
4
+ // viewer + render-only engine into ~/.slaide/bin on first use, verifies them, registers the
5
+ // `.slaide` file type, and launches. This is the JS analogue of the viewer's own self-upgrade
6
+ // (core/viewer/src/upgrade.rs) — it bootstraps the FIRST binary, which the viewer can't fetch for
7
+ // itself (chicken-and-egg). `slaide auth login` additionally swaps the OSS engine for the Pro
8
+ // superset (same public download the viewer does on Sign-in); a license gates editing at runtime.
9
+ // Editing/Pro source never ships here — only public, signed binaries are pulled. No new deps.
10
+ import { existsSync, mkdirSync, writeFileSync, rmSync, chmodSync, renameSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { tmpdir } from 'node:os';
13
+ import { spawn, spawnSync } from 'node:child_process';
14
+ import { gunzipSync } from 'node:zlib';
15
+ import { detectPlatform, binDir, distBase, bundleAsset, engineAsset, viewerExe, engineExe, cliExe, } from './paths.js';
16
+ import { verifySha256, verifyMinisign, isPubkeyConfigured } from './verify.js';
17
+ const C = { green: '\x1b[32m', dim: '\x1b[2m', red: '\x1b[31m', bold: '\x1b[1m', reset: '\x1b[0m' };
18
+ function log(opts, msg) {
19
+ if (!opts.quiet)
20
+ console.error(msg);
21
+ }
22
+ /** Are the native viewer + engine already installed? */
23
+ export function isInstalled(p = detectPlatform()) {
24
+ return existsSync(viewerExe(p)) && existsSync(engineExe(p));
25
+ }
26
+ async function fetchBytes(url) {
27
+ const res = await fetch(url, { redirect: 'follow' });
28
+ if (!res.ok)
29
+ throw new Error(`GET ${url} → ${res.status} ${res.statusText}`);
30
+ return Buffer.from(await res.arrayBuffer());
31
+ }
32
+ async function fetchText(url) {
33
+ return (await fetchBytes(url)).toString('utf8');
34
+ }
35
+ async function confirm(question, def) {
36
+ const { createInterface } = await import('node:readline/promises');
37
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
38
+ try {
39
+ const ans = (await rl.question(`${question} ${def ? '[Y/n]' : '[y/N]'} `)).trim();
40
+ return ans ? /^y/i.test(ans) : def;
41
+ }
42
+ finally {
43
+ rl.close();
44
+ }
45
+ }
46
+ /** Verify a downloaded asset: SHA-256 always, minisign once a signing key is configured. */
47
+ async function verifyAsset(base, asset, data, opts) {
48
+ verifySha256(data, await fetchText(`${base}/${asset}.sha256`));
49
+ if (isPubkeyConfigured()) {
50
+ verifyMinisign(data, await fetchText(`${base}/${asset}.minisig`));
51
+ }
52
+ else {
53
+ log(opts, `${C.dim} (signature not verified — no signing key configured yet; checksum OK)${C.reset}`);
54
+ }
55
+ }
56
+ /** Best-effort: write the per-user `.slaide` file association (no-op where unimplemented). */
57
+ function register(p) {
58
+ spawnSync(viewerExe(p), ['--register'], { stdio: 'ignore' });
59
+ }
60
+ /** On Windows, make sure the WebView2 Evergreen runtime is present (the viewer needs it). */
61
+ function ensureWebView2(opts) {
62
+ if (process.platform !== 'win32')
63
+ return;
64
+ const key = 'HKLM\\SOFTWARE\\WOW6432Node\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}';
65
+ const present = spawnSync('reg', ['query', key], { stdio: 'ignore' }).status === 0;
66
+ if (present)
67
+ return;
68
+ log(opts, 'Installing the Microsoft WebView2 runtime…');
69
+ const bs = join(tmpdir(), 'MicrosoftEdgeWebview2Setup.exe');
70
+ try {
71
+ const r = spawnSync('powershell', [
72
+ '-NoProfile',
73
+ '-Command',
74
+ `Invoke-WebRequest -Uri 'https://go.microsoft.com/fwlink/p/?LinkId=2124703' -OutFile '${bs}' -UseBasicParsing; Start-Process -FilePath '${bs}' -ArgumentList '/silent','/install' -Wait`,
75
+ ], { stdio: 'ignore' });
76
+ if (r.status !== 0)
77
+ throw new Error('bootstrapper failed');
78
+ }
79
+ catch {
80
+ log(opts, `${C.dim} Could not auto-install WebView2; install it from microsoft.com if the viewer won't open.${C.reset}`);
81
+ }
82
+ }
83
+ /**
84
+ * Extract a release archive flat into the bin dir. Windows zips go through PowerShell
85
+ * `Expand-Archive` (matches install.ps1, and sidesteps the GNU-tar `C:`-is-a-remote-host quirk
86
+ * when a user runs from Git Bash); tar.gz uses the system `tar`.
87
+ */
88
+ function extractBundle(archive, dest, p) {
89
+ mkdirSync(dest, { recursive: true });
90
+ const r = p.os === 'windows'
91
+ ? spawnSync('powershell', ['-NoProfile', '-Command', `Expand-Archive -Path '${archive}' -DestinationPath '${dest}' -Force`], { stdio: 'ignore' })
92
+ : spawnSync('tar', ['-xzf', archive, '-C', dest], { stdio: 'ignore' });
93
+ if (r.error || r.status !== 0) {
94
+ throw new Error('could not extract the release archive. Install via the one-liner instead: ' +
95
+ 'https://github.com/aivorynet/slaide#install');
96
+ }
97
+ }
98
+ /** Download + verify + extract the full bundle into ~/.slaide/bin, then register + (Windows) WebView2. */
99
+ export async function installBinaries(opts = {}) {
100
+ const p = detectPlatform();
101
+ const base = distBase();
102
+ const asset = bundleAsset(p);
103
+ const dir = binDir();
104
+ const tmp = join(tmpdir(), `slaide-dl-${process.pid}-${asset}`);
105
+ log(opts, `Downloading the Slaide app (${asset})…`);
106
+ const data = await fetchBytes(`${base}/${asset}`);
107
+ log(opts, 'Verifying…');
108
+ await verifyAsset(base, asset, data, opts);
109
+ writeFileSync(tmp, data);
110
+ try {
111
+ log(opts, `Installing to ${dir}…`);
112
+ extractBundle(tmp, dir, p);
113
+ }
114
+ finally {
115
+ rmSync(tmp, { force: true });
116
+ }
117
+ if (p.os !== 'windows') {
118
+ for (const exe of [viewerExe(p), engineExe(p), cliExe(p)]) {
119
+ if (existsSync(exe))
120
+ chmodSync(exe, 0o755);
121
+ }
122
+ }
123
+ ensureWebView2(opts);
124
+ register(p);
125
+ log(opts, `${C.green}✓${C.reset} Slaide app installed. ${C.dim}Sign in (top-right) to unlock editing.${C.reset}`);
126
+ }
127
+ /**
128
+ * Ensure the native viewer + engine are installed; download them on first use. Returns the viewer
129
+ * path. Prompts for confirmation when interactive (skip with `yes`); proceeds automatically for an
130
+ * explicit, non-interactive `slaide app` invocation.
131
+ */
132
+ export async function ensureInstalled(opts = {}) {
133
+ const p = detectPlatform();
134
+ if (isInstalled(p) && !opts.force)
135
+ return viewerExe(p);
136
+ if (!opts.yes && process.stdin.isTTY && process.stdout.isTTY) {
137
+ log(opts, 'The Slaide desktop app (native viewer + engine, ~50 MB) is not installed yet.');
138
+ if (!(await confirm('Download it now?', true))) {
139
+ throw new Error('declined. Install later with `slaide app --install`, or the Node-free one-liner at ' +
140
+ 'https://github.com/aivorynet/slaide#install');
141
+ }
142
+ }
143
+ await installBinaries(opts);
144
+ return viewerExe(p);
145
+ }
146
+ /** Ask the engine its edition; true only if it explicitly reports `oss`. */
147
+ function engineIsOss(p) {
148
+ const out = spawnSync(engineExe(p), ['edition'], { encoding: 'utf8' });
149
+ return out.status === 0 && out.stdout.trim() === 'oss';
150
+ }
151
+ function atomicReplace(target, bytes) {
152
+ const tmp = `${target}.upgrade-${process.pid}`;
153
+ writeFileSync(tmp, bytes);
154
+ if (process.platform !== 'win32')
155
+ chmodSync(tmp, 0o755);
156
+ try {
157
+ renameSync(tmp, target);
158
+ }
159
+ catch (e) {
160
+ rmSync(tmp, { force: true });
161
+ throw e;
162
+ }
163
+ }
164
+ /**
165
+ * Swap the render-only OSS engine for the Pro superset — the same public, signed download the
166
+ * viewer performs on Sign-in (core/viewer/src/upgrade.rs). Idempotent: a no-op if already Pro.
167
+ * A license still gates editing at runtime; the binary itself is public.
168
+ */
169
+ export async function ensureProEngine(opts = {}) {
170
+ const p = detectPlatform();
171
+ if (!engineIsOss(p))
172
+ return; // already Pro (or not probeable)
173
+ const base = distBase();
174
+ const asset = engineAsset(p);
175
+ log(opts, 'Fetching the Pro engine…');
176
+ const gz = await fetchBytes(`${base}/${asset}`);
177
+ await verifyAsset(base, asset, gz, opts);
178
+ atomicReplace(engineExe(p), gunzipSync(gz));
179
+ log(opts, `${C.green}✓${C.reset} Pro engine installed.`);
180
+ }
181
+ /** Launch the native viewer (installing it first if needed). Detaches so the CLI returns. */
182
+ export async function launchApp(deck, opts = {}) {
183
+ const viewer = await ensureInstalled(opts);
184
+ const child = spawn(viewer, deck ? [deck] : [], { detached: true, stdio: 'ignore' });
185
+ child.unref();
186
+ }
187
+ /** Run the engine's `auth` flow (login/logout/status), upgrading to the Pro engine first. */
188
+ export async function runAuth(sub, opts = {}) {
189
+ await ensureInstalled(opts);
190
+ if (sub === 'login')
191
+ await ensureProEngine(opts);
192
+ const p = detectPlatform();
193
+ const r = spawnSync(engineExe(p), ['auth', sub], { stdio: 'inherit' });
194
+ return r.status ?? 0;
195
+ }
196
+ /** Remove the installed binaries (leaves auth/license caches under ~/.slaide untouched). */
197
+ export function uninstall() {
198
+ const p = detectPlatform();
199
+ spawnSync(viewerExe(p), ['--unregister'], { stdio: 'ignore' });
200
+ for (const exe of [viewerExe(p), engineExe(p), cliExe(p)])
201
+ rmSync(exe, { force: true });
202
+ }
203
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/desktop/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface Platform {
2
+ /** Release token for the OS — matches release/package-dist.ts PLATS. */
3
+ os: 'linux' | 'macos' | 'windows';
4
+ /** Release token for the CPU — matches release/package-dist.ts ARCHES. */
5
+ arch: 'x64' | 'arm64';
6
+ /** Executable suffix (`.exe` on Windows, else empty). */
7
+ exe: string;
8
+ /** Bundle archive extension (`zip` on Windows, else `tar.gz`). */
9
+ ext: 'zip' | 'tar.gz';
10
+ }
11
+ /** Map this process's platform/arch onto the release tokens. Throws on an unsupported target. */
12
+ export declare function detectPlatform(): Platform;
13
+ /**
14
+ * The install root, shared with the installers (must match them exactly): `SLAIDE_HOME` if set,
15
+ * else `%LOCALAPPDATA%\Slaide` on Windows (install.ps1) or `~/.slaide` elsewhere (install.sh).
16
+ */
17
+ export declare function slaideHome(): string;
18
+ /** The bin dir where slaide-view / slaide-engine are installed. */
19
+ export declare function binDir(): string;
20
+ /** Base URL the binaries are fetched from (the GitHub Releases "latest" by default). */
21
+ export declare function distBase(): string;
22
+ /** Full-bundle asset name: `slaide-<os>-<arch>.<ext>` (flat: slaide, slaide-view, slaide-engine[, themes]). */
23
+ export declare function bundleAsset(p?: Platform): string;
24
+ /** Standalone gzipped engine: `slaide-engine-<os>-<arch>[.exe].gz` (the Sign-in self-upgrade asset). */
25
+ export declare function engineAsset(p?: Platform): string;
26
+ export declare function viewerExe(p?: Platform): string;
27
+ export declare function engineExe(p?: Platform): string;
28
+ export declare function cliExe(p?: Platform): string;
@@ -0,0 +1,62 @@
1
+ // Copyright 2026 AIVory, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ // Single source of truth for where the native desktop binaries live and how the release
4
+ // assets are named. The npm CLI bootstrap (bootstrap.ts), the native viewer's self-upgrade
5
+ // (core/viewer/src/upgrade.rs), and the installers (pro/installer/install.{sh,ps1}) MUST agree
6
+ // on these names — see release/ASSETS.md. Keep this file in lockstep with release/package-dist.ts.
7
+ import { homedir } from 'node:os';
8
+ import { join } from 'node:path';
9
+ /** Map this process's platform/arch onto the release tokens. Throws on an unsupported target. */
10
+ export function detectPlatform() {
11
+ const os = process.platform === 'win32'
12
+ ? 'windows'
13
+ : process.platform === 'darwin'
14
+ ? 'macos'
15
+ : process.platform === 'linux'
16
+ ? 'linux'
17
+ : null;
18
+ if (!os)
19
+ throw new Error(`unsupported OS for the native viewer: ${process.platform}`);
20
+ const arch = process.arch === 'x64' ? 'x64' : process.arch === 'arm64' ? 'arm64' : null;
21
+ if (!arch)
22
+ throw new Error(`unsupported CPU for the native viewer: ${process.arch}`);
23
+ return { os, arch, exe: os === 'windows' ? '.exe' : '', ext: os === 'windows' ? 'zip' : 'tar.gz' };
24
+ }
25
+ /**
26
+ * The install root, shared with the installers (must match them exactly): `SLAIDE_HOME` if set,
27
+ * else `%LOCALAPPDATA%\Slaide` on Windows (install.ps1) or `~/.slaide` elsewhere (install.sh).
28
+ */
29
+ export function slaideHome() {
30
+ if (process.env.SLAIDE_HOME && process.env.SLAIDE_HOME.trim())
31
+ return process.env.SLAIDE_HOME;
32
+ if (process.platform === 'win32' && process.env.LOCALAPPDATA)
33
+ return join(process.env.LOCALAPPDATA, 'Slaide');
34
+ return join(homedir(), '.slaide');
35
+ }
36
+ /** The bin dir where slaide-view / slaide-engine are installed. */
37
+ export function binDir() {
38
+ return join(slaideHome(), 'bin');
39
+ }
40
+ /** Base URL the binaries are fetched from (the GitHub Releases "latest" by default). */
41
+ export function distBase() {
42
+ const v = process.env.SLAIDE_DIST_BASE_URL;
43
+ return v && v.trim() ? v.replace(/\/+$/, '') : 'https://github.com/aivorynet/slaide/releases/latest/download';
44
+ }
45
+ /** Full-bundle asset name: `slaide-<os>-<arch>.<ext>` (flat: slaide, slaide-view, slaide-engine[, themes]). */
46
+ export function bundleAsset(p = detectPlatform()) {
47
+ return `slaide-${p.os}-${p.arch}.${p.ext}`;
48
+ }
49
+ /** Standalone gzipped engine: `slaide-engine-<os>-<arch>[.exe].gz` (the Sign-in self-upgrade asset). */
50
+ export function engineAsset(p = detectPlatform()) {
51
+ return `slaide-engine-${p.os}-${p.arch}${p.exe}.gz`;
52
+ }
53
+ export function viewerExe(p = detectPlatform()) {
54
+ return join(binDir(), `slaide-view${p.exe}`);
55
+ }
56
+ export function engineExe(p = detectPlatform()) {
57
+ return join(binDir(), `slaide-engine${p.exe}`);
58
+ }
59
+ export function cliExe(p = detectPlatform()) {
60
+ return join(binDir(), `slaide${p.exe}`);
61
+ }
62
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/desktop/paths.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,wFAAwF;AACxF,2FAA2F;AAC3F,+FAA+F;AAC/F,mGAAmG;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC,iGAAiG;AACjG,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,GACN,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC7B,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAC5B,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,IAAI,CAAC;IACf,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACxF,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACrG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC9F,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC9G,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,MAAM;IACpB,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,8DAA8D,CAAC;AAChH,CAAC;AAED,+GAA+G;AAC/G,MAAM,UAAU,WAAW,CAAC,IAAc,cAAc,EAAE;IACxD,OAAO,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;AAC7C,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,WAAW,CAAC,IAAc,cAAc,EAAE;IACxD,OAAO,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAc,cAAc,EAAE;IACtD,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,IAAc,cAAc,EAAE;IACtD,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC;AACD,MAAM,UAAU,MAAM,CAAC,IAAc,cAAc,EAAE;IACnD,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * minisign public key — the base64 key line of `release/keys/slaide-binary-public.txt`, baked in
3
+ * at publish time. Until the production key is generated (`minisign -G -W`, see release/SIGNING.md)
4
+ * this stays a `REPLACE_ME` placeholder and signature verification is skipped (checksum still
5
+ * enforced, exactly as upgrade.rs does). Once set, a missing/invalid signature aborts the install.
6
+ *
7
+ * MUST equal SLAIDE_BINARY_PUBKEY in core/viewer/src/upgrade.rs.
8
+ */
9
+ export declare const BINARY_PUBKEY = "RWQ0000000000000000000000000000000000000000000000000000REPLACE_ME";
10
+ /** True once a real minisign key has replaced the placeholder. */
11
+ export declare function isPubkeyConfigured(): boolean;
12
+ /** Verify `data` against a `.sha256` file body (`"<hex> <name>"`). Throws on mismatch. */
13
+ export declare function verifySha256(data: Buffer, shaFile: string): void;
14
+ /**
15
+ * Verify a minisign `.minisig` signature over `data` using the embedded trusted key.
16
+ * Supports both the legacy (`Ed`, signs the raw data) and prehashed (`ED`, signs BLAKE2b-512 of
17
+ * the data) algorithms, matching minisign / minisign-verify. Throws if the signature does not
18
+ * verify, the key id disagrees, or the key/sig is malformed.
19
+ */
20
+ export declare function verifyMinisign(data: Buffer, sigFile: string, pubkeyB64?: string): void;
@@ -0,0 +1,77 @@
1
+ // Copyright 2026 AIVory, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ // Integrity + authenticity checks for downloaded release assets. SHA-256 is always enforced;
4
+ // minisign (Ed25519) is enforced once a real signing key is configured below. This mirrors the
5
+ // native viewer's verifier (core/viewer/src/upgrade.rs) byte-for-byte so the CLI and the viewer
6
+ // trust the same key and reject the same tampering. No third-party deps — node:crypto only.
7
+ import { createHash, createPublicKey, verify as cryptoVerify } from 'node:crypto';
8
+ /**
9
+ * minisign public key — the base64 key line of `release/keys/slaide-binary-public.txt`, baked in
10
+ * at publish time. Until the production key is generated (`minisign -G -W`, see release/SIGNING.md)
11
+ * this stays a `REPLACE_ME` placeholder and signature verification is skipped (checksum still
12
+ * enforced, exactly as upgrade.rs does). Once set, a missing/invalid signature aborts the install.
13
+ *
14
+ * MUST equal SLAIDE_BINARY_PUBKEY in core/viewer/src/upgrade.rs.
15
+ */
16
+ export const BINARY_PUBKEY = 'RWQ0000000000000000000000000000000000000000000000000000REPLACE_ME';
17
+ /** True once a real minisign key has replaced the placeholder. */
18
+ export function isPubkeyConfigured() {
19
+ return !BINARY_PUBKEY.includes('REPLACE_ME');
20
+ }
21
+ /** Verify `data` against a `.sha256` file body (`"<hex> <name>"`). Throws on mismatch. */
22
+ export function verifySha256(data, shaFile) {
23
+ const expected = shaFile.trim().split(/\s+/)[0]?.toLowerCase() ?? '';
24
+ if (expected.length !== 64)
25
+ throw new Error('malformed .sha256 file');
26
+ const actual = createHash('sha256').update(data).digest('hex');
27
+ if (actual !== expected)
28
+ throw new Error('checksum mismatch — refusing to install');
29
+ }
30
+ /** Wrap a raw 32-byte Ed25519 public key in a DER SPKI so node:crypto can consume it. */
31
+ function ed25519PublicKey(raw) {
32
+ // SPKI prefix for id-Ed25519 (RFC 8410), followed by the 32-byte key.
33
+ const prefix = Buffer.from('302a300506032b6570032100', 'hex');
34
+ return createPublicKey({ key: Buffer.concat([prefix, raw]), format: 'der', type: 'spki' });
35
+ }
36
+ /**
37
+ * Verify a minisign `.minisig` signature over `data` using the embedded trusted key.
38
+ * Supports both the legacy (`Ed`, signs the raw data) and prehashed (`ED`, signs BLAKE2b-512 of
39
+ * the data) algorithms, matching minisign / minisign-verify. Throws if the signature does not
40
+ * verify, the key id disagrees, or the key/sig is malformed.
41
+ */
42
+ export function verifyMinisign(data, sigFile, pubkeyB64 = BINARY_PUBKEY) {
43
+ const pub = Buffer.from(pubkeyB64, 'base64');
44
+ if (pub.length !== 42)
45
+ throw new Error('bad trusted pubkey');
46
+ const pubAlg = pub.subarray(0, 2);
47
+ const pubKeyId = pub.subarray(2, 10);
48
+ const pubKey = pub.subarray(10, 42);
49
+ if (pubAlg.toString('latin1') !== 'Ed')
50
+ throw new Error('unexpected trusted pubkey algorithm');
51
+ // The signature line is the first base64 line that is not an `untrusted/trusted comment:` header.
52
+ const sigB64 = sigFile
53
+ .split(/\r?\n/)
54
+ .map((l) => l.trim())
55
+ .find((l) => l.length > 0 && !/^untrusted comment:/i.test(l) && !/^trusted comment:/i.test(l));
56
+ if (!sigB64)
57
+ throw new Error('bad signature file: no signature line');
58
+ const sig = Buffer.from(sigB64, 'base64');
59
+ if (sig.length !== 74)
60
+ throw new Error('bad signature file: wrong length');
61
+ const sigAlg = sig.subarray(0, 2).toString('latin1');
62
+ const sigKeyId = sig.subarray(2, 10);
63
+ const signature = sig.subarray(10, 74);
64
+ if (!sigKeyId.equals(pubKeyId))
65
+ throw new Error('signature key id does not match the trusted key');
66
+ let message;
67
+ if (sigAlg === 'ED')
68
+ message = createHash('blake2b512').update(data).digest(); // prehashed
69
+ else if (sigAlg === 'Ed')
70
+ message = data; // legacy
71
+ else
72
+ throw new Error(`unsupported signature algorithm "${sigAlg}"`);
73
+ if (!cryptoVerify(null, message, ed25519PublicKey(pubKey), signature)) {
74
+ throw new Error('signature does not verify — refusing to install');
75
+ }
76
+ }
77
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/desktop/verify.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,12 @@ const flag = (n) => {
14
14
  };
15
15
  const positional = (n) => args.filter((a) => !a.startsWith('--'))[n];
16
16
  async function main() {
17
+ if (cmd === 'edition') {
18
+ // Edition probe for the native viewer: the OSS engine can only render. The viewer reads this
19
+ // to decide whether Sign-in should fetch + swap in the Pro engine (see core/viewer upgrade.rs).
20
+ process.stdout.write('oss\n');
21
+ return;
22
+ }
17
23
  if (cmd === 'render') {
18
24
  const deck = positional(1);
19
25
  if (!deck) {
@@ -1 +1 @@
1
- {"version":3,"file":"engine-entry.js","sourceRoot":"","sources":["../src/engine-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine-entry.js","sourceRoot":"","sources":["../src/engine-entry.ts"],"names":[],"mappings":"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"}
@@ -7,14 +7,14 @@ const STATIC_CSS = `
7
7
  *,*::before,*::after{box-sizing:border-box;}
8
8
  html,body{margin:0;height:100%;}
9
9
  body{
10
- background:#0a0a0e;
10
+ background:var(--sl-stage-bg,#0a0a0e);
11
11
  font-family:var(--font-sans, system-ui, sans-serif);
12
12
  color:var(--color-text,#eee);
13
13
  overflow:hidden;
14
14
  -webkit-font-smoothing:antialiased;
15
15
  text-rendering:optimizeLegibility;
16
16
  }
17
- .sl-viewport{position:fixed;inset:0;overflow:hidden;background:#0a0a0e;}
17
+ .sl-viewport{position:fixed;inset:0;overflow:hidden;background:var(--sl-stage-bg,#0a0a0e);}
18
18
 
19
19
  /* thin, unobtrusive scrollbars wherever the deck scrolls (notes, code, help) */
20
20
  *{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.22) transparent;}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Notify (or, with SLAIDE_AUTO_UPDATE=1, install) when a newer @aivorynet/slaide is published.
3
+ * Throttled to once per day via a cache in the Slaide home dir. Never throws.
4
+ */
5
+ export declare function maybeNotifyUpdate(current: string, cmd?: string): Promise<void>;
package/dist/update.js ADDED
@@ -0,0 +1,112 @@
1
+ // Copyright 2026 AIVory, Inc.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ // Lightweight npm update notifier. Once a day, checks the registry for a newer published version
4
+ // and prints a one-line notice (to stderr, so machine output on stdout is untouched). Opt out with
5
+ // SLAIDE_NO_UPDATE=1; set SLAIDE_AUTO_UPDATE=1 to actually run `npm i -g` when an update exists.
6
+ // Best-effort and fully swallowed: a failed/slow check never affects the command. No deps.
7
+ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { slaideHome } from './desktop/paths.js';
10
+ const PKG = '@aivorynet/slaide';
11
+ const REGISTRY = `https://registry.npmjs.org/${PKG}/latest`;
12
+ const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
13
+ const FETCH_TIMEOUT_MS = 1500;
14
+ // Machine-contract commands: never emit chatter or spend time on a network check.
15
+ const QUIET_COMMANDS = new Set(['mcp', 'render', 'compile']);
16
+ function stateFile() {
17
+ return join(slaideHome(), 'update-check.json');
18
+ }
19
+ function shouldSkip(cmd) {
20
+ if (process.env.SLAIDE_NO_UPDATE || process.env.NO_UPDATE_NOTIFIER || process.env.CI)
21
+ return true;
22
+ if (!process.stderr.isTTY)
23
+ return true; // piped / non-interactive — stay silent
24
+ return QUIET_COMMANDS.has(cmd ?? '');
25
+ }
26
+ function parseVer(v) {
27
+ return v.replace(/^v/, '').split('-')[0].split('.').map((n) => parseInt(n, 10) || 0);
28
+ }
29
+ /** True if `a` is a strictly higher release than `b` (ignores prerelease tags). */
30
+ function semverGt(a, b) {
31
+ const pa = parseVer(a);
32
+ const pb = parseVer(b);
33
+ for (let i = 0; i < 3; i++) {
34
+ const x = pa[i] ?? 0;
35
+ const y = pb[i] ?? 0;
36
+ if (x !== y)
37
+ return x > y;
38
+ }
39
+ return false;
40
+ }
41
+ function readState() {
42
+ try {
43
+ return JSON.parse(readFileSync(stateFile(), 'utf8'));
44
+ }
45
+ catch {
46
+ return {};
47
+ }
48
+ }
49
+ function writeState(s) {
50
+ try {
51
+ mkdirSync(slaideHome(), { recursive: true });
52
+ writeFileSync(stateFile(), JSON.stringify(s));
53
+ }
54
+ catch {
55
+ /* cache is best-effort */
56
+ }
57
+ }
58
+ async function fetchLatest() {
59
+ const ctrl = new AbortController();
60
+ const t = setTimeout(() => ctrl.abort(), FETCH_TIMEOUT_MS);
61
+ try {
62
+ const res = await fetch(REGISTRY, { signal: ctrl.signal, headers: { accept: 'application/json' } });
63
+ if (!res.ok)
64
+ return undefined;
65
+ return (await res.json())?.version;
66
+ }
67
+ catch {
68
+ return undefined;
69
+ }
70
+ finally {
71
+ clearTimeout(t);
72
+ }
73
+ }
74
+ /**
75
+ * Notify (or, with SLAIDE_AUTO_UPDATE=1, install) when a newer @aivorynet/slaide is published.
76
+ * Throttled to once per day via a cache in the Slaide home dir. Never throws.
77
+ */
78
+ export async function maybeNotifyUpdate(current, cmd) {
79
+ if (shouldSkip(cmd))
80
+ return;
81
+ try {
82
+ const st = readState();
83
+ const now = Date.now();
84
+ let latest = st.latest;
85
+ if (!st.lastCheck || now - st.lastCheck > CHECK_INTERVAL_MS) {
86
+ const fetched = await fetchLatest();
87
+ if (fetched)
88
+ latest = fetched;
89
+ writeState({ lastCheck: now, latest });
90
+ }
91
+ if (!latest || !semverGt(latest, current))
92
+ return;
93
+ if (process.env.SLAIDE_AUTO_UPDATE === '1') {
94
+ process.stderr.write(`\n ▲ Updating slaide ${current} → ${latest}…\n`);
95
+ const { spawnSync } = await import('node:child_process');
96
+ const r = spawnSync('npm', ['i', '-g', `${PKG}@latest`], {
97
+ stdio: 'inherit',
98
+ shell: process.platform === 'win32',
99
+ });
100
+ if (r.status !== 0)
101
+ process.stderr.write(` update failed — run: npm i -g ${PKG}@latest\n`);
102
+ }
103
+ else {
104
+ process.stderr.write(`\n ▲ slaide ${current} → ${latest} available · npm i -g ${PKG}@latest` +
105
+ ` (SLAIDE_AUTO_UPDATE=1 to auto-update)\n`);
106
+ }
107
+ }
108
+ catch {
109
+ /* never let an update check break the command */
110
+ }
111
+ }
112
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,sCAAsC;AACtC,iGAAiG;AACjG,mGAAmG;AACnG,iGAAiG;AACjG,2FAA2F;AAC3F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,GAAG,GAAG,mBAAmB,CAAC;AAChC,MAAM,QAAQ,GAAG,8BAA8B,GAAG,SAAS,CAAC;AAC5D,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC9C,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,kFAAkF;AAClF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAE7D,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,mBAAmB,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,UAAU,CAAC,GAAuB;IACzC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAClG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,CAAC,wCAAwC;IAChF,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACvF,CAAC;AACD,mFAAmF;AACnF,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAMD,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AACD,SAAS,UAAU,CAAC,CAAQ;IAC1B,IAAI,CAAC;QACH,SAAS,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,aAAa,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC9B,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,GAAY;IACnE,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO;IAC5B,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,GAAG,GAAG,EAAE,CAAC,SAAS,GAAG,iBAAiB,EAAE,CAAC;YAC5D,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;YACpC,IAAI,OAAO;gBAAE,MAAM,GAAG,OAAO,CAAC;YAC9B,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;YAAE,OAAO;QAElD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,EAAE,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,MAAM,MAAM,KAAK,CAAC,CAAC;YACxE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACzD,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,SAAS,CAAC,EAAE;gBACvD,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;aACpC,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,WAAW,CAAC,CAAC;QAC9F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gBAAgB,OAAO,MAAM,MAAM,yBAAyB,GAAG,SAAS;gBACtE,0CAA0C,CAC7C,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aivorynet/slaide",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "An AI-authorable slide language with beautiful web + PDF output",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",