diff --git a/packages/provider-bridge-acp/src/bridge/bridge.test.ts b/packages/provider-bridge-acp/src/bridge/bridge.test.ts index 3649140..cc16ce7 100644 --- a/packages/provider-bridge-acp/src/bridge/bridge.test.ts +++ b/packages/provider-bridge-acp/src/bridge/bridge.test.ts @@ -581,6 +581,31 @@ afterEach(async () => { }); describe("acp bridge", () => { + it.each([false, true])("issue 4154 preserves later model efforts (reject middle: %s)", async (rejectMiddle) => { + const log = join(workspaceDir, "probes.txt"); + const modelListId = sendModelList({ + agent: { command: process.execPath, args: [resolve(dirname(FAKE_AGENT_PATH), "issue-4154-agent.mjs")] }, + envVars: { REPRO_REQUEST_LOG: log, REPRO_REJECT_MIDDLE: rejectMiddle ? "1" : "0" }, + }); + const response = await waitForResponse(modelListId); + const probed = readFileSync(log, "utf8").trim().split("\n"); + console.error(JSON.stringify({ rejectMiddle, probed, response })); + expect(response.result).toMatchObject({ + models: [ + { id: "probe-a", supportedReasoningEfforts: [ + { reasoningEffort: "low" }, { reasoningEffort: "medium" }, { reasoningEffort: "high" }, + ] }, + { id: "probe-b", supportedReasoningEfforts: rejectMiddle + ? [{ reasoningEffort: "medium" }] + : [{ reasoningEffort: "low" }, { reasoningEffort: "medium" }, { reasoningEffort: "high" }] }, + { id: "probe-c", supportedReasoningEfforts: [ + { reasoningEffort: "low" }, { reasoningEffort: "medium" }, { reasoningEffort: "high" }, + ] }, + ], + }); + expect(probed).toEqual(["probe-a", "probe-b", "probe-c"]); + }); + it("answers initialize and lists grouped models without spawning an agent", async () => { const initializeId = sendRequest("initialize", { protocolVersion: PROVIDER_BRIDGE_PROTOCOL_VERSION,