From b46588f247f5f6bb72145260370f4544490a3bf4 Mon Sep 17 00:00:00 2001 From: Devvyn <22340871+opticon454@users.noreply.github.com> Date: Thu, 24 Sep 2026 11:33:00 +0800 Subject: [PATCH] fix(docker): install pnpm in the Compose server image `dsh plugin` spawns a literal `pnpm` with no npm fallback, so the Run menu's "DeepSeek - add a terminal profile" button failed with `dsh: pnpm not found on PATH` (exit 127) on the server image. The agent image already installs pnpm for the same reason (#352). Pin pnpm@12.6.0 in the runtime-writable CLI prefix and note it in the DeepSeek doc. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01GuHtuPiHXdykq9T6rKQJ9n --- .changeset/serverpnpm3.md | 5 +++++ docker/server.Dockerfile | 8 ++++++++ docs/deepseek-integration.md | 4 +++- 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 .changeset/serverpnpm3.md diff --git a/.changeset/serverpnpm3.md b/.changeset/serverpnpm3.md new file mode 100644 index 00000000..86fe7bb7 --- /dev/null +++ b/.changeset/serverpnpm3.md @@ -0,0 +1,5 @@ +--- +"aicodeman": patch +--- + +Install pnpm in the Docker Compose server image. `dsh plugin` spawns a literal `pnpm` with no npm fallback, so the Run menu's "DeepSeek - add a terminal profile" button failed with `dsh: pnpm not found on PATH` in that image. Because this changes `server.Dockerfile`, the in-app updater will ask Compose deployments to rebuild the image (`Update-Codeman.sh`) rather than apply this release in place. diff --git a/docker/server.Dockerfile b/docker/server.Dockerfile index 09b4607a..8e957d26 100644 --- a/docker/server.Dockerfile +++ b/docker/server.Dockerfile @@ -214,11 +214,19 @@ RUN set -eux; \ # system directories for the root part of the start. ENV NPM_CONFIG_PREFIX=/opt/codeman-cli ENV PATH=$PATH:/opt/codeman-cli/bin +# pnpm is not an agent CLI: it is here because `dsh plugin` (DeepSeek Harness, which +# this image leaves to be installed at runtime, see SERVER_INTENTIONAL_OMISSIONS in +# test/docker-agent-image-coverage.test.ts) spawns a literal `pnpm` with no npm +# fallback, so the Run menu's "DeepSeek - add a terminal profile" button failed +# with `dsh: pnpm not found on PATH` (exit 127) on this image. The agent image +# already carries it for the same reason (#352). It lives in the same +# runtime-writable prefix as the CLIs, so a session can update it in place. RUN npm install --global \ @anthropic-ai/claude-code@2.1.258 \ @google/gemini-cli@0.58.0 \ @openai/codex@0.152.1 \ opencode-ai@1.18.26 \ + pnpm@12.6.0 \ && npm cache clean --force # Keep the web server and every local Codeman session unprivileged. PUID and diff --git a/docs/deepseek-integration.md b/docs/deepseek-integration.md index 8232af92..6b4fd61c 100644 --- a/docs/deepseek-integration.md +++ b/docs/deepseek-integration.md @@ -53,7 +53,9 @@ that spawns a literal `pnpm` with no npm fallback, so without one it exits 127 w surfaces that same line as the install error. `npm install -g pnpm` (or `corepack enable pnpm`) is the fix. This is what broke the Docker agent image in [#352](https://github.com/Ark0N/Codeman/issues/352); the image now installs pnpm -alongside `dsh`. +alongside `dsh`. The Compose server image (`docker/server.Dockerfile`) does not +ship `dsh`, since it is installed at runtime, but it does ship pnpm so the UI +button works there too. Codeman's default is `@deepseek-harness-tui/dsh-tui` because it is by a wide margin the most used community TUI, it is MIT, and it implements the status