@skaile/workspaces 3.18.0 → 3.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +59 -0
- package/dist/{asset-feeds-LT4GI576.js → asset-feeds-V4DZPOVS.js} +7 -7
- package/dist/{asset-feeds-LT4GI576.js.map → asset-feeds-V4DZPOVS.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +3 -3
- package/dist/asset-manager/index.js +6 -6
- package/dist/asset-manager/installer.js +4 -4
- package/dist/asset-manager/src/index.d.ts +7 -0
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/bridge/codex-app-server.js +1 -1
- package/dist/bridge/drivers/claude-sdk.js +4 -4
- package/dist/bridge/drivers/codex.js +147 -48
- package/dist/bridge/drivers/codex.js.map +1 -1
- package/dist/bridge/drivers/continue.js +2 -2
- package/dist/bridge/drivers/echo.js +1 -1
- package/dist/bridge/drivers/gemini.js +3 -3
- package/dist/bridge/drivers/goose.js +2 -2
- package/dist/bridge/drivers/omp.js +1 -1
- package/dist/bridge/drivers/opencode.js +2 -2
- package/dist/bridge/drivers/qwen.js +3 -3
- package/dist/bridge/index.js +5 -5
- package/dist/bridge/src/codex/managed-driver.d.ts +2 -0
- package/dist/bridge/src/codex/managed-driver.d.ts.map +1 -1
- package/dist/bridge/src/codex/native-mcp-approval.d.ts +13 -0
- package/dist/bridge/src/codex/native-mcp-approval.d.ts.map +1 -0
- package/dist/bridge/src/codex/native-protocol.generated.d.ts +5 -1
- package/dist/bridge/src/codex/native-protocol.generated.d.ts.map +1 -1
- package/dist/bridge/src/codex/questions.d.ts +2 -2
- package/dist/bridge/src/codex/questions.d.ts.map +1 -1
- package/dist/bridge/src/codex-app-server.d.ts +2 -0
- package/dist/bridge/src/codex-app-server.d.ts.map +1 -1
- package/dist/bridge/src/normalizer.d.ts.map +1 -1
- package/dist/bridge/src/types.d.ts +7 -1
- package/dist/bridge/src/types.d.ts.map +1 -1
- package/dist/{chunk-IT42ZT3T.js → chunk-5JTA7HNJ.js} +9 -9
- package/dist/{chunk-IT42ZT3T.js.map → chunk-5JTA7HNJ.js.map} +1 -1
- package/dist/{chunk-J7VSUGGH.js → chunk-6FZCQT3V.js} +2 -2
- package/dist/chunk-6FZCQT3V.js.map +1 -0
- package/dist/{chunk-XL45U3C5.js → chunk-6H6HLMWG.js} +3 -3
- package/dist/{chunk-XL45U3C5.js.map → chunk-6H6HLMWG.js.map} +1 -1
- package/dist/{chunk-AI2PZX4H.js → chunk-74KGZA7R.js} +3 -3
- package/dist/{chunk-AI2PZX4H.js.map → chunk-74KGZA7R.js.map} +1 -1
- package/dist/{chunk-67KB2A77.js → chunk-AQJ5ZYD6.js} +36 -25
- package/dist/chunk-AQJ5ZYD6.js.map +1 -0
- package/dist/{chunk-FYVDBIZV.js → chunk-BGURUGZW.js} +6 -6
- package/dist/{chunk-FYVDBIZV.js.map → chunk-BGURUGZW.js.map} +1 -1
- package/dist/{chunk-BJI7IGZF.js → chunk-CGLJHFQI.js} +7 -7
- package/dist/{chunk-BJI7IGZF.js.map → chunk-CGLJHFQI.js.map} +1 -1
- package/dist/{chunk-RJOGAEIY.js → chunk-D2TTGUMZ.js} +14 -13
- package/dist/chunk-D2TTGUMZ.js.map +1 -0
- package/dist/{chunk-GRA4BWCV.js → chunk-DFELEIPJ.js} +5 -5
- package/dist/{chunk-GRA4BWCV.js.map → chunk-DFELEIPJ.js.map} +1 -1
- package/dist/{chunk-4JDCKPTM.js → chunk-EKFFTOQJ.js} +2 -2
- package/dist/{chunk-4JDCKPTM.js.map → chunk-EKFFTOQJ.js.map} +1 -1
- package/dist/{chunk-GMMACS5W.js → chunk-F4ORFHB5.js} +4 -4
- package/dist/{chunk-GMMACS5W.js.map → chunk-F4ORFHB5.js.map} +1 -1
- package/dist/{chunk-H662SXKS.js → chunk-HSRHO7SK.js} +4 -4
- package/dist/{chunk-H662SXKS.js.map → chunk-HSRHO7SK.js.map} +1 -1
- package/dist/{chunk-DCG4UWJM.js → chunk-IB4XKQMQ.js} +3 -3
- package/dist/{chunk-DCG4UWJM.js.map → chunk-IB4XKQMQ.js.map} +1 -1
- package/dist/{chunk-2IROGAS7.js → chunk-IUOXPQA3.js} +2 -2
- package/dist/{chunk-2IROGAS7.js.map → chunk-IUOXPQA3.js.map} +1 -1
- package/dist/{chunk-CQY7XKRV.js → chunk-K5BUXOBH.js} +5 -4
- package/dist/chunk-K5BUXOBH.js.map +1 -0
- package/dist/{chunk-RPVTPVGX.js → chunk-MBARHWMZ.js} +71 -36
- package/dist/chunk-MBARHWMZ.js.map +1 -0
- package/dist/{chunk-QEZPFJX3.js → chunk-NCHMJPKN.js} +3 -3
- package/dist/{chunk-QEZPFJX3.js.map → chunk-NCHMJPKN.js.map} +1 -1
- package/dist/{chunk-JVFZ5R7L.js → chunk-NW65H5EV.js} +3 -3
- package/dist/{chunk-JVFZ5R7L.js.map → chunk-NW65H5EV.js.map} +1 -1
- package/dist/{chunk-S635WMXH.js → chunk-OHLYKLGJ.js} +4 -4
- package/dist/{chunk-S635WMXH.js.map → chunk-OHLYKLGJ.js.map} +1 -1
- package/dist/{chunk-FBD5SOIH.js → chunk-OJOK4VKC.js} +3 -3
- package/dist/{chunk-FBD5SOIH.js.map → chunk-OJOK4VKC.js.map} +1 -1
- package/dist/{chunk-XKSGEYZC.js → chunk-PHBYB4XT.js} +5 -2
- package/dist/chunk-PHBYB4XT.js.map +1 -0
- package/dist/{chunk-SH7GXS7V.js → chunk-PLLVREB2.js} +59 -26
- package/dist/chunk-PLLVREB2.js.map +1 -0
- package/dist/{chunk-X3LUB275.js → chunk-PVVPGD7P.js} +4 -4
- package/dist/{chunk-X3LUB275.js.map → chunk-PVVPGD7P.js.map} +1 -1
- package/dist/{chunk-5T7Y3AZU.js → chunk-SIREWRZE.js} +3 -3
- package/dist/{chunk-5T7Y3AZU.js.map → chunk-SIREWRZE.js.map} +1 -1
- package/dist/{chunk-QG2ZXU5W.js → chunk-TCHEW3T2.js} +4 -4
- package/dist/{chunk-QG2ZXU5W.js.map → chunk-TCHEW3T2.js.map} +1 -1
- package/dist/{chunk-SFCVAEJ5.js → chunk-W5LPG3X6.js} +3 -3
- package/dist/{chunk-SFCVAEJ5.js.map → chunk-W5LPG3X6.js.map} +1 -1
- package/dist/cli/index.js +47 -47
- package/dist/connectors/config.js +4 -4
- package/dist/connectors/index.js +8 -8
- package/dist/core/index.js +3 -3
- package/dist/core/runtime-assets.js +2 -2
- package/dist/core/src/index.d.ts +2 -2
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +30 -1
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/workspace-config.js +1 -1
- package/dist/deploy/index.js +3 -3
- package/dist/{ensure-sources-4BQ6GMYG.js → ensure-sources-HXAPBBA5.js} +9 -9
- package/dist/{ensure-sources-4BQ6GMYG.js.map → ensure-sources-HXAPBBA5.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +8 -8
- package/dist/factory-assets/connectors/deploy.js +8 -8
- package/dist/factory-assets/connectors/devserver.js +8 -8
- package/dist/factory-assets/connectors/flow/adapter.js +8 -8
- package/dist/factory-assets/connectors/flow/engine.js +4 -4
- package/dist/factory-assets/connectors/flow/run-flow.js +9 -9
- package/dist/factory-assets/connectors/flow.js +8 -8
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +8 -8
- package/dist/factory-assets/connectors/gmail.js +8 -8
- package/dist/factory-assets/connectors/googledrive.js +8 -8
- package/dist/factory-assets/connectors/local.js +8 -8
- package/dist/factory-assets/connectors/mattermost.js +8 -8
- package/dist/factory-assets/connectors/memory.js +8 -8
- package/dist/factory-assets/connectors/minio.js +8 -8
- package/dist/factory-assets/connectors/postgres.js +8 -8
- package/dist/factory-assets/connectors/s3.js +8 -8
- package/dist/factory-assets/connectors/sharepoint.js +8 -8
- package/dist/factory-assets/connectors/sqlite.js +8 -8
- package/dist/factory-assets/connectors/static-server.js +8 -8
- package/dist/factory-assets/connectors/tunnel.js +8 -8
- package/dist/factory-assets/connectors/webdav.js +8 -8
- package/dist/factory-assets/connectors/xstate-store.js +8 -8
- package/dist/factory-assets/connectors/xstate.js +8 -8
- package/dist/{flows-COBS26MK.js → flows-4DYGXE4A.js} +6 -6
- package/dist/{flows-COBS26MK.js.map → flows-4DYGXE4A.js.map} +1 -1
- package/dist/{helpers-4UJMSN6T.js → helpers-3VAE3TYQ.js} +9 -9
- package/dist/{helpers-4UJMSN6T.js.map → helpers-3VAE3TYQ.js.map} +1 -1
- package/dist/library/index.js +4 -4
- package/dist/library/install.js +3 -3
- package/dist/{library-publish-QHQDN4IC.js → library-publish-Z7QQDGOL.js} +13 -13
- package/dist/{library-publish-QHQDN4IC.js.map → library-publish-Z7QQDGOL.js.map} +1 -1
- package/dist/{open-library-ZDM6DUKJ.js → open-library-424UBGA7.js} +11 -11
- package/dist/{open-library-ZDM6DUKJ.js.map → open-library-424UBGA7.js.map} +1 -1
- package/dist/{paths-CZPCCBYX.js → paths-CZEH643M.js} +6 -6
- package/dist/{paths-CZPCCBYX.js.map → paths-CZEH643M.js.map} +1 -1
- package/dist/{plugin-store-ZEIBSNTO.js → plugin-store-QJNBPIQK.js} +5 -5
- package/dist/{plugin-store-ZEIBSNTO.js.map → plugin-store-QJNBPIQK.js.map} +1 -1
- package/dist/{project-JJUAAI7N.js → project-HLSVZVAF.js} +10 -10
- package/dist/{project-JJUAAI7N.js.map → project-HLSVZVAF.js.map} +1 -1
- package/dist/resolver/index.js +3 -3
- package/dist/runner/index.js +13 -13
- package/dist/runner/src/codex-tools.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +6 -6
- package/dist/sdk/bridge.js +5 -5
- package/dist/sdk/core.js +3 -3
- package/dist/sdk/flow.js +4 -4
- package/dist/sdk/index.js +13 -13
- package/dist/sdk/resolver.js +3 -3
- package/dist/sdk/runner.js +13 -13
- package/dist/{setup-PS6ZERZ5.js → setup-WXYQJW56.js} +7 -7
- package/dist/{setup-PS6ZERZ5.js.map → setup-WXYQJW56.js.map} +1 -1
- package/dist/{skills-LG6IQSSN.js → skills-IE3IWWB7.js} +5 -5
- package/dist/{skills-LG6IQSSN.js.map → skills-IE3IWWB7.js.map} +1 -1
- package/dist/{source-QLDIZCI3.js → source-SWZRKTKL.js} +12 -12
- package/dist/{source-QLDIZCI3.js.map → source-SWZRKTKL.js.map} +1 -1
- package/dist/{source-manifest-publish-J3AVCTLX.js → source-manifest-publish-XBRXFOHO.js} +14 -14
- package/dist/{source-manifest-publish-J3AVCTLX.js.map → source-manifest-publish-XBRXFOHO.js.map} +1 -1
- package/dist/tui/index.js +13 -13
- package/dist/types/src/events.d.ts +3 -3
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +5 -5
- package/dist/workspace-plugin/adapters/omp.js +7 -7
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +2 -1
- package/dist/chunk-67KB2A77.js.map +0 -1
- package/dist/chunk-CQY7XKRV.js.map +0 -1
- package/dist/chunk-J7VSUGGH.js.map +0 -1
- package/dist/chunk-RJOGAEIY.js.map +0 -1
- package/dist/chunk-RPVTPVGX.js.map +0 -1
- package/dist/chunk-SH7GXS7V.js.map +0 -1
- package/dist/chunk-XKSGEYZC.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bridge/src/codex/inputs.ts","../../../bridge/src/codex/native-approvals.ts","../../../bridge/src/codex/questions.ts","../../../bridge/src/codex/managed-driver.ts","../../../bridge/src/drivers/codex.ts"],"names":["isAbsolute","join"],"mappings":"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","file":"codex.js","sourcesContent":["import { realpathSync, statSync } from \"node:fs\";\nimport { isAbsolute, join, relative } from \"node:path\";\nimport type { AgentPromptInput } from \"../types.js\";\nimport type { NativeRequests } from \"./native-protocol.generated.js\";\n\nconst invalid = () => new Error(\"CODEX_INPUT_INVALID\");\nconst inside = (root: string, path: string) => {\n const rel = relative(root, path);\n return rel !== \"\" && !rel.startsWith(\"..\") && !isAbsolute(rel);\n};\n\n/** Resolve attachments against trusted workspace/skill roots, never private credential state. */\nexport function codexPromptInput(\n input: AgentPromptInput,\n cwd: string,\n skills?: { source: string; target: string },\n): NativeRequests[\"turn/start\"][\"params\"][\"input\"] {\n if (\n !input ||\n typeof input.text !== \"string\" ||\n input.text.length > 1024 * 1024 ||\n (input.attachments !== undefined && !Array.isArray(input.attachments)) ||\n (input.attachments?.length ?? 0) > 32\n )\n throw invalid();\n const result: NativeRequests[\"turn/start\"][\"params\"][\"input\"] = [\n { type: \"text\", text: input.text },\n ];\n for (const attachment of input.attachments ?? []) {\n try {\n if (!attachment || typeof attachment.path !== \"string\") throw invalid();\n const root =\n attachment.type === \"skill\" && skills ? realpathSync(skills.source) : realpathSync(cwd);\n const path = realpathSync(\n isAbsolute(attachment.path) ? attachment.path : join(root, attachment.path),\n );\n if (!inside(root, path) || !statSync(path).isFile()) throw invalid();\n if (attachment.type === \"image\") result.push({ type: \"localImage\", path });\n else if (attachment.type === \"file\" || attachment.type === \"skill\") {\n if (!attachment.name || [...attachment.name].some((char) => char.charCodeAt(0) < 32))\n throw invalid();\n if (attachment.type === \"skill\") {\n if (!skills) throw invalid();\n const copied = realpathSync(join(skills.target, relative(root, path)));\n if (!inside(realpathSync(skills.target), copied) || !statSync(copied).isFile())\n throw invalid();\n result.push({ type: \"skill\", name: attachment.name, path: copied });\n } else result.push({ type: \"mention\", name: attachment.name, path });\n } else throw invalid();\n } catch {\n throw invalid();\n }\n }\n return result;\n}\n","import type { NativeApprovalDescription } from \"@skaile/workspaces/types\";\nimport type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport type { NativeNotifications, NativeServerRequests } from \"./native-protocol.generated.js\";\nimport {\n allowsNativeApprovalPath,\n isNativeApprovalPolicyActive,\n type NativeApprovalPolicy,\n} from \"./native-policy.js\";\nimport type { CodexQuestions } from \"./questions.js\";\n\ntype ApprovalMethod =\n | \"item/commandExecution/requestApproval\"\n | \"item/fileChange/requestApproval\"\n | \"item/permissions/requestApproval\";\ntype Identity = { itemId: string; threadId: string; turnId: string };\ntype Permissions =\n NativeServerRequests[\"item/permissions/requestApproval\"][\"params\"][\"permissions\"];\n\n/** Changes from a retained native file-change item in the same thread and turn. */\nexport type NativeApprovalFileChanges = Extract<\n NativeNotifications[\"item/started\"][\"item\"],\n { type: \"fileChange\" }\n>[\"changes\"];\n\n/** Driver-owned consent hooks; the existing native callback wrapper owns turn/generation binding. */\nexport function createCodexNativeApprovalHandlers(options: {\n questions: CodexQuestions;\n getPolicy: () => NativeApprovalPolicy | undefined;\n getFileChanges: (identity: Identity) => NativeApprovalFileChanges | undefined;\n}): Pick<CodexServerRequestHandlers, ApprovalMethod> {\n const active = (signal: AbortSignal, threadId: string) =>\n !signal.aborted && isNativeApprovalPolicyActive(options.getPolicy(), threadId);\n const text = (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0 && value.length <= 8192;\n const scoped = async (\n path: unknown,\n access: \"read\" | \"write\",\n signal: AbortSignal,\n threadId: string,\n ) =>\n active(signal, threadId) &&\n text(path) &&\n allowsNativeApprovalPath(options.getPolicy(), path, access) &&\n active(signal, threadId);\n const permissions = async (value: Permissions, signal: AbortSignal, threadId: string) => {\n if (\n value.network?.enabled ||\n (value.network != null && Object.keys(value.network).some((key) => key !== \"enabled\")) ||\n Object.keys(value).some((key) => ![\"network\", \"fileSystem\"].includes(key))\n )\n return false;\n const fs = value.fileSystem;\n if (!fs) return true;\n if (\n fs.entries != null ||\n fs.globScanMaxDepth != null ||\n Object.keys(fs).some((key) => ![\"read\", \"write\", \"entries\", \"globScanMaxDepth\"].includes(key))\n )\n return false;\n for (const access of [\"read\", \"write\"] as const) {\n const paths = fs[access];\n if (paths != null && (!Array.isArray(paths) || paths.length > 32)) return false;\n for (const path of paths ?? [])\n if (!(await scoped(path, access, signal, threadId))) return false;\n }\n return active(signal, threadId);\n };\n const consent = async (\n identity: Identity,\n approval: NativeApprovalDescription,\n signal: AbortSignal,\n ) => {\n if (\n !active(signal, identity.threadId) ||\n approval.details.length > 64 ||\n approval.details.some((detail) => detail.length > 8192) ||\n approval.details.reduce((sum, detail) => sum + detail.length, 0) > 65536\n )\n return false;\n try {\n return (\n (await options.questions.requestApproval(identity, approval, signal)) &&\n active(signal, identity.threadId)\n );\n } catch {\n return false;\n }\n };\n return {\n \"item/commandExecution/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n const allowed = async () =>\n active(signal, params.threadId) &&\n text(params.command) &&\n (params.kind == null || params.kind === \"command\") &&\n !params.environmentId &&\n !params.networkApprovalContext &&\n (params.availableDecisions == null || params.availableDecisions.includes(\"accept\")) &&\n (await scoped(params.cwd, \"read\", signal, params.threadId)) &&\n (!params.additionalPermissions ||\n (await permissions(params.additionalPermissions, signal, params.threadId)));\n if (!(await allowed())) return { decision: \"decline\" };\n const details = [`Command: ${params.command}`, `Directory: ${params.cwd}`];\n for (const access of [\"read\", \"write\"] as const)\n for (const path of params.additionalPermissions?.fileSystem?.[access] ?? [])\n details.push(`${access}: ${path}`);\n const accepted = await consent(params, { kind: \"command\", details }, signal);\n return { decision: accepted && (await allowed()) ? \"accept\" : \"decline\" };\n },\n \"item/fileChange/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n if (!active(signal, params.threadId)) return { decision: \"decline\" };\n const original = options.getFileChanges(params);\n if (!original?.length || original.length > 16) return { decision: \"decline\" };\n const changes = structuredClone(original);\n const snapshot = JSON.stringify(changes);\n const allowed = async () => {\n if (\n !active(signal, params.threadId) ||\n snapshot !== JSON.stringify(options.getFileChanges(params))\n )\n return false;\n if (\n params.grantRoot != null &&\n !(await scoped(params.grantRoot, \"write\", signal, params.threadId))\n )\n return false;\n for (const change of changes) {\n if (!text(change.diff) || !(await scoped(change.path, \"write\", signal, params.threadId)))\n return false;\n if (![\"add\", \"delete\", \"update\"].includes(change.kind.type)) return false;\n if (\n change.kind.type === \"update\" &&\n change.kind.move_path != null &&\n !(await scoped(change.kind.move_path, \"write\", signal, params.threadId))\n )\n return false;\n }\n return active(signal, params.threadId);\n };\n if (!(await allowed())) return { decision: \"decline\" };\n const details = changes.flatMap((change) => [\n `${change.kind.type}: ${change.path}${change.kind.type === \"update\" && change.kind.move_path ? ` → ${change.kind.move_path}` : \"\"}`,\n change.diff,\n ]);\n const accepted = await consent(params, { kind: \"file\", details }, signal);\n return { decision: accepted && (await allowed()) ? \"accept\" : \"decline\" };\n },\n \"item/permissions/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n const allowed = async () =>\n active(signal, params.threadId) &&\n !params.environmentId &&\n (await scoped(params.cwd, \"read\", signal, params.threadId)) &&\n (await permissions(params.permissions, signal, params.threadId));\n if (!(await allowed())) return { permissions: {}, scope: \"turn\" };\n const details = [`Directory: ${params.cwd}`];\n for (const access of [\"read\", \"write\"] as const)\n for (const path of params.permissions.fileSystem?.[access] ?? [])\n details.push(`${access}: ${path}`);\n if (details.length === 1) return { permissions: {}, scope: \"turn\" };\n const accepted = await consent(params, { kind: \"permissions\", details }, signal);\n return {\n permissions: accepted && (await allowed()) ? params.permissions : {},\n scope: \"turn\",\n };\n },\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { NativeApprovalDescription } from \"@skaile/workspaces/types\";\nimport type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport type { AgentEvent } from \"../types.js\";\nimport type { NativeServerRequests } from \"./native-protocol.generated.js\";\n\ntype InputRequest = NativeServerRequests[\"item/tool/requestUserInput\"];\n\n/** One correlated native question batch, settled only by matching replies or cancellation. */\nexport class CodexQuestions {\n private pending?: {\n id: string;\n questions: InputRequest[\"params\"][\"questions\"];\n answers: InputRequest[\"result\"][\"answers\"];\n approval?: NativeApprovalDescription;\n finish: (result?: InputRequest[\"result\"]) => void;\n };\n constructor(private readonly emit: (event: AgentEvent) => void) {}\n\n readonly request: NonNullable<CodexServerRequestHandlers[\"item/tool/requestUserInput\"]> = async (\n params,\n signal,\n ) => this.park(params, signal);\n\n /** Park one explicit native consent request in the same slot as ordinary questions. */\n async requestApproval(\n identity: Pick<InputRequest[\"params\"], \"itemId\" | \"threadId\" | \"turnId\">,\n approval: NativeApprovalDescription,\n signal: AbortSignal,\n ): Promise<boolean> {\n const result = await this.park(\n {\n ...identity,\n isBlocking: true,\n questions: [\n {\n id: \"native-approval\",\n header: \"Approval\",\n question:\n approval.kind === \"permissions\"\n ? \"Allow these permissions for the current turn?\"\n : \"Allow this native action once?\",\n options: [\n {\n label: \"Approve once\",\n description:\n approval.kind === \"permissions\"\n ? \"Allow for the current turn.\"\n : \"Allow only this request.\",\n },\n { label: \"Deny\", description: \"Do not allow this request.\" },\n ],\n },\n ],\n },\n signal,\n approval,\n );\n return result.answers[\"native-approval\"]?.answers[0] === \"Approve once\";\n }\n\n private async park(\n params: InputRequest[\"params\"],\n signal: AbortSignal,\n approval?: NativeApprovalDescription,\n ): Promise<InputRequest[\"result\"]> {\n signal.throwIfAborted();\n if (\n this.pending ||\n !params.isBlocking ||\n !Array.isArray(params.questions) ||\n params.questions.length === 0 ||\n params.questions.length > 16 ||\n params.questions.some((q) => !q.id || !q.question || q.isSecret) ||\n new Set(params.questions.map((q) => q.id)).size !== params.questions.length ||\n new Set(params.questions.map((q) => q.question)).size !== params.questions.length\n )\n throw new Error(\"CODEX_INPUT_UNSUPPORTED\");\n const id = randomUUID();\n return new Promise((resolve, reject) => {\n const abort = () => finish();\n const finish = (result?: InputRequest[\"result\"]) => {\n if (this.pending?.id !== id) return;\n this.pending = undefined;\n signal.removeEventListener(\"abort\", abort);\n if (result && !signal.aborted) resolve(result);\n else reject(new Error(\"CODEX_INPUT_CANCELLED\"));\n };\n this.pending = {\n id,\n questions: params.questions,\n answers: Object.create(null),\n finish,\n approval,\n };\n const input = {\n requestId: id,\n questions: params.questions,\n ...(approval ? { approval } : {}),\n };\n signal.addEventListener(\"abort\", abort, { once: true });\n if (signal.aborted) {\n abort();\n return;\n }\n this.emit({\n type: \"message_start\",\n message: {\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n name: \"AskUserQuestion\",\n id: params.itemId,\n input,\n },\n ],\n },\n });\n this.emit({\n type: \"tool_call\",\n name: \"AskUserQuestion\",\n tool: { name: \"AskUserQuestion\" },\n toolCallId: params.itemId,\n input,\n });\n });\n }\n\n get active(): boolean {\n return Boolean(this.pending);\n }\n\n answer(answer: string, question?: string, requestId?: string): boolean {\n const pending = this.pending;\n if (!pending || pending.id !== requestId || typeof answer !== \"string\") return false;\n if (\n pending.approval &&\n (question !== pending.questions[0]?.question || ![\"Approve once\", \"Deny\"].includes(answer))\n )\n return false;\n const q =\n question === undefined\n ? pending.questions.find((entry) => !Object.hasOwn(pending.answers, entry.id))\n : pending.questions.find((entry) => entry.question === question);\n if (!q || Object.hasOwn(pending.answers, q.id)) return false;\n pending.answers[q.id] = { answers: [answer] };\n if (pending.questions.every((entry) => Object.hasOwn(pending.answers, entry.id)))\n pending.finish({ answers: pending.answers });\n return true;\n }\n}\n","import { isAbsolute, join } from \"node:path\";\nimport type { CodexCredentialDelivery, TokenUsage } from \"@skaile/workspaces/types\";\nimport { CodexAppServerClient, type CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport {\n AgentDriver,\n type AgentConfig,\n type AgentEvent,\n type AgentMessage,\n type AgentPromptInput,\n type CodexManagedRuntimeOptions,\n type CodexNativeMcpDiagnostics,\n type CodexToolTransport,\n} from \"../types.js\";\nimport { parseCodexCredential, parseCodexRefreshResult } from \"./credentials.js\";\nimport { codexInstanceEnvironment, prepareCodexInstance } from \"./instance-state.js\";\nimport { codexPromptInput } from \"./inputs.js\";\nimport {\n prepareNativePolicy,\n activateNativeApprovalPolicy,\n type NativeApprovalPolicy,\n} from \"./native-policy.js\";\nimport {\n createCodexNativeApprovalHandlers,\n type NativeApprovalFileChanges,\n} from \"./native-approvals.js\";\nimport { CodexNativeStateUnavailable } from \"./native-state.js\";\nimport { CodexQuestions } from \"./questions.js\";\nimport type { NativeNotifications } from \"./native-protocol.generated.js\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\nconst failure = (code = \"CODEX_RUNTIME_UNSUPPORTED\") => new Error(code);\nconst nativeUsage = (value: Record<string, unknown>): TokenUsage => ({\n ...(typeof value.inputTokens === \"number\" ? { inputTokens: value.inputTokens } : {}),\n ...(typeof value.outputTokens === \"number\" ? { outputTokens: value.outputTokens } : {}),\n ...(typeof value.cachedInputTokens === \"number\"\n ? { cacheReadTokens: value.cachedInputTokens }\n : {}),\n ...(typeof value.reasoningOutputTokens === \"number\"\n ? { reasoningTokens: value.reasoningOutputTokens }\n : {}),\n ...(typeof value.totalTokens === \"number\" ? { totalTokens: value.totalTokens } : {}),\n});\nconst subtractUsage = (total: TokenUsage, baseline?: TokenUsage): TokenUsage => {\n const delta = (value?: number, before?: number) =>\n value === undefined ? undefined : Math.max(0, value - (before ?? 0));\n return {\n ...(delta(total.inputTokens, baseline?.inputTokens) !== undefined\n ? { inputTokens: delta(total.inputTokens, baseline?.inputTokens) }\n : {}),\n ...(delta(total.outputTokens, baseline?.outputTokens) !== undefined\n ? { outputTokens: delta(total.outputTokens, baseline?.outputTokens) }\n : {}),\n ...(delta(total.cacheReadTokens, baseline?.cacheReadTokens) !== undefined\n ? {\n cacheReadTokens: delta(total.cacheReadTokens, baseline?.cacheReadTokens),\n }\n : {}),\n ...(delta(total.reasoningTokens, baseline?.reasoningTokens) !== undefined\n ? {\n reasoningTokens: delta(total.reasoningTokens, baseline?.reasoningTokens),\n }\n : {}),\n ...(delta(total.totalTokens, baseline?.totalTokens) !== undefined\n ? { totalTokens: delta(total.totalTokens, baseline?.totalTokens) }\n : {}),\n };\n};\nconst addUsage = (left: TokenUsage | undefined, right: TokenUsage): TokenUsage => {\n const result: TokenUsage = {};\n for (const key of [\n \"inputTokens\",\n \"outputTokens\",\n \"cacheReadTokens\",\n \"reasoningTokens\",\n \"totalTokens\",\n ] as const) {\n if (left?.[key] !== undefined || right[key] !== undefined)\n result[key] = (left?.[key] ?? 0) + (right[key] ?? 0);\n }\n return result;\n};\nconst limit = (value: number | undefined, fallback: number) => {\n const result = value ?? fallback;\n if (!Number.isSafeInteger(result) || result <= 0 || result > 1_800_000)\n throw failure(\"AI_PROFILE_INVALID\");\n return result;\n};\nasync function bounded<T>(work: Promise<T>, signal: AbortSignal, ms: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let cancel = () => {};\n try {\n return await Promise.race([\n work,\n new Promise<never>((_, reject) => {\n cancel = () => reject(failure());\n if (signal.aborted) cancel();\n else signal.addEventListener(\"abort\", cancel, { once: true });\n timer = setTimeout(() => reject(failure()), ms);\n }),\n ]);\n } finally {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", cancel);\n }\n}\ntype ActiveTurn = {\n id?: string;\n controller: AbortController;\n done: Promise<void>;\n ready: Promise<void>;\n readyNow: () => void;\n finish: () => void;\n timer: ReturnType<typeof setTimeout>;\n events: Array<{ method: string; params: Record<string, unknown> }>;\n messages: Map<string, string>;\n fileChanges: Map<string, string>;\n toolResults: AgentMessage[];\n toolItems: Set<string>;\n completedToolItems: Set<string>;\n failureCode?: string;\n refreshUsed: boolean;\n usage?: TokenUsage;\n usageBaseline?: TokenUsage;\n usageCursor?: TokenUsage;\n contextTokens?: number;\n contextWindow?: number;\n actualModel: string;\n};\n\n/** Internal managed implementation behind the existing CodexDriver registry identity. */\nexport class ManagedCodexDriver extends AgentDriver {\n readonly driverInfo = {\n id: \"codex\",\n name: \"OpenAI Codex\",\n modelAgnostic: false,\n supportsInBandAbort: true,\n };\n private client?: CodexAppServerClient;\n private connecting?: Promise<CodexAppServerClient>;\n private options?: CodexManagedRuntimeOptions;\n private credential?: CodexCredentialDelivery;\n private nativeApprovalPolicy?: NativeApprovalPolicy;\n private instance?: ReturnType<typeof prepareCodexInstance>;\n private tools?: CodexToolTransport;\n private mcpStartup: CodexNativeMcpDiagnostics[\"startupAtEnd\"] = \"unknown\";\n private pendingMcpStartup?: {\n threadId: string;\n status: CodexNativeMcpDiagnostics[\"startupAtEnd\"];\n };\n private mcpDiagnostics: CodexNativeMcpDiagnostics = {\n startupBeforeTurn: \"unknown\",\n startupAtEnd: \"unknown\",\n toolsListBeforeTurn: 0,\n toolsListTotal: 0,\n toolsCallTotal: 0,\n nativeMcpToolItemCount: 0,\n };\n private controller = new AbortController();\n private generation = 0;\n private killed = false;\n private broken = false;\n private cleanupUncertain = false;\n private unexpectedClose = false;\n private starting?: Promise<void>;\n private closing: Promise<void> = Promise.resolve();\n private threadId?: string;\n private lastThreadId?: string;\n private resetting?: Promise<void>;\n private pendingPatch?: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>;\n private active?: ActiveTurn;\n private threadUsageTotal?: TokenUsage;\n private resumeUsageTurnIds = new Set<string>();\n private queue: Promise<void> = Promise.resolve();\n private queued = 0;\n private admittedTurns = 0;\n private loginCompleted?: {\n resolve: () => void;\n reject: (error: Error) => void;\n };\n private startupRefreshUsed = false;\n private startupAuthAttempted = false;\n private readonly questions = new CodexQuestions((event) => this.event(event));\n\n override get acceptsReplyAsPrompt(): boolean {\n return false;\n }\n override hasPendingQuestion(): boolean {\n return this.questions.active;\n }\n override answerQuestion(answer: string, question?: string, requestId?: string): boolean {\n return this.questions.answer(answer, question, requestId);\n }\n\n constructor(private config: AgentConfig) {\n super();\n }\n override get runtimeSessionId(): string | undefined {\n return this.threadId ?? this.lastThreadId;\n }\n get isRunning(): boolean {\n return Boolean(this.client && this.threadId && !this.killed && !this.broken);\n }\n override getModel(): string | undefined {\n return this.config.model;\n }\n\n async start(): Promise<void> {\n if (this.killed || this.broken) throw failure();\n if (this.threadId && this.client) return;\n if (this.starting) return this.starting;\n this.starting = this.initialize()\n .catch(async (error) => {\n this.broken = true;\n await this.closeGeneration();\n if (\n error instanceof CodexNativeStateUnavailable &&\n (this.cleanupUncertain ||\n this.unexpectedClose ||\n this.killed ||\n this.startupAuthAttempted)\n )\n throw failure();\n const safe =\n error instanceof Error && /^(AI_PROFILE_INVALID|CODEX_[A-Z_]+)$/.test(error.message)\n ? error\n : failure();\n throw safe;\n })\n .finally(() => {\n this.starting = undefined;\n });\n return this.starting;\n }\n\n private async initialize(): Promise<void> {\n await this.closing;\n if (this.killed) throw failure();\n const options = this.config.driverOptions?.codex?.managedRuntime;\n const tuning = this.config.driverOptions?.codex;\n if (\n tuning?.authSource !== \"managed\" ||\n !options ||\n typeof options.prepareTools !== \"function\" ||\n !isAbsolute(options.executable) ||\n !this.config.model ||\n !tuning.reasoningEffort ||\n !tuning.approvalPolicy ||\n tuning.approvalPolicy === \"on-failure\" ||\n !tuning.sandboxMode ||\n tuning.sandboxMode === \"danger-full-access\" ||\n (this.config.provider && this.config.provider !== \"openai\") ||\n this.config.apiKeys?.openai ||\n this.config.env?.OPENAI_API_KEY ||\n (options.nativeTurnBudget !== undefined && options.nativeTurnBudget !== 1)\n )\n throw failure(\"AI_PROFILE_INVALID\");\n this.options = options;\n const timeout = limit(options.requestTimeoutMs, 15_000);\n limit(options.turnTimeoutMs, 300_000);\n try {\n this.credential = parseCodexCredential(this.credential ?? options.credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n if (this.credential.configId !== this.config.aiProviderConfigId)\n throw failure(\"AI_PROFILE_INVALID\");\n const privatePolicy = prepareNativePolicy({\n cwd: this.config.cwd,\n privateRoot: options.privateRoot,\n privateDirectory: options.privateDirectory,\n sandboxMode: tuning.sandboxMode,\n });\n this.instance = prepareCodexInstance(this.config, options, this.credential);\n const generation = ++this.generation;\n this.controller = new AbortController();\n this.startupRefreshUsed = false;\n this.startupAuthAttempted = false;\n const handlers: CodexServerRequestHandlers = {\n \"account/chatgptAuthTokens/refresh\": async (params, signal) => {\n const active = this.active;\n if (!active) this.startupAuthAttempted = true;\n const cancellation = AbortSignal.any([\n signal,\n this.controller.signal,\n ...(active ? [active.controller.signal] : []),\n ]);\n try {\n return await this.refresh(params, cancellation);\n } catch {\n if (active && this.active === active) active.failureCode = \"CODEX_AUTH_UNAVAILABLE\";\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n },\n };\n const authMode = this.credential.kind === \"codex-subscription\" ? \"chatgpt\" : \"api\";\n const nativePolicy = {\n cli_auth_credentials_store: \"ephemeral\",\n forced_login_method: authMode,\n model_provider: \"openai\",\n model: this.config.model,\n model_instructions_file: this.instance.instructionFile,\n shell_environment_policy: {\n inherit: \"none\",\n set: { PATH: options.environment.PATH ?? \"/usr/bin:/bin\" },\n },\n mcp_servers: {},\n };\n const overrides = Object.entries({\n cli_auth_credentials_store: \"ephemeral\",\n forced_login_method: authMode,\n model_provider: \"openai\",\n model: this.config.model,\n model_instructions_file: this.instance.instructionFile,\n \"shell_environment_policy.inherit\": \"none\",\n \"shell_environment_policy.set.PATH\": options.environment.PATH ?? \"/usr/bin:/bin\",\n }).flatMap(([key, value]) => [\"-c\", `${key}=${JSON.stringify(value)}`]);\n overrides.push(\"-c\", \"mcp_servers={}\");\n const connecting = CodexAppServerClient.connect(\n {\n command: options.executable,\n args: [\n ...(options.executableArgs ?? []),\n ...overrides,\n ...privatePolicy.cliArgs,\n \"app-server\",\n \"--stdio\",\n ],\n cwd: this.instance.root,\n env: codexInstanceEnvironment(options.environment, this.instance.home),\n clientInfo: { name: \"skaile-managed-codex\", version: \"1\" },\n processGroup: true,\n requestTimeoutMs: timeout,\n serverRequestTimeoutMs: Math.min(limit(options.interactionTimeoutMs, 300_000), 300_000),\n onServerRequest: handlers,\n onNotification: (method, params) => {\n if (generation === this.generation) this.notification(method, params);\n },\n onClose: () => {\n if (generation !== this.generation) return;\n this.unexpectedClose = true;\n this.broken = true;\n this.loginCompleted?.reject(failure());\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n },\n },\n this.controller.signal,\n );\n this.connecting = connecting;\n try {\n this.client = await connecting;\n } finally {\n if (this.connecting === connecting) this.connecting = undefined;\n }\n if (generation !== this.generation || this.killed) throw failure();\n await this.authenticate(timeout);\n const toolsPromise = options.prepareTools(this.controller.signal).then(async (tools) => {\n if (generation !== this.generation || this.controller.signal.aborted) {\n await tools.dispose().catch(() => {});\n throw failure();\n }\n return tools;\n });\n try {\n this.tools = await bounded(toolsPromise, this.controller.signal, timeout);\n } catch {\n throw failure(\"CODEX_REQUIRED_TOOL_UNAVAILABLE\");\n }\n if (\n !this.tools ||\n !record(this.tools.mcpServers) ||\n typeof this.tools.dispose !== \"function\" ||\n (Object.keys(this.tools.mcpServers).length === 0 &&\n Object.keys(this.tools.onServerRequest ?? {}).length === 0)\n )\n throw failure(\"CODEX_REQUIRED_TOOL_UNAVAILABLE\");\n if (this.tools.onServerRequest?.[\"item/tool/requestUserInput\"])\n throw failure(\"AI_PROFILE_INVALID\");\n const nativeApprovals = createCodexNativeApprovalHandlers({\n questions: this.questions,\n getPolicy: () => (tuning.approvalPolicy === \"never\" ? undefined : this.nativeApprovalPolicy),\n getFileChanges: ({ itemId, threadId, turnId }) => {\n const active = this.active;\n if (\n !active ||\n active.controller.signal.aborted ||\n threadId !== this.threadId ||\n turnId !== active.id\n )\n return undefined;\n const snapshot = active.fileChanges.get(itemId);\n return snapshot ? (JSON.parse(snapshot) as NativeApprovalFileChanges) : undefined;\n },\n });\n for (const [method, handler] of Object.entries({\n ...this.tools.onServerRequest,\n ...nativeApprovals,\n \"item/tool/requestUserInput\": this.questions.request,\n })) {\n if (method === \"account/chatgptAuthTokens/refresh\" || !handler)\n throw failure(\"AI_PROFILE_INVALID\");\n (handlers as Record<string, (params: unknown, signal: AbortSignal) => Promise<unknown>>)[\n method\n ] = async (params, signal) => {\n const active = this.active;\n if (generation !== this.generation || !active || !record(params)) throw failure();\n await active.ready;\n if (\n generation !== this.generation ||\n this.active !== active ||\n params.threadId !== this.threadId ||\n params.turnId !== active.id\n )\n throw failure();\n const cancellation = AbortSignal.any([signal, active.controller.signal]);\n if (cancellation.aborted) throw failure();\n const result = await (\n handler as (params: unknown, signal: AbortSignal) => Promise<unknown>\n )(params, cancellation);\n if (generation !== this.generation || cancellation.aborted || this.active !== active)\n throw failure();\n return result;\n };\n }\n if (this.tools.instructions) this.instance.setToolInstructions(this.tools.instructions);\n const threadParams = {\n model: this.config.model,\n modelProvider: \"openai\",\n cwd: this.instance.cwd,\n approvalPolicy: tuning.approvalPolicy,\n permissions: \"managed\",\n config: {\n ...nativePolicy,\n ...privatePolicy.config,\n mcp_servers: this.tools.mcpServers,\n model_reasoning_effort: this.config.effort ?? tuning.reasoningEffort,\n },\n };\n const resuming = Boolean(this.config.resumeSessionId);\n this.threadUsageTotal = resuming ? (this.threadUsageTotal ?? {}) : {};\n this.resumeUsageTurnIds.clear();\n const response = resuming\n ? await this.client.request(\"thread/resume\", {\n ...threadParams,\n threadId: this.config.resumeSessionId!,\n excludeTurns: false,\n })\n : await this.client.request(\"thread/start\", {\n ...threadParams,\n allowProviderModelFallback: false,\n });\n if (!record(response) || response.model !== this.config.model)\n throw failure(\"CODEX_MODEL_UNAVAILABLE\");\n if (\n !record(response.thread) ||\n typeof response.thread.id !== \"string\" ||\n (resuming && response.thread.id !== this.config.resumeSessionId) ||\n (resuming && !Array.isArray(response.thread.turns)) ||\n response.reasoningEffort !== (this.config.effort ?? tuning.reasoningEffort) ||\n response.modelProvider !== \"openai\" ||\n response.approvalPolicy !== tuning.approvalPolicy\n )\n throw failure(\"AI_PROFILE_INVALID\");\n if (generation !== this.generation || this.killed) throw failure();\n this.resumeUsageTurnIds = new Set(\n resuming && Array.isArray(response.thread.turns)\n ? response.thread.turns.flatMap((turn) =>\n record(turn) && typeof turn.id === \"string\" ? [turn.id] : [],\n )\n : [],\n );\n this.nativeApprovalPolicy = activateNativeApprovalPolicy(\n privatePolicy,\n response,\n this.controller.signal,\n );\n this.threadId = response.thread.id;\n this.mcpStartup =\n this.pendingMcpStartup?.threadId === this.threadId\n ? this.pendingMcpStartup.status\n : \"unknown\";\n this.pendingMcpStartup = undefined;\n this.lastThreadId = this.threadId;\n this.instance.bindThread(this.threadId);\n }\n\n private async authenticate(timeout: number): Promise<void> {\n const credential = this.credential!;\n if (credential.kind === \"openai-api-key\") {\n const result = await this.client!.request(\"account/login/start\", {\n type: \"apiKey\",\n apiKey: credential.apiKey,\n });\n if (result.type !== \"apiKey\") throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n return;\n }\n const completion = new Promise<void>((resolve, reject) => {\n this.loginCompleted = { resolve, reject };\n });\n // A native completion can precede its RPC reply; install the waiter first.\n const wait = bounded(completion, this.controller.signal, timeout);\n void wait.catch(() => {});\n try {\n const result = await this.client!.request(\"account/login/start\", {\n type: \"chatgptAuthTokens\",\n accessToken: credential.accessToken,\n chatgptAccountId: credential.chatgptAccountId,\n chatgptPlanType: credential.chatgptPlanType ?? null,\n });\n if (result.type !== \"chatgptAuthTokens\") throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n await wait;\n } finally {\n this.loginCompleted = undefined;\n }\n }\n\n private async refresh(params: unknown, signal: AbortSignal) {\n const credential = this.credential;\n if (\n !record(params) ||\n params.reason !== \"unauthorized\" ||\n !credential ||\n credential.kind !== \"codex-subscription\" ||\n (params.previousAccountId != null &&\n params.previousAccountId !== credential.chatgptAccountId) ||\n !this.options?.refreshCredential ||\n (this.active ? this.active.refreshUsed : this.startupRefreshUsed)\n )\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n if (this.active) this.active.refreshUsed = true;\n else this.startupRefreshUsed = true;\n const result = await this.options.refreshCredential(\n {\n kind: \"codex-subscription\",\n configId: credential.configId,\n credentialVersion: credential.credentialVersion,\n reason: \"retry-401\",\n },\n signal,\n );\n if (signal.aborted) throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n let parsed: ReturnType<typeof parseCodexRefreshResult>;\n try {\n parsed = parseCodexRefreshResult(result, credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n if (!parsed.ok) throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n this.credential = parsed.credential;\n return {\n accessToken: parsed.credential.accessToken,\n chatgptAccountId: parsed.credential.chatgptAccountId,\n chatgptPlanType: parsed.credential.chatgptPlanType ?? null,\n };\n }\n\n prompt(message: string): Promise<void> {\n return this.promptInput({ text: message });\n }\n\n override promptInput(input: AgentPromptInput): Promise<void> {\n const message = structuredClone(input);\n const turnBudget = this.config.driverOptions?.codex?.managedRuntime?.nativeTurnBudget;\n if (\n this.killed ||\n this.broken ||\n this.resetting ||\n this.queued >= 32 ||\n (turnBudget !== undefined && this.admittedTurns >= turnBudget)\n )\n return Promise.reject(failure());\n if (turnBudget !== undefined) this.admittedTurns++;\n this.queued++;\n const task = this.queue.then(() => this.runTurn(message));\n this.queue = task\n .catch(() => {})\n .finally(() => {\n this.queued--;\n });\n return task;\n }\n\n private async runTurn(message: AgentPromptInput): Promise<void> {\n if (this.resetting) throw failure();\n await this.start();\n if (this.killed || this.broken || this.resetting) throw failure();\n if (this.pendingPatch) {\n this.config = { ...this.config, ...this.pendingPatch };\n this.pendingPatch = undefined;\n }\n if (!this.config.model) throw failure(\"AI_PROFILE_INVALID\");\n await this.tools?.validate?.();\n if (this.tools?.needsReload?.()) {\n this.config = { ...this.config, resumeSessionId: this.threadId };\n await this.closeGeneration();\n await this.start();\n }\n const input = codexPromptInput(\n message,\n this.instance!.cwd,\n this.options?.skillsDirectory\n ? {\n source: this.options.skillsDirectory,\n target: join(this.instance!.home, \"skills\"),\n }\n : undefined,\n );\n try {\n parseCodexCredential(this.credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n let finish!: () => void;\n let readyNow!: () => void;\n const ready = new Promise<void>((resolve) => {\n readyNow = resolve;\n });\n const done = new Promise<void>((resolve) => {\n finish = resolve;\n });\n const active: ActiveTurn = {\n controller: new AbortController(),\n done,\n finish,\n ready,\n readyNow,\n timer: setTimeout(\n () => {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n this.broken = true;\n void this.closeGeneration();\n },\n limit(this.options?.turnTimeoutMs, 300_000),\n ),\n events: [],\n messages: new Map(),\n fileChanges: new Map(),\n toolResults: [],\n toolItems: new Set(),\n completedToolItems: new Set(),\n refreshUsed: false,\n usageBaseline: this.threadUsageTotal,\n actualModel: this.config.model!,\n };\n this.active = active;\n this.mcpDiagnostics.nativeMcpToolItemCount = 0;\n this.observeMcp(true);\n this.tools?.beginTurn?.(active.controller.signal);\n try {\n const response = await this.client!.request(\"turn/start\", {\n threadId: this.threadId!,\n permissions: \"managed\",\n input,\n model: this.config.model,\n effort: this.config.effort ?? this.config.driverOptions!.codex!.reasoningEffort,\n });\n if (this.active !== active) return;\n if (!record(response.turn) || typeof response.turn.id !== \"string\") throw failure();\n active.id = response.turn.id;\n active.readyNow();\n for (const event of active.events.splice(0)) this.notification(event.method, event.params);\n if (this.active === active && response.turn.status !== \"inProgress\")\n this.complete(response.turn);\n await done;\n } catch {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n }\n }\n\n async abort(): Promise<void> {\n const active = this.active;\n if (!active) return;\n active.controller.abort();\n try {\n if (!active.id)\n await bounded(\n active.ready,\n this.controller.signal,\n limit(this.options?.requestTimeoutMs, 15_000),\n );\n if (this.active !== active) return;\n await this.client!.request(\"turn/interrupt\", {\n threadId: this.threadId!,\n turnId: active.id!,\n });\n await bounded(\n active.done,\n this.controller.signal,\n limit(this.options?.requestTimeoutMs, 15_000),\n );\n } catch {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n this.broken = true;\n await this.closeGeneration();\n }\n }\n\n kill(): void {\n if (this.killed) return;\n this.killed = true;\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n }\n override async dispose(): Promise<void> {\n this.kill();\n await this.starting?.catch(() => {});\n await this.closing;\n }\n async resetSession(): Promise<void> {\n if (this.killed || this.broken) throw failure();\n if (this.resetting) return this.resetting;\n this.resetting = Promise.resolve()\n .then(async () => {\n if (this.active) await this.abort();\n await this.queue;\n await this.starting;\n await this.closeGeneration();\n if (this.killed || this.broken) throw failure();\n this.config = { ...this.config, resumeSessionId: undefined };\n this.lastThreadId = undefined;\n this.threadUsageTotal = undefined;\n })\n .finally(() => {\n this.resetting = undefined;\n });\n return this.resetting;\n }\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n this.pendingPatch = { ...this.pendingPatch, ...patch };\n }\n\n private closeGeneration(): Promise<void> {\n ++this.generation;\n this.mcpStartup = \"unknown\";\n this.pendingMcpStartup = undefined;\n this.controller.abort();\n this.nativeApprovalPolicy = undefined;\n this.loginCompleted?.reject(failure());\n this.loginCompleted = undefined;\n const client = this.client;\n this.client = undefined;\n const connecting = this.connecting;\n this.connecting = undefined;\n const tools = this.tools;\n this.tools = undefined;\n const instance = this.instance;\n this.instance = undefined;\n this.threadId = undefined;\n this.closing = this.closing\n .then(async () => {\n try {\n // The handshake owns a spawned child before it returns the client. Join its\n // cancellation/disposal before releasing the instance lease.\n const pendingClient = await connecting?.catch(() => undefined);\n await client?.dispose();\n if (pendingClient && pendingClient !== client) await pendingClient.dispose();\n if (\n (client && !client.terminationConfirmed) ||\n (pendingClient && !pendingClient.terminationConfirmed)\n )\n this.cleanupUncertain = true;\n if (tools)\n await bounded(\n Promise.resolve().then(() => tools.dispose()),\n new AbortController().signal,\n 1000,\n ).catch(() => {\n this.cleanupUncertain = true;\n });\n } finally {\n instance?.release();\n }\n })\n .catch(() => {\n this.cleanupUncertain = true;\n });\n return this.closing;\n }\n\n private notification(method: string, params: unknown): void {\n if (!record(params)) return;\n if (method === \"mcpServer/startupStatus/updated\") {\n const serverName = this.tools?.diagnostics?.serverName;\n if (\n !serverName ||\n params.name !== serverName ||\n typeof params.threadId !== \"string\" ||\n params.threadId.length > 512 ||\n typeof params.status !== \"string\" ||\n ![\"starting\", \"ready\", \"failed\", \"cancelled\"].includes(params.status)\n )\n return;\n const status =\n params.status as NativeNotifications[\"mcpServer/startupStatus/updated\"][\"status\"];\n if (this.threadId) {\n if (params.threadId === this.threadId) this.mcpStartup = status;\n } else this.pendingMcpStartup = { threadId: params.threadId, status };\n return;\n }\n if (method === \"account/login/completed\") {\n if (params.success === true && params.loginId == null) this.loginCompleted?.resolve();\n else this.loginCompleted?.reject(failure(\"CODEX_AUTH_UNAVAILABLE\"));\n return;\n }\n const active = this.active;\n if (\n (!active || (!active.usageCursor && this.resumeUsageTurnIds.has(String(params.turnId)))) &&\n method === \"thread/tokenUsage/updated\" &&\n params.threadId === (this.threadId ?? this.config.resumeSessionId) &&\n record(params.tokenUsage) &&\n record(params.tokenUsage.total)\n ) {\n // Resume replay follows its response but precedes new turn events; the\n // caller may already be awaiting turn/start when historical usage arrives.\n this.threadUsageTotal = nativeUsage(params.tokenUsage.total);\n if (active) active.usageBaseline = this.threadUsageTotal;\n return;\n }\n if (!active || params.threadId !== this.threadId) return;\n if (!active.id) {\n if (active.events.length >= 256) {\n this.broken = true;\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n } else active.events.push({ method, params });\n return;\n }\n const turnId = record(params.turn) ? params.turn.id : params.turnId;\n if (turnId !== active.id) return;\n if (method === \"thread/tokenUsage/updated\" && record(params.tokenUsage)) {\n const last = params.tokenUsage.last;\n const total = params.tokenUsage.total;\n const cumulativeUsage = record(total) ? nativeUsage(total) : undefined;\n if (cumulativeUsage) {\n // Attach replay precedes live usage; no replay means no historical\n // TokenCount. The first live response therefore counts from zero.\n active.usageBaseline ??= {};\n this.resumeUsageTurnIds.clear();\n const cursor = active.usageCursor ?? active.usageBaseline;\n const reset =\n cursor?.totalTokens !== undefined &&\n cumulativeUsage.totalTokens !== undefined &&\n cumulativeUsage.totalTokens < cursor.totalTokens;\n const increment = reset ? cumulativeUsage : subtractUsage(cumulativeUsage, cursor);\n if (Object.values(increment).some((value) => typeof value === \"number\" && value > 0))\n active.usage = addUsage(active.usage, increment);\n active.usageCursor = cumulativeUsage;\n this.threadUsageTotal = cumulativeUsage;\n }\n if (record(last)) {\n if (typeof last.totalTokens === \"number\") active.contextTokens = last.totalTokens;\n }\n if (typeof params.tokenUsage.modelContextWindow === \"number\")\n active.contextWindow = params.tokenUsage.modelContextWindow;\n } else if (method === \"model/rerouted\") {\n active.actualModel = typeof params.toModel === \"string\" ? params.toModel : active.actualModel;\n active.failureCode = \"CODEX_MODEL_UNAVAILABLE\";\n } else if (method === \"turn/completed\" && record(params.turn)) this.complete(params.turn);\n else if (method === \"error\" && params.willRetry !== true)\n active.failureCode = this.nativeErrorCode(params.error);\n else if (\n method === \"item/agentMessage/delta\" &&\n typeof params.itemId === \"string\" &&\n typeof params.delta === \"string\"\n ) {\n const previous = active.messages.get(params.itemId);\n if (previous === undefined)\n this.event({\n type: \"message_start\",\n message: { role: \"assistant\", content: [{ type: \"text\", text: \"\" }] },\n });\n const text = (previous ?? \"\") + params.delta;\n active.messages.set(params.itemId, text);\n this.event({\n type: \"message_update\",\n message: { role: \"assistant\", content: [{ type: \"text\", text }] },\n _textDelta: params.delta,\n });\n } else if (\n (method === \"item/started\" || method === \"item/completed\") &&\n record(params.item) &&\n typeof params.item.id === \"string\"\n ) {\n this.item(\n params.item as NativeNotifications[\"item/started\"][\"item\"],\n method === \"item/completed\",\n );\n }\n }\n\n private item(item: NativeNotifications[\"item/started\"][\"item\"], completed: boolean): void {\n const active = this.active!;\n if (item.type === \"fileChange\") {\n active.fileChanges.delete(item.id);\n if (\n !completed &&\n Array.isArray(item.changes) &&\n item.changes.length <= 16 &&\n active.fileChanges.size < 16\n ) {\n const snapshot = JSON.stringify(item.changes);\n if (snapshot.length <= 65536) active.fileChanges.set(item.id, snapshot);\n }\n }\n if (item.type === \"agentMessage\") {\n if (completed && typeof item.text === \"string\") {\n const previous = active.messages.get(item.id) ?? \"\";\n if (!active.messages.has(item.id))\n this.event({\n type: \"message_start\",\n message: {\n role: \"assistant\",\n content: [{ type: \"text\", text: \"\" }],\n },\n });\n if (item.text.startsWith(previous) && item.text.length > previous.length)\n this.event({\n type: \"message_update\",\n message: {\n role: \"assistant\",\n content: [{ type: \"text\", text: item.text }],\n },\n _textDelta: item.text.slice(previous.length),\n });\n active.messages.set(item.id, item.text);\n }\n return;\n }\n const name =\n item.type === \"commandExecution\"\n ? \"Bash\"\n : item.type === \"fileChange\"\n ? \"ApplyPatch\"\n : item.type === \"mcpToolCall\"\n ? `mcp__${item.server}__${item.tool}`\n : undefined;\n if (!name) return;\n if (!active.toolItems.has(item.id)) {\n if (item.type === \"mcpToolCall\" && item.server === this.tools?.diagnostics?.serverName)\n this.mcpDiagnostics.nativeMcpToolItemCount = Math.min(\n 512,\n this.mcpDiagnostics.nativeMcpToolItemCount + 1,\n );\n active.toolItems.add(item.id);\n this.event({\n type: \"tool_call\",\n name,\n tool: { name },\n toolCallId: item.id,\n input:\n item.type === \"mcpToolCall\"\n ? item.arguments\n : item.type === \"commandExecution\"\n ? { command: item.command }\n : item.type === \"fileChange\"\n ? { changes: item.changes }\n : {},\n });\n }\n if (completed && !active.completedToolItems.has(item.id)) {\n active.completedToolItems.add(item.id);\n active.toolResults.push({\n role: \"tool\",\n toolName: name,\n content: \"\",\n data:\n item.type === \"mcpToolCall\"\n ? {\n content: item.result?.content,\n structuredContent: item.result?.structuredContent,\n status: item.status,\n }\n : item.type === \"commandExecution\"\n ? {\n output: item.aggregatedOutput,\n exitCode: item.exitCode,\n status: item.status,\n }\n : item.type === \"fileChange\"\n ? { changes: item.changes, status: item.status }\n : {},\n isError: \"status\" in item && item.status === \"failed\",\n });\n this.event({ type: \"tool_execution_end\", toolName: name });\n }\n }\n private complete(turn: Record<string, unknown>): void {\n if (turn.status === \"completed\") this.finishTurn(this.active?.failureCode);\n else if (turn.status === \"interrupted\") this.finishTurn(\"CODEX_TURN_INTERRUPTED\");\n else if (turn.status === \"failed\")\n this.finishTurn(this.active?.failureCode ?? this.nativeErrorCode(turn.error));\n }\n private nativeErrorCode(error: unknown): string {\n const info = record(error) ? error.codexErrorInfo : undefined;\n if (info === \"unauthorized\") return \"CODEX_RECONNECT_REQUIRED\";\n if (\n info === \"usageLimitExceeded\" ||\n info === \"rateLimitExceeded\" ||\n info === \"serverOverloaded\"\n )\n return \"CODEX_RATE_LIMITED\";\n if (\n record(info) &&\n [\n \"httpConnectionFailed\",\n \"responseStreamConnectionFailed\",\n \"responseStreamDisconnected\",\n \"responseTooManyFailedAttempts\",\n ].some((key) => key in info)\n )\n return \"CODEX_NETWORK_UNAVAILABLE\";\n return \"CODEX_RUNTIME_UNSUPPORTED\";\n }\n\n private observeMcp(beforeTurn: boolean): void {\n const count = (value: unknown) =>\n typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n ? Math.min(512, value)\n : 0;\n let listed = 0;\n let called = 0;\n try {\n const counts = this.tools?.diagnostics?.requestCounts();\n listed = count(counts?.toolsListTotal);\n called = count(counts?.toolsCallTotal);\n } catch {\n /* Observation must not affect execution or cleanup. */\n }\n if (beforeTurn) {\n this.mcpDiagnostics.startupBeforeTurn = this.mcpStartup;\n this.mcpDiagnostics.toolsListBeforeTurn = listed;\n }\n this.mcpDiagnostics.startupAtEnd = this.mcpStartup;\n this.mcpDiagnostics.toolsListTotal = Math.max(this.mcpDiagnostics.toolsListBeforeTurn, listed);\n this.mcpDiagnostics.toolsCallTotal = beforeTurn\n ? called\n : Math.max(this.mcpDiagnostics.toolsCallTotal, called);\n try {\n void Promise.resolve(\n this.options?.onNativeMcpDiagnostics?.(Object.freeze({ ...this.mcpDiagnostics })),\n ).catch(() => {});\n } catch {\n /* A caller-owned observer is never an execution gate. */\n }\n }\n\n private finishTurn(code?: string): void {\n const active = this.active;\n if (!active) return;\n this.active = undefined;\n this.observeMcp(false);\n clearTimeout(active.timer);\n active.controller.abort();\n active.fileChanges.clear();\n active.readyNow();\n for (const text of active.messages.values())\n this.event({\n type: \"message_end\",\n message: { role: \"assistant\", content: [{ type: \"text\", text }] },\n });\n this.event({ type: \"turn_end\", toolResults: active.toolResults });\n const modelUsage = active.usage\n ? {\n inputTokens: active.usage.inputTokens,\n outputTokens: active.usage.outputTokens,\n cacheReadTokens: active.usage.cacheReadTokens,\n ...(typeof active.contextWindow === \"number\"\n ? { contextWindow: active.contextWindow }\n : {}),\n }\n : undefined;\n const usage = {\n ...(active.usage ? { tokens: active.usage } : {}),\n ...(modelUsage ? { modelUsage: { [active.actualModel]: modelUsage } } : {}),\n ...(typeof active.contextTokens === \"number\" ? { contextTokens: active.contextTokens } : {}),\n ...(typeof active.contextWindow === \"number\" ? { contextWindow: active.contextWindow } : {}),\n };\n if (code)\n this.event({\n type: \"error\",\n error: code,\n fatal: code !== \"CODEX_TURN_INTERRUPTED\",\n detail: {\n message: code,\n category:\n code === \"CODEX_TURN_INTERRUPTED\"\n ? \"process\"\n : code === \"CODEX_RATE_LIMITED\"\n ? \"rate_limit\"\n : code === \"CODEX_NETWORK_UNAVAILABLE\"\n ? \"network\"\n : code === \"CODEX_AUTH_UNAVAILABLE\" || code === \"CODEX_RECONNECT_REQUIRED\"\n ? \"auth\"\n : \"config\",\n retryable: false,\n },\n ...usage,\n });\n else\n this.event({\n type: \"result\",\n subtype: \"success\",\n summary: [...active.messages.values()].join(\"\\n\"),\n ...usage,\n });\n this.event({ type: \"agent_end\" });\n active.finish();\n }\n private event(event: AgentEvent): void {\n // Observers cannot prevent native cleanup or leave a terminal prompt unsettled.\n try {\n this.emit(\"agent-event\", event);\n } catch {}\n }\n}\n","import { ManagedCodexDriver } from \"../codex/managed-driver.js\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type {\n AgentMessageItem,\n Codex as CodexClient,\n CommandExecutionItem,\n FileChangeItem,\n McpToolCallItem,\n Thread,\n ThreadEvent,\n ThreadItem,\n WebSearchItem,\n} from \"@openai/codex-sdk\";\nimport type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger, TokenUsage } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { classifyGenericErrorMessage } from \"../error-classifier.js\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, type ModelEntry } from \"../models.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport {\n type AgentConfig,\n AgentDriver,\n type AgentError,\n type AgentEvent,\n type AgentMessage,\n type AgentPromptInput,\n type DriverInfo,\n} from \"../types.js\";\n\ntype CodexSdkModule = typeof import(\"@openai/codex-sdk\");\n\n/**\n * Build the explicit env whitelist forwarded to the Codex SDK child.\n *\n * Omits anything provisioned by `provision_secrets` so user credentials\n * stay out of the subprocess environment.\n *\n * @docLink packages/bridge/concepts#codex-env-whitelist\n */\nfunction buildCodexChildEnv(parent: NodeJS.ProcessEnv): Record<string, string> {\n const out: Record<string, string> = {};\n const explicit = [\n \"OPENAI_API_KEY\",\n \"ANTHROPIC_API_KEY\",\n \"PATH\",\n \"HOME\",\n \"USER\",\n \"HOSTNAME\",\n \"SKAILE_SESSION_ID\",\n ];\n for (const key of explicit) {\n const v = parent[key];\n if (v !== undefined) out[key] = v;\n }\n for (const [key, value] of Object.entries(parent)) {\n if (key.startsWith(\"PI_\") && typeof value === \"string\") out[key] = value;\n }\n return out;\n}\n\n/**\n * Agent driver for the OpenAI Codex SDK.\n *\n * Creates or resumes a Codex thread via `@openai/codex-sdk` (lazy-imported in `start()`)\n * and maps Codex SDK thread events to the unified {@link AgentEvent} stream.\n * OpenAI models only — uses `OPENAI_API_KEY` from `apiKeys`, `env`, or the environment.\n *\n * @remarks\n * **Event mapping** — Codex SDK items are translated: `agent_message` → `message_start/update/end`,\n * `command_execution` → Bash-shaped tool events, `mcp_tool_call` → MCP tool events,\n * `file_change` → `ApplyPatch`-shaped events, `web_search` → `WebSearch` events.\n *\n * **Sandbox** — The Codex sandbox mode, approval policy, and reasoning effort are\n * controlled via `AgentConfig.driverOptions.codex`. See {@link CodexDriverOptions}.\n *\n * **Instructions file** — System prompt and pre-rendered agent identity are combined\n * into a single instructions file written to `<cwd>/.codex/skaile-session-instructions.md`\n * and passed to the Codex SDK as `model_instructions_file`.\n *\n * @docLink packages/bridge/drivers#codex-driver\n */\nexport class CodexDriver extends AgentDriver {\n readonly driverInfo: DriverInfo = {\n id: \"codex\",\n name: \"OpenAI Codex\",\n modelAgnostic: false,\n supportsInBandAbort: true,\n };\n\n private readonly log: Logger = getBridgeLogger(\"codex\");\n private config: AgentConfig;\n private readonly managed?: ManagedCodexDriver;\n private thread: Thread | null = null;\n private running = false;\n private abortController: AbortController | null = null;\n private pendingToolResults: AgentMessage[] = [];\n private activeAssistantItemId: string | null = null;\n private activeAssistantText = \"\";\n private _runtimeSessionId: string | undefined;\n /** Token usage from the most recent completed turn. */\n private _lastTokens: TokenUsage | null = null;\n\n constructor(config: AgentConfig) {\n super();\n this.config = config;\n const codex = config.driverOptions?.codex;\n if (\n codex?.managedRuntime ||\n (codex?.authSource !== undefined && codex.authSource !== \"local\")\n ) {\n this.managed = new ManagedCodexDriver(config);\n this.managed.on(\"agent-event\", (event: AgentEvent) => this.emit(\"agent-event\", event));\n }\n }\n\n override get runtimeSessionId(): string | undefined {\n return this.managed ? this.managed.runtimeSessionId : this._runtimeSessionId;\n }\n\n override get acceptsReplyAsPrompt(): boolean {\n return !this.managed;\n }\n override async dispose(): Promise<void> {\n if (this.managed) return this.managed.dispose();\n this.kill();\n }\n override hasPendingQuestion(): boolean {\n return this.managed?.hasPendingQuestion() ?? false;\n }\n override answerQuestion(answer: string, question?: string, requestId?: string): boolean {\n return this.managed?.answerQuestion(answer, question, requestId) ?? false;\n }\n override promptInput(input: AgentPromptInput): Promise<void> {\n return this.managed ? this.managed.promptInput(input) : super.promptInput(input);\n }\n\n public async start(): Promise<void> {\n if (this.managed) return this.managed.start();\n if (this.thread) return;\n\n let sdk: CodexSdkModule;\n try {\n sdk = await import(\"@openai/codex-sdk\");\n } catch (err) {\n this.log.error(\"codex SDK load failed\", err);\n throw new Error(\"Codex SDK not installed. Run: bun add @openai/codex-sdk\");\n }\n\n // Explicit env whitelist for the Codex SDK child. Avoids leaking the\n // runner's full environment (which may carry user secrets provisioned by\n // the platform) into the spawned process. `this.config.env`, when\n // supplied, fully overrides the whitelist.\n const env: Record<string, string | undefined> = this.config.env\n ? { ...this.config.env }\n : buildCodexChildEnv(process.env);\n\n const instructionsFile = this.writeInstructionsFile();\n\n const client = new sdk.Codex({\n apiKey:\n this.config.apiKeys?.openai ??\n this.config.env?.OPENAI_API_KEY ??\n process.env.OPENAI_API_KEY,\n env: Object.fromEntries(Object.entries(env).filter(([, value]) => value != null)) as Record<\n string,\n string\n >,\n ...(instructionsFile ? { config: { model_instructions_file: instructionsFile } } : {}),\n });\n\n const codexOptions = this.config.driverOptions?.codex;\n const threadOptions = {\n model: this.config.model,\n sandboxMode: codexOptions?.sandboxMode ?? \"workspace-write\",\n workingDirectory: this.config.cwd,\n skipGitRepoCheck: true,\n modelReasoningEffort: codexOptions?.reasoningEffort ?? \"medium\",\n networkAccessEnabled: codexOptions?.networkAccessEnabled,\n approvalPolicy: codexOptions?.approvalPolicy ?? \"never\",\n additionalDirectories: codexOptions?.additionalDirectories,\n } satisfies Parameters<CodexClient[\"startThread\"]>[0];\n\n this.thread = this.config.resumeSessionId\n ? client.resumeThread(this.config.resumeSessionId, threadOptions)\n : client.startThread(threadOptions);\n this._runtimeSessionId = this.thread.id ?? this.config.resumeSessionId;\n this.log.info(\"codex driver started\", {\n model: this.config.model,\n resumed: Boolean(this.config.resumeSessionId),\n sessionId: this._runtimeSessionId,\n });\n }\n\n public async prompt(message: string): Promise<void> {\n if (this.managed) return this.managed.prompt(message);\n await this.start();\n if (!this.thread) throw new Error(\"Codex thread not initialized\");\n if (this.running) throw new Error(\"Codex turn already in progress\");\n\n this.running = true;\n this.pendingToolResults = [];\n this.activeAssistantItemId = null;\n this.activeAssistantText = \"\";\n this._lastTokens = null;\n this.abortController = new AbortController();\n let turnFinished = false;\n this.log.debug(\"prompt issued\", { length: message.length });\n\n try {\n const input = message;\n const { events } = await this.thread.runStreamed(input, {\n signal: this.abortController.signal,\n });\n\n for await (const event of events) {\n turnFinished = this.handleThreadEvent(event) || turnFinished;\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (error.name !== \"AbortError\") {\n this.log.error(\"prompt failed\", error);\n const detail = this.classifyErrorMessage(error.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n }\n } finally {\n if (!turnFinished && this.activeAssistantItemId) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(this.activeAssistantText),\n } satisfies AgentEvent);\n }\n this.activeAssistantItemId = null;\n this.activeAssistantText = \"\";\n this.abortController = null;\n this.running = false;\n }\n }\n\n public async abort(): Promise<void> {\n if (this.managed) return this.managed.abort();\n this.abortController?.abort();\n }\n\n public get isRunning(): boolean {\n if (this.managed) return this.managed.isRunning;\n return this.running;\n }\n\n public kill(): void {\n if (this.managed) {\n this.managed.kill();\n return;\n }\n this.abortController?.abort();\n this.running = false;\n this.abortController = null;\n this.log.info(\"codex driver killed\");\n }\n\n override async listModels(): Promise<ModelEntry[]> {\n if (this.managed) return this.managed.listModels();\n const apiKey =\n this.config.apiKeys?.openai || this.config.env?.OPENAI_API_KEY || process.env.OPENAI_API_KEY;\n if (!apiKey) return [];\n const result = await fetchProviderModels(\"openai\", apiKey);\n return result.ok ? (result.models as ModelEntry[]) : [];\n }\n\n async resetSession(): Promise<void> {\n if (this.managed) return this.managed.resetSession();\n this.kill();\n this.thread = null;\n this._runtimeSessionId = undefined;\n this._lastTokens = null;\n }\n\n override getTokenUsage(): TokenUsage | null {\n if (this.managed) return this.managed.getTokenUsage();\n return this._lastTokens;\n }\n\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n this.managed?.reconfigure(patch);\n }\n\n override getModel(): string | undefined {\n return this.managed?.getModel();\n }\n\n /**\n * Write a combined instructions file for Codex CLI's `model_instructions_file` config.\n * Combines pre-rendered agent identity (from `skaile install`) with runtime context\n * (resources, environment, prompt-extensions).\n */\n private writeInstructionsFile(): string | undefined {\n const parts: string[] = [];\n\n // 1. Read pre-rendered agent identity if available\n if (this.config.agentDir) {\n const agentFile = join(this.config.cwd, \".codex\", \"skaile-agent.md\");\n if (existsSync(agentFile)) {\n parts.push(readFileSync(agentFile, \"utf-8\"));\n }\n }\n\n // 2. Append runtime system prompt (resources, context, environment)\n if (this.config.systemPrompt) {\n parts.push(this.config.systemPrompt);\n }\n\n if (parts.length === 0) return undefined;\n\n // Write combined instructions to a session file\n const instrFile = join(this.config.cwd, \".codex\", \"skaile-session-instructions.md\");\n mkdirSync(dirname(instrFile), { recursive: true });\n writeFileSync(instrFile, parts.join(\"\\n\\n---\\n\\n\"));\n return instrFile;\n }\n\n private handleThreadEvent(event: ThreadEvent): boolean {\n switch (event.type) {\n case \"thread.started\":\n this._runtimeSessionId = event.thread_id;\n return false;\n\n case \"turn.started\":\n return false;\n\n case \"item.started\":\n case \"item.updated\":\n case \"item.completed\":\n this.handleThreadItem(event.item, event.type === \"item.completed\", event.type);\n return false;\n\n case \"turn.completed\": {\n this.flushToolResults();\n // Map Codex SDK `Usage` shape into the unified `TokenUsage`. Note\n // OpenAI's `input_tokens` is the TOTAL including cached reads, not\n // the fresh-prompt count Anthropic reports — consumers that want\n // a strict \"fresh input\" figure must subtract `cacheReadTokens`.\n const usage = event.usage;\n const tokens: TokenUsage | null = usage\n ? {\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n cacheReadTokens: usage.cached_input_tokens,\n }\n : null;\n this._lastTokens = tokens;\n this.emit(\"agent-event\", {\n type: \"result\",\n subtype: \"success\",\n summary: this.activeAssistantText || \"Task completed\",\n // Codex SDK does not report per-turn cost. `0` signals \"not\n // reported\" — pair with `tokens` to disambiguate from \"free\".\n costUsd: 0,\n ...(tokens ? { tokens } : {}),\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n\n case \"turn.failed\": {\n this.flushToolResults();\n const detail = this.classifyErrorMessage(event.error.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n\n case \"error\": {\n const detail = this.classifyErrorMessage(event.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n }\n }\n\n private handleThreadItem(item: ThreadItem, completed: boolean, phase: ThreadEvent[\"type\"]): void {\n switch (item.type) {\n case \"agent_message\":\n this.handleAgentMessage(item, completed);\n break;\n\n case \"command_execution\":\n this.handleCommandExecution(item, completed, phase);\n break;\n\n case \"mcp_tool_call\":\n this.handleMcpToolCall(item, completed, phase);\n break;\n\n case \"file_change\":\n this.handleFileChange(item, completed, phase);\n break;\n\n case \"web_search\":\n this.handleWebSearch(item, completed, phase);\n break;\n\n case \"error\":\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"CodexError\",\n content: \"\",\n data: { message: item.message },\n isError: true,\n });\n }\n break;\n\n default:\n break;\n }\n }\n\n private handleAgentMessage(item: AgentMessageItem, completed: boolean): void {\n if (this.activeAssistantItemId !== item.id) {\n if (this.activeAssistantItemId) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(this.activeAssistantText),\n } satisfies AgentEvent);\n }\n this.activeAssistantItemId = item.id;\n this.activeAssistantText = \"\";\n this.emit(\"agent-event\", {\n type: \"message_start\",\n message: this.buildAssistantMessage(\"\"),\n } satisfies AgentEvent);\n }\n\n const nextText = item.text ?? \"\";\n const delta = nextText.startsWith(this.activeAssistantText)\n ? nextText.slice(this.activeAssistantText.length)\n : nextText;\n this.activeAssistantText = nextText;\n\n if (delta) {\n this.emit(\"agent-event\", {\n type: \"message_update\",\n message: this.buildAssistantMessage(nextText),\n _textDelta: delta,\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(nextText),\n } satisfies AgentEvent);\n this.activeAssistantItemId = null;\n }\n }\n\n private handleCommandExecution(\n item: CommandExecutionItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"Bash\",\n tool: { name: \"Bash\" },\n input: { command: item.command },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"Bash\",\n content: \"\",\n data: {\n stdout: item.aggregated_output,\n stderr: \"\",\n exitCode: item.exit_code,\n status: item.status,\n command: item.command,\n },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"Bash\",\n } satisfies AgentEvent);\n }\n }\n\n private handleMcpToolCall(\n item: McpToolCallItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n const toolName = `mcp__${item.server}__${item.tool}`;\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: toolName,\n tool: { name: toolName },\n input: this.toObject(item.arguments),\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName,\n content: \"\",\n data: {\n status: item.status,\n content: item.result?.content,\n structuredContent: item.result?.structured_content,\n error: item.error?.message,\n },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName,\n } satisfies AgentEvent);\n }\n }\n\n private handleFileChange(\n item: FileChangeItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"ApplyPatch\",\n tool: { name: \"ApplyPatch\" },\n input: { changes: item.changes },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"ApplyPatch\",\n content: \"\",\n data: { status: item.status, changes: item.changes },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"ApplyPatch\",\n } satisfies AgentEvent);\n }\n }\n\n private handleWebSearch(\n item: WebSearchItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"WebSearch\",\n tool: { name: \"WebSearch\" },\n input: { query: item.query },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"WebSearch\",\n content: \"\",\n data: { query: item.query, status: \"completed\" },\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"WebSearch\",\n } satisfies AgentEvent);\n }\n }\n\n private flushToolResults(): void {\n if (this.pendingToolResults.length === 0) return;\n this.emit(\"agent-event\", {\n type: \"turn_end\",\n toolResults: [...this.pendingToolResults],\n } satisfies AgentEvent);\n this.pendingToolResults = [];\n }\n\n private buildAssistantMessage(text: string): AgentMessage {\n return {\n role: \"assistant\",\n content: [{ type: \"text\", text }],\n };\n }\n\n private toObject(value: unknown): Record<string, unknown> {\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n return { arguments: value };\n }\n\n private classifyErrorMessage(message: string): AgentError {\n // Shared keyword buckets live in error-classifier.ts; codex layers its own\n // hint copy plus a provider-specific `config` (sandbox/approval) bucket.\n const generic = classifyGenericErrorMessage(message);\n if (generic) {\n const hint =\n generic.category === \"auth\"\n ? \"Check your OpenAI API key configuration in settings or environment.\"\n : generic.category === \"rate_limit\"\n ? \"Codex hit an OpenAI rate limit. Wait briefly and try again.\"\n : generic.category === \"model\"\n ? \"The selected Codex model is unavailable. Choose a different model.\"\n : \"A network error occurred while talking to Codex.\";\n return { message, category: generic.category, retryable: generic.retryable, hint };\n }\n const lower = message.toLowerCase();\n if (\n lower.includes(\"sandbox\") ||\n lower.includes(\"approval\") ||\n lower.includes(\"permission\") ||\n lower.includes(\"git repo\")\n ) {\n return {\n message,\n category: \"config\",\n retryable: false,\n hint: \"Check Codex sandbox, approval, and workspace configuration.\",\n };\n }\n return {\n message,\n category: \"unknown\",\n retryable: true,\n hint: \"An unexpected Codex error occurred. Try the prompt again.\",\n };\n }\n}\n\n/**\n * `DriverTarget` wrapper for the codex driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`. The Codex SDK is lazy-imported inside\n * `start()` — this target export never pulls it at module top.\n */\nexport const codexDriverTarget: DriverTarget<AgentConfig> = {\n id: \"codex\",\n displayName: BUILTIN_DRIVER_CATALOG.codex?.name ?? \"OpenAI Codex\",\n apiVersion: 1,\n // Drivers take AgentConfig; passthrough — full schema validation is out of scope.\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new CodexDriver(config),\n listModels: async (apiKeys) =>\n new CodexDriver({ cwd: process.cwd(), sessionId: \"model-list\", apiKeys }).listModels(),\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../bridge/src/codex/inputs.ts","../../../bridge/src/codex/native-approvals.ts","../../../bridge/src/codex/native-mcp-approval.ts","../../../bridge/src/codex/questions.ts","../../../bridge/src/codex/managed-driver.ts","../../../bridge/src/drivers/codex.ts"],"names":["text","record","isAbsolute","join"],"mappings":"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","file":"codex.js","sourcesContent":["import { realpathSync, statSync } from \"node:fs\";\nimport { isAbsolute, join, relative } from \"node:path\";\nimport type { AgentPromptInput } from \"../types.js\";\nimport type { NativeRequests } from \"./native-protocol.generated.js\";\n\nconst invalid = () => new Error(\"CODEX_INPUT_INVALID\");\nconst inside = (root: string, path: string) => {\n const rel = relative(root, path);\n return rel !== \"\" && !rel.startsWith(\"..\") && !isAbsolute(rel);\n};\n\n/** Resolve attachments against trusted workspace/skill roots, never private credential state. */\nexport function codexPromptInput(\n input: AgentPromptInput,\n cwd: string,\n skills?: { source: string; target: string },\n): NativeRequests[\"turn/start\"][\"params\"][\"input\"] {\n if (\n !input ||\n typeof input.text !== \"string\" ||\n input.text.length > 1024 * 1024 ||\n (input.attachments !== undefined && !Array.isArray(input.attachments)) ||\n (input.attachments?.length ?? 0) > 32\n )\n throw invalid();\n const result: NativeRequests[\"turn/start\"][\"params\"][\"input\"] = [\n { type: \"text\", text: input.text },\n ];\n for (const attachment of input.attachments ?? []) {\n try {\n if (!attachment || typeof attachment.path !== \"string\") throw invalid();\n const root =\n attachment.type === \"skill\" && skills ? realpathSync(skills.source) : realpathSync(cwd);\n const path = realpathSync(\n isAbsolute(attachment.path) ? attachment.path : join(root, attachment.path),\n );\n if (!inside(root, path) || !statSync(path).isFile()) throw invalid();\n if (attachment.type === \"image\") result.push({ type: \"localImage\", path });\n else if (attachment.type === \"file\" || attachment.type === \"skill\") {\n if (!attachment.name || [...attachment.name].some((char) => char.charCodeAt(0) < 32))\n throw invalid();\n if (attachment.type === \"skill\") {\n if (!skills) throw invalid();\n const copied = realpathSync(join(skills.target, relative(root, path)));\n if (!inside(realpathSync(skills.target), copied) || !statSync(copied).isFile())\n throw invalid();\n result.push({ type: \"skill\", name: attachment.name, path: copied });\n } else result.push({ type: \"mention\", name: attachment.name, path });\n } else throw invalid();\n } catch {\n throw invalid();\n }\n }\n return result;\n}\n","import type { NativeApprovalDescription } from \"@skaile/workspaces/types\";\nimport type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport type { NativeNotifications, NativeServerRequests } from \"./native-protocol.generated.js\";\nimport {\n allowsNativeApprovalPath,\n isNativeApprovalPolicyActive,\n type NativeApprovalPolicy,\n} from \"./native-policy.js\";\nimport type { CodexQuestions } from \"./questions.js\";\n\ntype ApprovalMethod =\n | \"item/commandExecution/requestApproval\"\n | \"item/fileChange/requestApproval\"\n | \"item/permissions/requestApproval\";\ntype Identity = { itemId: string; threadId: string; turnId: string };\ntype Permissions =\n NativeServerRequests[\"item/permissions/requestApproval\"][\"params\"][\"permissions\"];\n\n/** Changes from a retained native file-change item in the same thread and turn. */\nexport type NativeApprovalFileChanges = Extract<\n NativeNotifications[\"item/started\"][\"item\"],\n { type: \"fileChange\" }\n>[\"changes\"];\n\n/** Driver-owned consent hooks; the existing native callback wrapper owns turn/generation binding. */\nexport function createCodexNativeApprovalHandlers(options: {\n questions: CodexQuestions;\n getPolicy: () => NativeApprovalPolicy | undefined;\n getFileChanges: (identity: Identity) => NativeApprovalFileChanges | undefined;\n}): Pick<CodexServerRequestHandlers, ApprovalMethod> {\n const active = (signal: AbortSignal, threadId: string) =>\n !signal.aborted && isNativeApprovalPolicyActive(options.getPolicy(), threadId);\n const text = (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0 && value.length <= 8192;\n const scoped = async (\n path: unknown,\n access: \"read\" | \"write\",\n signal: AbortSignal,\n threadId: string,\n ) =>\n active(signal, threadId) &&\n text(path) &&\n allowsNativeApprovalPath(options.getPolicy(), path, access) &&\n active(signal, threadId);\n const permissions = async (value: Permissions, signal: AbortSignal, threadId: string) => {\n if (\n value.network?.enabled ||\n (value.network != null && Object.keys(value.network).some((key) => key !== \"enabled\")) ||\n Object.keys(value).some((key) => ![\"network\", \"fileSystem\"].includes(key))\n )\n return false;\n const fs = value.fileSystem;\n if (!fs) return true;\n if (\n fs.entries != null ||\n fs.globScanMaxDepth != null ||\n Object.keys(fs).some((key) => ![\"read\", \"write\", \"entries\", \"globScanMaxDepth\"].includes(key))\n )\n return false;\n for (const access of [\"read\", \"write\"] as const) {\n const paths = fs[access];\n if (paths != null && (!Array.isArray(paths) || paths.length > 32)) return false;\n for (const path of paths ?? [])\n if (!(await scoped(path, access, signal, threadId))) return false;\n }\n return active(signal, threadId);\n };\n const consent = async (\n identity: Identity,\n approval: NativeApprovalDescription,\n signal: AbortSignal,\n ) => {\n if (\n !active(signal, identity.threadId) ||\n approval.details.length > 64 ||\n approval.details.some((detail) => detail.length > 8192) ||\n approval.details.reduce((sum, detail) => sum + detail.length, 0) > 65536\n )\n return false;\n try {\n return (\n (await options.questions.requestApproval(identity, approval, signal)) &&\n active(signal, identity.threadId)\n );\n } catch {\n return false;\n }\n };\n return {\n \"item/commandExecution/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n const allowed = async () =>\n active(signal, params.threadId) &&\n text(params.command) &&\n (params.kind == null || params.kind === \"command\") &&\n !params.environmentId &&\n !params.networkApprovalContext &&\n (params.availableDecisions == null || params.availableDecisions.includes(\"accept\")) &&\n (await scoped(params.cwd, \"read\", signal, params.threadId)) &&\n (!params.additionalPermissions ||\n (await permissions(params.additionalPermissions, signal, params.threadId)));\n if (!(await allowed())) return { decision: \"decline\" };\n const details = [`Command: ${params.command}`, `Directory: ${params.cwd}`];\n for (const access of [\"read\", \"write\"] as const)\n for (const path of params.additionalPermissions?.fileSystem?.[access] ?? [])\n details.push(`${access}: ${path}`);\n const accepted = await consent(params, { kind: \"command\", details }, signal);\n return { decision: accepted && (await allowed()) ? \"accept\" : \"decline\" };\n },\n \"item/fileChange/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n if (!active(signal, params.threadId)) return { decision: \"decline\" };\n const original = options.getFileChanges(params);\n if (!original?.length || original.length > 16) return { decision: \"decline\" };\n const changes = structuredClone(original);\n const snapshot = JSON.stringify(changes);\n const allowed = async () => {\n if (\n !active(signal, params.threadId) ||\n snapshot !== JSON.stringify(options.getFileChanges(params))\n )\n return false;\n if (\n params.grantRoot != null &&\n !(await scoped(params.grantRoot, \"write\", signal, params.threadId))\n )\n return false;\n for (const change of changes) {\n if (!text(change.diff) || !(await scoped(change.path, \"write\", signal, params.threadId)))\n return false;\n if (![\"add\", \"delete\", \"update\"].includes(change.kind.type)) return false;\n if (\n change.kind.type === \"update\" &&\n change.kind.move_path != null &&\n !(await scoped(change.kind.move_path, \"write\", signal, params.threadId))\n )\n return false;\n }\n return active(signal, params.threadId);\n };\n if (!(await allowed())) return { decision: \"decline\" };\n const details = changes.flatMap((change) => [\n `${change.kind.type}: ${change.path}${change.kind.type === \"update\" && change.kind.move_path ? ` → ${change.kind.move_path}` : \"\"}`,\n change.diff,\n ]);\n const accepted = await consent(params, { kind: \"file\", details }, signal);\n return { decision: accepted && (await allowed()) ? \"accept\" : \"decline\" };\n },\n \"item/permissions/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n const allowed = async () =>\n active(signal, params.threadId) &&\n !params.environmentId &&\n (await scoped(params.cwd, \"read\", signal, params.threadId)) &&\n (await permissions(params.permissions, signal, params.threadId));\n if (!(await allowed())) return { permissions: {}, scope: \"turn\" };\n const details = [`Directory: ${params.cwd}`];\n for (const access of [\"read\", \"write\"] as const)\n for (const path of params.permissions.fileSystem?.[access] ?? [])\n details.push(`${access}: ${path}`);\n if (details.length === 1) return { permissions: {}, scope: \"turn\" };\n const accepted = await consent(params, { kind: \"permissions\", details }, signal);\n return {\n permissions: accepted && (await allowed()) ? params.permissions : {},\n scope: \"turn\",\n };\n },\n };\n}\n","import type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport { isNativeApprovalPolicyActive, type NativeApprovalPolicy } from \"./native-policy.js\";\nimport type { CodexQuestions } from \"./questions.js\";\n\ntype Handler = NonNullable<CodexServerRequestHandlers[\"mcpServer/elicitation/request\"]>;\nconst record = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\nconst text = (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0 && Buffer.byteLength(value) <= 8192;\n\n/** Human consent for the configured runner callback, independent of downstream tool authorization. */\nexport function createCodexMcpApprovalHandler(options: {\n serverName: string | undefined;\n questions: CodexQuestions;\n getPolicy: () => NativeApprovalPolicy | undefined;\n bindingActive: () => boolean;\n}): Handler {\n return async (input, signal) => {\n const decline = { action: \"decline\" as const, content: null, _meta: null };\n try {\n const params = structuredClone(input);\n const active = () =>\n !signal.aborted &&\n options.bindingActive() &&\n isNativeApprovalPolicyActive(options.getPolicy(), params.threadId);\n if (\n !active() ||\n !text(options.serverName) ||\n params.serverName !== options.serverName ||\n !text(params.threadId) ||\n !text(params.turnId) ||\n params.mode !== \"form\" ||\n !text(params.message) ||\n Object.keys(params).some(\n (key) =>\n ![\n \"threadId\",\n \"turnId\",\n \"serverName\",\n \"mode\",\n \"message\",\n \"requestedSchema\",\n \"_meta\",\n ].includes(key),\n ) ||\n !record(params._meta) ||\n params._meta.codex_approval_kind !== \"mcp_tool_call\" ||\n !record(params.requestedSchema) ||\n params.requestedSchema.type !== \"object\" ||\n !record(params.requestedSchema.properties) ||\n Object.keys(params.requestedSchema.properties).length !== 0 ||\n Object.keys(params.requestedSchema).some(\n (key) => ![\"type\", \"properties\", \"required\"].includes(key),\n ) ||\n (params.requestedSchema.required !== undefined &&\n (!Array.isArray(params.requestedSchema.required) ||\n params.requestedSchema.required.length !== 0)) ||\n Buffer.byteLength(JSON.stringify(params._meta)) > 65536\n )\n return decline;\n const accepted = await options.questions.requestApproval(\n undefined,\n {\n kind: \"mcp\",\n details: [\n `Configured MCP server: ${options.serverName}`,\n params.message,\n \"This is native request presentation, not an independently verified tool identity. Tool permissions are checked again when dispatched.\",\n ],\n },\n signal,\n );\n return accepted && active() ? { action: \"accept\", content: null, _meta: null } : decline;\n } catch {\n return decline;\n }\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { NativeApprovalDescription } from \"@skaile/workspaces/types\";\nimport type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport type { AgentEvent } from \"../types.js\";\nimport type { NativeServerRequests } from \"./native-protocol.generated.js\";\n\ntype InputRequest = NativeServerRequests[\"item/tool/requestUserInput\"];\n\n/** One correlated native question batch, settled only by matching replies or cancellation. */\nexport class CodexQuestions {\n private pending?: {\n id: string;\n questions: InputRequest[\"params\"][\"questions\"];\n answers: InputRequest[\"result\"][\"answers\"];\n approval?: NativeApprovalDescription;\n finish: (result?: InputRequest[\"result\"]) => void;\n };\n constructor(private readonly emit: (event: AgentEvent) => void) {}\n\n readonly request: NonNullable<CodexServerRequestHandlers[\"item/tool/requestUserInput\"]> = async (\n params,\n signal,\n ) => this.park(params, signal);\n\n /** Park native consent; MCP uses only local correlation because it supplies no native item ID. */\n async requestApproval(\n identity: Pick<InputRequest[\"params\"], \"itemId\" | \"threadId\" | \"turnId\"> | undefined,\n approval: NativeApprovalDescription,\n signal: AbortSignal,\n ): Promise<boolean> {\n const result = await this.park(\n {\n ...identity,\n isBlocking: true,\n questions: [\n {\n id: \"native-approval\",\n header: \"Approval\",\n question:\n approval.kind === \"permissions\"\n ? \"Allow these permissions for the current turn?\"\n : approval.kind === \"mcp\"\n ? \"Allow this native MCP request once?\"\n : \"Allow this native action once?\",\n options: [\n {\n label: \"Approve once\",\n description:\n approval.kind === \"permissions\"\n ? \"Allow for the current turn.\"\n : \"Allow only this request.\",\n },\n { label: \"Deny\", description: \"Do not allow this request.\" },\n ],\n },\n ],\n },\n signal,\n approval,\n );\n return result.answers[\"native-approval\"]?.answers[0] === \"Approve once\";\n }\n\n private async park(\n params: Omit<InputRequest[\"params\"], \"itemId\" | \"threadId\" | \"turnId\"> & { itemId?: string },\n signal: AbortSignal,\n approval?: NativeApprovalDescription,\n ): Promise<InputRequest[\"result\"]> {\n signal.throwIfAborted();\n if (\n this.pending ||\n !params.isBlocking ||\n !Array.isArray(params.questions) ||\n params.questions.length === 0 ||\n params.questions.length > 16 ||\n params.questions.some((q) => !q.id || !q.question || q.isSecret) ||\n new Set(params.questions.map((q) => q.id)).size !== params.questions.length ||\n new Set(params.questions.map((q) => q.question)).size !== params.questions.length\n )\n throw new Error(\"CODEX_INPUT_UNSUPPORTED\");\n params = structuredClone(params);\n approval = approval ? structuredClone(approval) : undefined;\n const id = randomUUID();\n const eventId = params.itemId ?? `local-consent:${id}`;\n return new Promise((resolve, reject) => {\n const abort = () => finish();\n const finish = (result?: InputRequest[\"result\"]) => {\n if (this.pending?.id !== id) return;\n this.pending = undefined;\n signal.removeEventListener(\"abort\", abort);\n if (result && !signal.aborted) resolve(result);\n else reject(new Error(\"CODEX_INPUT_CANCELLED\"));\n };\n this.pending = {\n id,\n questions: params.questions,\n answers: Object.create(null),\n finish,\n approval,\n };\n const input = {\n requestId: id,\n questions: structuredClone(params.questions),\n ...(approval ? { approval: structuredClone(approval) } : {}),\n };\n signal.addEventListener(\"abort\", abort, { once: true });\n if (signal.aborted) {\n abort();\n return;\n }\n this.emit({\n type: \"message_start\",\n message: {\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n name: \"AskUserQuestion\",\n id: eventId,\n input,\n },\n ],\n },\n });\n if (this.pending?.id !== id || signal.aborted) return;\n this.emit({\n type: \"tool_call\",\n name: \"AskUserQuestion\",\n tool: { name: \"AskUserQuestion\" },\n toolCallId: eventId,\n input,\n });\n });\n }\n\n get active(): boolean {\n return Boolean(this.pending);\n }\n\n answer(answer: string, question?: string, requestId?: string): boolean {\n const pending = this.pending;\n if (!pending || pending.id !== requestId || typeof answer !== \"string\") return false;\n if (\n pending.approval &&\n (question !== pending.questions[0]?.question || ![\"Approve once\", \"Deny\"].includes(answer))\n )\n return false;\n const q =\n question === undefined\n ? pending.questions.find((entry) => !Object.hasOwn(pending.answers, entry.id))\n : pending.questions.find((entry) => entry.question === question);\n if (!q || Object.hasOwn(pending.answers, q.id)) return false;\n pending.answers[q.id] = { answers: [answer] };\n if (pending.questions.every((entry) => Object.hasOwn(pending.answers, entry.id)))\n pending.finish({ answers: pending.answers });\n return true;\n }\n}\n","import { isAbsolute, join } from \"node:path\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport type { CodexCredentialDelivery, TokenUsage } from \"@skaile/workspaces/types\";\nimport { CodexAppServerClient, type CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport {\n AgentDriver,\n type AgentConfig,\n type AgentEvent,\n type AgentMessage,\n type AgentPromptInput,\n type CodexManagedRuntimeOptions,\n type CodexNativeMcpDiagnostics,\n type CodexToolTransport,\n} from \"../types.js\";\nimport { parseCodexCredential, parseCodexRefreshResult } from \"./credentials.js\";\nimport { codexInstanceEnvironment, prepareCodexInstance } from \"./instance-state.js\";\nimport { codexPromptInput } from \"./inputs.js\";\nimport {\n prepareNativePolicy,\n activateNativeApprovalPolicy,\n isNativeApprovalPolicyActive,\n type NativeApprovalPolicy,\n} from \"./native-policy.js\";\nimport {\n createCodexNativeApprovalHandlers,\n type NativeApprovalFileChanges,\n} from \"./native-approvals.js\";\nimport { createCodexMcpApprovalHandler } from \"./native-mcp-approval.js\";\nimport { CodexNativeStateUnavailable } from \"./native-state.js\";\nimport { CodexQuestions } from \"./questions.js\";\nimport type { NativeNotifications } from \"./native-protocol.generated.js\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\nconst failure = (code = \"CODEX_RUNTIME_UNSUPPORTED\") => new Error(code);\nconst nativeUsage = (value: Record<string, unknown>): TokenUsage => ({\n ...(typeof value.inputTokens === \"number\" ? { inputTokens: value.inputTokens } : {}),\n ...(typeof value.outputTokens === \"number\" ? { outputTokens: value.outputTokens } : {}),\n ...(typeof value.cachedInputTokens === \"number\"\n ? { cacheReadTokens: value.cachedInputTokens }\n : {}),\n ...(typeof value.reasoningOutputTokens === \"number\"\n ? { reasoningTokens: value.reasoningOutputTokens }\n : {}),\n ...(typeof value.totalTokens === \"number\" ? { totalTokens: value.totalTokens } : {}),\n});\nconst subtractUsage = (total: TokenUsage, baseline?: TokenUsage): TokenUsage => {\n const delta = (value?: number, before?: number) =>\n value === undefined ? undefined : Math.max(0, value - (before ?? 0));\n return {\n ...(delta(total.inputTokens, baseline?.inputTokens) !== undefined\n ? { inputTokens: delta(total.inputTokens, baseline?.inputTokens) }\n : {}),\n ...(delta(total.outputTokens, baseline?.outputTokens) !== undefined\n ? { outputTokens: delta(total.outputTokens, baseline?.outputTokens) }\n : {}),\n ...(delta(total.cacheReadTokens, baseline?.cacheReadTokens) !== undefined\n ? {\n cacheReadTokens: delta(total.cacheReadTokens, baseline?.cacheReadTokens),\n }\n : {}),\n ...(delta(total.reasoningTokens, baseline?.reasoningTokens) !== undefined\n ? {\n reasoningTokens: delta(total.reasoningTokens, baseline?.reasoningTokens),\n }\n : {}),\n ...(delta(total.totalTokens, baseline?.totalTokens) !== undefined\n ? { totalTokens: delta(total.totalTokens, baseline?.totalTokens) }\n : {}),\n };\n};\nconst addUsage = (left: TokenUsage | undefined, right: TokenUsage): TokenUsage => {\n const result: TokenUsage = {};\n for (const key of [\n \"inputTokens\",\n \"outputTokens\",\n \"cacheReadTokens\",\n \"reasoningTokens\",\n \"totalTokens\",\n ] as const) {\n if (left?.[key] !== undefined || right[key] !== undefined)\n result[key] = (left?.[key] ?? 0) + (right[key] ?? 0);\n }\n return result;\n};\nconst limit = (value: number | undefined, fallback: number) => {\n const result = value ?? fallback;\n if (!Number.isSafeInteger(result) || result <= 0 || result > 1_800_000)\n throw failure(\"AI_PROFILE_INVALID\");\n return result;\n};\nasync function bounded<T>(work: Promise<T>, signal: AbortSignal, ms: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let cancel = () => {};\n try {\n return await Promise.race([\n work,\n new Promise<never>((_, reject) => {\n cancel = () => reject(failure());\n if (signal.aborted) cancel();\n else signal.addEventListener(\"abort\", cancel, { once: true });\n timer = setTimeout(() => reject(failure()), ms);\n }),\n ]);\n } finally {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", cancel);\n }\n}\ntype ActiveTurn = {\n id?: string;\n controller: AbortController;\n done: Promise<void>;\n ready: Promise<void>;\n readyNow: () => void;\n finish: () => void;\n timer: ReturnType<typeof setTimeout>;\n events: Array<{ method: string; params: Record<string, unknown> }>;\n messages: Map<string, string>;\n fileChanges: Map<string, string>;\n toolResults: AgentMessage[];\n toolItems: Set<string>;\n completedToolItems: Set<string>;\n failureCode?: string;\n refreshUsed: boolean;\n usage?: TokenUsage;\n usageBaseline?: TokenUsage;\n usageCursor?: TokenUsage;\n contextTokens?: number;\n contextWindow?: number;\n actualModel: string;\n};\n\n/** Internal managed implementation behind the existing CodexDriver registry identity. */\nexport class ManagedCodexDriver extends AgentDriver {\n readonly driverInfo = {\n id: \"codex\",\n name: \"OpenAI Codex\",\n modelAgnostic: false,\n supportsInBandAbort: true,\n };\n private client?: CodexAppServerClient;\n private connecting?: Promise<CodexAppServerClient>;\n private options?: CodexManagedRuntimeOptions;\n private credential?: CodexCredentialDelivery;\n private nativeApprovalPolicy?: NativeApprovalPolicy;\n private instance?: ReturnType<typeof prepareCodexInstance>;\n private tools?: CodexToolTransport;\n private mcpStartup: CodexNativeMcpDiagnostics[\"startupAtEnd\"] = \"unknown\";\n private pendingMcpStartup?: {\n threadId: string;\n status: CodexNativeMcpDiagnostics[\"startupAtEnd\"];\n };\n private mcpDiagnostics: CodexNativeMcpDiagnostics = {\n startupBeforeTurn: \"unknown\",\n startupAtEnd: \"unknown\",\n toolsListBeforeTurn: 0,\n toolsListTotal: 0,\n toolsCallTotal: 0,\n nativeMcpToolItemCount: 0,\n };\n private controller = new AbortController();\n private generation = 0;\n private killed = false;\n private broken = false;\n private cleanupUncertain = false;\n private unexpectedClose = false;\n private starting?: Promise<void>;\n private closing: Promise<void> = Promise.resolve();\n private threadId?: string;\n private lastThreadId?: string;\n private resetting?: Promise<void>;\n private pendingPatch?: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>;\n private active?: ActiveTurn;\n private threadUsageTotal?: TokenUsage;\n private resumeUsageTurnIds = new Set<string>();\n private queue: Promise<void> = Promise.resolve();\n private queued = 0;\n private admittedTurns = 0;\n private loginCompleted?: {\n resolve: () => void;\n reject: (error: Error) => void;\n };\n private startupRefreshUsed = false;\n private startupAuthAttempted = false;\n private readonly questions = new CodexQuestions((event) => this.event(event));\n\n override get acceptsReplyAsPrompt(): boolean {\n return false;\n }\n override hasPendingQuestion(): boolean {\n return this.questions.active;\n }\n override answerQuestion(answer: string, question?: string, requestId?: string): boolean {\n return this.questions.answer(answer, question, requestId);\n }\n\n constructor(private config: AgentConfig) {\n super();\n }\n override get runtimeSessionId(): string | undefined {\n return this.threadId ?? this.lastThreadId;\n }\n get isRunning(): boolean {\n return Boolean(this.client && this.threadId && !this.killed && !this.broken);\n }\n override getModel(): string | undefined {\n return this.config.model;\n }\n\n async start(): Promise<void> {\n if (this.killed || this.broken) throw failure();\n if (this.threadId && this.client) return;\n if (this.starting) return this.starting;\n this.starting = this.initialize()\n .catch(async (error) => {\n this.broken = true;\n await this.closeGeneration();\n if (\n error instanceof CodexNativeStateUnavailable &&\n (this.cleanupUncertain ||\n this.unexpectedClose ||\n this.killed ||\n this.startupAuthAttempted)\n )\n throw failure();\n const safe =\n error instanceof Error && /^(AI_PROFILE_INVALID|CODEX_[A-Z_]+)$/.test(error.message)\n ? error\n : failure();\n throw safe;\n })\n .finally(() => {\n this.starting = undefined;\n });\n return this.starting;\n }\n\n private async initialize(): Promise<void> {\n await this.closing;\n if (this.killed) throw failure();\n const options = this.config.driverOptions?.codex?.managedRuntime;\n const tuning = this.config.driverOptions?.codex;\n if (\n tuning?.authSource !== \"managed\" ||\n !options ||\n typeof options.prepareTools !== \"function\" ||\n !isAbsolute(options.executable) ||\n !this.config.model ||\n !tuning.reasoningEffort ||\n !tuning.approvalPolicy ||\n tuning.approvalPolicy === \"on-failure\" ||\n !tuning.sandboxMode ||\n tuning.sandboxMode === \"danger-full-access\" ||\n (this.config.provider && this.config.provider !== \"openai\") ||\n this.config.apiKeys?.openai ||\n this.config.env?.OPENAI_API_KEY ||\n (options.nativeTurnBudget !== undefined && options.nativeTurnBudget !== 1)\n )\n throw failure(\"AI_PROFILE_INVALID\");\n this.options = options;\n const timeout = limit(options.requestTimeoutMs, 15_000);\n limit(options.turnTimeoutMs, 300_000);\n try {\n this.credential = parseCodexCredential(this.credential ?? options.credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n if (this.credential.configId !== this.config.aiProviderConfigId)\n throw failure(\"AI_PROFILE_INVALID\");\n const privatePolicy = prepareNativePolicy({\n cwd: this.config.cwd,\n privateRoot: options.privateRoot,\n privateDirectory: options.privateDirectory,\n sandboxMode: tuning.sandboxMode,\n });\n this.instance = prepareCodexInstance(this.config, options, this.credential);\n const generation = ++this.generation;\n const mcpReplies = new WeakMap<object, () => boolean>();\n this.controller = new AbortController();\n this.startupRefreshUsed = false;\n this.startupAuthAttempted = false;\n const handlers: CodexServerRequestHandlers = {\n \"account/chatgptAuthTokens/refresh\": async (params, signal) => {\n const active = this.active;\n if (!active) this.startupAuthAttempted = true;\n const cancellation = AbortSignal.any([\n signal,\n this.controller.signal,\n ...(active ? [active.controller.signal] : []),\n ]);\n try {\n return await this.refresh(params, cancellation);\n } catch {\n if (active && this.active === active) active.failureCode = \"CODEX_AUTH_UNAVAILABLE\";\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n },\n };\n const authMode = this.credential.kind === \"codex-subscription\" ? \"chatgpt\" : \"api\";\n const nativePolicy = {\n cli_auth_credentials_store: \"ephemeral\",\n forced_login_method: authMode,\n model_provider: \"openai\",\n model: this.config.model,\n model_instructions_file: this.instance.instructionFile,\n shell_environment_policy: {\n inherit: \"none\",\n set: { PATH: options.environment.PATH ?? \"/usr/bin:/bin\" },\n },\n mcp_servers: {},\n };\n const overrides = Object.entries({\n cli_auth_credentials_store: \"ephemeral\",\n forced_login_method: authMode,\n model_provider: \"openai\",\n model: this.config.model,\n model_instructions_file: this.instance.instructionFile,\n \"shell_environment_policy.inherit\": \"none\",\n \"shell_environment_policy.set.PATH\": options.environment.PATH ?? \"/usr/bin:/bin\",\n }).flatMap(([key, value]) => [\"-c\", `${key}=${JSON.stringify(value)}`]);\n overrides.push(\"-c\", \"mcp_servers={}\");\n const connecting = CodexAppServerClient.connect(\n {\n command: options.executable,\n args: [\n ...(options.executableArgs ?? []),\n ...overrides,\n ...privatePolicy.cliArgs,\n \"app-server\",\n \"--stdio\",\n ],\n cwd: this.instance.root,\n env: codexInstanceEnvironment(options.environment, this.instance.home),\n clientInfo: { name: \"skaile-managed-codex\", version: \"1\" },\n processGroup: true,\n requestTimeoutMs: timeout,\n serverRequestTimeoutMs: Math.min(limit(options.interactionTimeoutMs, 300_000), 300_000),\n onServerRequest: handlers,\n canReplyToServerRequest: (method, params) => {\n if (method !== \"mcpServer/elicitation/request\") return true;\n return record(params) && (mcpReplies.get(params)?.() ?? false);\n },\n onNotification: (method, params) => {\n if (generation === this.generation) this.notification(method, params);\n },\n onClose: () => {\n if (generation !== this.generation) return;\n this.unexpectedClose = true;\n this.broken = true;\n this.loginCompleted?.reject(failure());\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n },\n },\n this.controller.signal,\n );\n this.connecting = connecting;\n try {\n this.client = await connecting;\n } finally {\n if (this.connecting === connecting) this.connecting = undefined;\n }\n if (generation !== this.generation || this.killed) throw failure();\n await this.authenticate(timeout);\n const toolsPromise = options.prepareTools(this.controller.signal).then(async (tools) => {\n if (generation !== this.generation || this.controller.signal.aborted) {\n await tools.dispose().catch(() => {});\n throw failure();\n }\n return tools;\n });\n try {\n this.tools = await bounded(toolsPromise, this.controller.signal, timeout);\n } catch {\n throw failure(\"CODEX_REQUIRED_TOOL_UNAVAILABLE\");\n }\n if (\n !this.tools ||\n !record(this.tools.mcpServers) ||\n typeof this.tools.dispose !== \"function\" ||\n (Object.keys(this.tools.mcpServers).length === 0 &&\n Object.keys(this.tools.onServerRequest ?? {}).length === 0)\n )\n throw failure(\"CODEX_REQUIRED_TOOL_UNAVAILABLE\");\n if (this.tools.onServerRequest?.[\"item/tool/requestUserInput\"])\n throw failure(\"AI_PROFILE_INVALID\");\n const nativeApprovals = createCodexNativeApprovalHandlers({\n questions: this.questions,\n getPolicy: () => (tuning.approvalPolicy === \"never\" ? undefined : this.nativeApprovalPolicy),\n getFileChanges: ({ itemId, threadId, turnId }) => {\n const active = this.active;\n if (\n !active ||\n active.controller.signal.aborted ||\n threadId !== this.threadId ||\n turnId !== active.id\n )\n return undefined;\n const snapshot = active.fileChanges.get(itemId);\n return snapshot ? (JSON.parse(snapshot) as NativeApprovalFileChanges) : undefined;\n },\n });\n const approvalTools = this.tools;\n const approvalServerName = approvalTools.approvalServerName;\n const approvalServer = approvalServerName\n ? approvalTools.mcpServers[approvalServerName]\n : undefined;\n const approvalServerSnapshot = structuredClone(approvalServer);\n const mcpBindingActive = () =>\n this.tools === approvalTools &&\n approvalTools.approvalServerName === approvalServerName &&\n Boolean(approvalServerName) &&\n Object.hasOwn(approvalTools.mcpServers, approvalServerName!) &&\n record(approvalServer) &&\n approvalTools.mcpServers[approvalServerName!] === approvalServer &&\n isDeepStrictEqual(approvalServer, approvalServerSnapshot);\n const mcpPolicy = () =>\n tuning.approvalPolicy === \"never\" ? undefined : this.nativeApprovalPolicy;\n const mcpApproval = createCodexMcpApprovalHandler({\n serverName: approvalServerName,\n questions: this.questions,\n getPolicy: mcpPolicy,\n bindingActive: mcpBindingActive,\n });\n for (const [method, handler] of Object.entries({\n ...this.tools.onServerRequest,\n ...nativeApprovals,\n \"item/tool/requestUserInput\": this.questions.request,\n \"mcpServer/elicitation/request\": mcpApproval,\n })) {\n if (method === \"account/chatgptAuthTokens/refresh\" || !handler)\n throw failure(\"AI_PROFILE_INVALID\");\n (handlers as Record<string, (params: unknown, signal: AbortSignal) => Promise<unknown>>)[\n method\n ] = async (params, signal) => {\n const active = this.active;\n if (generation !== this.generation || !active || !record(params)) throw failure();\n await active.ready;\n if (\n generation !== this.generation ||\n this.active !== active ||\n params.threadId !== this.threadId ||\n params.turnId !== active.id\n )\n throw failure();\n const cancellation = AbortSignal.any([signal, active.controller.signal]);\n if (cancellation.aborted) throw failure();\n if (method === \"mcpServer/elicitation/request\") {\n mcpReplies.set(\n params,\n () =>\n generation === this.generation &&\n this.active === active &&\n !cancellation.aborted &&\n params.threadId === this.threadId &&\n params.turnId === active.id &&\n mcpBindingActive() &&\n isNativeApprovalPolicyActive(mcpPolicy(), this.threadId ?? \"\"),\n );\n }\n const result = await (\n handler as (params: unknown, signal: AbortSignal) => Promise<unknown>\n )(params, cancellation);\n if (generation !== this.generation || cancellation.aborted || this.active !== active)\n throw failure();\n return result;\n };\n }\n if (this.tools.instructions) this.instance.setToolInstructions(this.tools.instructions);\n const threadParams = {\n model: this.config.model,\n modelProvider: \"openai\",\n cwd: this.instance.cwd,\n approvalPolicy: tuning.approvalPolicy,\n permissions: \"managed\",\n config: {\n ...nativePolicy,\n ...privatePolicy.config,\n mcp_servers: this.tools.mcpServers,\n model_reasoning_effort: this.config.effort ?? tuning.reasoningEffort,\n },\n };\n const resuming = Boolean(this.config.resumeSessionId);\n this.threadUsageTotal = resuming ? (this.threadUsageTotal ?? {}) : {};\n this.resumeUsageTurnIds.clear();\n const response = resuming\n ? await this.client.request(\"thread/resume\", {\n ...threadParams,\n threadId: this.config.resumeSessionId!,\n excludeTurns: false,\n })\n : await this.client.request(\"thread/start\", {\n ...threadParams,\n allowProviderModelFallback: false,\n });\n if (!record(response) || response.model !== this.config.model)\n throw failure(\"CODEX_MODEL_UNAVAILABLE\");\n if (\n !record(response.thread) ||\n typeof response.thread.id !== \"string\" ||\n (resuming && response.thread.id !== this.config.resumeSessionId) ||\n (resuming && !Array.isArray(response.thread.turns)) ||\n response.reasoningEffort !== (this.config.effort ?? tuning.reasoningEffort) ||\n response.modelProvider !== \"openai\" ||\n response.approvalPolicy !== tuning.approvalPolicy\n )\n throw failure(\"AI_PROFILE_INVALID\");\n if (generation !== this.generation || this.killed) throw failure();\n this.resumeUsageTurnIds = new Set(\n resuming && Array.isArray(response.thread.turns)\n ? response.thread.turns.flatMap((turn) =>\n record(turn) && typeof turn.id === \"string\" ? [turn.id] : [],\n )\n : [],\n );\n this.nativeApprovalPolicy = activateNativeApprovalPolicy(\n privatePolicy,\n response,\n this.controller.signal,\n );\n this.threadId = response.thread.id;\n this.mcpStartup =\n this.pendingMcpStartup?.threadId === this.threadId\n ? this.pendingMcpStartup.status\n : \"unknown\";\n this.pendingMcpStartup = undefined;\n this.lastThreadId = this.threadId;\n this.instance.bindThread(this.threadId);\n }\n\n private async authenticate(timeout: number): Promise<void> {\n const credential = this.credential!;\n if (credential.kind === \"openai-api-key\") {\n const result = await this.client!.request(\"account/login/start\", {\n type: \"apiKey\",\n apiKey: credential.apiKey,\n });\n if (result.type !== \"apiKey\") throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n return;\n }\n const completion = new Promise<void>((resolve, reject) => {\n this.loginCompleted = { resolve, reject };\n });\n // A native completion can precede its RPC reply; install the waiter first.\n const wait = bounded(completion, this.controller.signal, timeout);\n void wait.catch(() => {});\n try {\n const result = await this.client!.request(\"account/login/start\", {\n type: \"chatgptAuthTokens\",\n accessToken: credential.accessToken,\n chatgptAccountId: credential.chatgptAccountId,\n chatgptPlanType: credential.chatgptPlanType ?? null,\n });\n if (result.type !== \"chatgptAuthTokens\") throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n await wait;\n } finally {\n this.loginCompleted = undefined;\n }\n }\n\n private async refresh(params: unknown, signal: AbortSignal) {\n const credential = this.credential;\n if (\n !record(params) ||\n params.reason !== \"unauthorized\" ||\n !credential ||\n credential.kind !== \"codex-subscription\" ||\n (params.previousAccountId != null &&\n params.previousAccountId !== credential.chatgptAccountId) ||\n !this.options?.refreshCredential ||\n (this.active ? this.active.refreshUsed : this.startupRefreshUsed)\n )\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n if (this.active) this.active.refreshUsed = true;\n else this.startupRefreshUsed = true;\n const result = await this.options.refreshCredential(\n {\n kind: \"codex-subscription\",\n configId: credential.configId,\n credentialVersion: credential.credentialVersion,\n reason: \"retry-401\",\n },\n signal,\n );\n if (signal.aborted) throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n let parsed: ReturnType<typeof parseCodexRefreshResult>;\n try {\n parsed = parseCodexRefreshResult(result, credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n if (!parsed.ok) throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n this.credential = parsed.credential;\n return {\n accessToken: parsed.credential.accessToken,\n chatgptAccountId: parsed.credential.chatgptAccountId,\n chatgptPlanType: parsed.credential.chatgptPlanType ?? null,\n };\n }\n\n prompt(message: string): Promise<void> {\n return this.promptInput({ text: message });\n }\n\n override promptInput(input: AgentPromptInput): Promise<void> {\n const message = structuredClone(input);\n const turnBudget = this.config.driverOptions?.codex?.managedRuntime?.nativeTurnBudget;\n if (\n this.killed ||\n this.broken ||\n this.resetting ||\n this.queued >= 32 ||\n (turnBudget !== undefined && this.admittedTurns >= turnBudget)\n )\n return Promise.reject(failure());\n if (turnBudget !== undefined) this.admittedTurns++;\n this.queued++;\n const task = this.queue.then(() => this.runTurn(message));\n this.queue = task\n .catch(() => {})\n .finally(() => {\n this.queued--;\n });\n return task;\n }\n\n private async runTurn(message: AgentPromptInput): Promise<void> {\n if (this.resetting) throw failure();\n await this.start();\n if (this.killed || this.broken || this.resetting) throw failure();\n if (this.pendingPatch) {\n this.config = { ...this.config, ...this.pendingPatch };\n this.pendingPatch = undefined;\n }\n if (!this.config.model) throw failure(\"AI_PROFILE_INVALID\");\n await this.tools?.validate?.();\n if (this.tools?.needsReload?.()) {\n this.config = { ...this.config, resumeSessionId: this.threadId };\n await this.closeGeneration();\n await this.start();\n }\n const input = codexPromptInput(\n message,\n this.instance!.cwd,\n this.options?.skillsDirectory\n ? {\n source: this.options.skillsDirectory,\n target: join(this.instance!.home, \"skills\"),\n }\n : undefined,\n );\n try {\n parseCodexCredential(this.credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n let finish!: () => void;\n let readyNow!: () => void;\n const ready = new Promise<void>((resolve) => {\n readyNow = resolve;\n });\n const done = new Promise<void>((resolve) => {\n finish = resolve;\n });\n const active: ActiveTurn = {\n controller: new AbortController(),\n done,\n finish,\n ready,\n readyNow,\n timer: setTimeout(\n () => {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n this.broken = true;\n void this.closeGeneration();\n },\n limit(this.options?.turnTimeoutMs, 300_000),\n ),\n events: [],\n messages: new Map(),\n fileChanges: new Map(),\n toolResults: [],\n toolItems: new Set(),\n completedToolItems: new Set(),\n refreshUsed: false,\n usageBaseline: this.threadUsageTotal,\n actualModel: this.config.model!,\n };\n this.active = active;\n this.mcpDiagnostics.nativeMcpToolItemCount = 0;\n this.observeMcp(true);\n this.tools?.beginTurn?.(active.controller.signal);\n try {\n const response = await this.client!.request(\"turn/start\", {\n threadId: this.threadId!,\n permissions: \"managed\",\n input,\n model: this.config.model,\n effort: this.config.effort ?? this.config.driverOptions!.codex!.reasoningEffort,\n });\n if (this.active !== active) return;\n if (!record(response.turn) || typeof response.turn.id !== \"string\") throw failure();\n active.id = response.turn.id;\n active.readyNow();\n for (const event of active.events.splice(0)) this.notification(event.method, event.params);\n if (this.active === active && response.turn.status !== \"inProgress\")\n this.complete(response.turn);\n await done;\n } catch {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n }\n }\n\n async abort(): Promise<void> {\n const active = this.active;\n if (!active) return;\n active.controller.abort();\n try {\n if (!active.id)\n await bounded(\n active.ready,\n this.controller.signal,\n limit(this.options?.requestTimeoutMs, 15_000),\n );\n if (this.active !== active) return;\n await this.client!.request(\"turn/interrupt\", {\n threadId: this.threadId!,\n turnId: active.id!,\n });\n await bounded(\n active.done,\n this.controller.signal,\n limit(this.options?.requestTimeoutMs, 15_000),\n );\n } catch {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n this.broken = true;\n await this.closeGeneration();\n }\n }\n\n kill(): void {\n if (this.killed) return;\n this.killed = true;\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n }\n override async dispose(): Promise<void> {\n this.kill();\n await this.starting?.catch(() => {});\n await this.closing;\n }\n async resetSession(): Promise<void> {\n if (this.killed || this.broken) throw failure();\n if (this.resetting) return this.resetting;\n this.resetting = Promise.resolve()\n .then(async () => {\n if (this.active) await this.abort();\n await this.queue;\n await this.starting;\n await this.closeGeneration();\n if (this.killed || this.broken) throw failure();\n this.config = { ...this.config, resumeSessionId: undefined };\n this.lastThreadId = undefined;\n this.threadUsageTotal = undefined;\n })\n .finally(() => {\n this.resetting = undefined;\n });\n return this.resetting;\n }\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n this.pendingPatch = { ...this.pendingPatch, ...patch };\n }\n\n private closeGeneration(): Promise<void> {\n const generation = ++this.generation;\n const finalMcp = { ...this.mcpDiagnostics };\n this.mcpStartup = \"unknown\";\n this.pendingMcpStartup = undefined;\n this.controller.abort();\n this.nativeApprovalPolicy = undefined;\n this.loginCompleted?.reject(failure());\n this.loginCompleted = undefined;\n const client = this.client;\n this.client = undefined;\n const connecting = this.connecting;\n this.connecting = undefined;\n const tools = this.tools;\n this.tools = undefined;\n const instance = this.instance;\n this.instance = undefined;\n this.threadId = undefined;\n this.closing = this.closing\n .then(async () => {\n try {\n // The handshake owns a spawned child before it returns the client. Join its\n // cancellation/disposal before releasing the instance lease.\n const pendingClient = await connecting?.catch(() => undefined);\n await client?.dispose();\n if (pendingClient && pendingClient !== client) await pendingClient.dispose();\n if (\n (client && !client.terminationConfirmed) ||\n (pendingClient && !pendingClient.terminationConfirmed)\n )\n this.cleanupUncertain = true;\n if (tools) {\n try {\n await bounded(\n Promise.resolve().then(() => tools.dispose()),\n new AbortController().signal,\n 1000,\n );\n if (generation === this.generation && !this.cleanupUncertain)\n this.observeClosedMcp(tools, finalMcp);\n } catch {\n this.cleanupUncertain = true;\n }\n }\n } finally {\n instance?.release();\n }\n })\n .catch(() => {\n this.cleanupUncertain = true;\n });\n return this.closing;\n }\n\n private notification(method: string, params: unknown): void {\n if (!record(params)) return;\n if (method === \"mcpServer/startupStatus/updated\") {\n const serverName = this.tools?.diagnostics?.serverName;\n if (\n !serverName ||\n params.name !== serverName ||\n typeof params.threadId !== \"string\" ||\n params.threadId.length > 512 ||\n typeof params.status !== \"string\" ||\n ![\"starting\", \"ready\", \"failed\", \"cancelled\"].includes(params.status)\n )\n return;\n const status =\n params.status as NativeNotifications[\"mcpServer/startupStatus/updated\"][\"status\"];\n if (this.threadId) {\n if (params.threadId === this.threadId) this.mcpStartup = status;\n } else this.pendingMcpStartup = { threadId: params.threadId, status };\n return;\n }\n if (method === \"account/login/completed\") {\n if (params.success === true && params.loginId == null) this.loginCompleted?.resolve();\n else this.loginCompleted?.reject(failure(\"CODEX_AUTH_UNAVAILABLE\"));\n return;\n }\n const active = this.active;\n if (\n (!active || (!active.usageCursor && this.resumeUsageTurnIds.has(String(params.turnId)))) &&\n method === \"thread/tokenUsage/updated\" &&\n params.threadId === (this.threadId ?? this.config.resumeSessionId) &&\n record(params.tokenUsage) &&\n record(params.tokenUsage.total)\n ) {\n // Resume replay follows its response but precedes new turn events; the\n // caller may already be awaiting turn/start when historical usage arrives.\n this.threadUsageTotal = nativeUsage(params.tokenUsage.total);\n if (active) active.usageBaseline = this.threadUsageTotal;\n return;\n }\n if (!active || params.threadId !== this.threadId) return;\n if (!active.id) {\n if (active.events.length >= 256) {\n this.broken = true;\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n } else active.events.push({ method, params });\n return;\n }\n const turnId = record(params.turn) ? params.turn.id : params.turnId;\n if (turnId !== active.id) return;\n if (method === \"thread/tokenUsage/updated\" && record(params.tokenUsage)) {\n const last = params.tokenUsage.last;\n const total = params.tokenUsage.total;\n const cumulativeUsage = record(total) ? nativeUsage(total) : undefined;\n if (cumulativeUsage) {\n // Attach replay precedes live usage; no replay means no historical\n // TokenCount. The first live response therefore counts from zero.\n active.usageBaseline ??= {};\n this.resumeUsageTurnIds.clear();\n const cursor = active.usageCursor ?? active.usageBaseline;\n const reset =\n cursor?.totalTokens !== undefined &&\n cumulativeUsage.totalTokens !== undefined &&\n cumulativeUsage.totalTokens < cursor.totalTokens;\n const increment = reset ? cumulativeUsage : subtractUsage(cumulativeUsage, cursor);\n if (Object.values(increment).some((value) => typeof value === \"number\" && value > 0))\n active.usage = addUsage(active.usage, increment);\n active.usageCursor = cumulativeUsage;\n this.threadUsageTotal = cumulativeUsage;\n }\n if (record(last)) {\n if (typeof last.totalTokens === \"number\") active.contextTokens = last.totalTokens;\n }\n if (typeof params.tokenUsage.modelContextWindow === \"number\")\n active.contextWindow = params.tokenUsage.modelContextWindow;\n } else if (method === \"model/rerouted\") {\n active.actualModel = typeof params.toModel === \"string\" ? params.toModel : active.actualModel;\n active.failureCode = \"CODEX_MODEL_UNAVAILABLE\";\n } else if (method === \"turn/completed\" && record(params.turn)) this.complete(params.turn);\n else if (method === \"error\" && params.willRetry !== true)\n active.failureCode = this.nativeErrorCode(params.error);\n else if (\n method === \"item/agentMessage/delta\" &&\n typeof params.itemId === \"string\" &&\n typeof params.delta === \"string\"\n ) {\n const previous = active.messages.get(params.itemId);\n if (previous === undefined)\n this.event({\n type: \"message_start\",\n message: { role: \"assistant\", content: [{ type: \"text\", text: \"\" }] },\n });\n const text = (previous ?? \"\") + params.delta;\n active.messages.set(params.itemId, text);\n this.event({\n type: \"message_update\",\n message: { role: \"assistant\", content: [{ type: \"text\", text }] },\n _textDelta: params.delta,\n });\n } else if (\n (method === \"item/started\" || method === \"item/completed\") &&\n record(params.item) &&\n typeof params.item.id === \"string\"\n ) {\n this.item(\n params.item as NativeNotifications[\"item/started\"][\"item\"],\n method === \"item/completed\",\n );\n }\n }\n\n private item(item: NativeNotifications[\"item/started\"][\"item\"], completed: boolean): void {\n const active = this.active!;\n if (item.type === \"fileChange\") {\n active.fileChanges.delete(item.id);\n if (\n !completed &&\n Array.isArray(item.changes) &&\n item.changes.length <= 16 &&\n active.fileChanges.size < 16\n ) {\n const snapshot = JSON.stringify(item.changes);\n if (snapshot.length <= 65536) active.fileChanges.set(item.id, snapshot);\n }\n }\n if (item.type === \"agentMessage\") {\n if (completed && typeof item.text === \"string\") {\n const previous = active.messages.get(item.id) ?? \"\";\n if (!active.messages.has(item.id))\n this.event({\n type: \"message_start\",\n message: {\n role: \"assistant\",\n content: [{ type: \"text\", text: \"\" }],\n },\n });\n if (item.text.startsWith(previous) && item.text.length > previous.length)\n this.event({\n type: \"message_update\",\n message: {\n role: \"assistant\",\n content: [{ type: \"text\", text: item.text }],\n },\n _textDelta: item.text.slice(previous.length),\n });\n active.messages.set(item.id, item.text);\n }\n return;\n }\n const name =\n item.type === \"commandExecution\"\n ? \"Bash\"\n : item.type === \"fileChange\"\n ? \"ApplyPatch\"\n : item.type === \"mcpToolCall\"\n ? `mcp__${item.server}__${item.tool}`\n : undefined;\n if (!name) return;\n if (!active.toolItems.has(item.id)) {\n if (item.type === \"mcpToolCall\" && item.server === this.tools?.diagnostics?.serverName)\n this.mcpDiagnostics.nativeMcpToolItemCount = Math.min(\n 512,\n this.mcpDiagnostics.nativeMcpToolItemCount + 1,\n );\n active.toolItems.add(item.id);\n this.event({\n type: \"tool_call\",\n name,\n tool: { name },\n toolCallId: item.id,\n input:\n item.type === \"mcpToolCall\"\n ? item.arguments\n : item.type === \"commandExecution\"\n ? { command: item.command }\n : item.type === \"fileChange\"\n ? { changes: item.changes }\n : {},\n });\n }\n if (completed && !active.completedToolItems.has(item.id)) {\n active.completedToolItems.add(item.id);\n active.toolResults.push({\n role: \"tool\",\n toolName: name,\n content: \"\",\n data:\n item.type === \"mcpToolCall\"\n ? {\n content: item.result?.content,\n structuredContent: item.result?.structuredContent,\n status: item.status,\n }\n : item.type === \"commandExecution\"\n ? {\n output: item.aggregatedOutput,\n exitCode: item.exitCode,\n status: item.status,\n }\n : item.type === \"fileChange\"\n ? { changes: item.changes, status: item.status }\n : {},\n isError: \"status\" in item && item.status === \"failed\",\n });\n this.event({ type: \"tool_execution_end\", toolName: name });\n }\n }\n private complete(turn: Record<string, unknown>): void {\n if (turn.status === \"completed\") this.finishTurn(this.active?.failureCode);\n else if (turn.status === \"interrupted\") this.finishTurn(\"CODEX_TURN_INTERRUPTED\");\n else if (turn.status === \"failed\")\n this.finishTurn(this.active?.failureCode ?? this.nativeErrorCode(turn.error));\n }\n private nativeErrorCode(error: unknown): string {\n const info = record(error) ? error.codexErrorInfo : undefined;\n if (info === \"unauthorized\") return \"CODEX_RECONNECT_REQUIRED\";\n if (\n info === \"usageLimitExceeded\" ||\n info === \"rateLimitExceeded\" ||\n info === \"serverOverloaded\"\n )\n return \"CODEX_RATE_LIMITED\";\n if (\n record(info) &&\n [\n \"httpConnectionFailed\",\n \"responseStreamConnectionFailed\",\n \"responseStreamDisconnected\",\n \"responseTooManyFailedAttempts\",\n ].some((key) => key in info)\n )\n return \"CODEX_NETWORK_UNAVAILABLE\";\n return \"CODEX_RUNTIME_UNSUPPORTED\";\n }\n\n private observeMcp(beforeTurn: boolean): void {\n const count = (value: unknown) =>\n typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n ? Math.min(512, value)\n : 0;\n let listed = 0;\n let called = 0;\n try {\n const counts = this.tools?.diagnostics?.requestCounts();\n listed = count(counts?.toolsListTotal);\n called = count(counts?.toolsCallTotal);\n } catch {\n /* Observation must not affect execution or cleanup. */\n }\n if (beforeTurn) {\n this.mcpDiagnostics.startupBeforeTurn = this.mcpStartup;\n this.mcpDiagnostics.toolsListBeforeTurn = listed;\n }\n this.mcpDiagnostics.startupAtEnd = this.mcpStartup;\n this.mcpDiagnostics.toolsListTotal = Math.max(this.mcpDiagnostics.toolsListBeforeTurn, listed);\n this.mcpDiagnostics.toolsCallTotal = beforeTurn\n ? called\n : Math.max(this.mcpDiagnostics.toolsCallTotal, called);\n this.publishMcp(this.mcpDiagnostics);\n }\n\n private observeClosedMcp(tools: CodexToolTransport, snapshot: CodexNativeMcpDiagnostics): void {\n try {\n // No RPC: the owned transport has closed, so its local counters are final.\n const counts = tools.diagnostics?.requestCounts();\n if (\n !counts ||\n ![counts.toolsListTotal, counts.toolsCallTotal].every(\n (value) => Number.isSafeInteger(value) && value >= 0,\n )\n )\n return;\n snapshot.toolsListTotal = Math.max(\n snapshot.toolsListTotal,\n Math.min(512, counts.toolsListTotal),\n );\n snapshot.toolsCallTotal = Math.max(\n snapshot.toolsCallTotal,\n Math.min(512, counts.toolsCallTotal),\n );\n this.publishMcp(snapshot);\n } catch {\n // No final observation on getter failure; retain the earlier snapshot unchanged.\n }\n }\n\n private publishMcp(snapshot: CodexNativeMcpDiagnostics): void {\n try {\n void Promise.resolve(\n this.options?.onNativeMcpDiagnostics?.(Object.freeze({ ...snapshot })),\n ).catch(() => {});\n } catch {\n /* A caller-owned observer is never an execution gate. */\n }\n }\n\n private finishTurn(code?: string): void {\n const active = this.active;\n if (!active) return;\n this.active = undefined;\n this.observeMcp(false);\n clearTimeout(active.timer);\n active.controller.abort();\n active.fileChanges.clear();\n active.readyNow();\n for (const text of active.messages.values())\n this.event({\n type: \"message_end\",\n message: { role: \"assistant\", content: [{ type: \"text\", text }] },\n });\n this.event({ type: \"turn_end\", toolResults: active.toolResults });\n const modelUsage = active.usage\n ? {\n inputTokens: active.usage.inputTokens,\n outputTokens: active.usage.outputTokens,\n cacheReadTokens: active.usage.cacheReadTokens,\n ...(typeof active.contextWindow === \"number\"\n ? { contextWindow: active.contextWindow }\n : {}),\n }\n : undefined;\n const usage = {\n ...(active.usage ? { tokens: active.usage } : {}),\n ...(modelUsage ? { modelUsage: { [active.actualModel]: modelUsage } } : {}),\n ...(typeof active.contextTokens === \"number\" ? { contextTokens: active.contextTokens } : {}),\n ...(typeof active.contextWindow === \"number\" ? { contextWindow: active.contextWindow } : {}),\n };\n if (code)\n this.event({\n type: \"error\",\n error: code,\n fatal: code !== \"CODEX_TURN_INTERRUPTED\",\n detail: {\n message: code,\n category:\n code === \"CODEX_TURN_INTERRUPTED\"\n ? \"process\"\n : code === \"CODEX_RATE_LIMITED\"\n ? \"rate_limit\"\n : code === \"CODEX_NETWORK_UNAVAILABLE\"\n ? \"network\"\n : code === \"CODEX_AUTH_UNAVAILABLE\" || code === \"CODEX_RECONNECT_REQUIRED\"\n ? \"auth\"\n : \"config\",\n retryable: false,\n },\n ...usage,\n });\n else\n this.event({\n type: \"result\",\n subtype: \"success\",\n summary: [...active.messages.values()].join(\"\\n\"),\n ...usage,\n });\n this.event({ type: \"agent_end\" });\n active.finish();\n }\n private event(event: AgentEvent): void {\n // Observers cannot prevent native cleanup or leave a terminal prompt unsettled.\n try {\n this.emit(\"agent-event\", event);\n } catch {}\n }\n}\n","import { ManagedCodexDriver } from \"../codex/managed-driver.js\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type {\n AgentMessageItem,\n Codex as CodexClient,\n CommandExecutionItem,\n FileChangeItem,\n McpToolCallItem,\n Thread,\n ThreadEvent,\n ThreadItem,\n WebSearchItem,\n} from \"@openai/codex-sdk\";\nimport type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger, TokenUsage } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { classifyGenericErrorMessage } from \"../error-classifier.js\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, type ModelEntry } from \"../models.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport {\n type AgentConfig,\n AgentDriver,\n type AgentError,\n type AgentEvent,\n type AgentMessage,\n type AgentPromptInput,\n type DriverInfo,\n} from \"../types.js\";\n\ntype CodexSdkModule = typeof import(\"@openai/codex-sdk\");\n\n/**\n * Build the explicit env whitelist forwarded to the Codex SDK child.\n *\n * Omits anything provisioned by `provision_secrets` so user credentials\n * stay out of the subprocess environment.\n *\n * @docLink packages/bridge/concepts#codex-env-whitelist\n */\nfunction buildCodexChildEnv(parent: NodeJS.ProcessEnv): Record<string, string> {\n const out: Record<string, string> = {};\n const explicit = [\n \"OPENAI_API_KEY\",\n \"ANTHROPIC_API_KEY\",\n \"PATH\",\n \"HOME\",\n \"USER\",\n \"HOSTNAME\",\n \"SKAILE_SESSION_ID\",\n ];\n for (const key of explicit) {\n const v = parent[key];\n if (v !== undefined) out[key] = v;\n }\n for (const [key, value] of Object.entries(parent)) {\n if (key.startsWith(\"PI_\") && typeof value === \"string\") out[key] = value;\n }\n return out;\n}\n\n/**\n * Agent driver for the OpenAI Codex SDK.\n *\n * Creates or resumes a Codex thread via `@openai/codex-sdk` (lazy-imported in `start()`)\n * and maps Codex SDK thread events to the unified {@link AgentEvent} stream.\n * OpenAI models only — uses `OPENAI_API_KEY` from `apiKeys`, `env`, or the environment.\n *\n * @remarks\n * **Event mapping** — Codex SDK items are translated: `agent_message` → `message_start/update/end`,\n * `command_execution` → Bash-shaped tool events, `mcp_tool_call` → MCP tool events,\n * `file_change` → `ApplyPatch`-shaped events, `web_search` → `WebSearch` events.\n *\n * **Sandbox** — The Codex sandbox mode, approval policy, and reasoning effort are\n * controlled via `AgentConfig.driverOptions.codex`. See {@link CodexDriverOptions}.\n *\n * **Instructions file** — System prompt and pre-rendered agent identity are combined\n * into a single instructions file written to `<cwd>/.codex/skaile-session-instructions.md`\n * and passed to the Codex SDK as `model_instructions_file`.\n *\n * @docLink packages/bridge/drivers#codex-driver\n */\nexport class CodexDriver extends AgentDriver {\n readonly driverInfo: DriverInfo = {\n id: \"codex\",\n name: \"OpenAI Codex\",\n modelAgnostic: false,\n supportsInBandAbort: true,\n };\n\n private readonly log: Logger = getBridgeLogger(\"codex\");\n private config: AgentConfig;\n private readonly managed?: ManagedCodexDriver;\n private thread: Thread | null = null;\n private running = false;\n private abortController: AbortController | null = null;\n private pendingToolResults: AgentMessage[] = [];\n private activeAssistantItemId: string | null = null;\n private activeAssistantText = \"\";\n private _runtimeSessionId: string | undefined;\n /** Token usage from the most recent completed turn. */\n private _lastTokens: TokenUsage | null = null;\n\n constructor(config: AgentConfig) {\n super();\n this.config = config;\n const codex = config.driverOptions?.codex;\n if (\n codex?.managedRuntime ||\n (codex?.authSource !== undefined && codex.authSource !== \"local\")\n ) {\n this.managed = new ManagedCodexDriver(config);\n this.managed.on(\"agent-event\", (event: AgentEvent) => this.emit(\"agent-event\", event));\n }\n }\n\n override get runtimeSessionId(): string | undefined {\n return this.managed ? this.managed.runtimeSessionId : this._runtimeSessionId;\n }\n\n override get acceptsReplyAsPrompt(): boolean {\n return !this.managed;\n }\n override async dispose(): Promise<void> {\n if (this.managed) return this.managed.dispose();\n this.kill();\n }\n override hasPendingQuestion(): boolean {\n return this.managed?.hasPendingQuestion() ?? false;\n }\n override answerQuestion(answer: string, question?: string, requestId?: string): boolean {\n return this.managed?.answerQuestion(answer, question, requestId) ?? false;\n }\n override promptInput(input: AgentPromptInput): Promise<void> {\n return this.managed ? this.managed.promptInput(input) : super.promptInput(input);\n }\n\n public async start(): Promise<void> {\n if (this.managed) return this.managed.start();\n if (this.thread) return;\n\n let sdk: CodexSdkModule;\n try {\n sdk = await import(\"@openai/codex-sdk\");\n } catch (err) {\n this.log.error(\"codex SDK load failed\", err);\n throw new Error(\"Codex SDK not installed. Run: bun add @openai/codex-sdk\");\n }\n\n // Explicit env whitelist for the Codex SDK child. Avoids leaking the\n // runner's full environment (which may carry user secrets provisioned by\n // the platform) into the spawned process. `this.config.env`, when\n // supplied, fully overrides the whitelist.\n const env: Record<string, string | undefined> = this.config.env\n ? { ...this.config.env }\n : buildCodexChildEnv(process.env);\n\n const instructionsFile = this.writeInstructionsFile();\n\n const client = new sdk.Codex({\n apiKey:\n this.config.apiKeys?.openai ??\n this.config.env?.OPENAI_API_KEY ??\n process.env.OPENAI_API_KEY,\n env: Object.fromEntries(Object.entries(env).filter(([, value]) => value != null)) as Record<\n string,\n string\n >,\n ...(instructionsFile ? { config: { model_instructions_file: instructionsFile } } : {}),\n });\n\n const codexOptions = this.config.driverOptions?.codex;\n const threadOptions = {\n model: this.config.model,\n sandboxMode: codexOptions?.sandboxMode ?? \"workspace-write\",\n workingDirectory: this.config.cwd,\n skipGitRepoCheck: true,\n modelReasoningEffort: codexOptions?.reasoningEffort ?? \"medium\",\n networkAccessEnabled: codexOptions?.networkAccessEnabled,\n approvalPolicy: codexOptions?.approvalPolicy ?? \"never\",\n additionalDirectories: codexOptions?.additionalDirectories,\n } satisfies Parameters<CodexClient[\"startThread\"]>[0];\n\n this.thread = this.config.resumeSessionId\n ? client.resumeThread(this.config.resumeSessionId, threadOptions)\n : client.startThread(threadOptions);\n this._runtimeSessionId = this.thread.id ?? this.config.resumeSessionId;\n this.log.info(\"codex driver started\", {\n model: this.config.model,\n resumed: Boolean(this.config.resumeSessionId),\n sessionId: this._runtimeSessionId,\n });\n }\n\n public async prompt(message: string): Promise<void> {\n if (this.managed) return this.managed.prompt(message);\n await this.start();\n if (!this.thread) throw new Error(\"Codex thread not initialized\");\n if (this.running) throw new Error(\"Codex turn already in progress\");\n\n this.running = true;\n this.pendingToolResults = [];\n this.activeAssistantItemId = null;\n this.activeAssistantText = \"\";\n this._lastTokens = null;\n this.abortController = new AbortController();\n let turnFinished = false;\n this.log.debug(\"prompt issued\", { length: message.length });\n\n try {\n const input = message;\n const { events } = await this.thread.runStreamed(input, {\n signal: this.abortController.signal,\n });\n\n for await (const event of events) {\n turnFinished = this.handleThreadEvent(event) || turnFinished;\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (error.name !== \"AbortError\") {\n this.log.error(\"prompt failed\", error);\n const detail = this.classifyErrorMessage(error.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n }\n } finally {\n if (!turnFinished && this.activeAssistantItemId) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(this.activeAssistantText),\n } satisfies AgentEvent);\n }\n this.activeAssistantItemId = null;\n this.activeAssistantText = \"\";\n this.abortController = null;\n this.running = false;\n }\n }\n\n public async abort(): Promise<void> {\n if (this.managed) return this.managed.abort();\n this.abortController?.abort();\n }\n\n public get isRunning(): boolean {\n if (this.managed) return this.managed.isRunning;\n return this.running;\n }\n\n public kill(): void {\n if (this.managed) {\n this.managed.kill();\n return;\n }\n this.abortController?.abort();\n this.running = false;\n this.abortController = null;\n this.log.info(\"codex driver killed\");\n }\n\n override async listModels(): Promise<ModelEntry[]> {\n if (this.managed) return this.managed.listModels();\n const apiKey =\n this.config.apiKeys?.openai || this.config.env?.OPENAI_API_KEY || process.env.OPENAI_API_KEY;\n if (!apiKey) return [];\n const result = await fetchProviderModels(\"openai\", apiKey);\n return result.ok ? (result.models as ModelEntry[]) : [];\n }\n\n async resetSession(): Promise<void> {\n if (this.managed) return this.managed.resetSession();\n this.kill();\n this.thread = null;\n this._runtimeSessionId = undefined;\n this._lastTokens = null;\n }\n\n override getTokenUsage(): TokenUsage | null {\n if (this.managed) return this.managed.getTokenUsage();\n return this._lastTokens;\n }\n\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n this.managed?.reconfigure(patch);\n }\n\n override getModel(): string | undefined {\n return this.managed?.getModel();\n }\n\n /**\n * Write a combined instructions file for Codex CLI's `model_instructions_file` config.\n * Combines pre-rendered agent identity (from `skaile install`) with runtime context\n * (resources, environment, prompt-extensions).\n */\n private writeInstructionsFile(): string | undefined {\n const parts: string[] = [];\n\n // 1. Read pre-rendered agent identity if available\n if (this.config.agentDir) {\n const agentFile = join(this.config.cwd, \".codex\", \"skaile-agent.md\");\n if (existsSync(agentFile)) {\n parts.push(readFileSync(agentFile, \"utf-8\"));\n }\n }\n\n // 2. Append runtime system prompt (resources, context, environment)\n if (this.config.systemPrompt) {\n parts.push(this.config.systemPrompt);\n }\n\n if (parts.length === 0) return undefined;\n\n // Write combined instructions to a session file\n const instrFile = join(this.config.cwd, \".codex\", \"skaile-session-instructions.md\");\n mkdirSync(dirname(instrFile), { recursive: true });\n writeFileSync(instrFile, parts.join(\"\\n\\n---\\n\\n\"));\n return instrFile;\n }\n\n private handleThreadEvent(event: ThreadEvent): boolean {\n switch (event.type) {\n case \"thread.started\":\n this._runtimeSessionId = event.thread_id;\n return false;\n\n case \"turn.started\":\n return false;\n\n case \"item.started\":\n case \"item.updated\":\n case \"item.completed\":\n this.handleThreadItem(event.item, event.type === \"item.completed\", event.type);\n return false;\n\n case \"turn.completed\": {\n this.flushToolResults();\n // Map Codex SDK `Usage` shape into the unified `TokenUsage`. Note\n // OpenAI's `input_tokens` is the TOTAL including cached reads, not\n // the fresh-prompt count Anthropic reports — consumers that want\n // a strict \"fresh input\" figure must subtract `cacheReadTokens`.\n const usage = event.usage;\n const tokens: TokenUsage | null = usage\n ? {\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n cacheReadTokens: usage.cached_input_tokens,\n }\n : null;\n this._lastTokens = tokens;\n this.emit(\"agent-event\", {\n type: \"result\",\n subtype: \"success\",\n summary: this.activeAssistantText || \"Task completed\",\n // Codex SDK does not report per-turn cost. `0` signals \"not\n // reported\" — pair with `tokens` to disambiguate from \"free\".\n costUsd: 0,\n ...(tokens ? { tokens } : {}),\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n\n case \"turn.failed\": {\n this.flushToolResults();\n const detail = this.classifyErrorMessage(event.error.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n\n case \"error\": {\n const detail = this.classifyErrorMessage(event.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n }\n }\n\n private handleThreadItem(item: ThreadItem, completed: boolean, phase: ThreadEvent[\"type\"]): void {\n switch (item.type) {\n case \"agent_message\":\n this.handleAgentMessage(item, completed);\n break;\n\n case \"command_execution\":\n this.handleCommandExecution(item, completed, phase);\n break;\n\n case \"mcp_tool_call\":\n this.handleMcpToolCall(item, completed, phase);\n break;\n\n case \"file_change\":\n this.handleFileChange(item, completed, phase);\n break;\n\n case \"web_search\":\n this.handleWebSearch(item, completed, phase);\n break;\n\n case \"error\":\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"CodexError\",\n content: \"\",\n data: { message: item.message },\n isError: true,\n });\n }\n break;\n\n default:\n break;\n }\n }\n\n private handleAgentMessage(item: AgentMessageItem, completed: boolean): void {\n if (this.activeAssistantItemId !== item.id) {\n if (this.activeAssistantItemId) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(this.activeAssistantText),\n } satisfies AgentEvent);\n }\n this.activeAssistantItemId = item.id;\n this.activeAssistantText = \"\";\n this.emit(\"agent-event\", {\n type: \"message_start\",\n message: this.buildAssistantMessage(\"\"),\n } satisfies AgentEvent);\n }\n\n const nextText = item.text ?? \"\";\n const delta = nextText.startsWith(this.activeAssistantText)\n ? nextText.slice(this.activeAssistantText.length)\n : nextText;\n this.activeAssistantText = nextText;\n\n if (delta) {\n this.emit(\"agent-event\", {\n type: \"message_update\",\n message: this.buildAssistantMessage(nextText),\n _textDelta: delta,\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(nextText),\n } satisfies AgentEvent);\n this.activeAssistantItemId = null;\n }\n }\n\n private handleCommandExecution(\n item: CommandExecutionItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"Bash\",\n tool: { name: \"Bash\" },\n input: { command: item.command },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"Bash\",\n content: \"\",\n data: {\n stdout: item.aggregated_output,\n stderr: \"\",\n exitCode: item.exit_code,\n status: item.status,\n command: item.command,\n },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"Bash\",\n } satisfies AgentEvent);\n }\n }\n\n private handleMcpToolCall(\n item: McpToolCallItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n const toolName = `mcp__${item.server}__${item.tool}`;\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: toolName,\n tool: { name: toolName },\n input: this.toObject(item.arguments),\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName,\n content: \"\",\n data: {\n status: item.status,\n content: item.result?.content,\n structuredContent: item.result?.structured_content,\n error: item.error?.message,\n },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName,\n } satisfies AgentEvent);\n }\n }\n\n private handleFileChange(\n item: FileChangeItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"ApplyPatch\",\n tool: { name: \"ApplyPatch\" },\n input: { changes: item.changes },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"ApplyPatch\",\n content: \"\",\n data: { status: item.status, changes: item.changes },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"ApplyPatch\",\n } satisfies AgentEvent);\n }\n }\n\n private handleWebSearch(\n item: WebSearchItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"WebSearch\",\n tool: { name: \"WebSearch\" },\n input: { query: item.query },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"WebSearch\",\n content: \"\",\n data: { query: item.query, status: \"completed\" },\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"WebSearch\",\n } satisfies AgentEvent);\n }\n }\n\n private flushToolResults(): void {\n if (this.pendingToolResults.length === 0) return;\n this.emit(\"agent-event\", {\n type: \"turn_end\",\n toolResults: [...this.pendingToolResults],\n } satisfies AgentEvent);\n this.pendingToolResults = [];\n }\n\n private buildAssistantMessage(text: string): AgentMessage {\n return {\n role: \"assistant\",\n content: [{ type: \"text\", text }],\n };\n }\n\n private toObject(value: unknown): Record<string, unknown> {\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n return { arguments: value };\n }\n\n private classifyErrorMessage(message: string): AgentError {\n // Shared keyword buckets live in error-classifier.ts; codex layers its own\n // hint copy plus a provider-specific `config` (sandbox/approval) bucket.\n const generic = classifyGenericErrorMessage(message);\n if (generic) {\n const hint =\n generic.category === \"auth\"\n ? \"Check your OpenAI API key configuration in settings or environment.\"\n : generic.category === \"rate_limit\"\n ? \"Codex hit an OpenAI rate limit. Wait briefly and try again.\"\n : generic.category === \"model\"\n ? \"The selected Codex model is unavailable. Choose a different model.\"\n : \"A network error occurred while talking to Codex.\";\n return { message, category: generic.category, retryable: generic.retryable, hint };\n }\n const lower = message.toLowerCase();\n if (\n lower.includes(\"sandbox\") ||\n lower.includes(\"approval\") ||\n lower.includes(\"permission\") ||\n lower.includes(\"git repo\")\n ) {\n return {\n message,\n category: \"config\",\n retryable: false,\n hint: \"Check Codex sandbox, approval, and workspace configuration.\",\n };\n }\n return {\n message,\n category: \"unknown\",\n retryable: true,\n hint: \"An unexpected Codex error occurred. Try the prompt again.\",\n };\n }\n}\n\n/**\n * `DriverTarget` wrapper for the codex driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`. The Codex SDK is lazy-imported inside\n * `start()` — this target export never pulls it at module top.\n */\nexport const codexDriverTarget: DriverTarget<AgentConfig> = {\n id: \"codex\",\n displayName: BUILTIN_DRIVER_CATALOG.codex?.name ?? \"OpenAI Codex\",\n apiVersion: 1,\n // Drivers take AgentConfig; passthrough — full schema validation is out of scope.\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new CodexDriver(config),\n listModels: async (apiKeys) =>\n new CodexDriver({ cwd: process.cwd(), sessionId: \"model-list\", apiKeys }).listModels(),\n};\n"]}
|