From dbe9fd00b773d4623f1cd6c1b488e09602a7e925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Gu=C5=A1i=C4=87?= Date: Tue, 14 Oct 2025 00:37:35 +0200 Subject: [PATCH] fix: make shell more robust (#3051) --- packages/opencode/src/session/prompt.ts | 50 +++++++++++++++++++------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 0ccb208c..1caa0674 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1290,20 +1290,46 @@ export namespace SessionPrompt { const shell = process.env["SHELL"] ?? "bash" const shellName = path.basename(shell) - const scripts: Record = { - nu: input.command, - fish: `eval "${input.command}"`, + const invocations: Record = { + nu: { + args: ["-c", input.command], + }, + fish: { + args: ["-c", input.command], + }, + zsh: { + args: [ + "-c", + "-l", + ` + [[ -f ~/.zshenv ]] && source ~/.zshenv >/dev/null 2>&1 || true + [[ -f "\${ZDOTDIR:-$HOME}/.zshrc" ]] && source "\${ZDOTDIR:-$HOME}/.zshrc" >/dev/null 2>&1 || true + ${input.command} + ` + ], + }, + bash: { + args: [ + "-c", + "-l", + ` + [[ -f ~/.bashrc ]] && source ~/.bashrc >/dev/null 2>&1 || true + ${input.command} + `, + ], + }, + // Fallback: any shell that doesn't match those above + "": { + args: [ + "-c", + "-l", + `${input.command}`, + ], + }, } - const script = - scripts[shellName] ?? - `[[ -f ~/.zshenv ]] && source ~/.zshenv >/dev/null 2>&1 || true - [[ -f "\${ZDOTDIR:-$HOME}/.zshrc" ]] && source "\${ZDOTDIR:-$HOME}/.zshrc" >/dev/null 2>&1 || true - [[ -f ~/.bashrc ]] && source ~/.bashrc >/dev/null 2>&1 || true - eval "${input.command}"` - - const isFishOrNu = shellName === "fish" || shellName === "nu" - const args = isFishOrNu ? ["-c", script] : ["-c", "-l", script] + const matchingInvocation = invocations[shellName] ?? invocations[""]; + const args = matchingInvocation?.args const proc = spawn(shell, args, { cwd: Instance.directory,