





















@@ -358,4 +358,106 @@ describe("acp setSessionConfigOption bridge behavior", () => {
358358359359sessionStore.clearAllSessionsForTest();
360360});
361+362+it('maps response_usage "inherit" selection to sessions.patch with responseUsage: null', async () => {
363+const sessionStore = createInMemorySessionStore();
364+const connection = createAcpConnection();
365+const request = vi.fn(async (method: string, _params?: unknown) => {
366+if (method === "sessions.list") {
367+return {
368+ts: Date.now(),
369+path: "/tmp/sessions.json",
370+count: 1,
371+defaults: { modelProvider: null, model: null, contextTokens: null },
372+sessions: [
373+{
374+key: "usage-inherit-session",
375+kind: "direct",
376+updatedAt: Date.now(),
377+thinkingLevel: "minimal",
378+modelProvider: "openai",
379+model: "gpt-5.4",
380+responseUsage: "tokens",
381+},
382+],
383+};
384+}
385+if (method === "sessions.patch") {
386+expect(requireRecord(_params, "sessions.patch params")).toMatchObject({
387+key: "usage-inherit-session",
388+responseUsage: null,
389+});
390+}
391+return { ok: true };
392+}) as GatewayClient["request"];
393+const agent = new AcpGatewayAgent(connection, createAcpGateway(request), {
394+ sessionStore,
395+});
396+397+await agent.loadSession(createLoadSessionRequest("usage-inherit-session"));
398+399+const result = await agent.setSessionConfigOption(
400+createSetSessionConfigOptionRequest("usage-inherit-session", "response_usage", "inherit"),
401+);
402+403+// After selecting "inherit", the ACP config option should report "inherit" (unset).
404+expectConfigOption(result.configOptions, "response_usage", { currentValue: "inherit" });
405+expect(
406+(request as unknown as MockCallSource).mock.calls.some(
407+([method]) => method === "sessions.patch",
408+),
409+).toBe(true);
410+411+sessionStore.clearAllSessionsForTest();
412+});
413+414+it('maps response_usage "off" selection to sessions.patch with responseUsage: "off"', async () => {
415+const sessionStore = createInMemorySessionStore();
416+const connection = createAcpConnection();
417+const request = vi.fn(async (method: string, _params?: unknown) => {
418+if (method === "sessions.list") {
419+return {
420+ts: Date.now(),
421+path: "/tmp/sessions.json",
422+count: 1,
423+defaults: { modelProvider: null, model: null, contextTokens: null },
424+sessions: [
425+{
426+key: "usage-off-session",
427+kind: "direct",
428+updatedAt: Date.now(),
429+thinkingLevel: "minimal",
430+modelProvider: "openai",
431+model: "gpt-5.4",
432+},
433+],
434+};
435+}
436+if (method === "sessions.patch") {
437+expect(requireRecord(_params, "sessions.patch params")).toMatchObject({
438+key: "usage-off-session",
439+responseUsage: "off",
440+});
441+}
442+return { ok: true };
443+}) as GatewayClient["request"];
444+const agent = new AcpGatewayAgent(connection, createAcpGateway(request), {
445+ sessionStore,
446+});
447+448+await agent.loadSession(createLoadSessionRequest("usage-off-session"));
449+450+const result = await agent.setSessionConfigOption(
451+createSetSessionConfigOptionRequest("usage-off-session", "response_usage", "off"),
452+);
453+454+expectConfigOption(result.configOptions, "response_usage", { currentValue: "off" });
455+expect(
456+(request as unknown as MockCallSource).mock.calls.some(
457+([method]) => method === "sessions.patch",
458+),
459+).toBe(true);
460+461+sessionStore.clearAllSessionsForTest();
462+});
361463});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。