diff --git a/packages/cli/src/acp/service.ts b/packages/cli/src/acp/service.ts index 4e7db628a9f..6e22c7101c8 100644 --- a/packages/cli/src/acp/service.ts +++ b/packages/cli/src/acp/service.ts @@ -422,8 +422,7 @@ async function loadCatalog(client: OpenCodeClient, cwd: string): Promise variant.id === "default")?.id ?? defaultModel.variants[0]?.id, + variant: defaultModel.variants.find((variant) => variant.id === "default")?.id, }, modes: agents.map((agent) => ({ id: agent.id, name: agent.name, description: agent.description })), defaultModeID: defaultAgent.id, diff --git a/packages/cli/test/acp/service-lifecycle.test.ts b/packages/cli/test/acp/service-lifecycle.test.ts index 2fc39b778ce..62e933e3685 100644 --- a/packages/cli/test/acp/service-lifecycle.test.ts +++ b/packages/cli/test/acp/service-lifecycle.test.ts @@ -3,6 +3,38 @@ import type { SessionConfigOption } from "@agentclientprotocol/sdk" import { makeACPFixture, makeSession, secondModel } from "./service-fixture" describe("acp service lifecycle", () => { + test("does not persist the first catalog variant when no explicit default exists", async () => { + const model = { ...secondModel, variants: [{ id: "none" }, { id: "high" }] } + await using fixture = makeACPFixture({ + models: [model], + defaultModel: model, + fetch(request) { + if (request.method === "POST" && request.path === "/api/session") { + return Response.json({ + data: makeSession("ses_default_variant", { + model: { providerID: model.providerID, id: model.id }, + }), + }) + } + return undefined + }, + }) + + const created = await fixture.service.newSession({ cwd: "/workspace", mcpServers: [] }) + + expect(fixture.requests).toContainEqual({ + method: "POST", + path: "/api/session", + query: {}, + body: { + location: { directory: "/workspace" }, + agent: "build", + model: { providerID: "test", id: "second-model" }, + }, + }) + expect(currentValue(created, "effort")).toBe("none") + }) + test("loads and forks with paginated replay while resume does not replay", async () => { await using fixture = makeACPFixture({ fetch(request) {