diff --git a/packages/opencode/bin/opencode b/packages/opencode/bin/opencode index 2526b0f76a05..d6801adb1b6b 100755 --- a/packages/opencode/bin/opencode +++ b/packages/opencode/bin/opencode @@ -25,6 +25,10 @@ function bun(dir) { { stdio: "inherit", cwd: dir, + env: { + ...process.env, + OPENCODE_ORIGINAL_CWD: process.cwd(), + }, }, ) if (result.error) { diff --git a/packages/opencode/src/index.ts b/packages/opencode/src/index.ts index 1fa027abf904..8820416bad2d 100644 --- a/packages/opencode/src/index.ts +++ b/packages/opencode/src/index.ts @@ -37,6 +37,14 @@ import { errorMessage } from "./util/error" import { PluginCommand } from "./cli/cmd/plug" import { Heap } from "./cli/heap" +// When launched via the bun fallback in bin/opencode, the subprocess CWD is set +// to the opencode package directory (so ./src/index.ts resolves). The original +// user CWD is passed via OPENCODE_ORIGINAL_CWD. Restore it early so all code +// paths (including process.cwd() calls in CLI handlers) see the correct directory. +if (process.env.OPENCODE_ORIGINAL_CWD) { + process.chdir(process.env.OPENCODE_ORIGINAL_CWD) +} + process.on("unhandledRejection", (e) => { Log.Default.error("rejection", { e: errorMessage(e),