Migrer l'image vers OpenCode 2 dans le Dockerfile.
Changements
Dockerfile : opencode-ai@1.19.0 → @opencode/cli@2.0.32 (paquet npm publié pour OpenCode 2 ; opencode-ai s'arrête à 1.19.3). Même base node:26-trixie, mêmes n2-soul/better-sqlite3/kubectl. L'ENTRYPOINT reste ["opencode"] volontairement : les déploiements existants passent serve ... au runtime et l'invocation ne change pas.
renovate.json : le custom manager suit désormais @opencode/cli (sinon le pin n'est plus jamais bumpé).
opencode-attach : opencode attach n'existe plus en v2 → le wrapper pointe le client avec --server <url> (placé après la sous-commande quand il y en a une). L'auth reste portée par OPENCODE_SERVER_PASSWORD / OPENCODE_PASSWORD.
README / AGENTS.md : nom du paquet v2, entrypoint, défauts de serve, surface API v2 (/global/health disparu, tout est sous /api/* authentifié), et suppression de OPENCODE_SERVER_USERNAME (le username est toujours opencode en v2).
Build local de l'image (podman, même Dockerfile que la CI) :
Test
Résultat
docker build (install @opencode/cli@2.0.32 sur node:26-trixie)
OK
opencode --version dans l'image
opencode v2.0.32
opencode serve --hostname 0.0.0.0
server listening on http://0.0.0.0:4096
GET /api/info sans credential
401
GET /api/info avec opencode:testpass123
200 ({"version":"2.0.32",...})
Web UI GET /
200
opencode-attach session list --format json (bon mdp)
[]
opencode-attach (mauvais mdp)
Server ... rejected the password
opencode-attach sans argument
TUI v2 attachée au serveur distant
serve sans OPENCODE_SERVER_PASSWORD
mot de passe généré et loggé (serveur jamais sans auth)
hadolint Dockerfile
aucune erreur
Points d'attention hors périmètre
L'API REST v1 est remplacée par v2 : perso/opencode-dispatch (bot.py) appelle /session, /global/health, etc. Il devra être migré séparément — je peux m'en occuper dans une PR dédiée.
opencode-openchamber fait FROM jcabillot/opencode et installe via apt : la base reste Debian (node:26-trixie), donc rien à changer de ce côté.
## Objectif
Migrer l'image vers OpenCode 2 dans le Dockerfile.
## Changements
- **Dockerfile** : `opencode-ai@1.19.0` → `@opencode/cli@2.0.32` (paquet npm publié pour OpenCode 2 ; `opencode-ai` s'arrête à 1.19.3). Même base `node:26-trixie`, mêmes `n2-soul`/`better-sqlite3`/`kubectl`. L'ENTRYPOINT reste `["opencode"]` volontairement : les déploiements existants passent `serve ...` au runtime et l'invocation ne change pas.
- **renovate.json** : le custom manager suit désormais `@opencode/cli` (sinon le pin n'est plus jamais bumpé).
- **opencode-attach** : `opencode attach` n'existe plus en v2 → le wrapper pointe le client avec `--server <url>` (placé après la sous-commande quand il y en a une). L'auth reste portée par `OPENCODE_SERVER_PASSWORD` / `OPENCODE_PASSWORD`.
- **README / AGENTS.md** : nom du paquet v2, entrypoint, défauts de `serve`, surface API v2 (`/global/health` disparu, tout est sous `/api/*` authentifié), et suppression de `OPENCODE_SERVER_USERNAME` (le username est toujours `opencode` en v2).
## Vérifications réelles (binaire v2.0.32 + image construite)
Build local de l'image (podman, même Dockerfile que la CI) :
| Test | Résultat |
|------|----------|
| `docker build` (install `@opencode/cli@2.0.32` sur node:26-trixie) | OK |
| `opencode --version` dans l'image | `opencode v2.0.32` |
| `opencode serve --hostname 0.0.0.0` | `server listening on http://0.0.0.0:4096` |
| `GET /api/info` sans credential | `401` |
| `GET /api/info` avec `opencode:testpass123` | `200` (`{"version":"2.0.32",...}`) |
| Web UI `GET /` | `200` |
| `opencode-attach session list --format json` (bon mdp) | `[]` |
| `opencode-attach` (mauvais mdp) | `Server ... rejected the password` |
| `opencode-attach` sans argument | TUI v2 attachée au serveur distant |
| `serve` sans `OPENCODE_SERVER_PASSWORD` | mot de passe généré et loggé (serveur jamais sans auth) |
| `hadolint Dockerfile` | aucune erreur |
## Points d'attention hors périmètre
- L'API REST v1 est remplacée par v2 : `perso/opencode-dispatch` (`bot.py`) appelle `/session`, `/global/health`, etc. Il devra être migré séparément — je peux m'en occuper dans une PR dédiée.
- `opencode-openchamber` fait `FROM jcabillot/opencode` et installe via `apt` : la base reste Debian (`node:26-trixie`), donc rien à changer de ce côté.
## Docs
- https://opencode.ai/v2/docs/
- https://opencode.ai/v2/docs/migrate-v1/
jcabillot
was assigned by opencodecabilloteu2026-10-17 15:28:44 -04:00
OpenCode 2 publishes its CLI as @opencode/cli (opencode-ai stops at
1.19.x), so install that package and pin it to 2.0.32.
Also fix what the v2 migration invalidates:
- renovate.json: track @opencode/cli instead of opencode-ai, otherwise
the pin is never bumped.
- opencode-attach: `opencode attach` no longer exists in v2. Point the
client at the server with `--server <url>` instead (appended after a
subcommand when one is given); auth still comes from
OPENCODE_SERVER_PASSWORD / OPENCODE_PASSWORD.
- README/AGENTS: v2 package name, entrypoint, serve defaults, API
surface (/global/health is gone, everything lives under authenticated
/api/*), and removal of OPENCODE_SERVER_USERNAME (the username is
always `opencode` in v2).
The entrypoint stays ["opencode"] on purpose: existing deployments pass
`serve ...` at runtime, and OpenCode 2 is invoked the same way.
opencodecabilloteu
requested review from jcabillot 2026-10-17 15:28:45 -04:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Objectif
Migrer l'image vers OpenCode 2 dans le Dockerfile.
Changements
opencode-ai@1.19.0→@opencode/cli@2.0.32(paquet npm publié pour OpenCode 2 ;opencode-ais'arrête à 1.19.3). Même basenode:26-trixie, mêmesn2-soul/better-sqlite3/kubectl. L'ENTRYPOINT reste["opencode"]volontairement : les déploiements existants passentserve ...au runtime et l'invocation ne change pas.@opencode/cli(sinon le pin n'est plus jamais bumpé).opencode attachn'existe plus en v2 → le wrapper pointe le client avec--server <url>(placé après la sous-commande quand il y en a une). L'auth reste portée parOPENCODE_SERVER_PASSWORD/OPENCODE_PASSWORD.serve, surface API v2 (/global/healthdisparu, tout est sous/api/*authentifié), et suppression deOPENCODE_SERVER_USERNAME(le username est toujoursopencodeen v2).Vérifications réelles (binaire v2.0.32 + image construite)
Build local de l'image (podman, même Dockerfile que la CI) :
docker build(install@opencode/cli@2.0.32sur node:26-trixie)opencode --versiondans l'imageopencode v2.0.32opencode serve --hostname 0.0.0.0server listening on http://0.0.0.0:4096GET /api/infosans credential401GET /api/infoavecopencode:testpass123200({"version":"2.0.32",...})GET /200opencode-attach session list --format json(bon mdp)[]opencode-attach(mauvais mdp)Server ... rejected the passwordopencode-attachsans argumentservesansOPENCODE_SERVER_PASSWORDhadolint DockerfilePoints d'attention hors périmètre
perso/opencode-dispatch(bot.py) appelle/session,/global/health, etc. Il devra être migré séparément — je peux m'en occuper dans une PR dédiée.opencode-openchamberfaitFROM jcabillot/opencodeet installe viaapt: la base reste Debian (node:26-trixie), donc rien à changer de ce côté.Docs