From a8105c9cb04917b9d42dc582c2ead5ffa79bbd43 Mon Sep 17 00:00:00 2001 From: Johan LEROY Date: Mon, 15 Jun 2026 12:23:53 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20P4=20livr=C3=A9=20(supervision=20mobile?= =?UTF-8?q?=20:=20answer=20+=20Web=20Push=20+=20PWA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit README et CLAUDE.md reflètent désormais P4 comme livré (et non plus « à venir »), avec les caveats Web Push (HTTPS/Tailscale, PWA installée sur iOS). --- CLAUDE.md | 6 ++++-- README.md | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index dd39fb0..542ead8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Projet -Arboretum : un daemon Node.js unique (`npx git-arboretum`) qui sert un dashboard web pour piloter les worktrees git et les sessions Claude Code qui tournent dessus, depuis n'importe quel appareil. **MVP atteint** : P1 (colonne vertébrale : monorepo, protocole WS, daemon, front, tests, CI), P2 (découverte & reprise des sessions), P3 (worktrees multi-repo, états fins busy/waiting/idle via `claude-adapter`, dashboard worktree-first) sont livrés. La phase en cours est **P4** (« supervision mobile & push » : répondre aux dialogues sans ouvrir le terminal, notifications Web Push, PWA installable). Voir les `VERDICT.md` dans `spikes/` pour les décisions techniques actées avant implémentation. +Arboretum : un daemon Node.js unique (`npx git-arboretum`) qui sert un dashboard web pour piloter les worktrees git et les sessions Claude Code qui tournent dessus, depuis n'importe quel appareil. **MVP atteint** : P1 (colonne vertébrale : monorepo, protocole WS, daemon, front, tests, CI), P2 (découverte & reprise des sessions), P3 (worktrees multi-repo, états fins busy/waiting/idle via `claude-adapter`, dashboard worktree-first) et P4 (« supervision mobile & push » : commande WS `answer` pour répondre aux dialogues sans ouvrir le terminal, notifications Web Push via VAPID, PWA installable) sont livrés. Voir les `VERDICT.md` dans `spikes/` pour les décisions techniques actées avant implémentation. Les commentaires du code et la doc interne sont en **français** ; le README et les messages utilisateur en anglais. Conserver cette convention. @@ -78,4 +78,6 @@ Les `spikes/sN-*/VERDICT.md` documentent des décisions qui contraignent l'impl - La **vivacité** d'une session se déduit de `pid` + `procStart`, **jamais** de la présence du fichier registre. - La distinction d'états fins (busy / waiting / idle) du `claude-adapter` (P3-B) nécessite une lecture d'écran via `@xterm/headless` (le strip ANSI naïf mange les espaces) + le registre `~/.claude/sessions`. -Le `SessionRuntimeStatus` du protocole reste `starting`/`running`/`exited` ; les états fins P3-B (`activity`, `waitingFor`, `dialog`) sont des champs **additifs optionnels** de `SessionSummary`, remplis par le `claude-adapter` pour les sessions claude managées (null pour bash / découvertes). P4 ajoutera la commande WS `answer` (répondre aux dialogues) et le Web Push. +Le `SessionRuntimeStatus` du protocole reste `starting`/`running`/`exited` ; les états fins P3-B (`activity`, `waitingFor`, `dialog`) sont des champs **additifs optionnels** de `SessionSummary`, remplis par le `claude-adapter` pour les sessions claude managées (null pour bash / découvertes). + +**P4 (supervision mobile)** s'appuie sur ces champs : la commande WS `answer {channel, action, optionN?}` (validée dans `parseClientMessage` ET `pty-manager.answer` contre le dialogue courant) traduit une intention en keystrokes PTY ; `PushService` (clés VAPID en `settings`, abonnements liés au `tokenId` dans `push_subscriptions`) notifie sur le **front montant** vers `waiting` (débouncé). Côté web : `public/sw.js` (service worker push écrit à la main — **pas** de `vite-plugin-pwa`, trop lourd pour un SW push-only) + `public/manifest.webmanifest` (PWA installable). Web Push exige HTTPS (Tailscale Serve) ; sur iOS, la PWA doit être installée. diff --git a/README.md b/README.md index d8460dd..02fc343 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > A self-hosted web dashboard for your git worktrees and the Claude Code sessions running on them — from any device. -**Status: MVP.** The worktree-first dashboard, session discovery & resume, multi-repo worktree lifecycle, live session states and the web terminal are implemented and tested. Mobile supervision (PWA + push, approve/deny from your phone) is the next phase — see *Supervision from your phone* below. +**Status: MVP.** The worktree-first dashboard, session discovery & resume, multi-repo worktree lifecycle, live session states, the web terminal, and mobile supervision (installable PWA, Web Push when a session needs you, approve/deny without opening a terminal) are implemented and tested. ## The problem @@ -20,7 +20,7 @@ A single Node.js daemon you run on your dev machine (`npx git-arboretum`), servi - **Full worktree lifecycle** — create (with per-repo post-create hooks: `npm ci`, copy `.env`…), adopt worktrees created by hand, delete with guardrails, prune orphans. - **Session discovery & resume** — sessions you launched in your own terminal show up automatically; resume dead ones, observe or fork live ones. Never corrupts a live session. - **Web terminal** — full xterm.js terminal to every managed session, surviving browser disconnects. -- **Supervision from your phone** *(post-MVP)* — PWA with push notifications when a session needs you, approve/deny without opening a terminal. +- **Supervision from your phone** — installable PWA with push notifications when a session needs you; approve/deny a prompt without opening a terminal. *(Web Push needs HTTPS — use [Tailscale Serve](docs/tailscale.md); on iOS, install the app to your home screen first.)* ## What makes it different