pindeck 3.2.0-beta.1 → 3.2.0

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/README.md CHANGED
@@ -1,10 +1,9 @@
1
1
  # PinDeck
2
2
 
3
- > **macOS, and Linux as a beta · Version 3 beta preview** (`3.2.0-beta.1`). On Linux, PinDeck runs as a
4
- > headless server that you use from your Mac's browser through an SSH tunnel (see
5
- > [Running on a Linux server](#running-on-a-linux-server-beta)). Windows is not supported. The beta is on
6
- > npm’s `beta` channel and the [`v3-beta`](https://github.com/ehabets/PinDeck/tree/v3-beta) branch; stable
7
- > releases (`npx pindeck`) stay on 2.x. See installation below.
3
+ > **macOS and Linux · Version 3** (`3.2.0`). On Linux, PinDeck runs as a headless server that you use
4
+ > from your Mac's browser through an SSH tunnel (see [Running on a Linux server](#running-on-a-linux-server)).
5
+ > Windows is not supported. Coming from PinDeck 2: version 3 keeps its settings and chats in
6
+ > `~/.pindeck-v3`, apart from 2.x (see [Models, providers and configuration](#models-providers-and-configuration)).
8
7
 
9
8
  **Pin it. Say it. Done.** PinDeck is a local editor for HTML slide decks (reveal.js): the slides on
10
9
  the left, the slide in the middle, and a chat with Claude Code or OpenAI Codex on the right. You click elements to
@@ -32,29 +31,28 @@ checked the layout; the next request, still being typed, refers to the new pins
32
31
 
33
32
  ## Quick start
34
33
 
35
- Runs on macOS, and on Linux as a beta. The npm package declares `"os": ["darwin", "linux"]`, so normal
34
+ Runs on macOS and Linux. The npm package declares `"os": ["darwin", "linux"]`, so normal
36
35
  npm installation rejects other operating systems. Overriding that check does not make those platforms
37
36
  supported. Running the server from a cloned repository on another OS shows a local support notice
38
37
  instead of opening the deck or starting a backend.
39
38
 
40
- Install the beta from npm:
39
+ Install from npm:
41
40
 
42
41
  ```bash
43
- npx pindeck@beta /path/to/deck
44
- # Or select this exact beta:
45
- npx pindeck@3.2.0-beta.1 /path/to/deck
42
+ npx pindeck /path/to/deck
46
43
  ```
47
44
 
48
- Or run it from the `v3-beta` branch, which includes the example deck:
45
+ Or run it from source, which includes the example deck:
49
46
 
50
47
  ```bash
51
- git clone --branch v3-beta --single-branch https://github.com/ehabets/PinDeck.git PinDeck-v3
52
- cd PinDeck-v3
48
+ git clone https://github.com/ehabets/PinDeck.git
49
+ cd PinDeck
53
50
  node front.mjs ocean-example
54
51
  ```
55
52
 
56
- Use `npx pindeck@latest /path/to/deck` for the stable release; the beta channel does not replace it.
57
- Releases, with notes for each beta, are on [GitHub](https://github.com/ehabets/PinDeck/releases).
53
+ PinDeck 2 stays available as `npx pindeck@2 /path/to/deck` (source: the
54
+ [`2.x`](https://github.com/ehabets/PinDeck/tree/2.x) branch). Releases, with notes for each version, are on
55
+ [GitHub](https://github.com/ehabets/PinDeck/releases).
58
56
 
59
57
  Then open the login link PinDeck prints (`PinDeck: http://127.0.0.1:5180/login?code=...`). It works
60
58
  once and logs this browser in; for a new one, run `pindeck login` (or `node front.mjs login`). On a Mac,
@@ -94,11 +92,11 @@ the deck, whichever port it runs on.
94
92
  The corresponding executable must be on `PATH`; `CLAUDE_BIN` and `CODEX_BIN` can override its path.
95
93
  Only the selected backend is required for editing. Model and effort availability comes from that
96
94
  backend and account, and may differ from the provider’s website or desktop app.
97
- * **Platforms:** macOS, and Linux as a beta (see [Running on a Linux server](#running-on-a-linux-server-beta)).
95
+ * **Platforms:** macOS and Linux (see [Running on a Linux server](#running-on-a-linux-server)).
98
96
  Windows is not supported. The npm package declares `"os": ["darwin", "linux"]`, so normal npm
99
97
  installation rejects other operating systems. This check can be overridden; bypassing it does not make
100
98
  those platforms supported. Source launches on unsupported platforms show a local support page without
101
- opening the deck or starting a backend. Native Windows support is a possible v4 feature, not part of this beta.
99
+ opening the deck or starting a backend. Native Windows support is a possible v4 feature, not part of version 3.
102
100
  * **Screenshots and PDF export:** require Chrome, Chromium, Edge or Brave where the server runs.
103
101
  * **PDF input through Codex:** pages are rendered with macOS PDFKit, or Poppler on Linux. Page-text
104
102
  extraction uses `osascript` and is macOS-only; on Linux Codex reads the rendered page image. Claude uses
@@ -266,7 +264,7 @@ from resuming the other's IDs. `--provider` and `--model` override the deck's se
266
264
  is back on the deck's own choice. A later menu selection is saved. `CLAUDE_BIN` and `CODEX_BIN` override
267
265
  executable paths. `CLAUDE_MODEL`, which PinDeck 2 read, is not used: PinDeck warns and names `--model`.
268
266
 
269
- The v3 preview defaults to **`~/.pindeck-v3`**, keeping v2 settings and conversations separate. It does
267
+ PinDeck 3 defaults to **`~/.pindeck-v3`**, keeping v2 settings and conversations separate. It does
270
268
  not copy the v2 directory automatically; `config.json` and `decks/*/chat.json` can be copied over by hand
271
269
  (asset roots too: they are in config.json). Never give both versions the same `PINDECK_HOME`: they keep files
272
270
  of the same names in different formats and overwrite each other's settings and chats. PinDeck 3 warns at
@@ -308,7 +306,7 @@ library folder, add the folder it points to as an asset root; it does not have t
308
306
  PinDeck never writes or deletes through a symlink out of the deck folder: with a `figures/` or `export/`
309
307
  that links elsewhere, uploads, exports and deleting a picture's file are refused with the reason.
310
308
 
311
- ## Running on a Linux server (beta)
309
+ ## Running on a Linux server
312
310
 
313
311
  PinDeck can run on a Linux machine where the deck lives, with the editor in your Mac's browser. The
314
312
  deck, PinDeck, the backend (Claude Code or Codex) and the deck's git clone all stay on the server; the browser only shows the
@@ -339,7 +337,7 @@ Other users of a shared server cannot open the editor or read the deck through P
339
337
  protects it is only in your browser's cookie and in PinDeck's own files in `~/.pindeck-v3` (readable only by
340
338
  you), never in a page or on a command line.
341
339
 
342
- What works on Linux in this beta: editing by hand, speaker notes, slides, pins, the chat with Claude or Codex,
340
+ What works on Linux: editing by hand, speaker notes, slides, pins, the chat with Claude or Codex,
343
341
  Undo/Redo, live reload when files change on the server, layout checks, attaching figures, audio and
344
342
  PDFs, `git-setup` and the PowerPoint import. Some features use programs on the server, and are on when
345
343
  they are installed (on Debian or Ubuntu: `sudo apt install poppler-utils libreoffice-impress ffmpeg`):
@@ -351,7 +349,7 @@ they are installed (on Debian or Ubuntu: `sudo apt install poppler-utils libreof
351
349
  | Pictures of PowerPoint slides in the import (thumbnails, diagrams) | LibreOffice (`soffice`) and Poppler |
352
350
  | Waveforms of audio other than WAV in the import | ffmpeg |
353
351
 
354
- Without them the editor says what is missing (hover over "Server: Linux (beta)"), and the assistant is told
352
+ Without them the editor says what is missing (hover over "Server: Linux"), and the assistant is told
355
353
  which commands are not available. LibreOffice may draw some slides a little differently from PowerPoint;
356
354
  the pictures are references and figures, the slides themselves are rebuilt from the file. Chromium from snap may not be
357
355
  allowed to use hidden folders in your home folder such as `~/.pindeck-v3`; if screenshots fail with it, set
@@ -556,11 +554,23 @@ Without PowerPoint or Keynote (or on other systems than macOS) only the text and
556
554
  * A deck's own scripts run sandboxed in the editor and in Present: they cannot use `localStorage`, cookies
557
555
  or the editor page. A deck that needs them for its slides to work should catch the error.
558
556
  * Decks are `.html` files; `.htm` files are not listed or opened as decks.
559
- * Linux (beta): pictures of PDF pages and PowerPoint slides, and waveforms of non-WAV audio, need
560
- Poppler, LibreOffice and ffmpeg on the server (see [Running on a Linux server](#running-on-a-linux-server-beta)).
557
+ * Linux: pictures of PDF pages and PowerPoint slides, and waveforms of non-WAV audio, need
558
+ Poppler, LibreOffice and ffmpeg on the server (see [Running on a Linux server](#running-on-a-linux-server)).
561
559
 
562
560
  ## Versions
563
561
 
562
+ * **3.2.0**: PinDeck 3, the first stable release of version 3: everything from the 3.0, 3.1 and 3.2 betas
563
+ below. Compared with 2.11:
564
+ - OpenAI Codex as a second assistant next to Claude Code, with the models and efforts each backend
565
+ offers; each deck keeps its own provider, model and effort.
566
+ - Several decks on one port: a deck menu above the slide, each deck with its own chat, assistant
567
+ session and Undo.
568
+ - Deck pages run sandboxed, so a deck's script cannot use the API or read other decks.
569
+ - Linux is no longer a beta.
570
+ - Settings and chats are kept in `~/.pindeck-v3`, apart from PinDeck 2's `~/.pindeck`; nothing is copied
571
+ over (see [Models, providers and configuration](#models-providers-and-configuration)). PinDeck 2 stays
572
+ on npm as `pindeck@2`.
573
+
564
574
  * **3.2.0-beta.1**: fixes from a code review and a round of user tests.
565
575
  - Security: deck pages run sandboxed, so a deck's script can no longer use the API, read other decks or
566
576
  send messages; the login link's `next` stays on PinDeck. A deck's own script cannot use `localStorage`
@@ -621,6 +631,11 @@ Without PowerPoint or Keynote (or on other systems than macOS) only the text and
621
631
  switching with optional handover, curated model lists, a separate effort selector with per-model
622
632
  preferences, restricted Codex tools, and separate v3 runtime state. On npm as `pindeck@beta`.
623
633
 
634
+ * **2.11**: screenshots in the chat. A screenshot sent with a message, and one Claude reads, shows as
635
+ a small picture that opens larger with a click (Esc or a click closes it). PinDeck keeps the 40
636
+ newest screenshots of a deck; an older one says "no longer kept". Chats from before 2.11 keep their
637
+ plain label. (In 3.x since 3.1.0-beta.1.)
638
+
624
639
  * **2.10**: decks with their own file names and shared files, decks made without reveal.js, and Claude
625
640
  working on the whole deck.
626
641
  - A deck file by name: `pindeck path/to/talk.html` (a folder still opens its `index.html`). Several
@@ -1,7 +1,7 @@
1
1
  /* What this server can do on this machine, decided once on the backend and used everywhere: the editor
2
2
  (status), the API (refusals before any side effect), the CLI (its error text) and the assistant's system prompt.
3
3
 
4
- macOS: everything, as before. Linux (beta): editing, the chat, live reload and the PowerPoint import;
4
+ macOS: everything, as before. Linux: editing, the chat, live reload and the PowerPoint import;
5
5
  pictures of PDF pages with Poppler, pictures of PowerPoint slides with LibreOffice and Poppler, and
6
6
  waveforms of non-WAV audio with ffmpeg, each when installed, else off with a reason. Chrome features (screenshots, headless
7
7
  layout, PDF export) work on Linux as on macOS when Chrome or Chromium is found; PINDECK_LINUX_CHROME=0
@@ -12,7 +12,7 @@ import path from "node:path";
12
12
 
13
13
  export const SUPPORTED_PLATFORMS = ["darwin", "linux"];
14
14
  export const isSupportedPlatform = (platform) => SUPPORTED_PLATFORMS.includes(platform);
15
- export const platformLabel = (platform) => ({ darwin: "macOS", linux: "Linux (beta)" }[platform] || platform);
15
+ export const platformLabel = (platform) => ({ darwin: "macOS", linux: "Linux" }[platform] || platform);
16
16
 
17
17
  const CHROME_PATHS = {
18
18
  darwin: ["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
@@ -4,8 +4,8 @@ export function createPlatformNoticeServer(platform) {
4
4
  const windows = platform === 'win32';
5
5
  const heading = windows ? 'Windows support is on the roadmap' : 'PinDeck runs on macOS and Linux';
6
6
  const explanation = windows
7
- ? 'PinDeck runs on macOS and, as a beta, on Linux. Windows support is planned for a future version; there is no release date yet.'
8
- : 'This version of PinDeck runs on macOS and, as a beta, on Linux. This operating system is not supported.';
7
+ ? 'PinDeck runs on macOS and Linux. Windows support is planned for a future version; there is no release date yet.'
8
+ : 'This version of PinDeck runs on macOS and Linux. This operating system is not supported.';
9
9
  const html = `<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>PinDeck · system not supported</title><style>
10
10
  :root{font-family:system-ui,sans-serif;color:#243348;background:#f4f6f8;color-scheme:light}*{box-sizing:border-box}body{margin:0;min-height:100vh;display:grid;place-items:center;padding:24px}main{width:min(100%,620px);padding:40px;background:white;border:1px solid #dde3ea;border-radius:18px;box-shadow:0 12px 40px #20334d0a}.brand{font-weight:700;color:#c36516;margin:0 0 32px}h1{font-size:clamp(26px,5vw,36px);line-height:1.2;margin:0 0 20px}p{line-height:1.65}a{color:#945012}footer{margin-top:28px;font-size:14px;color:#596577}
11
11
  </style></head><body><main><p class="brand">PinDeck</p><h1>${heading}</h1><p>${explanation}</p><p>Your deck has not been opened or changed, and no AI backend has been started.</p><p>You can run PinDeck on a Mac or a Linux machine (and use it from this browser through an SSH tunnel), or follow updates on <a href="https://github.com/ehabets/PinDeck">GitHub</a>.</p><footer>Close this tab and press Ctrl+C in the terminal to stop this notice.</footer></main></body></html>`;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pindeck",
3
- "version": "3.2.0-beta.1",
4
- "description": "PinDeck: an editor for HTML slide decks on macOS, and on Linux (beta) through an SSH tunnel. Pin elements, describe the change, and Claude Code or OpenAI Codex edits the slides.",
3
+ "version": "3.2.0",
4
+ "description": "PinDeck: an editor for HTML slide decks on macOS, and on Linux through an SSH tunnel. Pin elements, describe the change, and Claude Code or OpenAI Codex edits the slides.",
5
5
  "keywords": [
6
6
  "slides",
7
7
  "presentation",
package/public/editor.js CHANGED
@@ -907,7 +907,7 @@ function applyStatus(s) {
907
907
  imp.disabled = !!why(caps.pptxImport);
908
908
  imp.title = why(caps.pptxImport);
909
909
  if (why(caps[provider])) $("conn").title = caps[provider].reason;
910
- // where the server runs, when it is not this Mac's usual setup: "Linux (beta)", with what is off
910
+ // where the server runs, when it is not this Mac's usual setup: "Linux", with what is off
911
911
  const names = { claude: "Claude", codex: "OpenAI Codex", screenshot: "Screenshots", headlessLayout: "Layout without an open editor",
912
912
  pdfExport: "PDF export", pdfPages: "Pictures of PDF pages", pptxImport: "PowerPoint import",
913
913
  pptxPictures: "Pictures of PowerPoint slides", audioConvert: "Waveforms of non-WAV audio" };