diff --git a/apps/harness/Dockerfile b/apps/harness/Dockerfile index 931d20d..d65c42f 100644 --- a/apps/harness/Dockerfile +++ b/apps/harness/Dockerfile @@ -42,6 +42,8 @@ RUN apk add --no-cache git github-cli curl ca-certificates RUN npm install -g @anthropic-ai/claude-code @openai/codex RUN curl -fsSL https://opencode.ai/install | sh || \ echo "WARN: opencode install failed, skipping" +# Ensure opencode is on PATH (installer puts it in ~/.local/bin) +RUN if [ -f /root/.local/bin/opencode ]; then ln -s /root/.local/bin/opencode /usr/local/bin/opencode; fi # MCP servers: Gitea (Go binary from builder stage) COPY --from=gitea-mcp-builder /usr/local/bin/gitea-mcp /usr/local/bin/gitea-mcp diff --git a/apps/harness/src/lib/agent-env.ts b/apps/harness/src/lib/agent-env.ts index 3de7bc3..364e25f 100644 --- a/apps/harness/src/lib/agent-env.ts +++ b/apps/harness/src/lib/agent-env.ts @@ -14,6 +14,12 @@ export async function buildAgentEnv( ): Promise { const env: NodeJS.ProcessEnv = { ...process.env, TERM: "xterm-256color" }; + // Ensure global bin paths are available (npm -g, opencode installer) + const path = env.PATH || "/usr/local/bin:/usr/bin:/bin"; + if (!path.includes("/usr/local/bin")) { + env.PATH = `/usr/local/bin:${path}`; + } + const providersToInject = config.runtime === "opencode" ? Object.keys(PROVIDER_ENV_VARS)