From 054c2bffc6dd79067150c74c00a9b28d9bf603e8 Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Wed, 22 Jul 2026 10:59:55 +0200 Subject: [PATCH] fix: Map priority mode to fast Closes #285 --- src/CodexAcpClient.ts | 9 +++++---- src/CodexAcpServer.ts | 5 +++-- src/FastModeConfig.ts | 6 ++++++ .../CodexACPAgent/fast-mode-config.test.ts | 16 +++++++++++++++- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/CodexAcpClient.ts b/src/CodexAcpClient.ts index 0c7af207..419fa47e 100644 --- a/src/CodexAcpClient.ts +++ b/src/CodexAcpClient.ts @@ -44,6 +44,7 @@ import packageJson from "../package.json"; import type {AuthenticationStatusResponse} from "./AcpExtensions"; import {createCodexCollaborationMode} from "./CollaborationModeConfig"; import type {ModeKind} from "./app-server/ModeKind"; +import type {SupportedServiceTier} from "./FastModeConfig"; /** * Well-known provider id for the client-configurable custom LLM gateway. @@ -345,7 +346,7 @@ export class CodexAcpClient { models: codexModels, collaborationMode: this.getCollaborationMode(response.thread.id), modelProvider: response.modelProvider, - currentServiceTier: response.serviceTier as ServiceTier ?? null, + currentServiceTier: response.serviceTier as SupportedServiceTier ?? null, additionalDirectories, } } @@ -373,7 +374,7 @@ export class CodexAcpClient { models: codexModels, collaborationMode: this.getCollaborationMode(response.thread.id), modelProvider: response.modelProvider, - currentServiceTier: response.serviceTier as ServiceTier ?? null, + currentServiceTier: response.serviceTier as SupportedServiceTier ?? null, thread: historyResponse.thread, additionalDirectories, }; @@ -400,7 +401,7 @@ export class CodexAcpClient { models: codexModels, collaborationMode: this.getCollaborationMode(response.thread.id), modelProvider: response.modelProvider, - currentServiceTier: response.serviceTier as ServiceTier ?? null, + currentServiceTier: response.serviceTier as SupportedServiceTier ?? null, additionalDirectories, }; } @@ -899,7 +900,7 @@ export type SessionMetadata = { models: Model[], collaborationMode: ModeKind, modelProvider?: string | null, - currentServiceTier?: ServiceTier | null, + currentServiceTier?: SupportedServiceTier | null, additionalDirectories: string[], } diff --git a/src/CodexAcpServer.ts b/src/CodexAcpServer.ts index d911342b..a0f818b0 100644 --- a/src/CodexAcpServer.ts +++ b/src/CodexAcpServer.ts @@ -75,6 +75,7 @@ import { FAST_MODE_ON, modelSupportsFast, resolveFastServiceTier, + serviceTierEnablesFast, } from "./FastModeConfig"; import packageJson from "../package.json"; import {isJetBrains2026_1Client} from "./JBUtils"; @@ -460,7 +461,7 @@ export class CodexAcpServer { authProvider: authProvider, cwd: request.cwd, additionalDirectories: sessionMetadata.additionalDirectories, - fastModeEnabled: sessionMetadata.currentServiceTier === "fast", + fastModeEnabled: serviceTierEnablesFast(sessionMetadata.currentServiceTier), currentModelSupportsFast: currentModelSupportsFast, sessionMcpServers: sessionMcpServers, terminalOutputMode: this.terminalOutputMode, @@ -1302,7 +1303,7 @@ export class CodexAcpServer { authProvider: authProvider, cwd: request.cwd, additionalDirectories: sessionMetadata.additionalDirectories, - fastModeEnabled: sessionMetadata.currentServiceTier === "fast", + fastModeEnabled: serviceTierEnablesFast(sessionMetadata.currentServiceTier), currentModelSupportsFast: currentModelSupportsFast, sessionMcpServers: sessionMcpServers, terminalOutputMode: this.terminalOutputMode, diff --git a/src/FastModeConfig.ts b/src/FastModeConfig.ts index 8e681c24..6fce81fa 100644 --- a/src/FastModeConfig.ts +++ b/src/FastModeConfig.ts @@ -3,6 +3,8 @@ import type * as acp from "@agentclientprotocol/sdk"; import type {ServiceTier} from "./app-server"; import type {Model} from "./app-server/v2"; +export type SupportedServiceTier = ServiceTier | "priority"; + export const FAST_MODE_CONFIG_ID = "fast-mode"; export const FAST_MODE_CATEGORY = "model_config"; export const FAST_MODE_ON = "on"; @@ -14,6 +16,10 @@ export function modelSupportsFast(model: Model | undefined): boolean { return model?.additionalSpeedTiers?.includes("fast") ?? false; } +export function serviceTierEnablesFast(serviceTier: SupportedServiceTier | null | undefined): boolean { + return serviceTier === "fast" || serviceTier === "priority"; +} + export function resolveFastServiceTier(fastModeEnabled: boolean, currentModelSupportsFast: boolean): ServiceTier | null { return fastModeEnabled && currentModelSupportsFast ? "fast" : null; } diff --git a/src/__tests__/CodexACPAgent/fast-mode-config.test.ts b/src/__tests__/CodexACPAgent/fast-mode-config.test.ts index 6007d529..86c82a26 100644 --- a/src/__tests__/CodexACPAgent/fast-mode-config.test.ts +++ b/src/__tests__/CodexACPAgent/fast-mode-config.test.ts @@ -24,7 +24,7 @@ describe("Fast mode session config", () => { }; async function createSession( - currentServiceTier: "fast" | "flex" | null = null, + currentServiceTier: "fast" | "priority" | "flex" | null = null, clientInfo: acp.Implementation | null = null, clientCapabilities?: acp.ClientCapabilities, ) { @@ -106,6 +106,20 @@ describe("Fast mode session config", () => { expect(codexAcpAgent.getSessionState("session-id").fastModeEnabled).toBe(true); }); + it("initializes Fast mode as On when the app-server session tier is priority", async () => { + const {fixture, response, codexAcpAgent} = await createSession("priority"); + const turnStartSpy = mockPromptTurn(fixture, "session-id"); + + expect(response.configOptions).toContainEqual(createFastModeConfigOption(true)); + expect(codexAcpAgent.getSessionState("session-id").fastModeEnabled).toBe(true); + + await codexAcpAgent.prompt({sessionId: "session-id", prompt: [{type: "text", text: "test"}]}); + + expect(turnStartSpy).toHaveBeenCalledWith(expect.objectContaining({ + serviceTier: "fast", + })); + }); + it("omits Fast mode config options for JetBrains 2026.1 IntelliJ clients", async () => { const {response} = await createSession(null, { name: "JetBrains.WebStorm",