release: @johanleroy/git-arboretum 1.0.0 — publication sur le registre Gitea
Some checks failed
CI / Build & test (Node 22) (push) Successful in 9m42s
CI / Build & test (Node 24) (push) Successful in 9m41s
CI / Pack & boot smoke (Node 22) (push) Has been cancelled
Release / Publish to Gitea npm registry (push) Successful in 9m37s

- renomme le paquet en @johanleroy/git-arboretum (scope routé vers le registre npm Gitea privé)
- embarque @arboretum/shared via bundleDependencies (scripts/vendor-shared.mjs au prepack)
- joint README/LICENSE au tarball (scripts/copy-meta.mjs) + metadata, keywords, publishConfig
- CI pack-smoke en mono-tarball avec assertion bundleDep ; nouveau workflow release.yml (publish sur tag v*)
- version 1.0.0 ; README mis à jour (install scopé + service systemd)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Johan LEROY
2026-06-17 13:53:30 +02:00
parent 416e5577cb
commit c78571af07
10 changed files with 228 additions and 21 deletions

View File

@@ -40,8 +40,17 @@ A single Node.js daemon you run on your dev machine (`npx git-arboretum`), servi
### Run it (recommended)
Arboretum is published to a private Gitea npm registry. Point the `@johanleroy` scope at it once per machine — add to `~/.npmrc`:
```
@johanleroy:registry=https://git.lidge.fr/api/packages/johanleroy/npm/
//git.lidge.fr/api/packages/johanleroy/npm/:_authToken=<your-gitea-token>
```
(The `_authToken` line is only needed if the package is private.) Then run it from anywhere:
```bash
npx git-arboretum
npx @johanleroy/git-arboretum
```
On first start, Arboretum prints a one-time **access token** and the URL to open:
@@ -89,13 +98,45 @@ tailscale serve --bg 7317
Then start Arboretum allowing your tailnet origin (the strict Origin check needs to know about it):
```bash
npx git-arboretum --allow-origin https://<machine>.<tailnet>.ts.net
npx @johanleroy/git-arboretum --allow-origin https://<machine>.<tailnet>.ts.net
```
Open `https://<machine>.<tailnet>.ts.net` from any device on your tailnet. **Web Push requires HTTPS**, so Tailscale Serve (or another HTTPS front) is also what enables mobile notifications. On **iOS**, install the app to your home screen first, then allow notifications.
> ⚠️ A web terminal is remote code execution **by design**. Never expose Arboretum directly to the public internet.
## Running it as a background service
For a daemon that survives logout and restarts on boot, run it under a **systemd user service**. Install a pinned version globally (`npm i -g @johanleroy/git-arboretum`), then create `~/.config/systemd/user/arboretum.service`:
```ini
[Unit]
Description=Arboretum — git worktree & Claude Code dashboard
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=%h/.local/bin/arboretum --port 7317 --allow-origin https://MACHINE.TAILNET.ts.net
Restart=on-failure
RestartSec=5
KillSignal=SIGTERM
TimeoutStopSec=10
Environment=NODE_ENV=production
[Install]
WantedBy=default.target
```
```bash
which arboretum # adjust ExecStart to the real path if needed
systemctl --user daemon-reload
systemctl --user enable --now arboretum
loginctl enable-linger "$USER" # start the service at boot, without an open session
journalctl --user -u arboretum -f # logs
```
> The one-time **access token is printed only on the very first run** (empty database). When running as a service, capture it from `journalctl`, or do one manual run before enabling the service. The token is hashed and never shown again.
## Configuration
All options are CLI flags:
@@ -141,7 +182,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), `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), and `@arboretum/web` (the Vue 3 SPA).
```bash
npm run build # build shared → server → web (order matters)