From 066b4b805f9d2e99b8b4c6cc1e1a9d2f8128f3bd Mon Sep 17 00:00:00 2001 From: MagMueller Date: Tue, 28 Jul 2026 11:53:43 -0700 Subject: [PATCH] fix(cli): clear recovered provider errors --- packages/opencode/src/cli/cmd/run.ts | 15 +++++---- .../opencode/test/cli/run/run-process.test.ts | 32 +++++++++++++++++++ 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/packages/opencode/src/cli/cmd/run.ts b/packages/opencode/src/cli/cmd/run.ts index 4f5cc80584..892357a1fb 100644 --- a/packages/opencode/src/cli/cmd/run.ts +++ b/packages/opencode/src/cli/cmd/run.ts @@ -702,14 +702,15 @@ export const RunCommand = effectCmd({ if ( event.type === "message.updated" && event.properties.sessionID === sessionID && - event.properties.info.role === "assistant" && - args.format !== "json" && - toggles.get("start") !== true + event.properties.info.role === "assistant" ) { - UI.empty() - UI.println(`> ${event.properties.info.agent} · ${event.properties.info.modelID}`) - UI.empty() - toggles.set("start", true) + if (event.properties.info.finish && !event.properties.info.error) error = undefined + if (args.format !== "json" && toggles.get("start") !== true) { + UI.empty() + UI.println(`> ${event.properties.info.agent} · ${event.properties.info.modelID}`) + UI.empty() + toggles.set("start", true) + } } if (event.type === "message.part.updated") { diff --git a/packages/opencode/test/cli/run/run-process.test.ts b/packages/opencode/test/cli/run/run-process.test.ts index bd5847e272..6a84acf2bc 100644 --- a/packages/opencode/test/cli/run/run-process.test.ts +++ b/packages/opencode/test/cli/run/run-process.test.ts @@ -241,6 +241,38 @@ describe("opencode run (non-interactive subprocess)", () => { 60_000, ) + cliIt.concurrent( + "exits 0 when compaction recovers a provider size error", + ({ llm, opencode }) => + Effect.gen(function* () { + yield* llm.error(413, { + error: { type: "request_too_large", message: "Request exceeds the maximum size" }, + }) + yield* llm.text("compacted history") + yield* llm.text("recovered output") + + const result = yield* opencode.run("recover after overflow", { + format: "json", + env: { OPENCODE_DISABLE_AUTOCOMPACT: "0" }, + }) + + opencode.expectExit(result, 0) + const events = opencode.parseJsonEvents(result.stdout) + expect(events.some((event) => event.type === "error")).toBe(true) + expect( + events.some( + (event) => + event.type === "text" && + typeof event.part === "object" && + event.part !== null && + "text" in event.part && + event.part.text === "recovered output", + ), + ).toBe(true) + }), + 60_000, + ) + cliIt.concurrent( "rejects requested permissions by default and allows them with the dangerous flag", ({ home, llm, opencode }) =>