From 5cb7a35de938e2475e5c1c088f111915008fd100 Mon Sep 17 00:00:00 2001 From: Owen Lin Date: Tue, 25 Aug 2026 18:20:02 +0000 Subject: [PATCH] Promote paginated thread history APIs (#40673) ## What changed - Make `thread/turns/list`, `thread/items/list`, and `thread/revert` available without the experimental API capability. - Stabilize `thread/reverted`, `thread.historyMode`, and the pagination fields used by `thread/resume` and `thread/fork`. - Publish the promoted requests, responses, and fields in the stable JSON and TypeScript schemas, and update the app-server documentation accordingly. GitOrigin-RevId: 18b8c53c265211597bb1a62fd62f66f4a3df5f06 --- .../schema/json/ClientRequest.json | 191 ++ .../schema/json/ServerNotification.json | 9 + .../codex_app_server_protocol.schemas.json | 314 +++ .../codex_app_server_protocol.v2.schemas.json | 314 +++ .../schema/json/v2/ThreadForkParams.json | 4 + .../schema/json/v2/ThreadForkResponse.json | 9 + .../schema/json/v2/ThreadItemsListParams.json | 56 + .../json/v2/ThreadItemsListResponse.json | 1730 ++++++++++++ .../schema/json/v2/ThreadListResponse.json | 9 + .../json/v2/ThreadMetadataUpdateResponse.json | 9 + .../schema/json/v2/ThreadReadResponse.json | 9 + .../schema/json/v2/ThreadResumeParams.json | 4 + .../schema/json/v2/ThreadResumeResponse.json | 25 + .../schema/json/v2/ThreadRevertParams.json | 19 + .../schema/json/v2/ThreadRevertResponse.json | 2475 +++++++++++++++++ .../json/v2/ThreadRollbackResponse.json | 9 + .../schema/json/v2/ThreadStartResponse.json | 9 + .../json/v2/ThreadStartedNotification.json | 9 + .../schema/json/v2/ThreadTurnsListParams.json | 85 + .../json/v2/ThreadTurnsListResponse.json | 1990 +++++++++++++ .../json/v2/ThreadUnarchiveResponse.json | 9 + .../app-server-exports-stable.json.zst | Bin 140610 -> 141819 bytes .../schema/typescript/ClientRequest.ts | 5 +- .../schema/typescript/v2/Thread.ts | 4 + .../schema/typescript/v2/ThreadForkParams.ts | 7 +- .../typescript/v2/ThreadItemsListParams.ts | 22 + .../typescript/v2/ThreadItemsListResponse.ts | 16 + .../typescript/v2/ThreadResumeParams.ts | 7 +- .../typescript/v2/ThreadResumeResponse.ts | 14 +- .../typescript/v2/ThreadRevertParams.ts | 14 + .../typescript/v2/ThreadRevertResponse.ts | 25 + .../typescript/v2/ThreadTurnsListParams.ts | 23 + .../typescript/v2/ThreadTurnsListResponse.ts | 18 + .../schema/typescript/v2/index.ts | 6 + .../src/protocol/common.rs | 4 - .../src/protocol/v2/thread.rs | 4 - .../src/protocol/v2/thread_data.rs | 1 - codex-rs/app-server/README.md | 16 +- 38 files changed, 7453 insertions(+), 21 deletions(-) create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRevertParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRevertParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadRevertResponse.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts diff --git a/codex-rs/app-server-protocol/schema/json/ClientRequest.json b/codex-rs/app-server-protocol/schema/json/ClientRequest.json index 9911cd1c52..e2764ba24c 100644 --- a/codex-rs/app-server-protocol/schema/json/ClientRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ClientRequest.json @@ -4118,6 +4118,10 @@ "ephemeral": { "type": "boolean" }, + "excludeTurns": { + "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", + "type": "boolean" + }, "lastTurnId": { "description": "Optional last turn id to fork through, inclusive.\n\nWhen specified, turns after `last_turn_id` are omitted from the fork. The referenced turn cannot be in progress.", "type": [ @@ -4265,6 +4269,51 @@ ], "type": "object" }, + "ThreadItemsListParams": { + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional item page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional item pagination direction; defaults to ascending." + }, + "threadId": { + "type": "string" + }, + "turnId": { + "description": "Optional turn id to filter by. When omitted, returns items across the thread.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "threadId" + ], + "type": "object" + }, "ThreadListCwdFilter": { "anyOf": [ { @@ -4670,6 +4719,10 @@ "null" ] }, + "excludeTurns": { + "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", + "type": "boolean" + }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -4718,6 +4771,23 @@ ], "type": "object" }, + "ThreadRevertParams": { + "description": "Replace a paginated thread's durable history with the prefix before one turn.\n\nThis only changes persisted conversation history. It does not revert local file changes.", + "properties": { + "beforeTurnId": { + "description": "Turn excluded from the replacement history, together with every later turn.", + "type": "string" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "beforeTurnId", + "threadId" + ], + "type": "object" + }, "ThreadRollbackParams": { "description": "DEPRECATED: `thread/rollback` will be removed soon.", "properties": { @@ -5066,6 +5136,55 @@ ], "type": "string" }, + "ThreadTurnsListParams": { + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn.", + "type": [ + "string", + "null" + ] + }, + "itemsView": { + "anyOf": [ + { + "$ref": "#/definitions/TurnItemsView" + }, + { + "type": "null" + } + ], + "description": "How much item detail to include for each returned turn; defaults to summary." + }, + "limit": { + "description": "Optional turn page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional turn pagination direction; defaults to descending." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "type": "object" + }, "ThreadUnarchiveParams": { "properties": { "threadId": { @@ -5956,6 +6075,30 @@ "title": "Thread/rollbackRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/revert" + ], + "title": "Thread/revertRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadRevertParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/revertRequest", + "type": "object" + }, { "properties": { "id": { @@ -6124,6 +6267,54 @@ "title": "Thread/readRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/turns/list" + ], + "title": "Thread/turns/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadTurnsListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/turns/listRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/items/list" + ], + "title": "Thread/items/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadItemsListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/items/listRequest", + "type": "object" + }, { "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { diff --git a/codex-rs/app-server-protocol/schema/json/ServerNotification.json b/codex-rs/app-server-protocol/schema/json/ServerNotification.json index 0a4235e981..4be158cf97 100644 --- a/codex-rs/app-server-protocol/schema/json/ServerNotification.json +++ b/codex-rs/app-server-protocol/schema/json/ServerNotification.json @@ -3940,6 +3940,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json index d32a69565c..6a39e921f7 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json @@ -636,6 +636,30 @@ "title": "Thread/rollbackRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/revert" + ], + "title": "Thread/revertRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadRevertParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/revertRequest", + "type": "object" + }, { "properties": { "id": { @@ -804,6 +828,54 @@ "title": "Thread/readRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/turns/list" + ], + "title": "Thread/turns/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadTurnsListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/turns/listRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/v2/RequestId" + }, + "method": { + "enum": [ + "thread/items/list" + ], + "title": "Thread/items/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadItemsListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/items/listRequest", + "type": "object" + }, { "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { @@ -19773,6 +19845,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/v2/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" @@ -20082,6 +20163,10 @@ "ephemeral": { "type": "boolean" }, + "excludeTurns": { + "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", + "type": "boolean" + }, "lastTurnId": { "description": "Optional last turn id to fork through, inclusive.\n\nWhen specified, turns after `last_turn_id` are omitted from the fork. The referenced turn cannot be in progress.", "type": [ @@ -21260,6 +21345,83 @@ ], "type": "object" }, + "ThreadItemsListParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional item page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/v2/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional item pagination direction; defaults to ascending." + }, + "threadId": { + "type": "string" + }, + "turnId": { + "description": "Optional turn id to filter by. When omitted, returns items across the thread.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "threadId" + ], + "title": "ThreadItemsListParams", + "type": "object" + }, + "ThreadItemsListResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/v2/ThreadItemEntry" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadItemsListResponse", + "type": "object" + }, "ThreadListCwdFilter": { "anyOf": [ { @@ -22203,6 +22365,10 @@ "null" ] }, + "excludeTurns": { + "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", + "type": "boolean" + }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -22277,6 +22443,14 @@ }, "type": "array" }, + "itemsBackwardsCursor": { + "default": null, + "description": "Opaque cursor for hydrating paginated items backwards.\n\nPass this as `cursor` to `thread/items/list` with `sortDirection: \"desc\"`. The first page includes the item identified by the cursor.", + "type": [ + "string", + "null" + ] + }, "model": { "type": "string" }, @@ -22309,6 +22483,14 @@ }, "thread": { "$ref": "#/definitions/v2/Thread" + }, + "turnsBackwardsCursor": { + "default": null, + "description": "Opaque cursor for hydrating paginated turns backwards.\n\nPass this as `cursor` to `thread/turns/list` with `sortDirection: \"desc\"`. The first page includes the turn identified by the cursor.", + "type": [ + "string", + "null" + ] } }, "required": [ @@ -22323,6 +22505,57 @@ "title": "ThreadResumeResponse", "type": "object" }, + "ThreadRevertParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Replace a paginated thread's durable history with the prefix before one turn.\n\nThis only changes persisted conversation history. It does not revert local file changes.", + "properties": { + "beforeTurnId": { + "description": "Turn excluded from the replacement history, together with every later turn.", + "type": "string" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "beforeTurnId", + "threadId" + ], + "title": "ThreadRevertParams", + "type": "object" + }, + "ThreadRevertResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "itemsBackwardsCursor": { + "description": "Opaque cursor for hydrating paginated items backwards.\n\nPass this as `cursor` to `thread/items/list` with `sortDirection: \"desc\"`. The first page includes the item identified by the cursor.", + "type": [ + "string", + "null" + ] + }, + "thread": { + "allOf": [ + { + "$ref": "#/definitions/v2/Thread" + } + ], + "description": "Updated loaded thread metadata. `turns` is always empty; hydrate retained history through `thread/turns/list`." + }, + "turnsBackwardsCursor": { + "description": "Opaque cursor for hydrating paginated turns backwards.\n\nPass this as `cursor` to `thread/turns/list` with `sortDirection: \"desc\"`. The first page includes the turn identified by the cursor.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "thread" + ], + "title": "ThreadRevertResponse", + "type": "object" + }, "ThreadRevertedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -23310,6 +23543,87 @@ "title": "ThreadTokenUsageUpdatedNotification", "type": "object" }, + "ThreadTurnsListParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn.", + "type": [ + "string", + "null" + ] + }, + "itemsView": { + "anyOf": [ + { + "$ref": "#/definitions/v2/TurnItemsView" + }, + { + "type": "null" + } + ], + "description": "How much item detail to include for each returned turn; defaults to summary." + }, + "limit": { + "description": "Optional turn page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/v2/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional turn pagination direction; defaults to descending." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadTurnsListParams", + "type": "object" + }, + "ThreadTurnsListResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one turn. Use it with the opposite `sortDirection` to include the anchor turn again and catch updates to that turn.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/v2/Turn" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn. if None, there are no more turns to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadTurnsListResponse", + "type": "object" + }, "ThreadUnarchiveParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json index e70fa88d12..d27cc316bb 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json @@ -2039,6 +2039,30 @@ "title": "Thread/rollbackRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/revert" + ], + "title": "Thread/revertRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadRevertParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/revertRequest", + "type": "object" + }, { "properties": { "id": { @@ -2207,6 +2231,54 @@ "title": "Thread/readRequest", "type": "object" }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/turns/list" + ], + "title": "Thread/turns/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadTurnsListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/turns/listRequest", + "type": "object" + }, + { + "properties": { + "id": { + "$ref": "#/definitions/RequestId" + }, + "method": { + "enum": [ + "thread/items/list" + ], + "title": "Thread/items/listRequestMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadItemsListParams" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "Thread/items/listRequest", + "type": "object" + }, { "description": "Append raw Responses API items to the thread history without starting a user turn.", "properties": { @@ -17508,6 +17580,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" @@ -17817,6 +17898,10 @@ "ephemeral": { "type": "boolean" }, + "excludeTurns": { + "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", + "type": "boolean" + }, "lastTurnId": { "description": "Optional last turn id to fork through, inclusive.\n\nWhen specified, turns after `last_turn_id` are omitted from the fork. The referenced turn cannot be in progress.", "type": [ @@ -18995,6 +19080,83 @@ ], "type": "object" }, + "ThreadItemsListParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional item page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional item pagination direction; defaults to ascending." + }, + "threadId": { + "type": "string" + }, + "turnId": { + "description": "Optional turn id to filter by. When omitted, returns items across the thread.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "threadId" + ], + "title": "ThreadItemsListParams", + "type": "object" + }, + "ThreadItemsListResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/ThreadItemEntry" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadItemsListResponse", + "type": "object" + }, "ThreadListCwdFilter": { "anyOf": [ { @@ -19938,6 +20100,10 @@ "null" ] }, + "excludeTurns": { + "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", + "type": "boolean" + }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ @@ -20012,6 +20178,14 @@ }, "type": "array" }, + "itemsBackwardsCursor": { + "default": null, + "description": "Opaque cursor for hydrating paginated items backwards.\n\nPass this as `cursor` to `thread/items/list` with `sortDirection: \"desc\"`. The first page includes the item identified by the cursor.", + "type": [ + "string", + "null" + ] + }, "model": { "type": "string" }, @@ -20044,6 +20218,14 @@ }, "thread": { "$ref": "#/definitions/Thread" + }, + "turnsBackwardsCursor": { + "default": null, + "description": "Opaque cursor for hydrating paginated turns backwards.\n\nPass this as `cursor` to `thread/turns/list` with `sortDirection: \"desc\"`. The first page includes the turn identified by the cursor.", + "type": [ + "string", + "null" + ] } }, "required": [ @@ -20058,6 +20240,57 @@ "title": "ThreadResumeResponse", "type": "object" }, + "ThreadRevertParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Replace a paginated thread's durable history with the prefix before one turn.\n\nThis only changes persisted conversation history. It does not revert local file changes.", + "properties": { + "beforeTurnId": { + "description": "Turn excluded from the replacement history, together with every later turn.", + "type": "string" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "beforeTurnId", + "threadId" + ], + "title": "ThreadRevertParams", + "type": "object" + }, + "ThreadRevertResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "itemsBackwardsCursor": { + "description": "Opaque cursor for hydrating paginated items backwards.\n\nPass this as `cursor` to `thread/items/list` with `sortDirection: \"desc\"`. The first page includes the item identified by the cursor.", + "type": [ + "string", + "null" + ] + }, + "thread": { + "allOf": [ + { + "$ref": "#/definitions/Thread" + } + ], + "description": "Updated loaded thread metadata. `turns` is always empty; hydrate retained history through `thread/turns/list`." + }, + "turnsBackwardsCursor": { + "description": "Opaque cursor for hydrating paginated turns backwards.\n\nPass this as `cursor` to `thread/turns/list` with `sortDirection: \"desc\"`. The first page includes the turn identified by the cursor.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "thread" + ], + "title": "ThreadRevertResponse", + "type": "object" + }, "ThreadRevertedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -21045,6 +21278,87 @@ "title": "ThreadTokenUsageUpdatedNotification", "type": "object" }, + "ThreadTurnsListParams": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn.", + "type": [ + "string", + "null" + ] + }, + "itemsView": { + "anyOf": [ + { + "$ref": "#/definitions/TurnItemsView" + }, + { + "type": "null" + } + ], + "description": "How much item detail to include for each returned turn; defaults to summary." + }, + "limit": { + "description": "Optional turn page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional turn pagination direction; defaults to descending." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadTurnsListParams", + "type": "object" + }, + "ThreadTurnsListResponse": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one turn. Use it with the opposite `sortDirection` to include the anchor turn again and catch updates to that turn.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/Turn" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn. if None, there are no more turns to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadTurnsListResponse", + "type": "object" + }, "ThreadUnarchiveParams": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json index 76278b106b..3d454b27bd 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json @@ -126,6 +126,10 @@ "ephemeral": { "type": "boolean" }, + "excludeTurns": { + "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.", + "type": "boolean" + }, "lastTurnId": { "description": "Optional last turn id to fork through, inclusive.\n\nWhen specified, turns after `last_turn_id` are omitted from the fork. The referenced turn cannot be in progress.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json index 3afaec5f92..49d88c6485 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json @@ -1150,6 +1150,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListParams.json new file mode 100644 index 0000000000..4a21804479 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListParams.json @@ -0,0 +1,56 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "SortDirection": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Optional item page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional item pagination direction; defaults to ascending." + }, + "threadId": { + "type": "string" + }, + "turnId": { + "description": "Optional turn id to filter by. When omitted, returns items across the thread.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "threadId" + ], + "title": "ThreadItemsListParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListResponse.json new file mode 100644 index 0000000000..24b2680f32 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListResponse.json @@ -0,0 +1,1730 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "AbsolutePathBuf": { + "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", + "type": "string" + }, + "AgentMessageDelivery": { + "enum": [ + "async" + ], + "type": "string" + }, + "ByteRange": { + "properties": { + "end": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + }, + "start": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + } + }, + "required": [ + "end", + "start" + ], + "type": "object" + }, + "CollabAgentState": { + "properties": { + "message": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/CollabAgentStatus" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + "CollabAgentStatus": { + "enum": [ + "pendingInit", + "running", + "interrupted", + "completed", + "errored", + "shutdown", + "notFound" + ], + "type": "string" + }, + "CollabAgentTool": { + "enum": [ + "spawnAgent", + "sendInput", + "resumeAgent", + "wait", + "closeAgent", + "sendMessage", + "followupTask", + "interruptAgent", + "listAgents" + ], + "type": "string" + }, + "CollabAgentToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "interrupted" + ], + "type": "string" + }, + "CommandAction": { + "oneOf": [ + { + "properties": { + "command": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/LegacyAppPathString" + }, + "type": { + "enum": [ + "read" + ], + "title": "ReadCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "name", + "path", + "type" + ], + "title": "ReadCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "listFiles" + ], + "title": "ListFilesCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "ListFilesCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "SearchCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "type": { + "enum": [ + "unknown" + ], + "title": "UnknownCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "UnknownCommandAction", + "type": "object" + } + ] + }, + "CommandExecutionSource": { + "enum": [ + "agent", + "userShell", + "unifiedExecStartup", + "unifiedExecInteraction" + ], + "type": "string" + }, + "CommandExecutionStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "DynamicToolCallOutputContentItem": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "type": { + "enum": [ + "inputText" + ], + "title": "InputTextDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "InputTextDynamicToolCallOutputContentItem", + "type": "object" + }, + { + "properties": { + "imageUrl": { + "type": "string" + }, + "type": { + "enum": [ + "inputImage" + ], + "title": "InputImageDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "imageUrl", + "type" + ], + "title": "InputImageDynamicToolCallOutputContentItem", + "type": "object" + }, + { + "properties": { + "audioUrl": { + "type": "string" + }, + "type": { + "enum": [ + "inputAudio" + ], + "title": "InputAudioDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "audioUrl", + "type" + ], + "title": "InputAudioDynamicToolCallOutputContentItem", + "type": "object" + } + ] + }, + "DynamicToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "FileUpdateChange": { + "properties": { + "diff": { + "type": "string" + }, + "kind": { + "$ref": "#/definitions/PatchChangeKind" + }, + "path": { + "type": "string" + } + }, + "required": [ + "diff", + "kind", + "path" + ], + "type": "object" + }, + "HookPromptFragment": { + "properties": { + "hookRunId": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "hookRunId", + "text" + ], + "type": "object" + }, + "ImageDetail": { + "enum": [ + "auto", + "low", + "high", + "original" + ], + "type": "string" + }, + "ImageGenerationFailure": { + "oneOf": [ + { + "properties": { + "limitId": { + "type": "string" + }, + "resetsAt": { + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "type": { + "enum": [ + "usageLimitExceeded" + ], + "title": "UsageLimitExceededImageGenerationFailureType", + "type": "string" + } + }, + "required": [ + "limitId", + "type" + ], + "title": "UsageLimitExceededImageGenerationFailure", + "type": "object" + } + ] + }, + "LegacyAppPathString": { + "type": "string" + }, + "McpToolCallAppContext": { + "properties": { + "actionName": { + "type": [ + "string", + "null" + ] + }, + "appName": { + "type": [ + "string", + "null" + ] + }, + "connectorId": { + "type": "string" + }, + "linkId": { + "type": [ + "string", + "null" + ] + }, + "resourceUri": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "connectorId" + ], + "type": "object" + }, + "McpToolCallError": { + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "McpToolCallResult": { + "properties": { + "_meta": true, + "content": { + "items": true, + "type": "array" + }, + "structuredContent": true + }, + "required": [ + "content" + ], + "type": "object" + }, + "McpToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "MemoryCitation": { + "properties": { + "entries": { + "items": { + "$ref": "#/definitions/MemoryCitationEntry" + }, + "type": "array" + }, + "threadIds": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entries", + "threadIds" + ], + "type": "object" + }, + "MemoryCitationEntry": { + "properties": { + "lineEnd": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "lineStart": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "note": { + "type": "string" + }, + "path": { + "type": "string" + } + }, + "required": [ + "lineEnd", + "lineStart", + "note", + "path" + ], + "type": "object" + }, + "MessagePhase": { + "description": "Classifies an assistant message as interim commentary or final answer text.\n\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.", + "oneOf": [ + { + "description": "Mid-turn assistant text (for example preamble/progress narration).\n\nAdditional tool calls or assistant output may follow before turn completion.", + "enum": [ + "commentary" + ], + "type": "string" + }, + { + "description": "The assistant's terminal answer text for the current turn.", + "enum": [ + "final_answer" + ], + "type": "string" + } + ] + }, + "PatchApplyStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "PatchChangeKind": { + "oneOf": [ + { + "properties": { + "type": { + "enum": [ + "add" + ], + "title": "AddPatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "AddPatchChangeKind", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "delete" + ], + "title": "DeletePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "DeletePatchChangeKind", + "type": "object" + }, + { + "properties": { + "move_path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "update" + ], + "title": "UpdatePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "UpdatePatchChangeKind", + "type": "object" + } + ] + }, + "ReasoningEffort": { + "description": "A non-empty reasoning effort value advertised by the model.", + "minLength": 1, + "type": "string" + }, + "SubAgentActivityKind": { + "enum": [ + "started", + "interacted", + "interrupted", + "completed" + ], + "type": "string" + }, + "TextElement": { + "properties": { + "byteRange": { + "allOf": [ + { + "$ref": "#/definitions/ByteRange" + } + ], + "description": "Byte range in the parent `text` buffer that this element occupies." + }, + "placeholder": { + "description": "Optional human-readable placeholder for the element, displayed in the UI.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "byteRange" + ], + "type": "object" + }, + "ThreadItem": { + "oneOf": [ + { + "properties": { + "clientId": { + "type": [ + "string", + "null" + ] + }, + "content": { + "items": { + "$ref": "#/definitions/UserInput" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "userMessage" + ], + "title": "UserMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "content", + "id", + "type" + ], + "title": "UserMessageThreadItem", + "type": "object" + }, + { + "properties": { + "fragments": { + "items": { + "$ref": "#/definitions/HookPromptFragment" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "hookPrompt" + ], + "title": "HookPromptThreadItemType", + "type": "string" + } + }, + "required": [ + "fragments", + "id", + "type" + ], + "title": "HookPromptThreadItem", + "type": "object" + }, + { + "properties": { + "delivery": { + "anyOf": [ + { + "$ref": "#/definitions/AgentMessageDelivery" + }, + { + "type": "null" + } + ], + "default": null + }, + "id": { + "type": "string" + }, + "memoryCitation": { + "anyOf": [ + { + "$ref": "#/definitions/MemoryCitation" + }, + { + "type": "null" + } + ], + "default": null + }, + "phase": { + "anyOf": [ + { + "$ref": "#/definitions/MessagePhase" + }, + { + "type": "null" + } + ], + "default": null + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "agentMessage" + ], + "title": "AgentMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "AgentMessageThreadItem", + "type": "object" + }, + { + "description": "EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.", + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "plan" + ], + "title": "PlanThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "PlanThreadItem", + "type": "object" + }, + { + "properties": { + "content": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "summary": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "reasoning" + ], + "title": "ReasoningThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ReasoningThreadItem", + "type": "object" + }, + { + "properties": { + "aggregatedOutput": { + "description": "The command's output, aggregated from stdout and stderr.", + "type": [ + "string", + "null" + ] + }, + "command": { + "description": "The command to be executed.", + "type": "string" + }, + "commandActions": { + "description": "A best-effort parsing of the command to understand the action(s) it will perform. This returns a list of CommandAction objects because a single shell command may be composed of many commands piped together.", + "items": { + "$ref": "#/definitions/CommandAction" + }, + "type": "array" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/LegacyAppPathString" + } + ], + "description": "The command's working directory." + }, + "durationMs": { + "description": "The duration of the command execution in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "exitCode": { + "description": "The command's exit code.", + "format": "int32", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "pluginId": { + "default": null, + "description": "Trusted first-party plugin id when this command resolves to one plugin script.", + "type": [ + "string", + "null" + ] + }, + "processId": { + "description": "Identifier for the underlying PTY process (when available).", + "type": [ + "string", + "null" + ] + }, + "scriptPath": { + "default": null, + "description": "Safe plugin-relative path when this command resolves to one plugin script.", + "type": [ + "string", + "null" + ] + }, + "source": { + "allOf": [ + { + "$ref": "#/definitions/CommandExecutionSource" + } + ], + "default": "agent" + }, + "status": { + "$ref": "#/definitions/CommandExecutionStatus" + }, + "type": { + "enum": [ + "commandExecution" + ], + "title": "CommandExecutionThreadItemType", + "type": "string" + } + }, + "required": [ + "command", + "commandActions", + "cwd", + "id", + "status", + "type" + ], + "title": "CommandExecutionThreadItem", + "type": "object" + }, + { + "properties": { + "changes": { + "items": { + "$ref": "#/definitions/FileUpdateChange" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PatchApplyStatus" + }, + "type": { + "enum": [ + "fileChange" + ], + "title": "FileChangeThreadItemType", + "type": "string" + } + }, + "required": [ + "changes", + "id", + "status", + "type" + ], + "title": "FileChangeThreadItem", + "type": "object" + }, + { + "properties": { + "appContext": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallAppContext" + }, + { + "type": "null" + } + ] + }, + "arguments": true, + "durationMs": { + "description": "The duration of the MCP tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "error": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallError" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "mcpAppResourceUri": { + "description": "Deprecated: use `appContext.resourceUri` instead.", + "type": [ + "string", + "null" + ] + }, + "pluginId": { + "type": [ + "string", + "null" + ] + }, + "readOnlyHint": { + "type": [ + "boolean", + "null" + ] + }, + "result": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallResult" + }, + { + "type": "null" + } + ] + }, + "server": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/McpToolCallStatus" + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "mcpToolCall" + ], + "title": "McpToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "server", + "status", + "tool", + "type" + ], + "title": "McpToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "arguments": true, + "contentItems": { + "items": { + "$ref": "#/definitions/DynamicToolCallOutputContentItem" + }, + "type": [ + "array", + "null" + ] + }, + "durationMs": { + "description": "The duration of the dynamic tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "namespace": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/DynamicToolCallStatus" + }, + "success": { + "type": [ + "boolean", + "null" + ] + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "dynamicToolCall" + ], + "title": "DynamicToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "status", + "tool", + "type" + ], + "title": "DynamicToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "agentsStates": { + "additionalProperties": { + "$ref": "#/definitions/CollabAgentState" + }, + "description": "Last known status of the target agents, when available.", + "type": "object" + }, + "id": { + "description": "Unique identifier for this collab tool call.", + "type": "string" + }, + "model": { + "description": "Model requested for the spawned agent, when applicable.", + "type": [ + "string", + "null" + ] + }, + "prompt": { + "description": "Prompt text sent as part of the collab tool call, when available.", + "type": [ + "string", + "null" + ] + }, + "reasoningEffort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Reasoning effort requested for the spawned agent, when applicable." + }, + "receiverThreadIds": { + "description": "Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.", + "items": { + "type": "string" + }, + "type": "array" + }, + "senderThreadId": { + "description": "Thread ID of the agent issuing the collab request.", + "type": "string" + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentToolCallStatus" + } + ], + "description": "Current status of the collab tool call." + }, + "tool": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentTool" + } + ], + "description": "Name of the collab tool that was invoked." + }, + "type": { + "enum": [ + "collabAgentToolCall" + ], + "title": "CollabAgentToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "agentsStates", + "id", + "receiverThreadIds", + "senderThreadId", + "status", + "tool", + "type" + ], + "title": "CollabAgentToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "agentPath": { + "type": "string" + }, + "agentThreadId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "$ref": "#/definitions/SubAgentActivityKind" + }, + "type": { + "enum": [ + "subAgentActivity" + ], + "title": "SubAgentActivityThreadItemType", + "type": "string" + } + }, + "required": [ + "agentPath", + "agentThreadId", + "id", + "kind", + "type" + ], + "title": "SubAgentActivityThreadItem", + "type": "object" + }, + { + "properties": { + "action": { + "anyOf": [ + { + "$ref": "#/definitions/WebSearchAction" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "query": { + "type": "string" + }, + "results": { + "default": null, + "description": "Structured search results returned out-of-band by standalone web search.\n\nThese stay as opaque JSON at the extension/app-server boundary so new result fields and result types can pass through without a Codex release.", + "items": true, + "type": [ + "array", + "null" + ] + }, + "type": { + "enum": [ + "webSearch" + ], + "title": "WebSearchThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "query", + "type" + ], + "title": "WebSearchThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/LegacyAppPathString" + }, + "type": { + "enum": [ + "imageView" + ], + "title": "ImageViewThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "path", + "type" + ], + "title": "ImageViewThreadItem", + "type": "object" + }, + { + "description": "Display item emitted by the interruptible `clock.sleep` tool.", + "properties": { + "durationMs": { + "format": "uint64", + "minimum": 0.0, + "type": "integer" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "sleep" + ], + "title": "SleepThreadItemType", + "type": "string" + } + }, + "required": [ + "durationMs", + "id", + "type" + ], + "title": "SleepThreadItem", + "type": "object" + }, + { + "properties": { + "failure": { + "anyOf": [ + { + "$ref": "#/definitions/ImageGenerationFailure" + }, + { + "type": "null" + } + ], + "default": null + }, + "id": { + "type": "string" + }, + "result": { + "type": "string" + }, + "revisedPrompt": { + "type": [ + "string", + "null" + ] + }, + "savedPath": { + "anyOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + }, + { + "type": "null" + } + ] + }, + "status": { + "type": "string" + }, + "transparentBackground": { + "default": null, + "type": [ + "boolean", + "null" + ] + }, + "type": { + "enum": [ + "imageGeneration" + ], + "title": "ImageGenerationThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "result", + "status", + "type" + ], + "title": "ImageGenerationThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "enteredReviewMode" + ], + "title": "EnteredReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "EnteredReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "exitedReviewMode" + ], + "title": "ExitedReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "ExitedReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": [ + "contextCompaction" + ], + "title": "ContextCompactionThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ContextCompactionThreadItem", + "type": "object" + } + ] + }, + "ThreadItemEntry": { + "properties": { + "item": { + "$ref": "#/definitions/ThreadItem" + }, + "turnId": { + "description": "Turn containing this item.", + "type": "string" + } + }, + "required": [ + "item", + "turnId" + ], + "type": "object" + }, + "UserInput": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "text_elements": { + "default": [], + "description": "UI-defined spans within `text` used to render or persist special elements.", + "items": { + "$ref": "#/definitions/TextElement" + }, + "type": "array" + }, + "type": { + "enum": [ + "text" + ], + "title": "TextUserInputType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "TextUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "type": { + "enum": [ + "image" + ], + "title": "ImageUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "ImageUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localImage" + ], + "title": "LocalImageUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalImageUserInput", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "audio" + ], + "title": "AudioUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "AudioUserInput", + "type": "object" + }, + { + "properties": { + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localAudio" + ], + "title": "LocalAudioUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalAudioUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "skill" + ], + "title": "SkillUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "SkillUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "mention" + ], + "title": "MentionUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "MentionUserInput", + "type": "object" + } + ] + }, + "WebSearchAction": { + "oneOf": [ + { + "properties": { + "queries": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "SearchWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "openPage" + ], + "title": "OpenPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "OpenPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "pattern": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "findInPage" + ], + "title": "FindInPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "FindInPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "other" + ], + "title": "OtherWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "OtherWebSearchAction", + "type": "object" + } + ] + } + }, + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/ThreadItemEntry" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadItemsListResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json index 5fd8ffa781..7ad29f2f9f 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json @@ -941,6 +941,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json index 884d9fd49e..6324175b57 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json @@ -941,6 +941,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json index 18e82fa2b0..9c4af935ab 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json @@ -941,6 +941,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json index 00c06229a1..0fbe27f8f2 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json @@ -1438,6 +1438,10 @@ "null" ] }, + "excludeTurns": { + "description": "When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming.", + "type": "boolean" + }, "model": { "description": "Configuration overrides for the resumed thread, if any.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json index 90c8e68f70..b9b235b54e 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json @@ -1150,6 +1150,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" @@ -2692,6 +2701,14 @@ }, "type": "array" }, + "itemsBackwardsCursor": { + "default": null, + "description": "Opaque cursor for hydrating paginated items backwards.\n\nPass this as `cursor` to `thread/items/list` with `sortDirection: \"desc\"`. The first page includes the item identified by the cursor.", + "type": [ + "string", + "null" + ] + }, "model": { "type": "string" }, @@ -2724,6 +2741,14 @@ }, "thread": { "$ref": "#/definitions/Thread" + }, + "turnsBackwardsCursor": { + "default": null, + "description": "Opaque cursor for hydrating paginated turns backwards.\n\nPass this as `cursor` to `thread/turns/list` with `sortDirection: \"desc\"`. The first page includes the turn identified by the cursor.", + "type": [ + "string", + "null" + ] } }, "required": [ diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertParams.json new file mode 100644 index 0000000000..7109d046a1 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertParams.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Replace a paginated thread's durable history with the prefix before one turn.\n\nThis only changes persisted conversation history. It does not revert local file changes.", + "properties": { + "beforeTurnId": { + "description": "Turn excluded from the replacement history, together with every later turn.", + "type": "string" + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "beforeTurnId", + "threadId" + ], + "title": "ThreadRevertParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json new file mode 100644 index 0000000000..91a2f259d8 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json @@ -0,0 +1,2475 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "AbsolutePathBuf": { + "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", + "type": "string" + }, + "AgentMessageDelivery": { + "enum": [ + "async" + ], + "type": "string" + }, + "AgentPath": { + "type": "string" + }, + "ByteRange": { + "properties": { + "end": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + }, + "start": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + } + }, + "required": [ + "end", + "start" + ], + "type": "object" + }, + "CodexErrorInfo": { + "description": "This translation layer make sure that we expose codex error code in camel case.\n\nWhen an upstream HTTP status is available (for example, from the Responses API or a provider), it is forwarded in `httpStatusCode` on the relevant `codexErrorInfo` variant.", + "oneOf": [ + { + "enum": [ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", + "serverOverloaded", + "cyberPolicy", + "misalignmentPolicyViolation", + "internalServerError", + "unauthorized", + "badRequest", + "threadRollbackFailed", + "sandboxError", + "other" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "httpConnectionFailed": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "httpConnectionFailed" + ], + "title": "HttpConnectionFailedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Failed to connect to the response SSE stream.", + "properties": { + "responseStreamConnectionFailed": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseStreamConnectionFailed" + ], + "title": "ResponseStreamConnectionFailedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "The response SSE stream disconnected in the middle of a turn before completion.", + "properties": { + "responseStreamDisconnected": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseStreamDisconnected" + ], + "title": "ResponseStreamDisconnectedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Reached the retry limit for responses.", + "properties": { + "responseTooManyFailedAttempts": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseTooManyFailedAttempts" + ], + "title": "ResponseTooManyFailedAttemptsCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.", + "properties": { + "activeTurnNotSteerable": { + "properties": { + "turnKind": { + "$ref": "#/definitions/NonSteerableTurnKind" + } + }, + "required": [ + "turnKind" + ], + "type": "object" + } + }, + "required": [ + "activeTurnNotSteerable" + ], + "title": "ActiveTurnNotSteerableCodexErrorInfo", + "type": "object" + } + ] + }, + "CollabAgentState": { + "properties": { + "message": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/CollabAgentStatus" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + "CollabAgentStatus": { + "enum": [ + "pendingInit", + "running", + "interrupted", + "completed", + "errored", + "shutdown", + "notFound" + ], + "type": "string" + }, + "CollabAgentTool": { + "enum": [ + "spawnAgent", + "sendInput", + "resumeAgent", + "wait", + "closeAgent", + "sendMessage", + "followupTask", + "interruptAgent", + "listAgents" + ], + "type": "string" + }, + "CollabAgentToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "interrupted" + ], + "type": "string" + }, + "CommandAction": { + "oneOf": [ + { + "properties": { + "command": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/LegacyAppPathString" + }, + "type": { + "enum": [ + "read" + ], + "title": "ReadCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "name", + "path", + "type" + ], + "title": "ReadCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "listFiles" + ], + "title": "ListFilesCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "ListFilesCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "SearchCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "type": { + "enum": [ + "unknown" + ], + "title": "UnknownCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "UnknownCommandAction", + "type": "object" + } + ] + }, + "CommandExecutionSource": { + "enum": [ + "agent", + "userShell", + "unifiedExecStartup", + "unifiedExecInteraction" + ], + "type": "string" + }, + "CommandExecutionStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "DynamicToolCallOutputContentItem": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "type": { + "enum": [ + "inputText" + ], + "title": "InputTextDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "InputTextDynamicToolCallOutputContentItem", + "type": "object" + }, + { + "properties": { + "imageUrl": { + "type": "string" + }, + "type": { + "enum": [ + "inputImage" + ], + "title": "InputImageDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "imageUrl", + "type" + ], + "title": "InputImageDynamicToolCallOutputContentItem", + "type": "object" + }, + { + "properties": { + "audioUrl": { + "type": "string" + }, + "type": { + "enum": [ + "inputAudio" + ], + "title": "InputAudioDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "audioUrl", + "type" + ], + "title": "InputAudioDynamicToolCallOutputContentItem", + "type": "object" + } + ] + }, + "DynamicToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "FileUpdateChange": { + "properties": { + "diff": { + "type": "string" + }, + "kind": { + "$ref": "#/definitions/PatchChangeKind" + }, + "path": { + "type": "string" + } + }, + "required": [ + "diff", + "kind", + "path" + ], + "type": "object" + }, + "GitInfo": { + "properties": { + "branch": { + "type": [ + "string", + "null" + ] + }, + "originUrl": { + "type": [ + "string", + "null" + ] + }, + "sha": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "HookPromptFragment": { + "properties": { + "hookRunId": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "hookRunId", + "text" + ], + "type": "object" + }, + "ImageDetail": { + "enum": [ + "auto", + "low", + "high", + "original" + ], + "type": "string" + }, + "ImageGenerationFailure": { + "oneOf": [ + { + "properties": { + "limitId": { + "type": "string" + }, + "resetsAt": { + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "type": { + "enum": [ + "usageLimitExceeded" + ], + "title": "UsageLimitExceededImageGenerationFailureType", + "type": "string" + } + }, + "required": [ + "limitId", + "type" + ], + "title": "UsageLimitExceededImageGenerationFailure", + "type": "object" + } + ] + }, + "LegacyAppPathString": { + "type": "string" + }, + "McpToolCallAppContext": { + "properties": { + "actionName": { + "type": [ + "string", + "null" + ] + }, + "appName": { + "type": [ + "string", + "null" + ] + }, + "connectorId": { + "type": "string" + }, + "linkId": { + "type": [ + "string", + "null" + ] + }, + "resourceUri": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "connectorId" + ], + "type": "object" + }, + "McpToolCallError": { + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "McpToolCallResult": { + "properties": { + "_meta": true, + "content": { + "items": true, + "type": "array" + }, + "structuredContent": true + }, + "required": [ + "content" + ], + "type": "object" + }, + "McpToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "MemoryCitation": { + "properties": { + "entries": { + "items": { + "$ref": "#/definitions/MemoryCitationEntry" + }, + "type": "array" + }, + "threadIds": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entries", + "threadIds" + ], + "type": "object" + }, + "MemoryCitationEntry": { + "properties": { + "lineEnd": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "lineStart": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "note": { + "type": "string" + }, + "path": { + "type": "string" + } + }, + "required": [ + "lineEnd", + "lineStart", + "note", + "path" + ], + "type": "object" + }, + "MessagePhase": { + "description": "Classifies an assistant message as interim commentary or final answer text.\n\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.", + "oneOf": [ + { + "description": "Mid-turn assistant text (for example preamble/progress narration).\n\nAdditional tool calls or assistant output may follow before turn completion.", + "enum": [ + "commentary" + ], + "type": "string" + }, + { + "description": "The assistant's terminal answer text for the current turn.", + "enum": [ + "final_answer" + ], + "type": "string" + } + ] + }, + "NonSteerableTurnKind": { + "enum": [ + "review", + "compact" + ], + "type": "string" + }, + "PatchApplyStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "PatchChangeKind": { + "oneOf": [ + { + "properties": { + "type": { + "enum": [ + "add" + ], + "title": "AddPatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "AddPatchChangeKind", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "delete" + ], + "title": "DeletePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "DeletePatchChangeKind", + "type": "object" + }, + { + "properties": { + "move_path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "update" + ], + "title": "UpdatePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "UpdatePatchChangeKind", + "type": "object" + } + ] + }, + "ReasoningEffort": { + "description": "A non-empty reasoning effort value advertised by the model.", + "minLength": 1, + "type": "string" + }, + "SessionSource": { + "oneOf": [ + { + "enum": [ + "cli", + "vscode", + "exec", + "appServer", + "unknown" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "custom": { + "type": "string" + } + }, + "required": [ + "custom" + ], + "title": "CustomSessionSource", + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "subAgent": { + "$ref": "#/definitions/SubAgentSource" + } + }, + "required": [ + "subAgent" + ], + "title": "SubAgentSessionSource", + "type": "object" + } + ] + }, + "SubAgentActivityKind": { + "enum": [ + "started", + "interacted", + "interrupted", + "completed" + ], + "type": "string" + }, + "SubAgentSource": { + "oneOf": [ + { + "enum": [ + "review", + "compact", + "memory_consolidation" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "thread_spawn": { + "properties": { + "agent_nickname": { + "default": null, + "type": [ + "string", + "null" + ] + }, + "agent_path": { + "anyOf": [ + { + "$ref": "#/definitions/AgentPath" + }, + { + "type": "null" + } + ], + "default": null + }, + "agent_role": { + "default": null, + "type": [ + "string", + "null" + ] + }, + "depth": { + "format": "int32", + "type": "integer" + }, + "parent_thread_id": { + "$ref": "#/definitions/ThreadId" + } + }, + "required": [ + "depth", + "parent_thread_id" + ], + "type": "object" + } + }, + "required": [ + "thread_spawn" + ], + "title": "ThreadSpawnSubAgentSource", + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "other": { + "type": "string" + } + }, + "required": [ + "other" + ], + "title": "OtherSubAgentSource", + "type": "object" + } + ] + }, + "TextElement": { + "properties": { + "byteRange": { + "allOf": [ + { + "$ref": "#/definitions/ByteRange" + } + ], + "description": "Byte range in the parent `text` buffer that this element occupies." + }, + "placeholder": { + "description": "Optional human-readable placeholder for the element, displayed in the UI.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "byteRange" + ], + "type": "object" + }, + "Thread": { + "properties": { + "agentNickname": { + "description": "Optional random unique nickname assigned to an AgentControl-spawned sub-agent.", + "type": [ + "string", + "null" + ] + }, + "agentRole": { + "description": "Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.", + "type": [ + "string", + "null" + ] + }, + "cliVersion": { + "description": "Version of the CLI that created the thread.", + "type": "string" + }, + "createdAt": { + "description": "Unix timestamp (in seconds) when the thread was created.", + "format": "int64", + "type": "integer" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + } + ], + "description": "Working directory captured for the thread." + }, + "ephemeral": { + "description": "Whether the thread is ephemeral and should not be materialized on disk.", + "type": "boolean" + }, + "forkedFromId": { + "description": "Source thread id when this thread was created by forking another thread.", + "type": [ + "string", + "null" + ] + }, + "gitInfo": { + "anyOf": [ + { + "$ref": "#/definitions/GitInfo" + }, + { + "type": "null" + } + ], + "description": "Optional Git metadata captured when the thread was created." + }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, + "id": { + "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", + "type": "string" + }, + "modelProvider": { + "description": "Model provider used for this thread (for example, 'openai').", + "type": "string" + }, + "name": { + "description": "Optional user-facing thread title.", + "type": [ + "string", + "null" + ] + }, + "parentThreadId": { + "description": "The ID of the parent thread. This will only be set if this thread is a subagent.", + "type": [ + "string", + "null" + ] + }, + "path": { + "description": "[UNSTABLE] Path to the thread on disk.", + "type": [ + "string", + "null" + ] + }, + "preview": { + "description": "Usually the first user message in the thread, if available.", + "type": "string" + }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, + "recencyAt": { + "description": "Unix timestamp (in seconds) used for thread recency ordering.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "section": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadSection" + }, + { + "type": "null" + } + ], + "default": null, + "description": "The independently persisted section selected for this thread, if any." + }, + "sectionEnteredAt": { + "default": null, + "description": "Unix timestamp in seconds when the thread entered its current section.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "sessionId": { + "description": "Session id shared by threads that belong to the same session tree.", + "type": "string" + }, + "source": { + "allOf": [ + { + "$ref": "#/definitions/SessionSource" + } + ], + "description": "Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.)." + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/ThreadStatus" + } + ], + "description": "Current runtime status for the thread." + }, + "threadSource": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadSource" + }, + { + "type": "null" + } + ], + "description": "Optional analytics source classification for this thread." + }, + "turns": { + "description": "Only populated on `thread/resume`, `thread/rollback`, `thread/fork`, and `thread/read` (when `includeTurns` is true) responses. For all other responses and notifications returning a Thread, the turns field will be an empty list.", + "items": { + "$ref": "#/definitions/Turn" + }, + "type": "array" + }, + "updatedAt": { + "description": "Unix timestamp (in seconds) when the thread was last updated.", + "format": "int64", + "type": "integer" + } + }, + "required": [ + "cliVersion", + "createdAt", + "cwd", + "ephemeral", + "id", + "modelProvider", + "preview", + "projectId", + "sessionId", + "source", + "status", + "turns", + "updatedAt" + ], + "type": "object" + }, + "ThreadActiveFlag": { + "enum": [ + "waitingOnApproval", + "waitingOnUserInput" + ], + "type": "string" + }, + "ThreadExtra": { + "description": "Extra app-server data for a thread.", + "type": "object" + }, + "ThreadHistoryMode": { + "enum": [ + "legacy", + "paginated" + ], + "type": "string" + }, + "ThreadId": { + "type": "string" + }, + "ThreadItem": { + "oneOf": [ + { + "properties": { + "clientId": { + "type": [ + "string", + "null" + ] + }, + "content": { + "items": { + "$ref": "#/definitions/UserInput" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "userMessage" + ], + "title": "UserMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "content", + "id", + "type" + ], + "title": "UserMessageThreadItem", + "type": "object" + }, + { + "properties": { + "fragments": { + "items": { + "$ref": "#/definitions/HookPromptFragment" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "hookPrompt" + ], + "title": "HookPromptThreadItemType", + "type": "string" + } + }, + "required": [ + "fragments", + "id", + "type" + ], + "title": "HookPromptThreadItem", + "type": "object" + }, + { + "properties": { + "delivery": { + "anyOf": [ + { + "$ref": "#/definitions/AgentMessageDelivery" + }, + { + "type": "null" + } + ], + "default": null + }, + "id": { + "type": "string" + }, + "memoryCitation": { + "anyOf": [ + { + "$ref": "#/definitions/MemoryCitation" + }, + { + "type": "null" + } + ], + "default": null + }, + "phase": { + "anyOf": [ + { + "$ref": "#/definitions/MessagePhase" + }, + { + "type": "null" + } + ], + "default": null + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "agentMessage" + ], + "title": "AgentMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "AgentMessageThreadItem", + "type": "object" + }, + { + "description": "EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.", + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "plan" + ], + "title": "PlanThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "PlanThreadItem", + "type": "object" + }, + { + "properties": { + "content": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "summary": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "reasoning" + ], + "title": "ReasoningThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ReasoningThreadItem", + "type": "object" + }, + { + "properties": { + "aggregatedOutput": { + "description": "The command's output, aggregated from stdout and stderr.", + "type": [ + "string", + "null" + ] + }, + "command": { + "description": "The command to be executed.", + "type": "string" + }, + "commandActions": { + "description": "A best-effort parsing of the command to understand the action(s) it will perform. This returns a list of CommandAction objects because a single shell command may be composed of many commands piped together.", + "items": { + "$ref": "#/definitions/CommandAction" + }, + "type": "array" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/LegacyAppPathString" + } + ], + "description": "The command's working directory." + }, + "durationMs": { + "description": "The duration of the command execution in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "exitCode": { + "description": "The command's exit code.", + "format": "int32", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "pluginId": { + "default": null, + "description": "Trusted first-party plugin id when this command resolves to one plugin script.", + "type": [ + "string", + "null" + ] + }, + "processId": { + "description": "Identifier for the underlying PTY process (when available).", + "type": [ + "string", + "null" + ] + }, + "scriptPath": { + "default": null, + "description": "Safe plugin-relative path when this command resolves to one plugin script.", + "type": [ + "string", + "null" + ] + }, + "source": { + "allOf": [ + { + "$ref": "#/definitions/CommandExecutionSource" + } + ], + "default": "agent" + }, + "status": { + "$ref": "#/definitions/CommandExecutionStatus" + }, + "type": { + "enum": [ + "commandExecution" + ], + "title": "CommandExecutionThreadItemType", + "type": "string" + } + }, + "required": [ + "command", + "commandActions", + "cwd", + "id", + "status", + "type" + ], + "title": "CommandExecutionThreadItem", + "type": "object" + }, + { + "properties": { + "changes": { + "items": { + "$ref": "#/definitions/FileUpdateChange" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PatchApplyStatus" + }, + "type": { + "enum": [ + "fileChange" + ], + "title": "FileChangeThreadItemType", + "type": "string" + } + }, + "required": [ + "changes", + "id", + "status", + "type" + ], + "title": "FileChangeThreadItem", + "type": "object" + }, + { + "properties": { + "appContext": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallAppContext" + }, + { + "type": "null" + } + ] + }, + "arguments": true, + "durationMs": { + "description": "The duration of the MCP tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "error": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallError" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "mcpAppResourceUri": { + "description": "Deprecated: use `appContext.resourceUri` instead.", + "type": [ + "string", + "null" + ] + }, + "pluginId": { + "type": [ + "string", + "null" + ] + }, + "readOnlyHint": { + "type": [ + "boolean", + "null" + ] + }, + "result": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallResult" + }, + { + "type": "null" + } + ] + }, + "server": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/McpToolCallStatus" + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "mcpToolCall" + ], + "title": "McpToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "server", + "status", + "tool", + "type" + ], + "title": "McpToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "arguments": true, + "contentItems": { + "items": { + "$ref": "#/definitions/DynamicToolCallOutputContentItem" + }, + "type": [ + "array", + "null" + ] + }, + "durationMs": { + "description": "The duration of the dynamic tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "namespace": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/DynamicToolCallStatus" + }, + "success": { + "type": [ + "boolean", + "null" + ] + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "dynamicToolCall" + ], + "title": "DynamicToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "status", + "tool", + "type" + ], + "title": "DynamicToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "agentsStates": { + "additionalProperties": { + "$ref": "#/definitions/CollabAgentState" + }, + "description": "Last known status of the target agents, when available.", + "type": "object" + }, + "id": { + "description": "Unique identifier for this collab tool call.", + "type": "string" + }, + "model": { + "description": "Model requested for the spawned agent, when applicable.", + "type": [ + "string", + "null" + ] + }, + "prompt": { + "description": "Prompt text sent as part of the collab tool call, when available.", + "type": [ + "string", + "null" + ] + }, + "reasoningEffort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Reasoning effort requested for the spawned agent, when applicable." + }, + "receiverThreadIds": { + "description": "Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.", + "items": { + "type": "string" + }, + "type": "array" + }, + "senderThreadId": { + "description": "Thread ID of the agent issuing the collab request.", + "type": "string" + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentToolCallStatus" + } + ], + "description": "Current status of the collab tool call." + }, + "tool": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentTool" + } + ], + "description": "Name of the collab tool that was invoked." + }, + "type": { + "enum": [ + "collabAgentToolCall" + ], + "title": "CollabAgentToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "agentsStates", + "id", + "receiverThreadIds", + "senderThreadId", + "status", + "tool", + "type" + ], + "title": "CollabAgentToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "agentPath": { + "type": "string" + }, + "agentThreadId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "$ref": "#/definitions/SubAgentActivityKind" + }, + "type": { + "enum": [ + "subAgentActivity" + ], + "title": "SubAgentActivityThreadItemType", + "type": "string" + } + }, + "required": [ + "agentPath", + "agentThreadId", + "id", + "kind", + "type" + ], + "title": "SubAgentActivityThreadItem", + "type": "object" + }, + { + "properties": { + "action": { + "anyOf": [ + { + "$ref": "#/definitions/WebSearchAction" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "query": { + "type": "string" + }, + "results": { + "default": null, + "description": "Structured search results returned out-of-band by standalone web search.\n\nThese stay as opaque JSON at the extension/app-server boundary so new result fields and result types can pass through without a Codex release.", + "items": true, + "type": [ + "array", + "null" + ] + }, + "type": { + "enum": [ + "webSearch" + ], + "title": "WebSearchThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "query", + "type" + ], + "title": "WebSearchThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/LegacyAppPathString" + }, + "type": { + "enum": [ + "imageView" + ], + "title": "ImageViewThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "path", + "type" + ], + "title": "ImageViewThreadItem", + "type": "object" + }, + { + "description": "Display item emitted by the interruptible `clock.sleep` tool.", + "properties": { + "durationMs": { + "format": "uint64", + "minimum": 0.0, + "type": "integer" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "sleep" + ], + "title": "SleepThreadItemType", + "type": "string" + } + }, + "required": [ + "durationMs", + "id", + "type" + ], + "title": "SleepThreadItem", + "type": "object" + }, + { + "properties": { + "failure": { + "anyOf": [ + { + "$ref": "#/definitions/ImageGenerationFailure" + }, + { + "type": "null" + } + ], + "default": null + }, + "id": { + "type": "string" + }, + "result": { + "type": "string" + }, + "revisedPrompt": { + "type": [ + "string", + "null" + ] + }, + "savedPath": { + "anyOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + }, + { + "type": "null" + } + ] + }, + "status": { + "type": "string" + }, + "transparentBackground": { + "default": null, + "type": [ + "boolean", + "null" + ] + }, + "type": { + "enum": [ + "imageGeneration" + ], + "title": "ImageGenerationThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "result", + "status", + "type" + ], + "title": "ImageGenerationThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "enteredReviewMode" + ], + "title": "EnteredReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "EnteredReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "exitedReviewMode" + ], + "title": "ExitedReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "ExitedReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": [ + "contextCompaction" + ], + "title": "ContextCompactionThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ContextCompactionThreadItem", + "type": "object" + } + ] + }, + "ThreadSection": { + "description": "An independently persisted, user-visible thread section.", + "properties": { + "appearance": { + "anyOf": [ + { + "$ref": "#/definitions/ThreadSectionAppearance" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional appearance synchronized across clients." + }, + "id": { + "description": "Opaque UUIDv7 identity that remains stable when the section is renamed.", + "type": "string" + }, + "name": { + "description": "The current user-visible section name.", + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "ThreadSectionAppearance": { + "description": "Extensible visual presentation for a custom thread section.", + "properties": { + "color": { + "type": [ + "string", + "null" + ] + }, + "icon": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "ThreadSource": { + "type": "string" + }, + "ThreadStatus": { + "oneOf": [ + { + "properties": { + "type": { + "enum": [ + "notLoaded" + ], + "title": "NotLoadedThreadStatusType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "NotLoadedThreadStatus", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "idle" + ], + "title": "IdleThreadStatusType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "IdleThreadStatus", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "systemError" + ], + "title": "SystemErrorThreadStatusType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "SystemErrorThreadStatus", + "type": "object" + }, + { + "properties": { + "activeFlags": { + "items": { + "$ref": "#/definitions/ThreadActiveFlag" + }, + "type": "array" + }, + "type": { + "enum": [ + "active" + ], + "title": "ActiveThreadStatusType", + "type": "string" + } + }, + "required": [ + "activeFlags", + "type" + ], + "title": "ActiveThreadStatus", + "type": "object" + } + ] + }, + "Turn": { + "properties": { + "completedAt": { + "description": "Unix timestamp (in seconds) when the turn completed.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "durationMs": { + "description": "Duration between turn start and completion in milliseconds, if known.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "error": { + "anyOf": [ + { + "$ref": "#/definitions/TurnError" + }, + { + "type": "null" + } + ], + "description": "Only populated when the Turn's status is failed." + }, + "id": { + "description": "Identifier for this turn. Codex-generated turn IDs are UUIDv7.", + "type": "string" + }, + "items": { + "description": "Thread items currently included in this turn payload.", + "items": { + "$ref": "#/definitions/ThreadItem" + }, + "type": "array" + }, + "itemsView": { + "allOf": [ + { + "$ref": "#/definitions/TurnItemsView" + } + ], + "default": "full", + "description": "Describes how much of `items` has been loaded for this turn." + }, + "startedAt": { + "description": "Unix timestamp (in seconds) when the turn started.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "status": { + "$ref": "#/definitions/TurnStatus" + } + }, + "required": [ + "id", + "items", + "status" + ], + "type": "object" + }, + "TurnError": { + "properties": { + "additionalDetails": { + "default": null, + "type": [ + "string", + "null" + ] + }, + "codexErrorInfo": { + "anyOf": [ + { + "$ref": "#/definitions/CodexErrorInfo" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "TurnItemsView": { + "oneOf": [ + { + "description": "`items` was not loaded for this turn. The field is intentionally empty.", + "enum": [ + "notLoaded" + ], + "type": "string" + }, + { + "description": "`items` contains only a display summary for this turn.", + "enum": [ + "summary" + ], + "type": "string" + }, + { + "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", + "enum": [ + "full" + ], + "type": "string" + } + ] + }, + "TurnStatus": { + "enum": [ + "completed", + "interrupted", + "failed", + "inProgress" + ], + "type": "string" + }, + "UserInput": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "text_elements": { + "default": [], + "description": "UI-defined spans within `text` used to render or persist special elements.", + "items": { + "$ref": "#/definitions/TextElement" + }, + "type": "array" + }, + "type": { + "enum": [ + "text" + ], + "title": "TextUserInputType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "TextUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "type": { + "enum": [ + "image" + ], + "title": "ImageUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "ImageUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localImage" + ], + "title": "LocalImageUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalImageUserInput", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "audio" + ], + "title": "AudioUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "AudioUserInput", + "type": "object" + }, + { + "properties": { + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localAudio" + ], + "title": "LocalAudioUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalAudioUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "skill" + ], + "title": "SkillUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "SkillUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "mention" + ], + "title": "MentionUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "MentionUserInput", + "type": "object" + } + ] + }, + "WebSearchAction": { + "oneOf": [ + { + "properties": { + "queries": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "SearchWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "openPage" + ], + "title": "OpenPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "OpenPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "pattern": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "findInPage" + ], + "title": "FindInPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "FindInPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "other" + ], + "title": "OtherWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "OtherWebSearchAction", + "type": "object" + } + ] + } + }, + "properties": { + "itemsBackwardsCursor": { + "description": "Opaque cursor for hydrating paginated items backwards.\n\nPass this as `cursor` to `thread/items/list` with `sortDirection: \"desc\"`. The first page includes the item identified by the cursor.", + "type": [ + "string", + "null" + ] + }, + "thread": { + "allOf": [ + { + "$ref": "#/definitions/Thread" + } + ], + "description": "Updated loaded thread metadata. `turns` is always empty; hydrate retained history through `thread/turns/list`." + }, + "turnsBackwardsCursor": { + "description": "Opaque cursor for hydrating paginated turns backwards.\n\nPass this as `cursor` to `thread/turns/list` with `sortDirection: \"desc\"`. The first page includes the turn identified by the cursor.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "thread" + ], + "title": "ThreadRevertResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRollbackResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRollbackResponse.json index 3f6a9c2ea9..b51410b6a9 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRollbackResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRollbackResponse.json @@ -941,6 +941,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json index 0006341c8c..10664a9617 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json @@ -1150,6 +1150,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json index f6cc5dc4ec..b51428bd55 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json @@ -941,6 +941,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json new file mode 100644 index 0000000000..924b8a9a81 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListParams.json @@ -0,0 +1,85 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "SortDirection": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + "TurnItemsView": { + "oneOf": [ + { + "description": "`items` was not loaded for this turn. The field is intentionally empty.", + "enum": [ + "notLoaded" + ], + "type": "string" + }, + { + "description": "`items` contains only a display summary for this turn.", + "enum": [ + "summary" + ], + "type": "string" + }, + { + "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", + "enum": [ + "full" + ], + "type": "string" + } + ] + } + }, + "properties": { + "cursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn.", + "type": [ + "string", + "null" + ] + }, + "itemsView": { + "anyOf": [ + { + "$ref": "#/definitions/TurnItemsView" + }, + { + "type": "null" + } + ], + "description": "How much item detail to include for each returned turn; defaults to summary." + }, + "limit": { + "description": "Optional turn page size.", + "format": "uint32", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + }, + "sortDirection": { + "anyOf": [ + { + "$ref": "#/definitions/SortDirection" + }, + { + "type": "null" + } + ], + "description": "Optional turn pagination direction; defaults to descending." + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "threadId" + ], + "title": "ThreadTurnsListParams", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json new file mode 100644 index 0000000000..09482edb00 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json @@ -0,0 +1,1990 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "AbsolutePathBuf": { + "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.", + "type": "string" + }, + "AgentMessageDelivery": { + "enum": [ + "async" + ], + "type": "string" + }, + "ByteRange": { + "properties": { + "end": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + }, + "start": { + "format": "uint", + "minimum": 0.0, + "type": "integer" + } + }, + "required": [ + "end", + "start" + ], + "type": "object" + }, + "CodexErrorInfo": { + "description": "This translation layer make sure that we expose codex error code in camel case.\n\nWhen an upstream HTTP status is available (for example, from the Responses API or a provider), it is forwarded in `httpStatusCode` on the relevant `codexErrorInfo` variant.", + "oneOf": [ + { + "enum": [ + "contextWindowExceeded", + "sessionBudgetExceeded", + "usageLimitExceeded", + "serverOverloaded", + "cyberPolicy", + "misalignmentPolicyViolation", + "internalServerError", + "unauthorized", + "badRequest", + "threadRollbackFailed", + "sandboxError", + "other" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "httpConnectionFailed": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "httpConnectionFailed" + ], + "title": "HttpConnectionFailedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Failed to connect to the response SSE stream.", + "properties": { + "responseStreamConnectionFailed": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseStreamConnectionFailed" + ], + "title": "ResponseStreamConnectionFailedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "The response SSE stream disconnected in the middle of a turn before completion.", + "properties": { + "responseStreamDisconnected": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseStreamDisconnected" + ], + "title": "ResponseStreamDisconnectedCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Reached the retry limit for responses.", + "properties": { + "responseTooManyFailedAttempts": { + "properties": { + "httpStatusCode": { + "format": "uint16", + "minimum": 0.0, + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "responseTooManyFailedAttempts" + ], + "title": "ResponseTooManyFailedAttemptsCodexErrorInfo", + "type": "object" + }, + { + "additionalProperties": false, + "description": "Returned when `turn/start` or `turn/steer` is submitted while the current active turn cannot accept same-turn steering, for example `/review` or manual `/compact`.", + "properties": { + "activeTurnNotSteerable": { + "properties": { + "turnKind": { + "$ref": "#/definitions/NonSteerableTurnKind" + } + }, + "required": [ + "turnKind" + ], + "type": "object" + } + }, + "required": [ + "activeTurnNotSteerable" + ], + "title": "ActiveTurnNotSteerableCodexErrorInfo", + "type": "object" + } + ] + }, + "CollabAgentState": { + "properties": { + "message": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/CollabAgentStatus" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + "CollabAgentStatus": { + "enum": [ + "pendingInit", + "running", + "interrupted", + "completed", + "errored", + "shutdown", + "notFound" + ], + "type": "string" + }, + "CollabAgentTool": { + "enum": [ + "spawnAgent", + "sendInput", + "resumeAgent", + "wait", + "closeAgent", + "sendMessage", + "followupTask", + "interruptAgent", + "listAgents" + ], + "type": "string" + }, + "CollabAgentToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "interrupted" + ], + "type": "string" + }, + "CommandAction": { + "oneOf": [ + { + "properties": { + "command": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/LegacyAppPathString" + }, + "type": { + "enum": [ + "read" + ], + "title": "ReadCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "name", + "path", + "type" + ], + "title": "ReadCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "listFiles" + ], + "title": "ListFilesCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "ListFilesCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "path": { + "type": [ + "string", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "SearchCommandAction", + "type": "object" + }, + { + "properties": { + "command": { + "type": "string" + }, + "type": { + "enum": [ + "unknown" + ], + "title": "UnknownCommandActionType", + "type": "string" + } + }, + "required": [ + "command", + "type" + ], + "title": "UnknownCommandAction", + "type": "object" + } + ] + }, + "CommandExecutionSource": { + "enum": [ + "agent", + "userShell", + "unifiedExecStartup", + "unifiedExecInteraction" + ], + "type": "string" + }, + "CommandExecutionStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "DynamicToolCallOutputContentItem": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "type": { + "enum": [ + "inputText" + ], + "title": "InputTextDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "InputTextDynamicToolCallOutputContentItem", + "type": "object" + }, + { + "properties": { + "imageUrl": { + "type": "string" + }, + "type": { + "enum": [ + "inputImage" + ], + "title": "InputImageDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "imageUrl", + "type" + ], + "title": "InputImageDynamicToolCallOutputContentItem", + "type": "object" + }, + { + "properties": { + "audioUrl": { + "type": "string" + }, + "type": { + "enum": [ + "inputAudio" + ], + "title": "InputAudioDynamicToolCallOutputContentItemType", + "type": "string" + } + }, + "required": [ + "audioUrl", + "type" + ], + "title": "InputAudioDynamicToolCallOutputContentItem", + "type": "object" + } + ] + }, + "DynamicToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "FileUpdateChange": { + "properties": { + "diff": { + "type": "string" + }, + "kind": { + "$ref": "#/definitions/PatchChangeKind" + }, + "path": { + "type": "string" + } + }, + "required": [ + "diff", + "kind", + "path" + ], + "type": "object" + }, + "HookPromptFragment": { + "properties": { + "hookRunId": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "hookRunId", + "text" + ], + "type": "object" + }, + "ImageDetail": { + "enum": [ + "auto", + "low", + "high", + "original" + ], + "type": "string" + }, + "ImageGenerationFailure": { + "oneOf": [ + { + "properties": { + "limitId": { + "type": "string" + }, + "resetsAt": { + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "type": { + "enum": [ + "usageLimitExceeded" + ], + "title": "UsageLimitExceededImageGenerationFailureType", + "type": "string" + } + }, + "required": [ + "limitId", + "type" + ], + "title": "UsageLimitExceededImageGenerationFailure", + "type": "object" + } + ] + }, + "LegacyAppPathString": { + "type": "string" + }, + "McpToolCallAppContext": { + "properties": { + "actionName": { + "type": [ + "string", + "null" + ] + }, + "appName": { + "type": [ + "string", + "null" + ] + }, + "connectorId": { + "type": "string" + }, + "linkId": { + "type": [ + "string", + "null" + ] + }, + "resourceUri": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "connectorId" + ], + "type": "object" + }, + "McpToolCallError": { + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "McpToolCallResult": { + "properties": { + "_meta": true, + "content": { + "items": true, + "type": "array" + }, + "structuredContent": true + }, + "required": [ + "content" + ], + "type": "object" + }, + "McpToolCallStatus": { + "enum": [ + "inProgress", + "completed", + "failed" + ], + "type": "string" + }, + "MemoryCitation": { + "properties": { + "entries": { + "items": { + "$ref": "#/definitions/MemoryCitationEntry" + }, + "type": "array" + }, + "threadIds": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entries", + "threadIds" + ], + "type": "object" + }, + "MemoryCitationEntry": { + "properties": { + "lineEnd": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "lineStart": { + "format": "uint32", + "minimum": 0.0, + "type": "integer" + }, + "note": { + "type": "string" + }, + "path": { + "type": "string" + } + }, + "required": [ + "lineEnd", + "lineStart", + "note", + "path" + ], + "type": "object" + }, + "MessagePhase": { + "description": "Classifies an assistant message as interim commentary or final answer text.\n\nProviders do not emit this consistently, so callers must treat `None` as \"phase unknown\" and keep compatibility behavior for legacy models.", + "oneOf": [ + { + "description": "Mid-turn assistant text (for example preamble/progress narration).\n\nAdditional tool calls or assistant output may follow before turn completion.", + "enum": [ + "commentary" + ], + "type": "string" + }, + { + "description": "The assistant's terminal answer text for the current turn.", + "enum": [ + "final_answer" + ], + "type": "string" + } + ] + }, + "NonSteerableTurnKind": { + "enum": [ + "review", + "compact" + ], + "type": "string" + }, + "PatchApplyStatus": { + "enum": [ + "inProgress", + "completed", + "failed", + "declined" + ], + "type": "string" + }, + "PatchChangeKind": { + "oneOf": [ + { + "properties": { + "type": { + "enum": [ + "add" + ], + "title": "AddPatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "AddPatchChangeKind", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "delete" + ], + "title": "DeletePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "DeletePatchChangeKind", + "type": "object" + }, + { + "properties": { + "move_path": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "update" + ], + "title": "UpdatePatchChangeKindType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "UpdatePatchChangeKind", + "type": "object" + } + ] + }, + "ReasoningEffort": { + "description": "A non-empty reasoning effort value advertised by the model.", + "minLength": 1, + "type": "string" + }, + "SubAgentActivityKind": { + "enum": [ + "started", + "interacted", + "interrupted", + "completed" + ], + "type": "string" + }, + "TextElement": { + "properties": { + "byteRange": { + "allOf": [ + { + "$ref": "#/definitions/ByteRange" + } + ], + "description": "Byte range in the parent `text` buffer that this element occupies." + }, + "placeholder": { + "description": "Optional human-readable placeholder for the element, displayed in the UI.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "byteRange" + ], + "type": "object" + }, + "ThreadItem": { + "oneOf": [ + { + "properties": { + "clientId": { + "type": [ + "string", + "null" + ] + }, + "content": { + "items": { + "$ref": "#/definitions/UserInput" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "userMessage" + ], + "title": "UserMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "content", + "id", + "type" + ], + "title": "UserMessageThreadItem", + "type": "object" + }, + { + "properties": { + "fragments": { + "items": { + "$ref": "#/definitions/HookPromptFragment" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "hookPrompt" + ], + "title": "HookPromptThreadItemType", + "type": "string" + } + }, + "required": [ + "fragments", + "id", + "type" + ], + "title": "HookPromptThreadItem", + "type": "object" + }, + { + "properties": { + "delivery": { + "anyOf": [ + { + "$ref": "#/definitions/AgentMessageDelivery" + }, + { + "type": "null" + } + ], + "default": null + }, + "id": { + "type": "string" + }, + "memoryCitation": { + "anyOf": [ + { + "$ref": "#/definitions/MemoryCitation" + }, + { + "type": "null" + } + ], + "default": null + }, + "phase": { + "anyOf": [ + { + "$ref": "#/definitions/MessagePhase" + }, + { + "type": "null" + } + ], + "default": null + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "agentMessage" + ], + "title": "AgentMessageThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "AgentMessageThreadItem", + "type": "object" + }, + { + "description": "EXPERIMENTAL - proposed plan item content. The completed plan item is authoritative and may not match the concatenation of `PlanDelta` text.", + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "type": { + "enum": [ + "plan" + ], + "title": "PlanThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "text", + "type" + ], + "title": "PlanThreadItem", + "type": "object" + }, + { + "properties": { + "content": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "summary": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "enum": [ + "reasoning" + ], + "title": "ReasoningThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ReasoningThreadItem", + "type": "object" + }, + { + "properties": { + "aggregatedOutput": { + "description": "The command's output, aggregated from stdout and stderr.", + "type": [ + "string", + "null" + ] + }, + "command": { + "description": "The command to be executed.", + "type": "string" + }, + "commandActions": { + "description": "A best-effort parsing of the command to understand the action(s) it will perform. This returns a list of CommandAction objects because a single shell command may be composed of many commands piped together.", + "items": { + "$ref": "#/definitions/CommandAction" + }, + "type": "array" + }, + "cwd": { + "allOf": [ + { + "$ref": "#/definitions/LegacyAppPathString" + } + ], + "description": "The command's working directory." + }, + "durationMs": { + "description": "The duration of the command execution in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "exitCode": { + "description": "The command's exit code.", + "format": "int32", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "pluginId": { + "default": null, + "description": "Trusted first-party plugin id when this command resolves to one plugin script.", + "type": [ + "string", + "null" + ] + }, + "processId": { + "description": "Identifier for the underlying PTY process (when available).", + "type": [ + "string", + "null" + ] + }, + "scriptPath": { + "default": null, + "description": "Safe plugin-relative path when this command resolves to one plugin script.", + "type": [ + "string", + "null" + ] + }, + "source": { + "allOf": [ + { + "$ref": "#/definitions/CommandExecutionSource" + } + ], + "default": "agent" + }, + "status": { + "$ref": "#/definitions/CommandExecutionStatus" + }, + "type": { + "enum": [ + "commandExecution" + ], + "title": "CommandExecutionThreadItemType", + "type": "string" + } + }, + "required": [ + "command", + "commandActions", + "cwd", + "id", + "status", + "type" + ], + "title": "CommandExecutionThreadItem", + "type": "object" + }, + { + "properties": { + "changes": { + "items": { + "$ref": "#/definitions/FileUpdateChange" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/PatchApplyStatus" + }, + "type": { + "enum": [ + "fileChange" + ], + "title": "FileChangeThreadItemType", + "type": "string" + } + }, + "required": [ + "changes", + "id", + "status", + "type" + ], + "title": "FileChangeThreadItem", + "type": "object" + }, + { + "properties": { + "appContext": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallAppContext" + }, + { + "type": "null" + } + ] + }, + "arguments": true, + "durationMs": { + "description": "The duration of the MCP tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "error": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallError" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "mcpAppResourceUri": { + "description": "Deprecated: use `appContext.resourceUri` instead.", + "type": [ + "string", + "null" + ] + }, + "pluginId": { + "type": [ + "string", + "null" + ] + }, + "readOnlyHint": { + "type": [ + "boolean", + "null" + ] + }, + "result": { + "anyOf": [ + { + "$ref": "#/definitions/McpToolCallResult" + }, + { + "type": "null" + } + ] + }, + "server": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/McpToolCallStatus" + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "mcpToolCall" + ], + "title": "McpToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "server", + "status", + "tool", + "type" + ], + "title": "McpToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "arguments": true, + "contentItems": { + "items": { + "$ref": "#/definitions/DynamicToolCallOutputContentItem" + }, + "type": [ + "array", + "null" + ] + }, + "durationMs": { + "description": "The duration of the dynamic tool call in milliseconds.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "id": { + "type": "string" + }, + "namespace": { + "type": [ + "string", + "null" + ] + }, + "status": { + "$ref": "#/definitions/DynamicToolCallStatus" + }, + "success": { + "type": [ + "boolean", + "null" + ] + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "dynamicToolCall" + ], + "title": "DynamicToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "arguments", + "id", + "status", + "tool", + "type" + ], + "title": "DynamicToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "agentsStates": { + "additionalProperties": { + "$ref": "#/definitions/CollabAgentState" + }, + "description": "Last known status of the target agents, when available.", + "type": "object" + }, + "id": { + "description": "Unique identifier for this collab tool call.", + "type": "string" + }, + "model": { + "description": "Model requested for the spawned agent, when applicable.", + "type": [ + "string", + "null" + ] + }, + "prompt": { + "description": "Prompt text sent as part of the collab tool call, when available.", + "type": [ + "string", + "null" + ] + }, + "reasoningEffort": { + "anyOf": [ + { + "$ref": "#/definitions/ReasoningEffort" + }, + { + "type": "null" + } + ], + "description": "Reasoning effort requested for the spawned agent, when applicable." + }, + "receiverThreadIds": { + "description": "Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.", + "items": { + "type": "string" + }, + "type": "array" + }, + "senderThreadId": { + "description": "Thread ID of the agent issuing the collab request.", + "type": "string" + }, + "status": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentToolCallStatus" + } + ], + "description": "Current status of the collab tool call." + }, + "tool": { + "allOf": [ + { + "$ref": "#/definitions/CollabAgentTool" + } + ], + "description": "Name of the collab tool that was invoked." + }, + "type": { + "enum": [ + "collabAgentToolCall" + ], + "title": "CollabAgentToolCallThreadItemType", + "type": "string" + } + }, + "required": [ + "agentsStates", + "id", + "receiverThreadIds", + "senderThreadId", + "status", + "tool", + "type" + ], + "title": "CollabAgentToolCallThreadItem", + "type": "object" + }, + { + "properties": { + "agentPath": { + "type": "string" + }, + "agentThreadId": { + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "$ref": "#/definitions/SubAgentActivityKind" + }, + "type": { + "enum": [ + "subAgentActivity" + ], + "title": "SubAgentActivityThreadItemType", + "type": "string" + } + }, + "required": [ + "agentPath", + "agentThreadId", + "id", + "kind", + "type" + ], + "title": "SubAgentActivityThreadItem", + "type": "object" + }, + { + "properties": { + "action": { + "anyOf": [ + { + "$ref": "#/definitions/WebSearchAction" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "query": { + "type": "string" + }, + "results": { + "default": null, + "description": "Structured search results returned out-of-band by standalone web search.\n\nThese stay as opaque JSON at the extension/app-server boundary so new result fields and result types can pass through without a Codex release.", + "items": true, + "type": [ + "array", + "null" + ] + }, + "type": { + "enum": [ + "webSearch" + ], + "title": "WebSearchThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "query", + "type" + ], + "title": "WebSearchThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "path": { + "$ref": "#/definitions/LegacyAppPathString" + }, + "type": { + "enum": [ + "imageView" + ], + "title": "ImageViewThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "path", + "type" + ], + "title": "ImageViewThreadItem", + "type": "object" + }, + { + "description": "Display item emitted by the interruptible `clock.sleep` tool.", + "properties": { + "durationMs": { + "format": "uint64", + "minimum": 0.0, + "type": "integer" + }, + "id": { + "type": "string" + }, + "type": { + "enum": [ + "sleep" + ], + "title": "SleepThreadItemType", + "type": "string" + } + }, + "required": [ + "durationMs", + "id", + "type" + ], + "title": "SleepThreadItem", + "type": "object" + }, + { + "properties": { + "failure": { + "anyOf": [ + { + "$ref": "#/definitions/ImageGenerationFailure" + }, + { + "type": "null" + } + ], + "default": null + }, + "id": { + "type": "string" + }, + "result": { + "type": "string" + }, + "revisedPrompt": { + "type": [ + "string", + "null" + ] + }, + "savedPath": { + "anyOf": [ + { + "$ref": "#/definitions/AbsolutePathBuf" + }, + { + "type": "null" + } + ] + }, + "status": { + "type": "string" + }, + "transparentBackground": { + "default": null, + "type": [ + "boolean", + "null" + ] + }, + "type": { + "enum": [ + "imageGeneration" + ], + "title": "ImageGenerationThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "result", + "status", + "type" + ], + "title": "ImageGenerationThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "enteredReviewMode" + ], + "title": "EnteredReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "EnteredReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "review": { + "type": "string" + }, + "type": { + "enum": [ + "exitedReviewMode" + ], + "title": "ExitedReviewModeThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "review", + "type" + ], + "title": "ExitedReviewModeThreadItem", + "type": "object" + }, + { + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": [ + "contextCompaction" + ], + "title": "ContextCompactionThreadItemType", + "type": "string" + } + }, + "required": [ + "id", + "type" + ], + "title": "ContextCompactionThreadItem", + "type": "object" + } + ] + }, + "Turn": { + "properties": { + "completedAt": { + "description": "Unix timestamp (in seconds) when the turn completed.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "durationMs": { + "description": "Duration between turn start and completion in milliseconds, if known.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "error": { + "anyOf": [ + { + "$ref": "#/definitions/TurnError" + }, + { + "type": "null" + } + ], + "description": "Only populated when the Turn's status is failed." + }, + "id": { + "description": "Identifier for this turn. Codex-generated turn IDs are UUIDv7.", + "type": "string" + }, + "items": { + "description": "Thread items currently included in this turn payload.", + "items": { + "$ref": "#/definitions/ThreadItem" + }, + "type": "array" + }, + "itemsView": { + "allOf": [ + { + "$ref": "#/definitions/TurnItemsView" + } + ], + "default": "full", + "description": "Describes how much of `items` has been loaded for this turn." + }, + "startedAt": { + "description": "Unix timestamp (in seconds) when the turn started.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "status": { + "$ref": "#/definitions/TurnStatus" + } + }, + "required": [ + "id", + "items", + "status" + ], + "type": "object" + }, + "TurnError": { + "properties": { + "additionalDetails": { + "default": null, + "type": [ + "string", + "null" + ] + }, + "codexErrorInfo": { + "anyOf": [ + { + "$ref": "#/definitions/CodexErrorInfo" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "TurnItemsView": { + "oneOf": [ + { + "description": "`items` was not loaded for this turn. The field is intentionally empty.", + "enum": [ + "notLoaded" + ], + "type": "string" + }, + { + "description": "`items` contains only a display summary for this turn.", + "enum": [ + "summary" + ], + "type": "string" + }, + { + "description": "`items` contains every ThreadItem available from persisted app-server history for this turn.", + "enum": [ + "full" + ], + "type": "string" + } + ] + }, + "TurnStatus": { + "enum": [ + "completed", + "interrupted", + "failed", + "inProgress" + ], + "type": "string" + }, + "UserInput": { + "oneOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "text_elements": { + "default": [], + "description": "UI-defined spans within `text` used to render or persist special elements.", + "items": { + "$ref": "#/definitions/TextElement" + }, + "type": "array" + }, + "type": { + "enum": [ + "text" + ], + "title": "TextUserInputType", + "type": "string" + } + }, + "required": [ + "text", + "type" + ], + "title": "TextUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "type": { + "enum": [ + "image" + ], + "title": "ImageUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "ImageUserInput", + "type": "object" + }, + { + "properties": { + "detail": { + "anyOf": [ + { + "$ref": "#/definitions/ImageDetail" + }, + { + "type": "null" + } + ], + "default": null + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localImage" + ], + "title": "LocalImageUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalImageUserInput", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "audio" + ], + "title": "AudioUserInputType", + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "AudioUserInput", + "type": "object" + }, + { + "properties": { + "path": { + "type": "string" + }, + "type": { + "enum": [ + "localAudio" + ], + "title": "LocalAudioUserInputType", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "title": "LocalAudioUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "skill" + ], + "title": "SkillUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "SkillUserInput", + "type": "object" + }, + { + "properties": { + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "enum": [ + "mention" + ], + "title": "MentionUserInputType", + "type": "string" + } + }, + "required": [ + "name", + "path", + "type" + ], + "title": "MentionUserInput", + "type": "object" + } + ] + }, + "WebSearchAction": { + "oneOf": [ + { + "properties": { + "queries": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "query": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "search" + ], + "title": "SearchWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "SearchWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "openPage" + ], + "title": "OpenPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "OpenPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "pattern": { + "type": [ + "string", + "null" + ] + }, + "type": { + "enum": [ + "findInPage" + ], + "title": "FindInPageWebSearchActionType", + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type" + ], + "title": "FindInPageWebSearchAction", + "type": "object" + }, + { + "properties": { + "type": { + "enum": [ + "other" + ], + "title": "OtherWebSearchActionType", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "OtherWebSearchAction", + "type": "object" + } + ] + } + }, + "properties": { + "backwardsCursor": { + "description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one turn. Use it with the opposite `sortDirection` to include the anchor turn again and catch updates to that turn.", + "type": [ + "string", + "null" + ] + }, + "data": { + "items": { + "$ref": "#/definitions/Turn" + }, + "type": "array" + }, + "nextCursor": { + "description": "Opaque cursor to pass to the next call to continue after the last turn. if None, there are no more turns to return.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "data" + ], + "title": "ThreadTurnsListResponse", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json index 876aaca15d..8eff63edc6 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json @@ -941,6 +941,15 @@ ], "description": "Optional Git metadata captured when the thread was created." }, + "historyMode": { + "allOf": [ + { + "$ref": "#/definitions/ThreadHistoryMode" + } + ], + "default": "legacy", + "description": "Persisted thread history contract selected when this thread was created." + }, "id": { "description": "Identifier for this thread. Codex-generated thread IDs are UUIDv7.", "type": "string" diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst index f764283be1891405b3dac921f999e653bc6dc25d..eaf12ba5ff79b2ab6e68f893633d634668689965 100644 GIT binary patch literal 141819 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%0DSkKz^4sU0YRqN-}_H%nwl$)ZOPL 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 N0E)(VIJ@dUU0u~h&7 literal 140610 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 z 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 z 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 AtN;K2 diff --git a/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts b/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts index dffd07fbf9..127a29db2d 100644 --- a/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts +++ b/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts @@ -73,11 +73,13 @@ import type { ThreadGoalClearParams } from "./v2/ThreadGoalClearParams"; import type { ThreadGoalGetParams } from "./v2/ThreadGoalGetParams"; import type { ThreadGoalSetParams } from "./v2/ThreadGoalSetParams"; import type { ThreadInjectItemsParams } from "./v2/ThreadInjectItemsParams"; +import type { ThreadItemsListParams } from "./v2/ThreadItemsListParams"; import type { ThreadListParams } from "./v2/ThreadListParams"; import type { ThreadLoadedListParams } from "./v2/ThreadLoadedListParams"; import type { ThreadMetadataUpdateParams } from "./v2/ThreadMetadataUpdateParams"; import type { ThreadReadParams } from "./v2/ThreadReadParams"; import type { ThreadResumeParams } from "./v2/ThreadResumeParams"; +import type { ThreadRevertParams } from "./v2/ThreadRevertParams"; import type { ThreadRollbackParams } from "./v2/ThreadRollbackParams"; import type { ThreadSectionCreateParams } from "./v2/ThreadSectionCreateParams"; import type { ThreadSectionDeleteParams } from "./v2/ThreadSectionDeleteParams"; @@ -87,6 +89,7 @@ import type { ThreadSectionUpdateParams } from "./v2/ThreadSectionUpdateParams"; import type { ThreadSetNameParams } from "./v2/ThreadSetNameParams"; import type { ThreadShellCommandParams } from "./v2/ThreadShellCommandParams"; import type { ThreadStartParams } from "./v2/ThreadStartParams"; +import type { ThreadTurnsListParams } from "./v2/ThreadTurnsListParams"; import type { ThreadUnarchiveParams } from "./v2/ThreadUnarchiveParams"; import type { ThreadUnsubscribeParams } from "./v2/ThreadUnsubscribeParams"; import type { TurnInterruptParams } from "./v2/TurnInterruptParams"; @@ -97,4 +100,4 @@ import type { WindowsSandboxSetupStartParams } from "./v2/WindowsSandboxSetupSta /** * Request from the client to the server. */ -export type ClientRequest ={ "method": "initialize", id: RequestId, params: InitializeParams, } | { "method": "thread/start", id: RequestId, params: ThreadStartParams, } | { "method": "thread/resume", id: RequestId, params: ThreadResumeParams, } | { "method": "thread/fork", id: RequestId, params: ThreadForkParams, } | { "method": "thread/archive", id: RequestId, params: ThreadArchiveParams, } | { "method": "thread/delete", id: RequestId, params: ThreadDeleteParams, } | { "method": "thread/unsubscribe", id: RequestId, params: ThreadUnsubscribeParams, } | { "method": "thread/name/set", id: RequestId, params: ThreadSetNameParams, } | { "method": "thread/goal/set", id: RequestId, params: ThreadGoalSetParams, } | { "method": "thread/goal/get", id: RequestId, params: ThreadGoalGetParams, } | { "method": "thread/goal/clear", id: RequestId, params: ThreadGoalClearParams, } | { "method": "thread/metadata/update", id: RequestId, params: ThreadMetadataUpdateParams, } | { "method": "thread/section/move", id: RequestId, params: ThreadSectionMoveParams, } | { "method": "thread/unarchive", id: RequestId, params: ThreadUnarchiveParams, } | { "method": "thread/compact/start", id: RequestId, params: ThreadCompactStartParams, } | { "method": "thread/shellCommand", id: RequestId, params: ThreadShellCommandParams, } | { "method": "thread/approveGuardianDeniedAction", id: RequestId, params: ThreadApproveGuardianDeniedActionParams, } | { "method": "thread/rollback", id: RequestId, params: ThreadRollbackParams, } | { "method": "thread/list", id: RequestId, params: ThreadListParams, } | { "method": "threadSection/list", id: RequestId, params: ThreadSectionListParams, } | { "method": "threadSection/create", id: RequestId, params: ThreadSectionCreateParams, } | { "method": "threadSection/update", id: RequestId, params: ThreadSectionUpdateParams, } | { "method": "threadSection/delete", id: RequestId, params: ThreadSectionDeleteParams, } | { "method": "thread/loaded/list", id: RequestId, params: ThreadLoadedListParams, } | { "method": "thread/read", id: RequestId, params: ThreadReadParams, } | { "method": "thread/inject_items", id: RequestId, params: ThreadInjectItemsParams, } | { "method": "skills/list", id: RequestId, params: SkillsListParams, } | { "method": "skills/extraRoots/set", id: RequestId, params: SkillsExtraRootsSetParams, } | { "method": "hooks/list", id: RequestId, params: HooksListParams, } | { "method": "marketplace/add", id: RequestId, params: MarketplaceAddParams, } | { "method": "marketplace/remove", id: RequestId, params: MarketplaceRemoveParams, } | { "method": "marketplace/upgrade", id: RequestId, params: MarketplaceUpgradeParams, } | { "method": "plugin/list", id: RequestId, params: PluginListParams, } | { "method": "plugin/installed", id: RequestId, params: PluginInstalledParams, } | { "method": "plugin/read", id: RequestId, params: PluginReadParams, } | { "method": "plugin/skill/read", id: RequestId, params: PluginSkillReadParams, } | { "method": "plugin/share/save", id: RequestId, params: PluginShareSaveParams, } | { "method": "plugin/share/updateTargets", id: RequestId, params: PluginShareUpdateTargetsParams, } | { "method": "plugin/share/list", id: RequestId, params: PluginShareListParams, } | { "method": "plugin/share/checkout", id: RequestId, params: PluginShareCheckoutParams, } | { "method": "plugin/share/delete", id: RequestId, params: PluginShareDeleteParams, } | { "method": "app/read", id: RequestId, params: AppsReadParams, } | { "method": "app/list", id: RequestId, params: AppsListParams, } | { "method": "app/installed", id: RequestId, params: AppsInstalledParams, } | { "method": "fs/readFile", id: RequestId, params: FsReadFileParams, } | { "method": "fs/writeFile", id: RequestId, params: FsWriteFileParams, } | { "method": "fs/createDirectory", id: RequestId, params: FsCreateDirectoryParams, } | { "method": "fs/getMetadata", id: RequestId, params: FsGetMetadataParams, } | { "method": "fs/readDirectory", id: RequestId, params: FsReadDirectoryParams, } | { "method": "fs/remove", id: RequestId, params: FsRemoveParams, } | { "method": "fs/copy", id: RequestId, params: FsCopyParams, } | { "method": "fs/watch", id: RequestId, params: FsWatchParams, } | { "method": "fs/unwatch", id: RequestId, params: FsUnwatchParams, } | { "method": "skills/config/write", id: RequestId, params: SkillsConfigWriteParams, } | { "method": "plugin/install", id: RequestId, params: PluginInstallParams, } | { "method": "plugin/uninstall", id: RequestId, params: PluginUninstallParams, } | { "method": "turn/start", id: RequestId, params: TurnStartParams, } | { "method": "turn/steer", id: RequestId, params: TurnSteerParams, } | { "method": "turn/interrupt", id: RequestId, params: TurnInterruptParams, } | { "method": "review/start", id: RequestId, params: ReviewStartParams, } | { "method": "model/list", id: RequestId, params: ModelListParams, } | { "method": "modelProvider/capabilities/read", id: RequestId, params: ModelProviderCapabilitiesReadParams, } | { "method": "experimentalFeature/list", id: RequestId, params: ExperimentalFeatureListParams, } | { "method": "permissionProfile/list", id: RequestId, params: PermissionProfileListParams, } | { "method": "experimentalFeature/enablement/set", id: RequestId, params: ExperimentalFeatureEnablementSetParams, } | { "method": "mcpServer/oauth/login", id: RequestId, params: McpServerOauthLoginParams, } | { "method": "config/mcpServer/reload", id: RequestId, params: undefined, } | { "method": "mcpServerStatus/list", id: RequestId, params: ListMcpServerStatusParams, } | { "method": "mcpServer/resource/read", id: RequestId, params: McpResourceReadParams, } | { "method": "mcpServer/tool/call", id: RequestId, params: McpServerToolCallParams, } | { "method": "windowsSandbox/setupStart", id: RequestId, params: WindowsSandboxSetupStartParams, } | { "method": "windowsSandbox/readiness", id: RequestId, params: undefined, } | { "method": "account/login/start", id: RequestId, params: LoginAccountParams, } | { "method": "account/login/cancel", id: RequestId, params: CancelLoginAccountParams, } | { "method": "account/logout", id: RequestId, params: undefined, } | { "method": "account/rateLimits/read", id: RequestId, params: undefined, } | { "method": "account/rateLimitResetCredit/consume", id: RequestId, params: ConsumeAccountRateLimitResetCreditParams, } | { "method": "account/usage/read", id: RequestId, params?: GetAccountTokenUsageParams | undefined, } | { "method": "account/workspaceMessages/read", id: RequestId, params: undefined, } | { "method": "account/sendAddCreditsNudgeEmail", id: RequestId, params: SendAddCreditsNudgeEmailParams, } | { "method": "feedback/upload", id: RequestId, params: FeedbackUploadParams, } | { "method": "command/exec", id: RequestId, params: CommandExecParams, } | { "method": "command/exec/write", id: RequestId, params: CommandExecWriteParams, } | { "method": "command/exec/terminate", id: RequestId, params: CommandExecTerminateParams, } | { "method": "command/exec/resize", id: RequestId, params: CommandExecResizeParams, } | { "method": "config/read", id: RequestId, params: ConfigReadParams, } | { "method": "externalAgentConfig/detect", id: RequestId, params: ExternalAgentConfigDetectParams, } | { "method": "externalAgentConfig/import", id: RequestId, params: ExternalAgentConfigImportParams, } | { "method": "externalAgentConfig/import/recordHistory", id: RequestId, params: ExternalAgentConfigImportHistoryRecordParams, } | { "method": "externalAgentConfig/import/readHistories", id: RequestId, params: undefined, } | { "method": "config/value/write", id: RequestId, params: ConfigValueWriteParams, } | { "method": "config/batchWrite", id: RequestId, params: ConfigBatchWriteParams, } | { "method": "configRequirements/read", id: RequestId, params: undefined, } | { "method": "account/read", id: RequestId, params: GetAccountParams, } | { "method": "getConversationSummary", id: RequestId, params: GetConversationSummaryParams, } | { "method": "gitDiffToRemote", id: RequestId, params: GitDiffToRemoteParams, } | { "method": "getAuthStatus", id: RequestId, params: GetAuthStatusParams, } | { "method": "fuzzyFileSearch", id: RequestId, params: FuzzyFileSearchParams, }; +export type ClientRequest ={ "method": "initialize", id: RequestId, params: InitializeParams, } | { "method": "thread/start", id: RequestId, params: ThreadStartParams, } | { "method": "thread/resume", id: RequestId, params: ThreadResumeParams, } | { "method": "thread/fork", id: RequestId, params: ThreadForkParams, } | { "method": "thread/archive", id: RequestId, params: ThreadArchiveParams, } | { "method": "thread/delete", id: RequestId, params: ThreadDeleteParams, } | { "method": "thread/unsubscribe", id: RequestId, params: ThreadUnsubscribeParams, } | { "method": "thread/name/set", id: RequestId, params: ThreadSetNameParams, } | { "method": "thread/goal/set", id: RequestId, params: ThreadGoalSetParams, } | { "method": "thread/goal/get", id: RequestId, params: ThreadGoalGetParams, } | { "method": "thread/goal/clear", id: RequestId, params: ThreadGoalClearParams, } | { "method": "thread/metadata/update", id: RequestId, params: ThreadMetadataUpdateParams, } | { "method": "thread/section/move", id: RequestId, params: ThreadSectionMoveParams, } | { "method": "thread/unarchive", id: RequestId, params: ThreadUnarchiveParams, } | { "method": "thread/compact/start", id: RequestId, params: ThreadCompactStartParams, } | { "method": "thread/shellCommand", id: RequestId, params: ThreadShellCommandParams, } | { "method": "thread/approveGuardianDeniedAction", id: RequestId, params: ThreadApproveGuardianDeniedActionParams, } | { "method": "thread/rollback", id: RequestId, params: ThreadRollbackParams, } | { "method": "thread/revert", id: RequestId, params: ThreadRevertParams, } | { "method": "thread/list", id: RequestId, params: ThreadListParams, } | { "method": "threadSection/list", id: RequestId, params: ThreadSectionListParams, } | { "method": "threadSection/create", id: RequestId, params: ThreadSectionCreateParams, } | { "method": "threadSection/update", id: RequestId, params: ThreadSectionUpdateParams, } | { "method": "threadSection/delete", id: RequestId, params: ThreadSectionDeleteParams, } | { "method": "thread/loaded/list", id: RequestId, params: ThreadLoadedListParams, } | { "method": "thread/read", id: RequestId, params: ThreadReadParams, } | { "method": "thread/turns/list", id: RequestId, params: ThreadTurnsListParams, } | { "method": "thread/items/list", id: RequestId, params: ThreadItemsListParams, } | { "method": "thread/inject_items", id: RequestId, params: ThreadInjectItemsParams, } | { "method": "skills/list", id: RequestId, params: SkillsListParams, } | { "method": "skills/extraRoots/set", id: RequestId, params: SkillsExtraRootsSetParams, } | { "method": "hooks/list", id: RequestId, params: HooksListParams, } | { "method": "marketplace/add", id: RequestId, params: MarketplaceAddParams, } | { "method": "marketplace/remove", id: RequestId, params: MarketplaceRemoveParams, } | { "method": "marketplace/upgrade", id: RequestId, params: MarketplaceUpgradeParams, } | { "method": "plugin/list", id: RequestId, params: PluginListParams, } | { "method": "plugin/installed", id: RequestId, params: PluginInstalledParams, } | { "method": "plugin/read", id: RequestId, params: PluginReadParams, } | { "method": "plugin/skill/read", id: RequestId, params: PluginSkillReadParams, } | { "method": "plugin/share/save", id: RequestId, params: PluginShareSaveParams, } | { "method": "plugin/share/updateTargets", id: RequestId, params: PluginShareUpdateTargetsParams, } | { "method": "plugin/share/list", id: RequestId, params: PluginShareListParams, } | { "method": "plugin/share/checkout", id: RequestId, params: PluginShareCheckoutParams, } | { "method": "plugin/share/delete", id: RequestId, params: PluginShareDeleteParams, } | { "method": "app/read", id: RequestId, params: AppsReadParams, } | { "method": "app/list", id: RequestId, params: AppsListParams, } | { "method": "app/installed", id: RequestId, params: AppsInstalledParams, } | { "method": "fs/readFile", id: RequestId, params: FsReadFileParams, } | { "method": "fs/writeFile", id: RequestId, params: FsWriteFileParams, } | { "method": "fs/createDirectory", id: RequestId, params: FsCreateDirectoryParams, } | { "method": "fs/getMetadata", id: RequestId, params: FsGetMetadataParams, } | { "method": "fs/readDirectory", id: RequestId, params: FsReadDirectoryParams, } | { "method": "fs/remove", id: RequestId, params: FsRemoveParams, } | { "method": "fs/copy", id: RequestId, params: FsCopyParams, } | { "method": "fs/watch", id: RequestId, params: FsWatchParams, } | { "method": "fs/unwatch", id: RequestId, params: FsUnwatchParams, } | { "method": "skills/config/write", id: RequestId, params: SkillsConfigWriteParams, } | { "method": "plugin/install", id: RequestId, params: PluginInstallParams, } | { "method": "plugin/uninstall", id: RequestId, params: PluginUninstallParams, } | { "method": "turn/start", id: RequestId, params: TurnStartParams, } | { "method": "turn/steer", id: RequestId, params: TurnSteerParams, } | { "method": "turn/interrupt", id: RequestId, params: TurnInterruptParams, } | { "method": "review/start", id: RequestId, params: ReviewStartParams, } | { "method": "model/list", id: RequestId, params: ModelListParams, } | { "method": "modelProvider/capabilities/read", id: RequestId, params: ModelProviderCapabilitiesReadParams, } | { "method": "experimentalFeature/list", id: RequestId, params: ExperimentalFeatureListParams, } | { "method": "permissionProfile/list", id: RequestId, params: PermissionProfileListParams, } | { "method": "experimentalFeature/enablement/set", id: RequestId, params: ExperimentalFeatureEnablementSetParams, } | { "method": "mcpServer/oauth/login", id: RequestId, params: McpServerOauthLoginParams, } | { "method": "config/mcpServer/reload", id: RequestId, params: undefined, } | { "method": "mcpServerStatus/list", id: RequestId, params: ListMcpServerStatusParams, } | { "method": "mcpServer/resource/read", id: RequestId, params: McpResourceReadParams, } | { "method": "mcpServer/tool/call", id: RequestId, params: McpServerToolCallParams, } | { "method": "windowsSandbox/setupStart", id: RequestId, params: WindowsSandboxSetupStartParams, } | { "method": "windowsSandbox/readiness", id: RequestId, params: undefined, } | { "method": "account/login/start", id: RequestId, params: LoginAccountParams, } | { "method": "account/login/cancel", id: RequestId, params: CancelLoginAccountParams, } | { "method": "account/logout", id: RequestId, params: undefined, } | { "method": "account/rateLimits/read", id: RequestId, params: undefined, } | { "method": "account/rateLimitResetCredit/consume", id: RequestId, params: ConsumeAccountRateLimitResetCreditParams, } | { "method": "account/usage/read", id: RequestId, params?: GetAccountTokenUsageParams | undefined, } | { "method": "account/workspaceMessages/read", id: RequestId, params: undefined, } | { "method": "account/sendAddCreditsNudgeEmail", id: RequestId, params: SendAddCreditsNudgeEmailParams, } | { "method": "feedback/upload", id: RequestId, params: FeedbackUploadParams, } | { "method": "command/exec", id: RequestId, params: CommandExecParams, } | { "method": "command/exec/write", id: RequestId, params: CommandExecWriteParams, } | { "method": "command/exec/terminate", id: RequestId, params: CommandExecTerminateParams, } | { "method": "command/exec/resize", id: RequestId, params: CommandExecResizeParams, } | { "method": "config/read", id: RequestId, params: ConfigReadParams, } | { "method": "externalAgentConfig/detect", id: RequestId, params: ExternalAgentConfigDetectParams, } | { "method": "externalAgentConfig/import", id: RequestId, params: ExternalAgentConfigImportParams, } | { "method": "externalAgentConfig/import/recordHistory", id: RequestId, params: ExternalAgentConfigImportHistoryRecordParams, } | { "method": "externalAgentConfig/import/readHistories", id: RequestId, params: undefined, } | { "method": "config/value/write", id: RequestId, params: ConfigValueWriteParams, } | { "method": "config/batchWrite", id: RequestId, params: ConfigBatchWriteParams, } | { "method": "configRequirements/read", id: RequestId, params: undefined, } | { "method": "account/read", id: RequestId, params: GetAccountParams, } | { "method": "getConversationSummary", id: RequestId, params: GetConversationSummaryParams, } | { "method": "gitDiffToRemote", id: RequestId, params: GitDiffToRemoteParams, } | { "method": "getAuthStatus", id: RequestId, params: GetAuthStatusParams, } | { "method": "fuzzyFileSearch", id: RequestId, params: FuzzyFileSearchParams, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/Thread.ts b/codex-rs/app-server-protocol/schema/typescript/v2/Thread.ts index 5f23dd4757..5b6f44c1a7 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/Thread.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/Thread.ts @@ -4,6 +4,7 @@ import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { GitInfo } from "./GitInfo"; import type { SessionSource } from "./SessionSource"; +import type { ThreadHistoryMode } from "./ThreadHistoryMode"; import type { ThreadSection } from "./ThreadSection"; import type { ThreadSource } from "./ThreadSource"; import type { ThreadStatus } from "./ThreadStatus"; @@ -37,6 +38,9 @@ sectionEnteredAt: number | null, /** * Canonical project assignment owned by app-server, if any. */ projectId: string | null, /** + * Persisted thread history contract selected when this thread was created. + */ +historyMode: ThreadHistoryMode, /** * Model provider used for this thread (for example, 'openai'). */ modelProvider: string, /** diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts index 3ace4d4417..34eb1fef17 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadForkParams.ts @@ -33,4 +33,9 @@ model?: string | null, modelProvider?: string | null, serviceTier?: string | nul approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, ephemeral?: boolean, /** * Optional client-supplied analytics source classification for this forked thread. */ -threadSource?: ThreadSource | null}; +threadSource?: ThreadSource | null, /** + * When true, return only thread metadata and live fork state without + * populating `thread.turns`. This is useful when the client plans to call + * `thread/turns/list` immediately after forking. + */ +excludeTurns?: boolean}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListParams.ts new file mode 100644 index 0000000000..c41e93f795 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListParams.ts @@ -0,0 +1,22 @@ +// 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 { SortDirection } from "./SortDirection"; + +export type ThreadItemsListParams = { threadId: string, +/** + * Optional turn id to filter by. When omitted, returns items across the thread. + */ +turnId?: string | null, +/** + * Opaque cursor to pass to the next call to continue after the last item. + */ +cursor?: string | null, +/** + * Optional item page size. + */ +limit?: number | null, +/** + * Optional item pagination direction; defaults to ascending. + */ +sortDirection?: SortDirection | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListResponse.ts new file mode 100644 index 0000000000..7b176ffea6 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListResponse.ts @@ -0,0 +1,16 @@ +// 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 { ThreadItemEntry } from "./ThreadItemEntry"; + +export type ThreadItemsListResponse = { data: Array, +/** + * Opaque cursor to pass to the next call to continue after the last item. + * if None, there are no more items to return. + */ +nextCursor: string | null, +/** + * Opaque cursor to pass as `cursor` when reversing `sortDirection`. + * This is only populated when the page contains at least one item. + */ +backwardsCursor: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts index 0ec8953435..050cc85e8d 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeParams.ts @@ -30,4 +30,9 @@ model?: string | null, modelProvider?: string | null, serviceTier?: string | nul * Override where approval requests are routed for review on this thread * and subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null}; +approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, /** + * When true, return only thread metadata and live-resume state without + * populating `thread.turns`. This is useful when the client plans to call + * `thread/turns/list` immediately after resuming. + */ +excludeTurns?: boolean}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts index e1f7d642be..d1282c7a2d 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadResumeResponse.ts @@ -19,4 +19,16 @@ approvalsReviewer: ApprovalsReviewer, /** * Legacy sandbox policy retained for compatibility. Experimental clients * should prefer `activePermissionProfile` for profile provenance. */ -sandbox: SandboxPolicy, reasoningEffort: ReasoningEffort | null}; +sandbox: SandboxPolicy, reasoningEffort: ReasoningEffort | null, /** + * Opaque cursor for hydrating paginated turns backwards. + * + * Pass this as `cursor` to `thread/turns/list` with + * `sortDirection: "desc"`. The first page includes the turn identified by the cursor. + */ +turnsBackwardsCursor: string | null, /** + * Opaque cursor for hydrating paginated items backwards. + * + * Pass this as `cursor` to `thread/items/list` with + * `sortDirection: "desc"`. The first page includes the item identified by the cursor. + */ +itemsBackwardsCursor: string | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRevertParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRevertParams.ts new file mode 100644 index 0000000000..1090a5c330 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRevertParams.ts @@ -0,0 +1,14 @@ +// 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. + +/** + * Replace a paginated thread's durable history with the prefix before one turn. + * + * This only changes persisted conversation history. It does not revert local file changes. + */ +export type ThreadRevertParams = { threadId: string, +/** + * Turn excluded from the replacement history, together with every later turn. + */ +beforeTurnId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRevertResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRevertResponse.ts new file mode 100644 index 0000000000..afc389a203 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadRevertResponse.ts @@ -0,0 +1,25 @@ +// 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 { Thread } from "./Thread"; + +export type ThreadRevertResponse = { +/** + * Updated loaded thread metadata. `turns` is always empty; hydrate retained history through + * `thread/turns/list`. + */ +thread: Thread, +/** + * Opaque cursor for hydrating paginated turns backwards. + * + * Pass this as `cursor` to `thread/turns/list` with + * `sortDirection: "desc"`. The first page includes the turn identified by the cursor. + */ +turnsBackwardsCursor: string | null, +/** + * Opaque cursor for hydrating paginated items backwards. + * + * Pass this as `cursor` to `thread/items/list` with + * `sortDirection: "desc"`. The first page includes the item identified by the cursor. + */ +itemsBackwardsCursor: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts new file mode 100644 index 0000000000..a1aa682a88 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListParams.ts @@ -0,0 +1,23 @@ +// 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 { SortDirection } from "./SortDirection"; +import type { TurnItemsView } from "./TurnItemsView"; + +export type ThreadTurnsListParams = { threadId: string, +/** + * Opaque cursor to pass to the next call to continue after the last turn. + */ +cursor?: string | null, +/** + * Optional turn page size. + */ +limit?: number | null, +/** + * Optional turn pagination direction; defaults to descending. + */ +sortDirection?: SortDirection | null, +/** + * How much item detail to include for each returned turn; defaults to summary. + */ +itemsView?: TurnItemsView | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts new file mode 100644 index 0000000000..1dbed91a70 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadTurnsListResponse.ts @@ -0,0 +1,18 @@ +// 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 { Turn } from "./Turn"; + +export type ThreadTurnsListResponse = { data: Array, +/** + * Opaque cursor to pass to the next call to continue after the last turn. + * if None, there are no more turns to return. + */ +nextCursor: string | null, +/** + * Opaque cursor to pass as `cursor` when reversing `sortDirection`. + * This is only populated when the page contains at least one turn. + * Use it with the opposite `sortDirection` to include the anchor turn again + * and catch updates to that turn. + */ +backwardsCursor: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts index 36601f6371..9c6f665f0e 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts @@ -479,6 +479,8 @@ export type { ThreadInjectItemsParams } from "./ThreadInjectItemsParams"; export type { ThreadInjectItemsResponse } from "./ThreadInjectItemsResponse"; export type { ThreadItem } from "./ThreadItem"; export type { ThreadItemEntry } from "./ThreadItemEntry"; +export type { ThreadItemsListParams } from "./ThreadItemsListParams"; +export type { ThreadItemsListResponse } from "./ThreadItemsListResponse"; export type { ThreadListParams } from "./ThreadListParams"; export type { ThreadListResponse } from "./ThreadListResponse"; export type { ThreadLoadedListParams } from "./ThreadLoadedListParams"; @@ -512,6 +514,8 @@ export type { ThreadRealtimeTranscriptRole } from "./ThreadRealtimeTranscriptRol export type { ThreadResumeInitialTurnsPageParams } from "./ThreadResumeInitialTurnsPageParams"; export type { ThreadResumeParams } from "./ThreadResumeParams"; export type { ThreadResumeResponse } from "./ThreadResumeResponse"; +export type { ThreadRevertParams } from "./ThreadRevertParams"; +export type { ThreadRevertResponse } from "./ThreadRevertResponse"; export type { ThreadRevertedNotification } from "./ThreadRevertedNotification"; export type { ThreadRollbackParams } from "./ThreadRollbackParams"; export type { ThreadRollbackResponse } from "./ThreadRollbackResponse"; @@ -547,6 +551,8 @@ export type { ThreadStatusChangedNotification } from "./ThreadStatusChangedNotif export type { ThreadTimelineEntry } from "./ThreadTimelineEntry"; export type { ThreadTokenUsage } from "./ThreadTokenUsage"; export type { ThreadTokenUsageUpdatedNotification } from "./ThreadTokenUsageUpdatedNotification"; +export type { ThreadTurnsListParams } from "./ThreadTurnsListParams"; +export type { ThreadTurnsListResponse } from "./ThreadTurnsListResponse"; export type { ThreadUnarchiveParams } from "./ThreadUnarchiveParams"; export type { ThreadUnarchiveResponse } from "./ThreadUnarchiveResponse"; export type { ThreadUnarchivedNotification } from "./ThreadUnarchivedNotification"; diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs index d16e6ef05d..156d16001b 100644 --- a/codex-rs/app-server-protocol/src/protocol/common.rs +++ b/codex-rs/app-server-protocol/src/protocol/common.rs @@ -692,7 +692,6 @@ client_request_definitions! { serialization: thread_id(params.thread_id), response: v2::ThreadRollbackResponse, }, - #[experimental("thread/revert")] ThreadRevert => "thread/revert" { params: v2::ThreadRevertParams, serialization: thread_id(params.thread_id), @@ -789,14 +788,12 @@ client_request_definitions! { serialization: thread_id(params.thread_id), response: v2::ThreadReadResponse, }, - #[experimental("thread/turns/list")] ThreadTurnsList => "thread/turns/list" { params: v2::ThreadTurnsListParams, // Explicitly concurrent: this primarily reads append-only rollout storage. serialization: None, response: v2::ThreadTurnsListResponse, }, - #[experimental("thread/items/list")] ThreadItemsList => "thread/items/list" { params: v2::ThreadItemsListParams, // Explicitly concurrent: this primarily reads append-only rollout storage. @@ -1845,7 +1842,6 @@ server_notification_definitions! { ThreadDeleted => "thread/deleted" (v2::ThreadDeletedNotification), ThreadUnarchived => "thread/unarchived" (v2::ThreadUnarchivedNotification), ThreadClosed => "thread/closed" (v2::ThreadClosedNotification), - #[experimental("thread/reverted")] ThreadReverted => "thread/reverted" (v2::ThreadRevertedNotification), SkillsChanged => "skills/changed" (v2::SkillsChangedNotification), ThreadNameUpdated => "thread/name/updated" (v2::ThreadNameUpdatedNotification), diff --git a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs b/codex-rs/app-server-protocol/src/protocol/v2/thread.rs index fc70dbe6f2..8026b42f47 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/thread.rs @@ -398,7 +398,6 @@ pub struct ThreadResumeParams { /// When true, return only thread metadata and live-resume state without /// populating `thread.turns`. This is useful when the client plans to call /// `thread/turns/list` immediately after resuming. - #[experimental("thread/resume.excludeTurns")] #[serde(default, skip_serializing_if = "std::ops::Not::not")] pub exclude_turns: bool, /// When present, include a `thread/turns/list` page in the resume response @@ -450,14 +449,12 @@ pub struct ThreadResumeResponse { /// /// Pass this as `cursor` to `thread/turns/list` with /// `sortDirection: "desc"`. The first page includes the turn identified by the cursor. - #[experimental("thread/resume.turnsBackwardsCursor")] #[serde(default)] pub turns_backwards_cursor: Option, /// Opaque cursor for hydrating paginated items backwards. /// /// Pass this as `cursor` to `thread/items/list` with /// `sortDirection: "desc"`. The first page includes the item identified by the cursor. - #[experimental("thread/resume.itemsBackwardsCursor")] #[serde(default)] pub items_backwards_cursor: Option, } @@ -589,7 +586,6 @@ pub struct ThreadForkParams { /// When true, return only thread metadata and live fork state without /// populating `thread.turns`. This is useful when the client plans to call /// `thread/turns/list` immediately after forking. - #[experimental("thread/fork.excludeTurns")] #[serde(default, skip_serializing_if = "std::ops::Not::not")] pub exclude_turns: bool, /// When true, carry the source thread's current goal into the fork without diff --git a/codex-rs/app-server-protocol/src/protocol/v2/thread_data.rs b/codex-rs/app-server-protocol/src/protocol/v2/thread_data.rs index d538c8b7e1..c68ed7f979 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/thread_data.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/thread_data.rs @@ -226,7 +226,6 @@ pub struct Thread { )] pub project_id: Option, /// Persisted thread history contract selected when this thread was created. - #[experimental("thread.historyMode")] #[serde(default)] pub history_mode: ThreadHistoryMode, /// Model provider used for this thread (for example, 'openai'). diff --git a/codex-rs/app-server/README.md b/codex-rs/app-server/README.md index 993f0fa910..651d80572e 100644 --- a/codex-rs/app-server/README.md +++ b/codex-rs/app-server/README.md @@ -163,7 +163,7 @@ Example with notification opt-out: - `server/diagnostics` — experimental; read process-local memory measurements and registered diagnostic gauges. - `thread/start` — create a new thread; emits `thread/started` (including the current `thread.status`) and auto-subscribes you to turn/item events for that thread. Experimental `projectId` assigns a durable thread to an existing project; ephemeral threads expose the same project identity in live responses without creating a stored/listable assignment. Experimental `historyMode: "paginated"` selects projection-backed durable history. When the request includes a `cwd` and the resolved sandbox is `workspace-write` or full access, app-server also marks that project as trusted in the user `config.toml`. Pass `sessionStartSource: "clear"` when starting a replacement thread after clearing the current session so `SessionStart` hooks receive `source: "clear"` instead of the default `"startup"`. Experimental `allowProviderModelFallback` lets providers backed by an authoritative static model catalog replace an unavailable requested `model` with the catalog default; dynamic or cached catalogs preserve the requested model. Experimental `runtimeWorkspaceRoots` supplies the runtime workspace roots used when app-server creates default environment selections; paths must be absolute. For permissions, prefer experimental `permissions` profile selection by id; the legacy `sandbox` shorthand is still accepted but cannot be combined with `permissions`. Deprecated experimental `multiAgentMode` is ignored; use Ultra reasoning effort for proactive multi-agent behavior. Experimental `environments` selects the sticky execution environments for turns on the thread; omit it to use the server default, pass `[]` to disable environments, or pass explicit environment ids with per-environment `cwd` and optional environment-native `runtimeWorkspaceRoots`. Explicit environments ignore the top-level roots; omitted per-environment roots default to that environment's `cwd`, while an empty list explicitly selects no roots. Experimental `selectedCapabilityRoots` selects environment-owned plugin or standalone-skill roots using environment-native absolute paths. Skills found below those roots are listed and read through the owning environment. Stdio MCP servers declared by selected plugins are started in that environment, and HTTP MCP connections use that environment's HTTP client. - `thread/resume` — reopen an existing thread by id so subsequent `turn/start` calls append to it. Accepts the same permission override rules as `thread/start`. -- `thread/fork` — fork an existing thread into a new thread id by copying the stored history; pass an optional `lastTurnId` to copy history only through that turn, inclusive, and drop later turns from the fork. An in-progress `lastTurnId` boundary is rejected. Experimental `beforeTurnId` instead copies history strictly before the referenced turn, including when that turn is in progress, and cannot be combined with `lastTurnId`. If both boundaries are null while the source thread is mid-turn, the fork records the same interruption marker as `turn/interrupt` instead of inheriting an unmarked partial turn suffix. The returned `thread.forkedFromId` points at the source thread when known. Accepts `ephemeral: true` for an in-memory temporary fork, emits `thread/started` (including the current `thread.status`), and auto-subscribes you to turn/item events for the new thread. Experimental clients can pass `excludeTurns: true` when they plan to page fork history via `thread/turns/list` instead of receiving the full turn array immediately, or `deferGoalContinuation: true` to carry the source thread's current goal into the fork and run an explicit turn before automatic continuation resumes. Deferred goal continuation is persisted until that turn starts and cannot be combined with `ephemeral: true`. Accepts the same permission override rules as `thread/start`. +- `thread/fork` — fork an existing thread into a new thread id by copying the stored history; pass an optional `lastTurnId` to copy history only through that turn, inclusive, and drop later turns from the fork. An in-progress `lastTurnId` boundary is rejected. Experimental `beforeTurnId` instead copies history strictly before the referenced turn, including when that turn is in progress, and cannot be combined with `lastTurnId`. If both boundaries are null while the source thread is mid-turn, the fork records the same interruption marker as `turn/interrupt` instead of inheriting an unmarked partial turn suffix. The returned `thread.forkedFromId` points at the source thread when known. Accepts `ephemeral: true` for an in-memory temporary fork, emits `thread/started` (including the current `thread.status`), and auto-subscribes you to turn/item events for the new thread. Clients can pass `excludeTurns: true` when they plan to page fork history via `thread/turns/list` instead of receiving the full turn array immediately. Experimental `deferGoalContinuation: true` carries the source thread's current goal into the fork and runs an explicit turn before automatic continuation resumes. Deferred goal continuation is persisted until that turn starts and cannot be combined with `ephemeral: true`. Accepts the same permission override rules as `thread/start`. - `thread/start`, `thread/resume`, and `thread/fork` responses include the legacy `sandbox` compatibility projection. `instructionSources` lists loaded instruction files using each source environment's native absolute path syntax, including files loaded from remote environments. Experimental clients can read `runtimeWorkspaceRoots` for the thread-scoped runtime roots and `activePermissionProfile` for the named or implicit built-in profile identity/provenance when known. Their deprecated experimental `multiAgentMode` field, and the corresponding thread setting, always report `explicitRequestOnly`; Ultra reasoning effort is the source of proactive multi-agent behavior. - `thread/list` — page through stored threads; supports cursor-based pagination and optional `modelProviders`, `sourceKinds`, `archived`, `sectionId`, `cwd`, and `searchTerm` filters. Experimental `projectId` filters one project, while `null` selects unassigned threads. Set `sortKey` to `"section_position"` when listing a section in its persisted manual order. Experimental clients can use `parentThreadId` for direct spawned children or `ancestorThreadId` for spawned descendants at any depth; the two filters are mutually exclusive. Review and Guardian threads are not included because they do not participate in that spawn-edge lifecycle. Each returned `thread` includes `status` (`ThreadStatus`), defaulting to `notLoaded` when the thread is not currently loaded. Subagent threads also include `parentThreadId` when the immediate parent is known. - `project/list`, `project/read`, `project/create`, `project/import`, `project/update`, `project/move`, and `project/delete` — experimental SQLite-backed project APIs. Projects have canonical server-generated IDs, persisted manual positions, ordered absolute roots, and an opaque string metadata bag. `project/move` places a project before another project or appends it when `beforeProjectId` is `null`. Create and import require an opaque `idempotencyKey`; clients should generate a UUID for ordinary creates and may use a stable namespaced legacy ID for migration. Reusing a key returns the original project without emitting notifications or repeating thread assignments, and keys remain reserved after deletion. Import can atomically assign existing thread IDs. Delete clears assignments but never deletes threads, directories, or files. @@ -174,8 +174,8 @@ Example with notification opt-out: - `threadSection/delete` — delete an existing custom section and atomically return its member threads to the unsectioned list; returns `{}`. The built-in pinned section cannot be deleted. - `thread/loaded/list` — list the thread ids currently loaded in memory. - `thread/read` — read a stored thread by id without resuming it; optionally include turns via `includeTurns`. The returned `thread` includes `status` (`ThreadStatus`), defaulting to `notLoaded` when the thread is not currently loaded. For loaded threads, experimental clients can use `canAcceptDirectInput` to determine whether `turn/start` and `turn/steer` are accepted (`false` for parent-owned Multi-Agent V2 subagents); unloaded stored threads report `null` when that capability is unavailable. -- `thread/turns/list` — experimental; page through a stored thread’s turn history without resuming it; supports cursor-based pagination with `sortDirection`, `itemsView`, `nextCursor`, and `backwardsCursor`. -- `thread/items/list` — experimental; page through persisted thread items without resuming the thread. Pass `turnId` to restrict results to one turn, or omit it to page items across the thread. The active thread store must support item pagination. +- `thread/turns/list` — page through a stored thread’s turn history without resuming it; supports cursor-based pagination with `sortDirection`, `itemsView`, `nextCursor`, and `backwardsCursor`. +- `thread/items/list` — page through persisted thread items without resuming the thread. Pass `turnId` to restrict results to one turn, or omit it to page items across the thread. The active thread store must support item pagination. - `thread/searchOccurrences` — experimental; find literal, case-insensitive matches in visible user messages and summary-selected final assistant messages within one paginated thread. - `thread/metadata/update` — patch stored thread metadata in sqlite; supports updating persisted `gitInfo` fields and experimental `projectId`, then returns the refreshed `thread`. Omit `projectId` to preserve assignment and pass an empty string to clear it. - `thread/section/move` — atomically move a thread into the section identified by `sectionId`, before another thread or at the end when `beforeThreadId` is `null`. Reordering within the same section preserves `sectionEnteredAt`; entering a different section resets it. Set `sectionId` to `null` to remove the thread from its section. Returns `{}` on success. @@ -208,7 +208,7 @@ Example with notification opt-out: - `thread/backgroundTerminals/list` — list running background terminals for a loaded thread (experimental; requires `capabilities.experimentalApi`); returns `data` with the running terminal ids. - `thread/backgroundTerminals/terminate` — terminate one running background terminal by app-server `processId` (experimental; requires `capabilities.experimentalApi`); returns whether a process was terminated. - `thread/rollback` — deprecated and will be removed soon. Drop the last N turns from the agent’s in-memory context and persist a rollback marker in the rollout so future resumes see the pruned history; returns the updated `thread` (with `turns` populated) on success. Paginated threads do not support rollback. Parent-owned Multi-Agent V2 subagents reject direct rollback requests. -- `thread/revert` — experimental. Replace a loaded paginated thread's durable history with the prefix strictly before `beforeTurnId` while preserving its thread id. The operation interrupts an active turn if needed, leaves older rollout files immutable, reloads the thread, returns updated thread metadata with empty `turns` plus pagination cursors, and emits `thread/reverted`. It does not revert local file changes. Parent-owned Multi-Agent V2 subagents reject direct revert requests. +- `thread/revert` — replace a loaded paginated thread's durable history with the prefix strictly before `beforeTurnId` while preserving its thread id. The operation interrupts an active turn if needed, leaves older rollout files immutable, reloads the thread, returns updated thread metadata with empty `turns` plus pagination cursors, and emits `thread/reverted`. It does not revert local file changes. Parent-owned Multi-Agent V2 subagents reject direct revert requests. - `turn/start` — add user input to a thread and begin Codex generation; responds with the initial `turn` object and streams `turn/started`, `item/*`, and `turn/completed` notifications. Optional `turnTrigger` classifies who or what started a new turn and is sent as `turn_trigger` in Responses request metadata; it is ignored if the request steers an active turn. `clientUserMessageId` is optional; when supplied, the corresponding `userMessage` item echoes it as `clientId`. Experimental `runtimeWorkspaceRoots` supplies the default roots for newly resolved environment selections. Explicit `environments[].runtimeWorkspaceRoots` override that fallback with environment-native absolute paths. Prefer experimental `permissions` profile selection by id for permission overrides; the legacy `sandboxPolicy` field is still accepted but cannot be combined with `permissions`. For `collaborationMode`, `settings.developer_instructions: null` means "use built-in instructions for the selected mode". Deprecated experimental `multiAgentMode` is ignored; Ultra reasoning effort selects proactive behavior. Parent-owned Multi-Agent V2 subagents reject direct turns. - `thread/inject_items` — append raw Responses API items to a loaded thread’s model-visible history without starting a user turn; returns `{}` on success. Parent-owned Multi-Agent V2 subagents reject direct item injection. - `turn/settings/update` — experimental; publish a narrow model-settings patch to the exact live task identified by `threadId` and `turnId`, regardless of task kind. Requires `step_model_switching`; returns `status: "applied"` or `status: "targetUnavailable"`, or a request error if rejected. Future-thread settings and already captured steps are unchanged. Parent-owned Multi-Agent V2 subagents reject direct settings updates. @@ -367,7 +367,7 @@ To continue a stored session, call `thread/resume` with the `thread.id` you prev Parent-owned Multi-Agent V2 children are an exception: `thread/resume` ignores configuration overrides and reattaches to the existing child. An unloaded child is reloaded through its actual, currently loaded parent using parent-derived configuration. If that owner-controlled reload cannot be performed, the request returns JSON-RPC error `-32600`; resume the parent first, or use `thread/read` or `thread/turns/list` to inspect the child's stored history without loading it. This policy follows the child's multi-agent runtime, including leaf workers whose models cannot delegate further. -By default, `thread/resume` includes the reconstructed turn history in `thread.turns`. Experimental clients can pass `excludeTurns: true` to return only thread metadata and live resume state, then call `thread/turns/list` separately if they want to page the turn history over the network. A cold paginated resume can still replay persisted `thread/tokenUsage/updated` when it can identify the corresponding stored turn; resuming an already-loaded thread waits for the next live update. +By default, `thread/resume` includes the reconstructed turn history in `thread.turns`. Clients can pass `excludeTurns: true` to return only thread metadata and live resume state, then call `thread/turns/list` separately if they want to page the turn history over the network. A cold paginated resume can still replay persisted `thread/tokenUsage/updated` when it can identify the corresponding stored turn; resuming an already-loaded thread waits for the next live update. Paginated threads keep the same resume contract as legacy threads. A default resume materializes the full projected history into `thread.turns`; `excludeTurns: true` keeps that array empty and includes `turnsBackwardsCursor` and `itemsBackwardsCursor` for the durable history visible at the resume boundary. Pass each cursor directly to its matching list API with `sortDirection: "desc"`; the first page includes the row identified by the cursor, while newer records arrive through live notifications. Either cursor is `null` when there is no durable row yet. @@ -423,7 +423,7 @@ To branch from a stored session, call `thread/fork` with the `thread.id`. This c { "method": "thread/started", "params": { "thread": { … } } } ``` -Like `thread/resume`, experimental clients can pass `excludeTurns: true` to `thread/fork` to return only thread metadata in `thread.turns` and page history with `thread/turns/list`. Metadata-only forks do not replay restored `thread/tokenUsage/updated`. Ephemeral forks of paginated threads require `excludeTurns: true`. +Like `thread/resume`, clients can pass `excludeTurns: true` to `thread/fork` to return only thread metadata in `thread.turns` and page history with `thread/turns/list`. Metadata-only forks do not replay restored `thread/tokenUsage/updated`. Ephemeral forks of paginated threads require `excludeTurns: true`. ### Example: List threads (with pagination & filters) @@ -591,9 +591,9 @@ Paginated threads can also use `includeTurns: true`, but clients should prefer } } ``` -### Example: List thread turns (experimental) +### Example: List thread turns -Use `thread/turns/list` with `capabilities.experimentalApi = true` to page a stored thread’s turn history without resuming it. By default, results are sorted descending so clients can start at the present and fetch older turns with `nextCursor`. The response also includes `backwardsCursor`; pass it as `cursor` on a later request with `sortDirection: "asc"` to fetch turns newer than the first item from the earlier page. +Use `thread/turns/list` to page a stored thread’s turn history without resuming it. By default, results are sorted descending so clients can start at the present and fetch older turns with `nextCursor`. The response also includes `backwardsCursor`; pass it as `cursor` on a later request with `sortDirection: "asc"` to fetch turns newer than the first item from the earlier page. Every returned `Turn` includes `itemsView`, which tells clients whether the `items` array was omitted intentionally (`notLoaded`), contains only summary items (`summary`), or contains every item available from persisted app-server history (`full`). Pass `itemsView` to choose the returned detail level; omitted `itemsView` defaults to `"summary"`.