From 52488d9ba92a0f47dc6f0d0b99241365d2579b28 Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Tue, 23 Jun 2026 12:26:53 +0200 Subject: [PATCH 1/5] Add missing TypeScript semicolons --- src/CodexAcpClient.ts | 4 ++-- src/CodexAcpServer.ts | 10 +++++----- src/CodexJsonRpcConnection.ts | 2 +- src/__tests__/CodexACPAgent/CodexAcpClient.test.ts | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/CodexAcpClient.ts b/src/CodexAcpClient.ts index 8db93a13..a1e34766 100644 --- a/src/CodexAcpClient.ts +++ b/src/CodexAcpClient.ts @@ -107,7 +107,7 @@ export class CodexAcpClient { case "gateway": if (!authRequest._meta) throw RequestError.invalidRequest(); - const gatewaySettings = authRequest._meta["gateway"] + const gatewaySettings = authRequest._meta["gateway"]; if (!gatewaySettings) throw RequestError.invalidRequest(); const baseUrl = gatewaySettings.baseUrl; @@ -127,7 +127,7 @@ export class CodexAcpClient { http_headers: headers, wire_api: "responses" } - } + }; // Early return: model provider information will be sent to Codex later during the session creation return true; diff --git a/src/CodexAcpServer.ts b/src/CodexAcpServer.ts index d37eac17..52a4930d 100644 --- a/src/CodexAcpServer.ts +++ b/src/CodexAcpServer.ts @@ -323,7 +323,7 @@ export class CodexAcpServer { let sessionMetadata: SessionMetadata; let resumeSubscribed = false; if ("sessionId" in request) { - logger.log(`Resume existing session: ${request.sessionId}...`) + logger.log(`Resume existing session: ${request.sessionId}...`); try { sessionMetadata = await this.runWithProcessCheck(() => this.codexAcpClient.resumeSession(request, () => { @@ -337,7 +337,7 @@ export class CodexAcpServer { throw err; } } else { - logger.log(`Create new session...`) + logger.log(`Create new session...`); sessionMetadata = await this.runWithProcessCheck(() => this.codexAcpClient.newSession(request)); } @@ -378,7 +378,7 @@ export class CodexAcpServer { currentModelSupportsFast: currentModelSupportsFast, sessionMcpServers: sessionMcpServers, terminalOutputMode: this.terminalOutputMode, - } + }; this.sessions.set(sessionId, sessionState); resumeSubscribed = false; @@ -1318,7 +1318,7 @@ export class CodexAcpServer { _meta: this.buildQuotaMeta(sessionState), }; } - const error = eventHandler.getFailure() + const error = eventHandler.getFailure(); if (error) { // noinspection ExceptionCaughtLocallyJS throw error; @@ -1420,7 +1420,7 @@ export class CodexAcpServer { }; } - const error = eventHandler.getFailure() + const error = eventHandler.getFailure(); if (error) { // noinspection ExceptionCaughtLocallyJS throw error; diff --git a/src/CodexJsonRpcConnection.ts b/src/CodexJsonRpcConnection.ts index 343845ba..0f79117a 100644 --- a/src/CodexJsonRpcConnection.ts +++ b/src/CodexJsonRpcConnection.ts @@ -15,7 +15,7 @@ export interface CodexConnection { export function startCodexConnection(codexPath?: string, env?: NodeJS.ProcessEnv): CodexConnection { const spawnEnv = env ?? process.env; - let codex: ChildProcessWithoutNullStreams + let codex: ChildProcessWithoutNullStreams; if (codexPath) { codex = process.platform === 'win32' ? spawn(`"${codexPath}" app-server`, { shell: true, env: spawnEnv }) diff --git a/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts b/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts index 4e0aaa27..eca68497 100644 --- a/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts +++ b/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts @@ -56,10 +56,10 @@ describe('ACP server test', { timeout: 40_000 }, () => { keyFixture.clearCodexConnectionDump(); - const authRequest: CodexAuthRequest = { methodId: "api-key", _meta: { "api-key": { apiKey: "TOKEN" }}} + const authRequest: CodexAuthRequest = { methodId: "api-key", _meta: { "api-key": { apiKey: "TOKEN" }}}; await codexAcpAgent.authenticate(authRequest); const newSessionResponse = await codexAcpAgent.newSession({cwd: "", mcpServers: []}); - expect(newSessionResponse.sessionId).toBeDefined() + expect(newSessionResponse.sessionId).toBeDefined(); const transportEvents = keyFixture.getCodexConnectionEvents([...ignoredFields, "upgrade"]); const transportMethods = transportEvents.flatMap(event => "method" in event ? [event.method] : []); @@ -149,8 +149,8 @@ describe('ACP server test', { timeout: 40_000 }, () => { expect(authenticatedResponse).toEqual({type: "gateway", name: "custom-gateway"}); const newSessionResponse = await codexAcpAgent.newSession({cwd: "", mcpServers: []}); - expect(newSessionResponse.sessionId).toBeDefined() - }) + expect(newSessionResponse.sessionId).toBeDefined(); + }); it('should show account in /status for api key auth and hide it for gateway auth', async () => { const authFixture = createTestFixture(); From 5c1f9915aa2271319305e778abe6fe2a40163db9 Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Tue, 23 Jun 2026 12:28:05 +0200 Subject: [PATCH 2/5] Remove unused ACP namespace import --- src/CodexEventHandler.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CodexEventHandler.ts b/src/CodexEventHandler.ts index 105625e3..ab2c1170 100644 --- a/src/CodexEventHandler.ts +++ b/src/CodexEventHandler.ts @@ -4,7 +4,6 @@ import type { ServerNotification } from "./app-server"; import type {SessionState} from "./CodexAcpServer"; -import * as acp from "@agentclientprotocol/sdk"; import {type PlanEntry, RequestError} from "@agentclientprotocol/sdk"; import {ACPSessionConnection, type AcpClientConnection, type UpdateSessionEvent} from "./ACPSessionConnection"; import type { From c7e429d9121a581c44c49e9044129e1d589af3d0 Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Tue, 23 Jun 2026 12:29:10 +0200 Subject: [PATCH 3/5] Remove unused stdin close argument --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 6437a671..64a5caa1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -76,7 +76,7 @@ function startAcpServer() { stderr = (stderr + data.toString()).slice(-maxStderrTailChars); }); - process.stdin.on("close", (chunk: Buffer) => { + process.stdin.on("close", () => { codexConnection.process.stdin.end(); // Kill the codex process if it doesn't exit naturally setTimeout(() => { From 715347115b3acb9e0716342f1a1da330b5db6130 Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Tue, 23 Jun 2026 12:30:35 +0200 Subject: [PATCH 4/5] Clarify release archive and Codex update docs --- readme-dev.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme-dev.md b/readme-dev.md index 587a81c9..d263a0ac 100644 --- a/readme-dev.md +++ b/readme-dev.md @@ -31,7 +31,7 @@ Run from sources Run from binaries -1. Download a `codex-acp-.zip` archive from https://github.com/agentclientprotocol/codex-acp/releases +1. Download a `codex-acp-.zip` archive from https://github.com/agentclientprotocol/codex-acp/releases (`` is one of: `linux`, `darwin`, `win32`) 2. Unzip the archive: ```bash unzip codex-acp-.zip @@ -69,6 +69,6 @@ npm run package:all ### Update supported Codex version -1. Update Codex dependency: `package.json` +1. Update the `@openai/codex` version in `package.json` (under `dependencies`). 2. Regenerate Codex types in `src/app-server/`: `npm run generate-types` 3. Ensure there are no type errors or failed tests: `npm run typecheck` and `npm run test` From 2d8af0b2d76b787dc441f85aff4bfdd97970ca40 Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Tue, 23 Jun 2026 12:31:49 +0200 Subject: [PATCH 5/5] Remove duplicate sed range script pattern --- src/ResponseItemHistoryFallback.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ResponseItemHistoryFallback.ts b/src/ResponseItemHistoryFallback.ts index eb6f7dad..1d2f8f6e 100644 --- a/src/ResponseItemHistoryFallback.ts +++ b/src/ResponseItemHistoryFallback.ts @@ -975,8 +975,7 @@ function sedFileArguments(args: string[]): string[] { } function looksLikeSedRangeScript(arg: string): boolean { - return /^(\d+|\$)?(,(\d+|\$))?[pd]$/.test(arg) - || /^(\d+|\$)?(,(\d+|\$))?p$/.test(arg); + return /^(\d+|\$)?(,(\d+|\$))?[pd]$/.test(arg); } function headTailFileArguments(args: string[]): string[] {