From 59c5ab6fe15a2d9188ad66769da42f109b2c7a52 Mon Sep 17 00:00:00 2001 From: Mr-Neutr0n <64578610+Mr-Neutr0n@users.noreply.github.com> Date: Tue, 10 Feb 2026 11:00:30 +0530 Subject: [PATCH] fix(opencode): set session status before async operations Set SessionStatus to busy before fire-and-forget in prompt_async so clients see the correct status immediately. Also add a null check for Agent.get() in createUserMessage to prevent crashes when an invalid agent name is provided. Closes #12860 --- packages/opencode/src/server/routes/session.ts | 6 +++++- packages/opencode/src/session/prompt.ts | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/server/routes/session.ts b/packages/opencode/src/server/routes/session.ts index 82e6f3121bf7..29d07be259a1 100644 --- a/packages/opencode/src/server/routes/session.ts +++ b/packages/opencode/src/server/routes/session.ts @@ -762,7 +762,11 @@ export const SessionRoutes = lazy(() => return stream(c, async () => { const sessionID = c.req.valid("param").sessionID const body = c.req.valid("json") - SessionPrompt.prompt({ ...body, sessionID }) + SessionStatus.set(sessionID, { type: "busy" }) + SessionPrompt.prompt({ ...body, sessionID }).catch((error) => { + log.error("prompt_async failed", { sessionID, error }) + SessionStatus.set(sessionID, { type: "idle" }) + }) }) }, ) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index d7f73b4f6097..a8bd9da17add 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -851,7 +851,10 @@ export namespace SessionPrompt { } async function createUserMessage(input: PromptInput) { - const agent = await Agent.get(input.agent ?? (await Agent.defaultAgent())) + const agentName = input.agent ?? (await Agent.defaultAgent()) + const agent = await Agent.get(agentName) + if (!agent) throw new Error(`Agent not found: "${agentName}"`) + const model = input.model ?? agent.model ?? (await lastModel(input.sessionID)) const full =