Files
arboretum/packages/server/CHANGELOG.md
T
johanleroy 114fbc8ba0
CI / No em/en dashes (push) Successful in 3s
CI / Build & test (Node 24) (push) Successful in 10m48s
Release / Publish to Gitea npm registry (push) Successful in 10m52s
CI / Build & test (Node 22) (push) Successful in 11m6s
Desktop Release / Build Linux (AppImage + deb) (push) Successful in 13m38s
Desktop Release / Publish floating desktop-latest release (push) Successful in 11s
CI / Pack & boot smoke (Node 22) (push) Successful in 9m56s
Desktop Release / Build Windows (NSIS + portable) (push) Canceled after 0s
fix(desktop, web): pont presse-papier Electron, sans quoi copier ne faisait rien dans l'app
git-arboretum 3.5.1, desktop 0.2.2.

Le copier/coller livre en 3.5.0 ne fonctionnait que dans un navigateur : verifie dans l'app packagee,
`navigator.clipboard` y rejette en NotAllowedError A LA LECTURE COMME A L'ECRITURE. La copie echouait
donc silencieusement dans le contexte meme ou le probleme avait ete signale.

- feat(desktop): `arboretumDesktop.clipboard` expose par le preload, relaye en IPC vers le module
  `clipboard` d'Electron (lecture + ecriture, ecriture bornee a 1 M de caracteres). Le module
  `clipboard` n'etant pas accessible a un preload sandboxe, le passage par le main est obligatoire.
  Constantes de canaux isolees dans src/shared/ipc.ts pour que le bundle du preload ne tire pas
  `ipcMain` avec lui.
- fix(web): acces au presse-papier en cascade, du plus fiable au plus degrade : pont de l'app de
  bureau, puis `navigator.clipboard`, puis `document.execCommand('copy')` pour l'ecriture. Ce dernier
  recours couvre aussi l'acces LAN en clair (http://<ip>:7317), ou l'API Clipboard est indisponible.
- test: quatre cas de plus sur l'ordre de la cascade et le retour a null quand tout est refuse
  (501 tests). Pont IPC verifie dans un vrai Electron : writeText/readText repondent OK, alors que
  `navigator.clipboard` y refuse. Le chemin complet frappe -> copie -> collage -> SIGINT reste
  couvert par verify-clipboard.mjs (Chromium CDP, ALL GREEN).
2026-08-04 21:11:46 +02:00

110 lines
8.7 KiB
Markdown

# Changelog
Notable changes to `@johanleroy/git-arboretum` (the Arboretum daemon). The VS Code
extension keeps its own changelog in `packages/vscode/CHANGELOG.md`.
## 3.5.1
Completes the terminal copy & paste of 3.5.0, which only worked in a browser.
- **Copy & paste inside the desktop app.** In the Electron renderer, `navigator.clipboard` rejects with
`NotAllowedError` for reads AND writes, so 3.5.0's copy silently did nothing there, exactly where the
problem had been reported. Clipboard access now goes through a cascade: the desktop app's own bridge
first (IPC to Electron's `clipboard` module, exposed by the preload), then `navigator.clipboard`, then
`document.execCommand('copy')` for writes, which also covers plain-HTTP access over a LAN where the
Clipboard API is unavailable.
## 3.5.0
Fixes a black screen after every update, gives the web terminal a working copy & paste, and lets you
browse a group's files without leaving the Groups panel. Fully additive, no protocol version bump.
- **No more black screen after an update.** The embedded SPA is served by `@fastify/static`, whose weak
etag derives from size + mtime, and `npm pack` pins the mtime of every file in the tarball to a
constant (1985-10-26). Two different `index.html` of equal size therefore shared an etag: clients got a
`304 Not Modified` and kept an index referencing `/assets/<hash>` files that no longer existed. The
fallback route then answered those module requests with `index.html` as `text/html`, the browser
refused the script, and nothing painted. `index.html` and every other unhashed file are now served
`no-store` with conditional validation disabled, so a client holding a stale copy repairs itself;
hashed `/assets/` are served `immutable` for a year.
- **Copy & paste in the terminal.** xterm's selection is not a DOM selection, so the native Copy (the
Electron Edit menu, the browser context menu) had nothing to copy and terminal output could not be
retrieved at all. `Ctrl+Shift+C` / `Ctrl+Shift+V` (`Cmd+C` / `Cmd+V` on macOS, plus
`Ctrl+Insert` / `Shift+Insert`) now copy the selection and paste the clipboard, and the DOM `copy`
event is intercepted so the native Copy works too. `Ctrl+C` is deliberately untouched: it stays SIGINT.
- **Theme applied before the first paint again.** The anti-FOUC script was inline in `index.html`, which
the daemon's own CSP (`script-src 'self'`) refused to execute; it moved to `/theme-boot.js`.
- **Browse files from the Groups panel.** A group's worktrees expand into their file tree, the same
component and the same expansion state as the Explorer, and those worktrees are now watched for
real-time changes too.
- **Sources are text again.** Three files embedded a literal NUL byte in a string separator, which made
git and grep treat them as binary: their diffs were unreviewable and the `lint-dashes` CI guard
(`git grep -I`) silently skipped them. Escaped as `\0`, same runtime value.
## 3.4.0
Visibility release: the real-time machinery is now actually armed, worktrees show what they are worth,
and history is served. Fully additive, no protocol version bump.
- **Real-time that no longer depends on which panel is open.** A live session now pins the FS watcher of
its worktree, so a worktree an agent is writing into refreshes on its own even when nobody is looking at
it (`pinSession` existed but was never called). On the client side, `watch` subscriptions moved out of
the Git panel, which was unmounted as soon as you left its tab, taking the app's only subscription with
it; they now follow what you actually look at (active worktree plus expanded repositories).
- **Reconnection no longer loses state.** The protocol replays nothing, so every event missed during a
WebSocket outage was lost for good. The client reloads repos, worktrees, sessions and settings whenever
the connection comes back.
- **Session correlation by containment.** A terminal started in a *subdirectory* of a worktree (which
"Start the project" allows) and a group session covering a worktree through `--add-dir` are now listed
under that worktree, instead of vanishing from the tree. The rule lives in `@arboretum/shared`, shared by
the daemon, the web UI and the VS Code extension; the most specific worktree wins.
- **History API.** `GET /api/v1/repos/:id/worktrees/log` serves the branch commits with the count of
unpushed ones, and `GET .../worktrees/diff?commit=<hash>` the full diff of a commit (hash strictly
validated, same size limits as file diffs). The UI unfolds them in place under the Git panel.
- **Full git counters where they matter.** `ahead`/`behind`, staged, unstaged and conflict counts were
only visible in the status bar, for the active worktree. They are now on every worktree row of the tree
and of the Groups panel, with upstream and last commit in the tooltip. `locked`, `prunable` and an
invalid repository are surfaced too.
- **Groups show their composition.** A group lists its repositories with their worktrees and git state,
its sessions (live and recent) and the directories a group session spans. Its colour tints those repos
in the explorer.
- **Actionable `403 BAD_ORIGIN`.** The error now names the exact `--allow-origin` flag to add, and logs
it. It is the first wall of any LAN or reverse-proxy access.
- **Windows support in the daemon.** `where.exe` for CLI discovery, PowerShell as the project launch
shell, a `.cmd` askpass so token-based HTTPS clone/push works, `taskkill /T` for process-tree
termination, `%APPDATA%` for the data directory, and `arboretum install` registering a scheduled task.
- **UI fixes.** Error toasts were painted behind modals (they are sticky, so they piled up invisible);
on mobile, opening a terminal or switching activity had no visible effect; the dock could push the
status bar out of the viewport; panels showed "nothing here" instead of a loading or error state;
modals had no dialog role, focus trap or focus restore; the splitters are now keyboard operable; diff
line numbers stay pinned while scrolling.
## 3.3.0
"Start the project": boot a project's long-running commands (dev server, API, database) in one click. Fully additive, no protocol or API change.
- **Launch commands per repo.** A repo now carries reusable start commands (label, shell command, optional subdirectory), persisted as JSON and edited from the dashboard. They can be auto-detected from `package.json` scripts, a `Procfile` or a `docker-compose` file.
- **One terminal per command.** `POST /api/v1/repos/:id/launch` resolves the target worktree server-side (the client never passes a raw path) and opens one managed terminal per enabled command, all sharing a launch run id so you can stop the whole set in one action. Each command runs in your interactive login shell (so `npm`, `docker`, nvm/asdf are on `PATH`) and the shell stays live after the command exits, keeping failures on screen.
- **Surfaces.** Start a project from a repo or worktree menu, the sessions panel or the command palette. The VS Code extension exposes it too (see its changelog).
## 3.2.0
Visual overhaul: the web UI adopts the "Emerald" design system and gains a full theme system. No protocol or API change (fully additive, backward compatible).
- **Light and dark themes.** A `light` / `dark` / `system` toggle (in the activity bar and in Settings), remembered across sessions and applied before the first paint (no flash of the wrong theme). The Monaco editor, the xterm terminals (now with a full 16-color ANSI palette) and the diffs all re-theme live.
- **Emerald design language.** Self-hosted Inter + JetBrains Mono, an emerald accent, consistent rounded corners, mono status pills and dots, refined focus and text selection, thin scrollbars, and a terminal signature motif.
- **Marketing site aligned.** git-arboretum.com now mirrors the app: the same tokens, fonts and theme toggle, with up-to-date IDE mockups.
## 3.1.0
- The IDE becomes the single shell of the web UI; the legacy worktree-first dashboard is retired as the default surface (still reachable at `/dashboard`).
- Desktop app metadata fixes (window logo on Debian / Wayland).
## 3.0.0
- **Multi-project IDE** milestone: one workspace (route `/ide`, the default on desktop) holding every open project at once, a unified project / worktree / session tree, a tabbed Monaco editor with inline diffs, docked session terminals, and Git / Sessions / Groups panels. Ships as a **native Electron desktop app** (Linux, Windows, macOS) alongside the same web UI.
## 2.0.0
- "Real worktree IDE" foundations: a pure git engine, a real-time file-system watcher, the file API, selective staging / discard / amend / fetch / pull, automatic session archival, real-time settings sync, and encrypted remote git services (GitHub / GitLab / Gitea) with HTTPS clone.