diff --git a/build.mjs b/build.mjs new file mode 100644 index 00000000..cfd95813 --- /dev/null +++ b/build.mjs @@ -0,0 +1,14 @@ +import { build } from 'esbuild'; + +await build({ + entryPoints: ['src/index.ts'], + bundle: true, + platform: 'node', + format: 'esm', + outfile: 'dist/index.js', + external: ['@openai/codex'], + // Polyfill `require` for CJS modules bundled into ESM output + banner: { + js: "import { createRequire as __createRequire } from 'module'; const require = __createRequire(import.meta.url);", + }, +}); diff --git a/package-lock.json b/package-lock.json index 12a81270..0da3a52d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,32 +1,37 @@ { - "name": "codex-acp", + "name": "@jetbrains/codex-acp", "version": "0.0.31", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "codex-acp", + "name": "@jetbrains/codex-acp", "version": "0.0.31", "license": "ISC", "dependencies": { - "@agentclientprotocol/sdk": "^0.12.0", - "diff": "^8.0.3", - "open": "^11.0.0", - "vscode-jsonrpc": "^8.2.1" + "@openai/codex": "^0.114.0" + }, + "bin": { + "codex-acp": "dist/index.js" }, "devDependencies": { - "@openai/codex": "^0.114.0", + "@agentclientprotocol/sdk": "^0.12.0", "@types/node": "^24.10.1", + "diff": "^8.0.3", + "esbuild": "^0.25.0", "mcp-hello-world": "^1.1.2", + "open": "^11.0.0", "tsx": "^4.20.6", "typescript": "^5.9.3", - "vitest": "^4.0.10" + "vitest": "^4.0.10", + "vscode-jsonrpc": "^8.2.1" } }, "node_modules/@agentclientprotocol/sdk": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-0.12.0.tgz", "integrity": "sha512-V8uH/KK1t7utqyJmTA7y7DzKu6+jKFIXM+ZVouz8E55j8Ej2RV42rEvPKn3/PpBJlliI5crcGk1qQhZ7VwaepA==", + "dev": true, "license": "Apache-2.0", "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" @@ -816,7 +821,6 @@ "version": "0.114.0", "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.114.0.tgz", "integrity": "sha512-HMo8LRR6CtfKkaa28xvFK6eOarmBFTDfsrS9GJtEoaspGGemFok494CpafDspiTZaHZZGHfSUe5SWTUxYq7OaA==", - "dev": true, "license": "Apache-2.0", "bin": { "codex": "bin/codex.js" @@ -841,7 +845,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -859,7 +862,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -877,7 +879,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -895,7 +896,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -913,7 +913,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -931,7 +930,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1530,6 +1528,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, "license": "MIT", "dependencies": { "run-applescript": "^7.0.0" @@ -1687,6 +1686,7 @@ "version": "5.4.0", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", + "dev": true, "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -1703,6 +1703,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -1715,6 +1716,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -1748,6 +1750,7 @@ "version": "8.0.3", "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -2287,6 +2290,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, "license": "MIT", "bin": { "is-docker": "cli.js" @@ -2302,6 +2306,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "dev": true, "license": "MIT", "engines": { "node": ">=20" @@ -2314,6 +2319,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, "license": "MIT", "dependencies": { "is-docker": "^3.0.0" @@ -2339,6 +2345,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -2572,6 +2579,7 @@ "version": "11.0.0", "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", + "dev": true, "license": "MIT", "dependencies": { "default-browser": "^5.4.0", @@ -2685,6 +2693,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "dev": true, "license": "MIT", "engines": { "node": ">=20" @@ -2885,6 +2894,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -3427,6 +3437,7 @@ "version": "8.2.1", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", "integrity": "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" @@ -3476,6 +3487,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.0.tgz", "integrity": "sha512-3sFIGLiaDP7rTO4xh3g+b3AzhYDIUGGywE/WsmqzJWDxus5aJXVnPTNC/6L+r2WzrwXqVOdD262OaO+cEyPMSQ==", + "dev": true, "license": "MIT", "dependencies": { "is-wsl": "^3.1.0", @@ -3492,6 +3504,7 @@ "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 34b43361..d5371c63 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,20 @@ { - "name": "codex-acp", + "name": "@jetbrains/codex-acp", "version": "0.0.31", "description": "", "main": "dist/index.js", + "bin": { + "codex-acp": "dist/index.js" + }, + "files": [ + "dist/", + "README.md", + "LICENSE", + "package.json" + ], "scripts": { + "prepublishOnly": "npm run build", + "build": "node build.mjs", "bundle:all": "npm run bundle:linux-x64 && npm run bundle:linux-arm64 && npm run bundle:darwin-x64 && npm run bundle:darwin-arm64 && npm run bundle:win-x64 && npm run bundle:win-arm64", "bundle:linux-x64": "bun build src/index.ts --minify --sourcemap --compile --target=bun-linux-x64-baseline --outfile dist/bin/codex-acp-x64-linux", "bundle:linux-arm64": "bun build src/index.ts --minify --sourcemap --compile --target=bun-linux-arm64 --outfile dist/bin/codex-acp-arm64-linux", @@ -30,7 +41,7 @@ "license": "ISC", "type": "module", "devDependencies": { - "@openai/codex": "^0.114.0", + "esbuild": "^0.25.0", "@types/node": "^24.10.1", "mcp-hello-world": "^1.1.2", "tsx": "^4.20.6", @@ -39,8 +50,9 @@ }, "dependencies": { "@agentclientprotocol/sdk": "^0.12.0", - "diff": "^8.0.3", + "vscode-jsonrpc": "^8.2.1", "open": "^11.0.0", - "vscode-jsonrpc": "^8.2.1" + "diff": "^8.0.3", + "@openai/codex": "^0.114.0" } } diff --git a/src/index.ts b/src/index.ts index 08c191c5..d925c155 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ #!/usr/bin/env node +import {createRequire} from "node:module"; import * as acp from "@agentclientprotocol/sdk"; import {startCodexConnection} from "./CodexJsonRpcConnection"; import {CodexAcpServer} from "./CodexAcpServer"; @@ -29,7 +30,8 @@ if (process.argv[2] === "login") { } function startAcpServer() { - const codexPath = process.env["CODEX_PATH"] ?? "codex"; + const defaultCodexPath = createRequire(import.meta.url).resolve("@openai/codex/bin/codex.js"); + const codexPath = process.env["CODEX_PATH"] ?? defaultCodexPath; const configString = process.env["CODEX_CONFIG"]; const authRequestString = process.env["DEFAULT_AUTH_REQUEST"]; const modelProvider = process.env["MODEL_PROVIDER"];