From 6939b62c95d4fcb34b41c7b7bbfccad6fac70147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BC=A0=E5=BA=B7Kk?= <35034498+1837620622@users.noreply.github.com> Date: Sat, 11 Jul 2026 11:44:36 +0800 Subject: [PATCH] fix(opencode): defer defaultAgent lookup in session summarize /compact (POST summarize) always called Agent.defaultAgent() before falling back from the last user message agent. When default_agent is a subagent that call throws, so compaction fails silently even though the session already has a valid agent. Only resolve defaultAgent when no user-message agent is present. Closes #29277 --- .../src/server/routes/instance/httpapi/handlers/session.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts b/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts index 662585020a64..0deb733832e0 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts @@ -276,8 +276,11 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session", }) { yield* revertSvc.cleanup(yield* requireSession(ctx.params.sessionID)) const messages = yield* SessionError.mapStorageNotFound(session.messages({ sessionID: ctx.params.sessionID })) - const defaultAgent = yield* agentSvc.defaultAgent() - const currentAgent = messages.findLast((message) => message.info.role === "user")?.info.agent ?? defaultAgent + // Prefer the last user message's agent. Only resolve defaultAgent when + // needed — default_agent configured as a subagent throws, which previously + // aborted /compact even when the session already had a valid agent. + const lastUserAgent = messages.findLast((message) => message.info.role === "user")?.info.agent + const currentAgent = lastUserAgent ?? (yield* agentSvc.defaultAgent()) yield* compactSvc.create({ sessionID: ctx.params.sessionID,