diff --git a/package-lock.json b/package-lock.json index 4f70d429..73c82dca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "vscode-jsonrpc": "^8.2.1" }, "devDependencies": { - "@openai/codex": "^0.106.0", + "@openai/codex": "^0.107.0", "@types/node": "^24.10.1", "mcp-hello-world": "^1.1.2", "tsx": "^4.20.6", @@ -813,9 +813,9 @@ } }, "node_modules/@openai/codex": { - "version": "0.106.0", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.106.0.tgz", - "integrity": "sha512-GgzVs+mOaJfAFalI+QqEXcuJuBODhIg217g+B5jg6HMujux3Q4yeSki57x8MD/DJ43hRq9X1DTyZL/345Bo0Ag==", + "version": "0.107.0", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.107.0.tgz", + "integrity": "sha512-bAHmp4I3YNEqeR5U+LA5yViecDTlLVAJ+EGo8h647f0DClEWxFtyKXzyBJQ/kcL1G3bzstOTcuVpTdjhvJoe6g==", "dev": true, "license": "Apache-2.0", "bin": { @@ -825,19 +825,19 @@ "node": ">=16" }, "optionalDependencies": { - "@openai/codex-darwin-arm64": "npm:@openai/codex@0.106.0-darwin-arm64", - "@openai/codex-darwin-x64": "npm:@openai/codex@0.106.0-darwin-x64", - "@openai/codex-linux-arm64": "npm:@openai/codex@0.106.0-linux-arm64", - "@openai/codex-linux-x64": "npm:@openai/codex@0.106.0-linux-x64", - "@openai/codex-win32-arm64": "npm:@openai/codex@0.106.0-win32-arm64", - "@openai/codex-win32-x64": "npm:@openai/codex@0.106.0-win32-x64" + "@openai/codex-darwin-arm64": "npm:@openai/codex@0.107.0-darwin-arm64", + "@openai/codex-darwin-x64": "npm:@openai/codex@0.107.0-darwin-x64", + "@openai/codex-linux-arm64": "npm:@openai/codex@0.107.0-linux-arm64", + "@openai/codex-linux-x64": "npm:@openai/codex@0.107.0-linux-x64", + "@openai/codex-win32-arm64": "npm:@openai/codex@0.107.0-win32-arm64", + "@openai/codex-win32-x64": "npm:@openai/codex@0.107.0-win32-x64" } }, "node_modules/@openai/codex-darwin-arm64": { "name": "@openai/codex", - "version": "0.106.0-darwin-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.106.0-darwin-arm64.tgz", - "integrity": "sha512-icTUe8ZKRH2RqO2qS/FPNLMP1TloxbfM/5RxGRjh2xkd8wXDvYFeEnP2siKKLISFT49+oIbT0phUeSPR2Tlg4A==", + "version": "0.107.0-darwin-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.107.0-darwin-arm64.tgz", + "integrity": "sha512-g8u0nsns9JaHNYehVuw1eSL/83BSuBsmdOo2rrEU0D1rKI/QoIQSv6S6offZnQFerCHeqj0LabxYzqUTBzEh0g==", "cpu": [ "arm64" ], @@ -853,9 +853,9 @@ }, "node_modules/@openai/codex-darwin-x64": { "name": "@openai/codex", - "version": "0.106.0-darwin-x64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.106.0-darwin-x64.tgz", - "integrity": "sha512-i9/V2CEfH3QlhZkA/iG/Sw8eR8I8uvH23AoIrd91/LbFX77aAjzg7rSdshU6thhdy2fhiyPjKq23/bVk5cvh5g==", + "version": "0.107.0-darwin-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.107.0-darwin-x64.tgz", + "integrity": "sha512-uDCfszYS/9RL6fMBqnLyFloBCa/Lgvqjt/P2izrByRANlHZG4Nwn1Sayn7v2TugvOJ5fBPZMRcaloqfjowmdEQ==", "cpu": [ "x64" ], @@ -871,9 +871,9 @@ }, "node_modules/@openai/codex-linux-arm64": { "name": "@openai/codex", - "version": "0.106.0-linux-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.106.0-linux-arm64.tgz", - "integrity": "sha512-l/xmB0w+LTf9c/0CLEkQclUfPNsOlPENR0lxiATSv9vGaQdCi/P3MEI+L1iOMWn2Nx7o04foCfkSJiKV38n4DQ==", + "version": "0.107.0-linux-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.107.0-linux-arm64.tgz", + "integrity": "sha512-iAPYuXfACBSjVf4DPkN8YFawFGXPORzm7hDJhkzqqQvXRSyeZDaVkdT81FhaNIjm1rcaMnMDGJn2M+tOwmGy0w==", "cpu": [ "arm64" ], @@ -889,9 +889,9 @@ }, "node_modules/@openai/codex-linux-x64": { "name": "@openai/codex", - "version": "0.106.0-linux-x64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.106.0-linux-x64.tgz", - "integrity": "sha512-cVNGR8nlnW4V+2ofDt8+Q1mbR7JwxZGvSWjXJ+9GvEt0DBEO0Q5KRIsJa6iSYqTcH6V5oBcTFiK//+HDbTaFNQ==", + "version": "0.107.0-linux-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.107.0-linux-x64.tgz", + "integrity": "sha512-h9SG15CrNihjHwSiYBU3dxMWH2r9fQIBPxFIpWnSUnjE5/YaXusbJQEvC+5u+g6CzUXX40fFsm3gVWV9uzX7Og==", "cpu": [ "x64" ], @@ -907,9 +907,9 @@ }, "node_modules/@openai/codex-win32-arm64": { "name": "@openai/codex", - "version": "0.106.0-win32-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.106.0-win32-arm64.tgz", - "integrity": "sha512-8CBtM8Nr4gDqQNKl4VK/+vRv9Mj+Et0pMZqEKFXZ+3Vwovs3lFDsuDET4XQ1trk11UejFNpPCk9Tle9P99hGTw==", + "version": "0.107.0-win32-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.107.0-win32-arm64.tgz", + "integrity": "sha512-LHGQA2h/L72NRFcdIjKN/+V2nFXfuHDSQcI1Qdt9/7fUdcpb/pqN1n7U5rujccuTCf0ihk4XhGywAwiwPsjmWA==", "cpu": [ "arm64" ], @@ -925,9 +925,9 @@ }, "node_modules/@openai/codex-win32-x64": { "name": "@openai/codex", - "version": "0.106.0-win32-x64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.106.0-win32-x64.tgz", - "integrity": "sha512-fF1AKwRDf6t54OmEgMf3JyaJrFWUozeYBa3W/0P6LkaTfCz68zrajL5yO78mhf/rf9eAb83PIkvej0EHBzTheQ==", + "version": "0.107.0-win32-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.107.0-win32-x64.tgz", + "integrity": "sha512-Iq1UOxj2El/syo8abN0/7Z6ICIVTW7tY9DJbdx01wjQYbi6Ecb8e66iTNFq65Mingq7vG7QWvYGyLycVztHFuw==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index c60c2b6f..7668d963 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "license": "ISC", "type": "module", "devDependencies": { - "@openai/codex": "^0.106.0", + "@openai/codex": "^0.107.0", "@types/node": "^24.10.1", "mcp-hello-world": "^1.1.2", "tsx": "^4.20.6", diff --git a/src/CodexEventHandler.ts b/src/CodexEventHandler.ts index c97c7630..688fb248 100644 --- a/src/CodexEventHandler.ts +++ b/src/CodexEventHandler.ts @@ -96,6 +96,7 @@ export class CodexEventHandler { case "item/commandExecution/terminalInteraction": case "item/fileChange/outputDelta": case "item/mcpToolCall/progress": + case "serverRequest/resolved": case "account/updated": return null; case "account/rateLimits/updated": diff --git a/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts b/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts index dee55889..79bbe645 100644 --- a/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts +++ b/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts @@ -125,6 +125,8 @@ describe('ACP server test', { timeout: 40_000 }, () => { id: "gpt-5", model: "gpt-5", upgrade: null, + upgradeInfo: null, + availabilityNux: null, displayName: "gpt-5", description: "test model", hidden: false, @@ -539,6 +541,9 @@ describe('ACP server test', { timeout: 40_000 }, () => { { id: '5.2-codex', model: '5.2-codex', + upgrade: null, + upgradeInfo: null, + availabilityNux: null, displayName: 'Codex 5.2', description: 'Coding model', hidden: false, @@ -549,12 +554,14 @@ describe('ACP server test', { timeout: 40_000 }, () => { defaultReasoningEffort: 'medium', supportsPersonality: false, isDefault: false, - upgrade: null, inputModalities: [] }, { id: '5.1', model: '5.1', + upgrade: null, + upgradeInfo: null, + availabilityNux: null, displayName: 'Standard 5.1', description: 'Standard model', hidden: false, @@ -564,7 +571,6 @@ describe('ACP server test', { timeout: 40_000 }, () => { defaultReasoningEffort: 'low', supportsPersonality: false, isDefault: true, - upgrade: null, inputModalities: [] } ]; diff --git a/src/__tests__/CodexACPAgent/data/auth-with-key.json b/src/__tests__/CodexACPAgent/data/auth-with-key.json index c80a4c52..cfab2d6d 100644 --- a/src/__tests__/CodexACPAgent/data/auth-with-key.json +++ b/src/__tests__/CodexACPAgent/data/auth-with-key.json @@ -92,6 +92,8 @@ "id": "id", "model": "model", "upgrade": "upgrade", + "upgradeInfo": null, + "availabilityNux": null, "displayName": "gpt-5.3-codex", "description": "Latest frontier agentic coding model.", "hidden": false, @@ -108,6 +110,13 @@ "id": "id", "model": "model", "upgrade": "upgrade", + "upgradeInfo": { + "model": "model", + "upgradeCopy": null, + "modelLink": null, + "migrationMarkdown": "**Codex just got an upgrade. Introducing {model_to}.**\n\nCodex is now powered by {model_to}, our most capable agentic coding model yet. It's built for long-running, project-scale work, with mid-turn steering + frequent progress updates so you can collaborate while it runs (and it's faster too).\n\nLearn more: https://openai.com/index/introducing-gpt-5-3-codex/\n\nYou can keep using {model_from} if you prefer.\n" + }, + "availabilityNux": null, "displayName": "gpt-5.2-codex", "description": "Frontier agentic coding model.", "hidden": false, @@ -124,6 +133,13 @@ "id": "id", "model": "model", "upgrade": "upgrade", + "upgradeInfo": { + "model": "model", + "upgradeCopy": null, + "modelLink": null, + "migrationMarkdown": "**Codex just got an upgrade. Introducing {model_to}.**\n\nCodex is now powered by {model_to}, our most capable agentic coding model yet. It's built for long-running, project-scale work, with mid-turn steering + frequent progress updates so you can collaborate while it runs (and it's faster too).\n\nLearn more: https://openai.com/index/introducing-gpt-5-3-codex/\n\nYou can keep using {model_from} if you prefer.\n" + }, + "availabilityNux": null, "displayName": "gpt-5.1-codex-max", "description": "Codex-optimized flagship for deep and fast reasoning.", "hidden": false, @@ -140,6 +156,13 @@ "id": "id", "model": "model", "upgrade": "upgrade", + "upgradeInfo": { + "model": "model", + "upgradeCopy": null, + "modelLink": null, + "migrationMarkdown": "**Codex just got an upgrade. Introducing {model_to}.**\n\nCodex is now powered by {model_to}, our most capable agentic coding model yet. It's built for long-running, project-scale work, with mid-turn steering + frequent progress updates so you can collaborate while it runs (and it's faster too).\n\nLearn more: https://openai.com/index/introducing-gpt-5-3-codex/\n\nYou can keep using {model_from} if you prefer.\n" + }, + "availabilityNux": null, "displayName": "gpt-5.2", "description": "Latest frontier model with improvements across knowledge, reasoning and coding", "hidden": false, @@ -156,6 +179,13 @@ "id": "id", "model": "model", "upgrade": "upgrade", + "upgradeInfo": { + "model": "model", + "upgradeCopy": null, + "modelLink": null, + "migrationMarkdown": "**Codex just got an upgrade. Introducing {model_to}.**\n\nCodex is now powered by {model_to}, our most capable agentic coding model yet. It's built for long-running, project-scale work, with mid-turn steering + frequent progress updates so you can collaborate while it runs (and it's faster too).\n\nLearn more: https://openai.com/index/introducing-gpt-5-3-codex/\n\nYou can keep using {model_from} if you prefer.\n" + }, + "availabilityNux": null, "displayName": "gpt-5.1-codex-mini", "description": "Optimized for codex. Cheaper, faster, but less capable.", "hidden": false, diff --git a/src/__tests__/CodexACPAgent/list-sessions.test.ts b/src/__tests__/CodexACPAgent/list-sessions.test.ts index 88dd84bf..32390314 100644 --- a/src/__tests__/CodexACPAgent/list-sessions.test.ts +++ b/src/__tests__/CodexACPAgent/list-sessions.test.ts @@ -15,6 +15,7 @@ describe("CodexACPAgent - list sessions", () => { const threadA: Thread = { id: "sess-1", preview: "First session", + ephemeral: false, modelProvider: "openai", createdAt: 100, updatedAt: 200, @@ -32,6 +33,7 @@ describe("CodexACPAgent - list sessions", () => { const threadB: Thread = { id: "sess-2", preview: "Other session", + ephemeral: false, modelProvider: "openai", createdAt: 300, updatedAt: 400, diff --git a/src/__tests__/CodexACPAgent/load-session.test.ts b/src/__tests__/CodexACPAgent/load-session.test.ts index 8962ae51..9be09697 100644 --- a/src/__tests__/CodexACPAgent/load-session.test.ts +++ b/src/__tests__/CodexACPAgent/load-session.test.ts @@ -22,6 +22,8 @@ describe("CodexACPAgent - loadSession", () => { id: "gpt-5.2", model: "gpt-5.2", upgrade: null, + upgradeInfo: null, + availabilityNux: null, displayName: "GPT-5.2", description: "Test model", hidden: false, @@ -42,6 +44,7 @@ describe("CodexACPAgent - loadSession", () => { const thread: Thread = { id: "session-1", preview: "Hi", + ephemeral: false, modelProvider: "openai", createdAt: 123, updatedAt: 124, diff --git a/src/__tests__/CodexACPAgent/model-filtering.test.ts b/src/__tests__/CodexACPAgent/model-filtering.test.ts index aacf2891..9cdc00ba 100644 --- a/src/__tests__/CodexACPAgent/model-filtering.test.ts +++ b/src/__tests__/CodexACPAgent/model-filtering.test.ts @@ -16,6 +16,9 @@ describe("Model filtering", () => { { id: "gpt-5.2", model: "gpt-5.2-model-field", + upgrade: null, + upgradeInfo: null, + availabilityNux: null, displayName: "GPT-5.2", description: "Allowed by id.", hidden: false, @@ -23,12 +26,14 @@ describe("Model filtering", () => { defaultReasoningEffort: "medium", supportsPersonality: false, isDefault: false, - upgrade: null, inputModalities: [] }, { id: "other-id", model: "gpt-5.2", + upgrade: null, + upgradeInfo: null, + availabilityNux: null, displayName: "gpt-5.2", description: "Allowed", hidden: false, @@ -36,12 +41,14 @@ describe("Model filtering", () => { defaultReasoningEffort: "medium", supportsPersonality: false, isDefault: false, - upgrade: null, inputModalities: [] }, { id: "gpt-5.1-codex-mini", model: "other-model", + upgrade: null, + upgradeInfo: null, + availabilityNux: null, displayName: "Other", description: "Allowed by id.", hidden: false, @@ -49,12 +56,14 @@ describe("Model filtering", () => { defaultReasoningEffort: "medium", supportsPersonality: false, isDefault: false, - upgrade: null, inputModalities: [] }, { id: "gpt-4o", model: "gpt-4o", + upgrade: null, + upgradeInfo: null, + availabilityNux: null, displayName: "gpt-4o", description: "Allowed.", hidden: false, @@ -62,7 +71,6 @@ describe("Model filtering", () => { defaultReasoningEffort: "medium", supportsPersonality: false, isDefault: false, - upgrade: null, inputModalities: [] }, ]; diff --git a/src/app-server/FileSystemPermissions.ts b/src/app-server/FileSystemPermissions.ts index 9e03768d..aedf84de 100644 --- a/src/app-server/FileSystemPermissions.ts +++ b/src/app-server/FileSystemPermissions.ts @@ -1,5 +1,6 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { AbsolutePathBuf } from "./AbsolutePathBuf"; -export type FileSystemPermissions = { read: Array | null, write: Array | null, }; +export type FileSystemPermissions = { read: Array | null, write: Array | null, }; diff --git a/src/app-server/ResponseItem.ts b/src/app-server/ResponseItem.ts index 611c7fb2..dd7621f0 100644 --- a/src/app-server/ResponseItem.ts +++ b/src/app-server/ResponseItem.ts @@ -15,4 +15,4 @@ export type ResponseItem = { "type": "message", role: string, content: Array | null, write: Array | null, }; +export type AdditionalFileSystemPermissions = { read: Array | null, write: Array | null, }; diff --git a/src/app-server/v2/Model.ts b/src/app-server/v2/Model.ts index de7b2401..cd991081 100644 --- a/src/app-server/v2/Model.ts +++ b/src/app-server/v2/Model.ts @@ -3,6 +3,8 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { InputModality } from "../InputModality"; import type { ReasoningEffort } from "../ReasoningEffort"; +import type { ModelAvailabilityNux } from "./ModelAvailabilityNux"; +import type { ModelUpgradeInfo } from "./ModelUpgradeInfo"; import type { ReasoningEffortOption } from "./ReasoningEffortOption"; -export type Model = { id: string, model: string, upgrade: string | null, displayName: string, description: string, hidden: boolean, supportedReasoningEfforts: Array, defaultReasoningEffort: ReasoningEffort, inputModalities: Array, supportsPersonality: boolean, isDefault: boolean, }; +export type Model = { id: string, model: string, upgrade: string | null, upgradeInfo: ModelUpgradeInfo | null, availabilityNux: ModelAvailabilityNux | null, displayName: string, description: string, hidden: boolean, supportedReasoningEfforts: Array, defaultReasoningEffort: ReasoningEffort, inputModalities: Array, supportsPersonality: boolean, isDefault: boolean, }; diff --git a/src/app-server/v2/ModelAvailabilityNux.ts b/src/app-server/v2/ModelAvailabilityNux.ts new file mode 100644 index 00000000..7254aaec --- /dev/null +++ b/src/app-server/v2/ModelAvailabilityNux.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ModelAvailabilityNux = { message: string, }; diff --git a/src/app-server/v2/ModelUpgradeInfo.ts b/src/app-server/v2/ModelUpgradeInfo.ts new file mode 100644 index 00000000..82d73e9d --- /dev/null +++ b/src/app-server/v2/ModelUpgradeInfo.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ModelUpgradeInfo = { model: string, upgradeCopy: string | null, modelLink: string | null, migrationMarkdown: string | null, }; diff --git a/src/app-server/v2/ServerRequestResolvedNotification.ts b/src/app-server/v2/ServerRequestResolvedNotification.ts new file mode 100644 index 00000000..56c53cc4 --- /dev/null +++ b/src/app-server/v2/ServerRequestResolvedNotification.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { RequestId } from "../RequestId"; + +export type ServerRequestResolvedNotification = { threadId: string, requestId: RequestId, }; diff --git a/src/app-server/v2/Thread.ts b/src/app-server/v2/Thread.ts index ee07081d..56c56884 100644 --- a/src/app-server/v2/Thread.ts +++ b/src/app-server/v2/Thread.ts @@ -11,6 +11,10 @@ export type Thread = { id: string, * Usually the first user message in the thread, if available. */ preview: string, +/** + * Whether the thread is ephemeral and should not be materialized on disk. + */ +ephemeral: boolean, /** * Model provider used for this thread (for example, 'openai'). */ diff --git a/src/app-server/v2/index.ts b/src/app-server/v2/index.ts index f74784c0..6779cb44 100644 --- a/src/app-server/v2/index.ts +++ b/src/app-server/v2/index.ts @@ -115,10 +115,12 @@ export type { McpToolCallResult } from "./McpToolCallResult"; export type { McpToolCallStatus } from "./McpToolCallStatus"; export type { MergeStrategy } from "./MergeStrategy"; export type { Model } from "./Model"; +export type { ModelAvailabilityNux } from "./ModelAvailabilityNux"; export type { ModelListParams } from "./ModelListParams"; export type { ModelListResponse } from "./ModelListResponse"; export type { ModelRerouteReason } from "./ModelRerouteReason"; export type { ModelReroutedNotification } from "./ModelReroutedNotification"; +export type { ModelUpgradeInfo } from "./ModelUpgradeInfo"; export type { NetworkAccess } from "./NetworkAccess"; export type { NetworkApprovalContext } from "./NetworkApprovalContext"; export type { NetworkApprovalProtocol } from "./NetworkApprovalProtocol"; @@ -149,6 +151,7 @@ export type { SandboxCommandAssessment } from "./SandboxCommandAssessment"; export type { SandboxMode } from "./SandboxMode"; export type { SandboxPolicy } from "./SandboxPolicy"; export type { SandboxWorkspaceWrite } from "./SandboxWorkspaceWrite"; +export type { ServerRequestResolvedNotification } from "./ServerRequestResolvedNotification"; export type { SessionSource } from "./SessionSource"; export type { SkillApprovalDecision } from "./SkillApprovalDecision"; export type { SkillDependencies } from "./SkillDependencies";