diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index de62788200b..2227d8c270b 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -422,6 +422,23 @@ export namespace SessionPrompt { assistantMessage.time.completed = Date.now() await Session.updateMessage(assistantMessage) if (result && part.state.status === "running") { + // Check if the subagent is in a retry state + if (result.metadata?.status?.type === "retry") { + // Propagate the retry status to the primary agent + SessionStatus.set(sessionID, { + type: "retry", + attempt: result.metadata.status.attempt, + message: `Subagent retrying: ${result.metadata.status.message}`, + next: result.metadata.status.next, + }) + log.info("subagent retry detected", { + sessionID, + subagentSessionID: result.metadata.sessionId, + attempt: result.metadata.status.attempt, + message: result.metadata.status.message, + }) + } + await Session.updatePart({ ...part, state: { diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts index 170d4448088..5ebd33b5204 100644 --- a/packages/opencode/src/tool/task.ts +++ b/packages/opencode/src/tool/task.ts @@ -11,6 +11,7 @@ import { iife } from "@/util/iife" import { defer } from "@/util/defer" import { Config } from "../config/config" import { PermissionNext } from "@/permission/next" +import { SessionStatus } from "../session/status" const parameters = z.object({ description: z.string().describe("A short (3-5 words) description of the task"), @@ -173,6 +174,9 @@ export const TaskTool = Tool.define("task", async (ctx) => { })) const text = result.parts.findLast((x) => x.type === "text")?.text ?? "" + // Get the current status of the subagent session + const subagentStatus = SessionStatus.get(session.id) + const output = text + "\n\n" + ["", `session_id: ${session.id}`, ""].join("\n") return { @@ -180,6 +184,7 @@ export const TaskTool = Tool.define("task", async (ctx) => { metadata: { summary, sessionId: session.id, + status: subagentStatus, }, output, }