diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 3eec9ed4a00a..d9c587fbdd25 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1511,6 +1511,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the env: { ...process.env, ...shellEnv.env, + OPENCODE_SESSION_ID: input.sessionID, TERM: "dumb", }, }) diff --git a/packages/opencode/src/tool/bash.ts b/packages/opencode/src/tool/bash.ts index 67559b78c085..56c1bc170b65 100644 --- a/packages/opencode/src/tool/bash.ts +++ b/packages/opencode/src/tool/bash.ts @@ -170,6 +170,7 @@ export const BashTool = Tool.define("bash", async () => { env: { ...process.env, ...shellEnv.env, + OPENCODE_SESSION_ID: ctx.sessionID, }, stdio: ["ignore", "pipe", "pipe"], detached: process.platform !== "win32", diff --git a/packages/opencode/test/tool/bash.test.ts b/packages/opencode/test/tool/bash.test.ts index fd03b7f9803c..2b530c151fef 100644 --- a/packages/opencode/test/tool/bash.test.ts +++ b/packages/opencode/test/tool/bash.test.ts @@ -37,6 +37,25 @@ describe("tool.bash", () => { }, }) }) + + test("injects session id into env", async () => { + await Instance.provide({ + directory: projectRoot, + fn: async () => { + const bash = await BashTool.init() + const testCtx = { ...ctx, sessionID: "session-env-123" } + const result = await bash.execute( + { + command: "echo $OPENCODE_SESSION_ID", + description: "Echo session id", + }, + testCtx, + ) + expect(result.metadata.exit).toBe(0) + expect(result.metadata.output).toContain("session-env-123") + }, + }) + }) }) describe("tool.bash permissions", () => {