diff --git a/packages/adapters/opencode-local/src/server/models.ts b/packages/adapters/opencode-local/src/server/models.ts index aedc1967..94634d86 100644 --- a/packages/adapters/opencode-local/src/server/models.ts +++ b/packages/adapters/opencode-local/src/server/models.ts @@ -21,7 +21,7 @@ function resolveOpenCodeCommand(input: unknown): string { const discoveryCache = new Map(); const VOLATILE_ENV_KEY_PREFIXES = ["PAPERCLIP_", "npm_", "NPM_"] as const; -const VOLATILE_ENV_KEY_EXACT = new Set(["PWD", "OLDPWD", "SHLVL", "_", "TERM_SESSION_ID"]); +const VOLATILE_ENV_KEY_EXACT = new Set(["PWD", "OLDPWD", "SHLVL", "_", "TERM_SESSION_ID", "HOME"]); function dedupeModels(models: AdapterModel[]): AdapterModel[] { const seen = new Set(); @@ -112,7 +112,14 @@ export async function discoverOpenCodeModels(input: { // When the server is started via `runuser -u `, HOME may still // reflect the parent process (e.g. /root), causing OpenCode to miss // provider auth credentials stored under the target user's home. - const resolvedHome = os.userInfo().homedir; + let resolvedHome: string | undefined; + try { + resolvedHome = os.userInfo().homedir || undefined; + } catch { + // os.userInfo() throws a SystemError when the current UID has no + // /etc/passwd entry (e.g. `docker run --user 1234` with a minimal + // image). Fall back to process.env.HOME. + } const runtimeEnv = normalizeEnv(ensurePathInEnv({ ...process.env, ...env, ...(resolvedHome ? { HOME: resolvedHome } : {}) })); const result = await runChildProcess(