diff --git a/README.fr.md b/README.fr.md index a035987..a34cc9e 100644 --- a/README.fr.md +++ b/README.fr.md @@ -32,6 +32,7 @@ Un unique daemon Node.js que vous lancez sur votre machine de dev (`npx @johanle - **Terminal web** — terminal xterm.js complet vers chaque session managée, qui survit aux déconnexions du navigateur ; vraiment plein écran, avec l'invite ancrée en bas et tout l'historique défilable au-dessus. - **Supervision depuis votre téléphone** — PWA installable avec notifications push quand une session vous attend ; répondez à une demande (ses options, ou refusez) sans ouvrir de terminal. - **Groupes de travail** — regroupez des repos liés (ex. une API, son frontend web et sa doc) dans un groupe nommé, puis lancez **une seule session Claude qui les couvre tous à la fois** (via le flag `--add-dir` du CLI) : une conversation unique avec un contexte partagé travaillant à travers chaque repo, plus une vue unifiée de tous leurs worktrees et une grille multi-terminaux côte à côte. Une session de groupe peut d'abord créer le même worktree de branche dans chaque repo, ou tourner directement sur les checkouts principaux. +- **Extension VS Code** — une extension native (pas un webview) qui amène l'arbre en direct, les terminaux de session natifs, les alertes d'attente et les actions git directement dans votre éditeur. Voir [Extension VS Code](#extension-vs-code). --- @@ -104,6 +105,24 @@ node packages/server/dist/index.js 4. **Suivez les états en direct.** Chaque session indique si elle est *busy*, *en attente de votre entrée* ou *idle*. Ouvrez le **terminal web** pour interagir directement ; il survit aux déconnexions du navigateur (fermer l'onglet ne tue pas la session). 5. **Supervisez depuis votre téléphone.** Installez la PWA, et quand une session bascule en *attente*, vous recevez une notification push. Répondez à la demande — choisissez l'une de ses options ou refusez-la — directement depuis le dashboard, sans terminal. +## Extension VS Code + +Vous préférez rester dans votre éditeur ? Arboretum fournit une **extension VS Code native** (`packages/vscode`) — pas un webview. Elle se connecte au même daemon et l'expose avec les primitives natives de VS Code : + +- Un arbre **Repositories** et **Groups** en direct (repos → worktrees → sessions) dans l'Activity Bar, mis à jour en temps réel via le WebSocket du daemon. +- **Terminaux natifs** : attachez-vous (ou observez) n'importe quelle session dans un vrai terminal VS Code — vous bénéficiez du rendu, du scrollback et du copier-coller de VS Code gratuitement. +- Un compteur en **status bar** et des **notifications** natives quand une session attend, avec réponses Oui/Non sans ouvrir de terminal. +- Les mutations git (créer un worktree, commit, push, promouvoir) et la **conscience du workspace** — le worktree de votre dossier ouvert est mis en évidence, avec « démarrer une session / créer un worktree ici » en un clic. + +Elle est distribuée en **VSIX privé**. Buildez-la et packagez-la depuis le monorepo : + +```bash +npm run build:vscode +cd packages/vscode && npx @vscode/vsce package --no-dependencies # → git-arboretum-0.1.0.vsix +``` + +Puis installez-la via **Extensions : Installer à partir d'un VSIX…** (ou `code --install-extension git-arboretum-0.1.0.vsix`), lancez **Arboretum: Sign In** et collez un token. Détails complets dans [`packages/vscode/README.md`](packages/vscode/README.md). + ## Accès distant depuis votre téléphone Arboretum se bind sur `127.0.0.1` par défaut et **refuse** de se binder sur une adresse non-loopback sans dérogation explicite. La façon recommandée (et sûre) de l'atteindre depuis d'autres appareils est **[Tailscale Serve](https://tailscale.com/kb/1242/tailscale-serve)** — HTTPS valide, identité tailnet, aucun port ouvert : @@ -235,7 +254,7 @@ Arboretum enveloppe le CLI Claude Code **interactif** dans un PTY — la même c ## Développement -Arboretum est un monorepo npm workspaces : `@arboretum/shared` (protocole WS/REST, source de vérité), `@johanleroy/git-arboretum` (le daemon Fastify, le paquet publié) et `@arboretum/web` (la SPA Vue 3). +Arboretum est un monorepo npm workspaces : `@arboretum/shared` (protocole WS/REST, source de vérité), `@johanleroy/git-arboretum` (le daemon Fastify, le paquet publié), `@arboretum/web` (la SPA Vue 3) et `git-arboretum` (l'extension VS Code — buildée séparément avec `npm run build:vscode`). ```bash npm run build # build shared → server → web (l'ordre compte) diff --git a/README.md b/README.md index ec7374f..0f057b9 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ A single Node.js daemon you run on your dev machine (`npx @johanleroy/git-arbore - **Web terminal** — full xterm.js terminal to every managed session, surviving browser disconnects; truly fullscreen, with the prompt pinned to the bottom and full scrollback above. - **Supervision from your phone** — installable PWA with push notifications when a session needs you; answer a prompt (its options, or deny) without opening a terminal. - **Work groups** — bundle related repos (e.g. an API, its web frontend and its docs) into a named group, then launch **one Claude session that spans all of them at once** (via the CLI's `--add-dir`): a single conversation with one shared context working across every repo, plus a unified view of all their worktrees and a side-by-side multi-terminal grid. Group sessions can either create the same branch worktree in each repo first, or run straight on the main checkouts. +- **VS Code extension** — a native extension (not a webview) that brings the live tree, native session terminals, waiting alerts and git actions right into your editor. See [VS Code extension](#vs-code-extension). --- @@ -104,6 +105,24 @@ node packages/server/dist/index.js 4. **Watch the live states.** Each session reports whether it's *busy*, *waiting for your input*, or *idle*. Open the **web terminal** to interact directly; it survives browser disconnects (closing the tab does not kill the session). 5. **Supervise from your phone.** Install the PWA, and when a session flips to *waiting* you get a push notification. Answer the prompt — pick one of its options or deny it — straight from the dashboard, no terminal required. +## VS Code extension + +Prefer to stay in your editor? Arboretum ships a **native VS Code extension** (`packages/vscode`) — not a webview. It connects to the same daemon and surfaces it with VS Code's own primitives: + +- A live **Repositories** and **Groups** tree (repos → worktrees → sessions) in the Activity Bar, updated in real time over the daemon's WebSocket. +- **Native terminals**: attach to (or observe) any session in a real VS Code terminal — you get VS Code's rendering, scrollback and copy/paste for free. +- A **status-bar** counter and native **notifications** when a session is waiting, with Yes/No answers without opening a terminal. +- Git mutations (create worktree, commit, push, promote) and **workspace awareness** — the worktree for your open folder is highlighted, with one-click "start session / create worktree here". + +It is distributed as a **private VSIX**. Build and package it from the monorepo: + +```bash +npm run build:vscode +cd packages/vscode && npx @vscode/vsce package --no-dependencies # → git-arboretum-0.1.0.vsix +``` + +Then install it via **Extensions: Install from VSIX…** (or `code --install-extension git-arboretum-0.1.0.vsix`), run **Arboretum: Sign In** and paste a token. Full details in [`packages/vscode/README.md`](packages/vscode/README.md). + ## Remote access from your phone Arboretum binds to `127.0.0.1` by default and **refuses** to bind to a non-loopback address without an explicit override. The recommended (and safe) way to reach it from other devices is **[Tailscale Serve](https://tailscale.com/kb/1242/tailscale-serve)** — valid HTTPS, tailnet identity, no open ports: @@ -235,7 +254,7 @@ Arboretum wraps the **interactive** Claude Code CLI in a PTY — the same thing ## Development -Arboretum is an npm-workspaces monorepo: `@arboretum/shared` (WS/REST protocol, source of truth), `@johanleroy/git-arboretum` (the Fastify daemon, the published package), and `@arboretum/web` (the Vue 3 SPA). +Arboretum is an npm-workspaces monorepo: `@arboretum/shared` (WS/REST protocol, source of truth), `@johanleroy/git-arboretum` (the Fastify daemon, the published package), `@arboretum/web` (the Vue 3 SPA), and `git-arboretum` (the VS Code extension — built separately with `npm run build:vscode`). ```bash npm run build # build shared → server → web (order matters) diff --git a/packages/site/src/components/FeaturesSection.vue b/packages/site/src/components/FeaturesSection.vue index 3a09aeb..a8b90d4 100644 --- a/packages/site/src/components/FeaturesSection.vue +++ b/packages/site/src/components/FeaturesSection.vue @@ -71,6 +71,13 @@ const { t } = useI18n(); {{ t('feat8Desc') }} + + + + {{ t('feat9Desc') }} + diff --git a/packages/site/src/i18n/en.ts b/packages/site/src/i18n/en.ts index 36dce10..8b19dbb 100644 --- a/packages/site/src/i18n/en.ts +++ b/packages/site/src/i18n/en.ts @@ -32,6 +32,8 @@ export default { feat7Desc: 'Group repos and run one Claude session across all of them at once.', feat8Title: 'Local-first & secure', feat8Desc: 'Binds to localhost, hashes tokens, remote access via Tailscale.', + feat9Title: 'Native VS Code extension', + feat9Desc: 'Drive worktrees and attach sessions in native terminals, right inside your editor.', scAKicker: 'Worktree-first dashboard', scATitle: 'See what needs you — before anything stalls', scABody: diff --git a/packages/site/src/i18n/fr.ts b/packages/site/src/i18n/fr.ts index ff395be..1b03dbf 100644 --- a/packages/site/src/i18n/fr.ts +++ b/packages/site/src/i18n/fr.ts @@ -32,6 +32,8 @@ export default { feat7Desc: 'Regroupez des repos et pilotez-les via une seule session Claude, tous à la fois.', feat8Title: 'Local-first & sécurisé', feat8Desc: 'Se lie à localhost, hashe les tokens, accès distant via Tailscale.', + feat9Title: 'Extension VS Code native', + feat9Desc: 'Pilotez vos worktrees et attachez vos sessions dans des terminaux natifs, directement dans votre éditeur.', scAKicker: 'Dashboard worktree-first', scATitle: 'Voyez ce qui vous attend — avant que ça ne bloque', scABody: diff --git a/packages/web/src/views/help-content.ts b/packages/web/src/views/help-content.ts index 5c89142..577e765 100644 --- a/packages/web/src/views/help-content.ts +++ b/packages/web/src/views/help-content.ts @@ -185,6 +185,10 @@ const en: HelpSection[] = [ title: 'Source code', body: 'The “Source code” icon in the navigation always links to the Arboretum source repository on Gitea.', }, + { + title: 'VS Code extension', + body: 'Prefer your editor? A native VS Code extension (not a webview) connects to the same daemon: a live tree of repos/worktrees/sessions, native terminals to attach to any session, a waiting counter with notifications, and git actions — right inside VS Code. It is distributed as a private VSIX; build it with “npm run build:vscode” then package with vsce, install via “Install from VSIX”, and sign in with a token.', + }, ], }, ]; @@ -361,6 +365,10 @@ const fr: HelpSection[] = [ title: 'Code source', body: 'L’icône « Code source » de la navigation pointe toujours vers le dépôt source d’Arboretum sur Gitea.', }, + { + title: 'Extension VS Code', + body: 'Vous préférez votre éditeur ? Une extension VS Code native (pas un webview) se connecte au même daemon : un arbre en direct des repos/worktrees/sessions, des terminaux natifs pour s’attacher à n’importe quelle session, un compteur d’attente avec notifications, et les actions git — directement dans VS Code. Distribuée en VSIX privé : buildez avec « npm run build:vscode » puis packagez avec vsce, installez via « Installer à partir d’un VSIX », et connectez-vous avec un token.', + }, ], }, ];