Files
arboretum/packages/vscode
johanleroy bde5358ea8
CI / No em/en dashes (push) Successful in 3s
CI / Build & test (Node 24) (push) Successful in 10m50s
CI / Build & test (Node 22) (push) Successful in 11m2s
Release / Publish to Gitea npm registry (push) Successful in 10m56s
Desktop Release / Build Linux (AppImage + deb) (push) Successful in 13m21s
Desktop Release / Publish floating desktop-latest release (push) Successful in 11s
CI / Pack & boot smoke (Node 22) (push) Successful in 9m53s
Desktop Release / Build Windows (NSIS + portable) (push) Canceled after 0s
release: git-arboretum 3.5.0 (cache SPA, copier/coller terminal, fichiers des groupes), desktop 0.2.1
Cause racine de l'ecran noir apres mise a jour : l'etag faible de @fastify/static derive de
taille+mtime, et npm pack fige le mtime de tout le tarball a une date constante (1985-10-26). Deux
index.html de versions differentes mais de meme taille partageaient donc le meme etag : le client
recevait un 304, gardait son index perime, et demandait des /assets/<hash> disparus ; le fallback SPA
repondait index.html en text/html pour ces modules, le navigateur refusait le script, rien ne peignait.

- fix(server): index.html et tous les fichiers non haches servis en no-store, validation
  conditionnelle desactivee (etag/lastModified) pour qu'un client bloque sur un index perime se
  repare seul ; /assets/ (noms haches) passent en immutable un an
- feat(web): copier/coller dans le terminal xterm, dont la selection n'est pas une selection DOM :
  Ctrl+Maj+C / Ctrl+Maj+V, Cmd+C / Cmd+V sur macOS, Ctrl+Inser / Maj+Inser, plus interception de
  l'evenement DOM copy pour que le Copier natif fonctionne. Ctrl+C reste SIGINT
- fix(web): script anti-FOUC sorti dans /theme-boot.js, la CSP script-src 'self' du daemon refusait
  de l'executer inline (le theme n'etait donc pose qu'au montage de la SPA)
- feat(web): les worktrees d'un groupe se deplient sur leur arborescence de fichiers dans le panneau
  Groupes (meme composant et meme etat d'expansion que l'Explorateur), et un worktree ainsi deplie
  est desormais surveille en temps reel
- fix: octet nul litteral remplace par \0 dans trois sources (stores/ide.ts, GitPanel.vue,
  vscode/repos-tree.ts) : git et grep les traitaient comme binaires, leurs diffs etaient
  illisibles en revue et la garde CI lint-dashes (git grep -I) les sautait en silence
- test: cacheControlFor et clipboardIntent en tests purs, verify-clipboard.mjs (E2E Chromium CDP :
  copie, collage et SIGINT prouves par le presse-papier reel et par le systeme de fichiers),
  capture groups-dark-desktop ajoutee a verify-ui.mjs
2026-08-04 16:23:33 +02:00
..

Arboretum for VS Code

Pilot your git worktrees and Claude Code sessions from inside VS Code: a real native integration on top of the Arboretum daemon, not a webview.

  • Live tree of Repositories → Worktrees → Sessions (and a Groups view), updated in real time over the daemon's WebSocket.
  • Native terminals: attach to any session in a real VS Code terminal (a Pseudoterminal bridges the daemon's PTY): you get VS Code's own rendering, scrollback, copy/paste and links for free.
  • Waiting alerts: a status-bar counter and native notifications when a Claude session is waiting for input: answer Yes/No without even opening the terminal (uses the daemon's answer command).
  • Git mutations from the tree: create worktree, commit, push, fetch, pull, promote to main, with a detailed git status on each worktree (staged / unstaged / conflicts and the last commit subject).
  • Open Worktree IDE: jump from any worktree into the multi-project IDE (unified project / worktree / session tree, tabbed Monaco editor with inline diffs, docked terminals), in the browser or the native desktop app. The extension stays a lightweight visual worktree manager: the heavy editing lives in the IDE.
  • Workspace-aware: the worktree matching your open folder is highlighted; start a session or create a worktree for the current folder in one command.

Requirements

  • A running Arboretum daemon (npx @johanleroy/git-arboretum, or installed as a user service via arboretum install). The extension is a client: it does not start the daemon.
  • An access token. The bootstrap token is printed once on first daemon start; you can also create one in the Arboretum dashboard (Settings → Tokens).

Getting started

  1. Start the daemon and copy a token.
  2. In VS Code, run Arboretum: Sign In (Command Palette) and paste the token. The token is validated against the daemon and stored in VS Code's encrypted SecretStorage.
  3. The Arboretum view container appears in the Activity Bar with the Repositories and Groups trees.

Settings

Setting Default Description
arboretum.url http://127.0.0.1:7317 Base URL of the daemon (REST + WebSocket).
arboretum.showExternalSessions false Also show Claude sessions started outside Arboretum (CLI).
arboretum.showArchivedSessions false Also show finished sessions auto-archived after their retention window.
arboretum.notifyOnWaiting true Native notification when a session starts waiting for input.

The extension authenticates with Authorization: Bearer <token> on both REST and the WebSocket upgrade. For remote access, point arboretum.url at your Tailscale Serve URL (https://…): the WebSocket is derived automatically (wss://).

Building & packaging (private VSIX)

The extension is bundled with esbuild (@arboretum/shared is inlined → the VSIX is self-contained).

# from the monorepo root
npm install
npm run build:vscode                       # builds @arboretum/shared then bundles the extension
cd packages/vscode && npx @vscode/vsce package --no-dependencies
# → git-arboretum-<version>.vsix

Install it with Extensions: Install from VSIX… in the Command Palette, or:

code --install-extension git-arboretum-<version>.vsix   # also: codium / cursor

Other distribution channels (optional)

  • Open VSX (VSCodium, Cursor, Windsurf): npx ovsx publish *.vsix -p <token> after creating an Open VSX account and namespace.
  • VS Code Marketplace: create an Azure DevOps publisher + PAT, then npx @vscode/vsce publish.

A Gitea Actions workflow packages the VSIX automatically on a vscode-vX.Y.Z tag (see .gitea/workflows/vscode-release.yml) and attaches it to the release.

Security

The extension never weakens the daemon's security model: it speaks the same authenticated protocol as the web dashboard. A Node client sends no Origin header, so it passes the daemon's strict Origin check while still requiring a valid token.