Skip to content

Commit 9195f8c

Browse files
fix: disable session_config in JB IDEs v2026.1 (#179)
1 parent feb9797 commit 9195f8c

3 files changed

Lines changed: 94 additions & 4 deletions

File tree

src/CodexAcpServer.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import {
4242
resolveFastServiceTier,
4343
} from "./FastModeConfig";
4444
import packageJson from "../package.json";
45+
import {isJetBrains2026_1Client} from "./JBUtils";
4546

4647
export interface SessionState {
4748
sessionId: string,
@@ -90,6 +91,7 @@ export class CodexAcpServer implements acp.Agent {
9091
private readonly defaultAuthRequest: CodexAuthRequest | null;
9192
private readonly getExitCode: () => number | null;
9293
private readonly availableCommands: CodexCommands;
94+
private clientInfo: acp.Implementation | null;
9395

9496
private readonly sessions: Map<string, SessionState>;
9597
private readonly pendingMcpStartupSessions: Map<string, PendingMcpStartupSession>;
@@ -116,6 +118,7 @@ export class CodexAcpServer implements acp.Agent {
116118
this.codexAcpClient = codexAcpClient;
117119
this.defaultAuthRequest = defaultAuthRequest ?? null;
118120
this.getExitCode = getExitCode ?? (() => null);
121+
this.clientInfo = null;
119122
this.availableCommands = new CodexCommands(
120123
connection,
121124
codexAcpClient,
@@ -127,6 +130,7 @@ export class CodexAcpServer implements acp.Agent {
127130
_params: acp.InitializeRequest,
128131
): Promise<acp.InitializeResponse> {
129132
logger.log("Initialize request received");
133+
this.clientInfo = _params.clientInfo ?? null;
130134
await this.runWithProcessCheck(() => this.codexAcpClient.initialize(_params));
131135
return {
132136
protocolVersion: acp.PROTOCOL_VERSION,
@@ -382,7 +386,7 @@ export class CodexAcpServer implements acp.Agent {
382386
return {
383387
models: modelState,
384388
modes: modeState,
385-
configOptions: this.createSessionConfigOptions(this.getSessionState(sessionId)),
389+
...this.createSessionConfigOptionsResponse(this.getSessionState(sessionId)),
386390
};
387391
}
388392

@@ -398,7 +402,7 @@ export class CodexAcpServer implements acp.Agent {
398402
return {
399403
models: modelState,
400404
modes: modeState,
401-
configOptions: this.createSessionConfigOptions(this.getSessionState(sessionId)),
405+
...this.createSessionConfigOptionsResponse(this.getSessionState(sessionId)),
402406
};
403407
}
404408

@@ -458,7 +462,7 @@ export class CodexAcpServer implements acp.Agent {
458462
sessionId: sessionId,
459463
models: modelState,
460464
modes: modeState,
461-
configOptions: this.createSessionConfigOptions(this.getSessionState(sessionId)),
465+
...this.createSessionConfigOptionsResponse(this.getSessionState(sessionId)),
462466
};
463467
}
464468

@@ -567,6 +571,22 @@ export class CodexAcpServer implements acp.Agent {
567571
];
568572
}
569573

574+
private createSessionConfigOptionsResponse(sessionState: SessionState): {
575+
configOptions?: Array<acp.SessionConfigOption>;
576+
} {
577+
if (!this.isSessionConfigEnabled()) {
578+
return {};
579+
}
580+
return {
581+
configOptions: this.createSessionConfigOptions(sessionState),
582+
};
583+
}
584+
585+
private isSessionConfigEnabled(): boolean {
586+
// Temporarily disabled for JB IDEs 2026.1 due to issues in session_config (LLM-28118)
587+
return !isJetBrains2026_1Client(this.clientInfo);
588+
}
589+
570590
private publishAvailableCommandsAsync(sessionId: string) {
571591
void this.availableCommands.publish(sessionId);
572592
}

src/JBUtils.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import type * as acp from "@agentclientprotocol/sdk";
2+
3+
export function isJetBrains2026_1Client(clientInfo: acp.Implementation | null): boolean {
4+
if (!clientInfo) {
5+
return false;
6+
}
7+
8+
const platform = clientInfo._meta?.["platform"];
9+
const isIntelliJPlatform = platform === "intellij";
10+
const isJetBrainsClient = clientInfo.name.startsWith("JetBrains");
11+
return (isIntelliJPlatform || isJetBrainsClient) && clientInfo.version.startsWith("2026.1");
12+
}

src/__tests__/CodexACPAgent/fast-mode-config.test.ts

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {describe, expect, it, vi} from "vitest";
2+
import * as acp from "@agentclientprotocol/sdk";
23
import {
34
createCodexMockTestFixture,
45
createTestModel,
@@ -13,7 +14,10 @@ import {
1314
} from "../../FastModeConfig";
1415

1516
describe("Fast mode session config", () => {
16-
async function createSession(currentServiceTier: "fast" | "flex" | null = null) {
17+
async function createSession(
18+
currentServiceTier: "fast" | "flex" | null = null,
19+
clientInfo: acp.Implementation | null = null
20+
) {
1721
const fixture = createCodexMockTestFixture();
1822
const codexAcpAgent = fixture.getCodexAcpAgent();
1923
const codexAcpClient = fixture.getCodexAcpClient();
@@ -31,6 +35,11 @@ describe("Fast mode session config", () => {
3135
currentServiceTier,
3236
});
3337

38+
await codexAcpAgent.initialize({
39+
protocolVersion: acp.PROTOCOL_VERSION,
40+
clientInfo,
41+
});
42+
3443
const response = await codexAcpAgent.newSession({cwd: "/test/cwd", mcpServers: []});
3544
return {fixture, codexAcpAgent, codexAcpClient, response};
3645
}
@@ -58,6 +67,55 @@ describe("Fast mode session config", () => {
5867
expect(codexAcpAgent.getSessionState("session-id").fastModeEnabled).toBe(true);
5968
});
6069

70+
it("omits Fast mode config options for JetBrains 2026.1 IntelliJ clients", async () => {
71+
const {response} = await createSession(null, {
72+
name: "JetBrains.WebStorm",
73+
version: "2026.1.1",
74+
title: "WebStorm 2026.1.1",
75+
_meta: {
76+
platform: "intellij",
77+
},
78+
});
79+
80+
expect(response.configOptions).toBeUndefined();
81+
});
82+
83+
it("omits Fast mode config options for JetBrains 2026.1 clients by name", async () => {
84+
const {response} = await createSession(null, {
85+
name: "JetBrains.IDE",
86+
version: "2026.1",
87+
title: "JetBrains IDE",
88+
});
89+
90+
expect(response.configOptions).toBeUndefined();
91+
});
92+
93+
it("keeps Fast mode config options for JetBrains clients outside 2026.1", async () => {
94+
const {response} = await createSession(null, {
95+
name: "JetBrains.WebStorm",
96+
version: "2026.2.0",
97+
title: "WebStorm 2026.2.0",
98+
_meta: {
99+
platform: "intellij",
100+
},
101+
});
102+
103+
expect(response.configOptions).toEqual([createFastModeConfigOption(false)]);
104+
});
105+
106+
it("keeps Fast mode config options for non-JetBrains 2026.1 clients", async () => {
107+
const {response} = await createSession(null, {
108+
name: "VSCode",
109+
version: "2026.1.1",
110+
title: "VS Code",
111+
_meta: {
112+
platform: "vscode",
113+
},
114+
});
115+
116+
expect(response.configOptions).toEqual([createFastModeConfigOption(false)]);
117+
});
118+
61119
it("toggles Fast mode through session config options", async () => {
62120
const {codexAcpAgent} = await createSession();
63121

0 commit comments

Comments
 (0)