# generated by datamodel-codegen: # filename: codex_app_server_protocol.python.schemas.json from __future__ import annotations from enum import StrEnum from typing import Any, Literal from pydantic import BaseModel as _BaseModel from pydantic import ConfigDict, Field, RootModel class BaseModel(_BaseModel): model_config = ConfigDict(populate_by_name=True) class CodexAppServerProtocol(BaseModel): pass class RequestId(RootModel[str | int]): root: str | int = Field(..., title='RequestId') class JSONRPCErrorError(BaseModel): code: int data: Any | None = None message: str class JSONRPCNotification(BaseModel): method: str params: Any | None = None class JSONRPCResponse(BaseModel): id: RequestId result: Any class W3cTraceContext(BaseModel): traceparent: str | None = None tracestate: str | None = None class ClientInfo(BaseModel): name: str title: str | None = None version: str class FuzzyFileSearchParams(BaseModel): cancellation_token: str | None = Field(default=None, alias='cancellationToken') query: str roots: list[str] class ChatgptAuthTokensRefreshResponse(BaseModel): access_token: str = Field(..., alias='accessToken') chatgpt_account_id: str = Field(..., alias='chatgptAccountId') chatgpt_plan_type: str | None = Field(default=None, alias='chatgptPlanType') class InitializeCapabilities(BaseModel): experimental_api: bool | None = Field( default=False, alias='experimentalApi', description='Opt into receiving experimental API methods and fields.', ) opt_out_notification_methods: list[str] | None = Field( default=None, alias='optOutNotificationMethods', description='Exact notification method names that should be suppressed for this connection (for example `codex/event/session_configured`).', ) class InitializeParams(BaseModel): capabilities: InitializeCapabilities | None = None client_info: ClientInfo = Field(..., alias='clientInfo') class InitializeClientRequestMethod(RootModel[Literal['initialize']]): root: Literal['initialize'] = Field(..., title='InitializeClientRequestMethod') class InitializeClientRequest(BaseModel): id: RequestId method: InitializeClientRequestMethod = Field( ..., title='InitializeClientRequestMethod' ) params: InitializeParams class ThreadStartClientRequestMethod(RootModel[Literal['thread/start']]): root: Literal['thread/start'] = Field(..., title='Thread/startClientRequestMethod') class ThreadResumeClientRequestMethod(RootModel[Literal['thread/resume']]): root: Literal['thread/resume'] = Field( ..., title='Thread/resumeClientRequestMethod' ) class ThreadForkClientRequestMethod(RootModel[Literal['thread/fork']]): root: Literal['thread/fork'] = Field(..., title='Thread/forkClientRequestMethod') class ThreadArchiveClientRequestMethod(RootModel[Literal['thread/archive']]): root: Literal['thread/archive'] = Field( ..., title='Thread/archiveClientRequestMethod' ) class ThreadUnsubscribeClientRequestMethod(RootModel[Literal['thread/unsubscribe']]): root: Literal['thread/unsubscribe'] = Field( ..., title='Thread/unsubscribeClientRequestMethod' ) class ThreadNameSetClientRequestMethod(RootModel[Literal['thread/name/set']]): root: Literal['thread/name/set'] = Field( ..., title='Thread/name/setClientRequestMethod' ) class ThreadMetadataUpdateClientRequestMethod( RootModel[Literal['thread/metadata/update']] ): root: Literal['thread/metadata/update'] = Field( ..., title='Thread/metadata/updateClientRequestMethod' ) class ThreadUnarchiveClientRequestMethod(RootModel[Literal['thread/unarchive']]): root: Literal['thread/unarchive'] = Field( ..., title='Thread/unarchiveClientRequestMethod' ) class ThreadCompactStartClientRequestMethod(RootModel[Literal['thread/compact/start']]): root: Literal['thread/compact/start'] = Field( ..., title='Thread/compact/startClientRequestMethod' ) class ThreadRollbackClientRequestMethod(RootModel[Literal['thread/rollback']]): root: Literal['thread/rollback'] = Field( ..., title='Thread/rollbackClientRequestMethod' ) class ThreadListClientRequestMethod(RootModel[Literal['thread/list']]): root: Literal['thread/list'] = Field(..., title='Thread/listClientRequestMethod') class ThreadLoadedListClientRequestMethod(RootModel[Literal['thread/loaded/list']]): root: Literal['thread/loaded/list'] = Field( ..., title='Thread/loaded/listClientRequestMethod' ) class ThreadReadClientRequestMethod(RootModel[Literal['thread/read']]): root: Literal['thread/read'] = Field(..., title='Thread/readClientRequestMethod') class SkillsListClientRequestMethod(RootModel[Literal['skills/list']]): root: Literal['skills/list'] = Field(..., title='Skills/listClientRequestMethod') class PluginListClientRequestMethod(RootModel[Literal['plugin/list']]): root: Literal['plugin/list'] = Field(..., title='Plugin/listClientRequestMethod') class SkillsRemoteListClientRequestMethod(RootModel[Literal['skills/remote/list']]): root: Literal['skills/remote/list'] = Field( ..., title='Skills/remote/listClientRequestMethod' ) class SkillsRemoteExportClientRequestMethod(RootModel[Literal['skills/remote/export']]): root: Literal['skills/remote/export'] = Field( ..., title='Skills/remote/exportClientRequestMethod' ) class AppListClientRequestMethod(RootModel[Literal['app/list']]): root: Literal['app/list'] = Field(..., title='App/listClientRequestMethod') class SkillsConfigWriteClientRequestMethod(RootModel[Literal['skills/config/write']]): root: Literal['skills/config/write'] = Field( ..., title='Skills/config/writeClientRequestMethod' ) class PluginInstallClientRequestMethod(RootModel[Literal['plugin/install']]): root: Literal['plugin/install'] = Field( ..., title='Plugin/installClientRequestMethod' ) class TurnStartClientRequestMethod(RootModel[Literal['turn/start']]): root: Literal['turn/start'] = Field(..., title='Turn/startClientRequestMethod') class TurnSteerClientRequestMethod(RootModel[Literal['turn/steer']]): root: Literal['turn/steer'] = Field(..., title='Turn/steerClientRequestMethod') class TurnInterruptClientRequestMethod(RootModel[Literal['turn/interrupt']]): root: Literal['turn/interrupt'] = Field( ..., title='Turn/interruptClientRequestMethod' ) class ReviewStartClientRequestMethod(RootModel[Literal['review/start']]): root: Literal['review/start'] = Field(..., title='Review/startClientRequestMethod') class ModelListClientRequestMethod(RootModel[Literal['model/list']]): root: Literal['model/list'] = Field(..., title='Model/listClientRequestMethod') class ExperimentalFeatureListClientRequestMethod( RootModel[Literal['experimentalFeature/list']] ): root: Literal['experimentalFeature/list'] = Field( ..., title='ExperimentalFeature/listClientRequestMethod' ) class McpServerOauthLoginClientRequestMethod( RootModel[Literal['mcpServer/oauth/login']] ): root: Literal['mcpServer/oauth/login'] = Field( ..., title='McpServer/oauth/loginClientRequestMethod' ) class ConfigMcpServerReloadClientRequestMethod( RootModel[Literal['config/mcpServer/reload']] ): root: Literal['config/mcpServer/reload'] = Field( ..., title='Config/mcpServer/reloadClientRequestMethod' ) class ConfigMcpServerReloadClientRequest(BaseModel): id: RequestId method: ConfigMcpServerReloadClientRequestMethod = Field( ..., title='Config/mcpServer/reloadClientRequestMethod' ) params: None = None class McpServerStatusListClientRequestMethod( RootModel[Literal['mcpServerStatus/list']] ): root: Literal['mcpServerStatus/list'] = Field( ..., title='McpServerStatus/listClientRequestMethod' ) class WindowsSandboxSetupStartClientRequestMethod( RootModel[Literal['windowsSandbox/setupStart']] ): root: Literal['windowsSandbox/setupStart'] = Field( ..., title='WindowsSandbox/setupStartClientRequestMethod' ) class AccountLoginStartClientRequestMethod(RootModel[Literal['account/login/start']]): root: Literal['account/login/start'] = Field( ..., title='Account/login/startClientRequestMethod' ) class AccountLoginCancelClientRequestMethod(RootModel[Literal['account/login/cancel']]): root: Literal['account/login/cancel'] = Field( ..., title='Account/login/cancelClientRequestMethod' ) class AccountLogoutClientRequestMethod(RootModel[Literal['account/logout']]): root: Literal['account/logout'] = Field( ..., title='Account/logoutClientRequestMethod' ) class AccountLogoutClientRequest(BaseModel): id: RequestId method: AccountLogoutClientRequestMethod = Field( ..., title='Account/logoutClientRequestMethod' ) params: None = None class AccountRateLimitsReadClientRequestMethod( RootModel[Literal['account/rateLimits/read']] ): root: Literal['account/rateLimits/read'] = Field( ..., title='Account/rateLimits/readClientRequestMethod' ) class AccountRateLimitsReadClientRequest(BaseModel): id: RequestId method: AccountRateLimitsReadClientRequestMethod = Field( ..., title='Account/rateLimits/readClientRequestMethod' ) params: None = None class FeedbackUploadClientRequestMethod(RootModel[Literal['feedback/upload']]): root: Literal['feedback/upload'] = Field( ..., title='Feedback/uploadClientRequestMethod' ) class CommandExecClientRequestMethod(RootModel[Literal['command/exec']]): root: Literal['command/exec'] = Field(..., title='Command/execClientRequestMethod') class CommandExecWriteClientRequestMethod(RootModel[Literal['command/exec/write']]): root: Literal['command/exec/write'] = Field( ..., title='Command/exec/writeClientRequestMethod' ) class CommandExecTerminateClientRequestMethod( RootModel[Literal['command/exec/terminate']] ): root: Literal['command/exec/terminate'] = Field( ..., title='Command/exec/terminateClientRequestMethod' ) class CommandExecResizeClientRequestMethod(RootModel[Literal['command/exec/resize']]): root: Literal['command/exec/resize'] = Field( ..., title='Command/exec/resizeClientRequestMethod' ) class ConfigReadClientRequestMethod(RootModel[Literal['config/read']]): root: Literal['config/read'] = Field(..., title='Config/readClientRequestMethod') class ExternalAgentConfigDetectClientRequestMethod( RootModel[Literal['externalAgentConfig/detect']] ): root: Literal['externalAgentConfig/detect'] = Field( ..., title='ExternalAgentConfig/detectClientRequestMethod' ) class ExternalAgentConfigImportClientRequestMethod( RootModel[Literal['externalAgentConfig/import']] ): root: Literal['externalAgentConfig/import'] = Field( ..., title='ExternalAgentConfig/importClientRequestMethod' ) class ConfigValueWriteClientRequestMethod(RootModel[Literal['config/value/write']]): root: Literal['config/value/write'] = Field( ..., title='Config/value/writeClientRequestMethod' ) class ConfigBatchWriteClientRequestMethod(RootModel[Literal['config/batchWrite']]): root: Literal['config/batchWrite'] = Field( ..., title='Config/batchWriteClientRequestMethod' ) class ConfigRequirementsReadClientRequestMethod( RootModel[Literal['configRequirements/read']] ): root: Literal['configRequirements/read'] = Field( ..., title='ConfigRequirements/readClientRequestMethod' ) class ConfigRequirementsReadClientRequest(BaseModel): id: RequestId method: ConfigRequirementsReadClientRequestMethod = Field( ..., title='ConfigRequirements/readClientRequestMethod' ) params: None = None class AccountReadClientRequestMethod(RootModel[Literal['account/read']]): root: Literal['account/read'] = Field(..., title='Account/readClientRequestMethod') class FuzzyFileSearchClientRequestMethod(RootModel[Literal['fuzzyFileSearch']]): root: Literal['fuzzyFileSearch'] = Field( ..., title='FuzzyFileSearchClientRequestMethod' ) class FuzzyFileSearchClientRequest(BaseModel): id: RequestId method: FuzzyFileSearchClientRequestMethod = Field( ..., title='FuzzyFileSearchClientRequestMethod' ) params: FuzzyFileSearchParams class AdditionalNetworkPermissions(BaseModel): enabled: bool | None = None class ChatgptAuthTokensRefreshReason(RootModel[Literal['unauthorized']]): root: Literal['unauthorized'] class AcceptWithExecpolicyAmendment(BaseModel): execpolicy_amendment: list[str] class AcceptWithExecpolicyAmendmentCommandExecutionApprovalDecision(BaseModel): model_config = ConfigDict( extra='forbid', ) accept_with_execpolicy_amendment: AcceptWithExecpolicyAmendment = Field( ..., alias='acceptWithExecpolicyAmendment' ) class CommandExecutionRequestApprovalSkillMetadata(BaseModel): path_to_skills_md: str = Field(..., alias='pathToSkillsMd') class DynamicToolCallParams(BaseModel): arguments: Any call_id: str = Field(..., alias='callId') thread_id: str = Field(..., alias='threadId') tool: str turn_id: str = Field(..., alias='turnId') class AddFileChangeType(RootModel[Literal['add']]): root: Literal['add'] = Field(..., title='AddFileChangeType') class AddFileChange(BaseModel): content: str type: AddFileChangeType = Field(..., title='AddFileChangeType') class DeleteFileChangeType(RootModel[Literal['delete']]): root: Literal['delete'] = Field(..., title='DeleteFileChangeType') class DeleteFileChange(BaseModel): content: str type: DeleteFileChangeType = Field(..., title='DeleteFileChangeType') class UpdateFileChangeType(RootModel[Literal['update']]): root: Literal['update'] = Field(..., title='UpdateFileChangeType') class UpdateFileChange(BaseModel): move_path: str | None = None type: UpdateFileChangeType = Field(..., title='UpdateFileChangeType') unified_diff: str class FileChange(RootModel[AddFileChange | DeleteFileChange | UpdateFileChange]): root: AddFileChange | DeleteFileChange | UpdateFileChange class FileChangeRequestApprovalParams(BaseModel): grant_root: str | None = Field( default=None, alias='grantRoot', description='[UNSTABLE] When set, the agent is asking the user to allow writes under this root for the remainder of the session (unclear if this is honored today).', ) item_id: str = Field(..., alias='itemId') reason: str | None = Field( default=None, description='Optional explanatory reason (e.g. request for extra write access).', ) thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class MacOsAutomationPermission1(StrEnum): none = 'none' all = 'all' class BundleIdsMacOsAutomationPermission(BaseModel): model_config = ConfigDict( extra='forbid', ) bundle_ids: list[str] class MacOsAutomationPermission( RootModel[MacOsAutomationPermission1 | BundleIdsMacOsAutomationPermission] ): root: MacOsAutomationPermission1 | BundleIdsMacOsAutomationPermission class MacOsPreferencesPermission(StrEnum): none = 'none' read_only = 'read_only' read_write = 'read_write' class McpElicitationArrayType(RootModel[Literal['array']]): root: Literal['array'] class McpElicitationBooleanType(RootModel[Literal['boolean']]): root: Literal['boolean'] class McpElicitationConstOption(BaseModel): model_config = ConfigDict( extra='forbid', ) const: str title: str class McpElicitationNumberType(StrEnum): number = 'number' integer = 'integer' class McpElicitationObjectType(RootModel[Literal['object']]): root: Literal['object'] class McpElicitationStringFormat(StrEnum): email = 'email' uri = 'uri' date = 'date' date_time = 'date-time' class McpElicitationStringType(RootModel[Literal['string']]): root: Literal['string'] class McpElicitationTitledEnumItems(BaseModel): model_config = ConfigDict( extra='forbid', ) any_of: list[McpElicitationConstOption] = Field(..., alias='anyOf') class McpElicitationTitledMultiSelectEnumSchema(BaseModel): model_config = ConfigDict( extra='forbid', ) default: list[str] | None = None description: str | None = None items: McpElicitationTitledEnumItems max_items: int | None = Field(default=None, alias='maxItems', ge=0) min_items: int | None = Field(default=None, alias='minItems', ge=0) title: str | None = None type: McpElicitationArrayType class McpElicitationTitledSingleSelectEnumSchema(BaseModel): model_config = ConfigDict( extra='forbid', ) default: str | None = None description: str | None = None one_of: list[McpElicitationConstOption] = Field(..., alias='oneOf') title: str | None = None type: McpElicitationStringType class McpElicitationUntitledEnumItems(BaseModel): model_config = ConfigDict( extra='forbid', ) enum: list[str] type: McpElicitationStringType class McpElicitationUntitledMultiSelectEnumSchema(BaseModel): model_config = ConfigDict( extra='forbid', ) default: list[str] | None = None description: str | None = None items: McpElicitationUntitledEnumItems max_items: int | None = Field(default=None, alias='maxItems', ge=0) min_items: int | None = Field(default=None, alias='minItems', ge=0) title: str | None = None type: McpElicitationArrayType class McpElicitationUntitledSingleSelectEnumSchema(BaseModel): model_config = ConfigDict( extra='forbid', ) default: str | None = None description: str | None = None enum: list[str] title: str | None = None type: McpElicitationStringType class McpServerElicitationRequestParams2(BaseModel): server_name: str = Field(..., alias='serverName') thread_id: str = Field(..., alias='threadId') turn_id: str | None = Field( default=None, alias='turnId', description='Active Codex turn when this elicitation was observed, if app-server could correlate one.\n\nThis is nullable because MCP models elicitation as a standalone server-to-client request identified by the MCP server request id. It may be triggered during a turn, but turn context is app-server correlation rather than part of the protocol identity of the elicitation itself.', ) field_meta: Any | None = Field(None, alias='_meta') elicitation_id: str = Field(..., alias='elicitationId') message: str mode: Literal['url'] url: str class NetworkApprovalProtocol(StrEnum): http = 'http' https = 'https' socks5_tcp = 'socks5Tcp' socks5_udp = 'socks5Udp' class NetworkPolicyRuleAction(StrEnum): allow = 'allow' deny = 'deny' class ReadParsedCommandType(RootModel[Literal['read']]): root: Literal['read'] = Field(..., title='ReadParsedCommandType') class ReadParsedCommand(BaseModel): cmd: str name: str path: str = Field( ..., description='(Best effort) Path to the file being read by the command. When possible, this is an absolute path, though when relative, it should be resolved against the `cwd`` that will be used to run the command to derive the absolute path.', ) type: ReadParsedCommandType = Field(..., title='ReadParsedCommandType') class ListFilesParsedCommandType(RootModel[Literal['list_files']]): root: Literal['list_files'] = Field(..., title='ListFilesParsedCommandType') class ListFilesParsedCommand(BaseModel): cmd: str path: str | None = None type: ListFilesParsedCommandType = Field(..., title='ListFilesParsedCommandType') class SearchParsedCommandType(RootModel[Literal['search']]): root: Literal['search'] = Field(..., title='SearchParsedCommandType') class SearchParsedCommand(BaseModel): cmd: str path: str | None = None query: str | None = None type: SearchParsedCommandType = Field(..., title='SearchParsedCommandType') class UnknownParsedCommandType(RootModel[Literal['unknown']]): root: Literal['unknown'] = Field(..., title='UnknownParsedCommandType') class UnknownParsedCommand(BaseModel): cmd: str type: UnknownParsedCommandType = Field(..., title='UnknownParsedCommandType') class ParsedCommand( RootModel[ ReadParsedCommand | ListFilesParsedCommand | SearchParsedCommand | UnknownParsedCommand ] ): root: ( ReadParsedCommand | ListFilesParsedCommand | SearchParsedCommand | UnknownParsedCommand ) class ToolRequestUserInputOption(BaseModel): description: str label: str class ToolRequestUserInputQuestion(BaseModel): header: str id: str is_other: bool | None = Field(default=False, alias='isOther') is_secret: bool | None = Field(default=False, alias='isSecret') options: list[ToolRequestUserInputOption] | None = None question: str class ItemCommandExecutionRequestApprovalServerRequestMethod( RootModel[Literal['item/commandExecution/requestApproval']] ): root: Literal['item/commandExecution/requestApproval'] = Field( ..., title='Item/commandExecution/requestApprovalServerRequestMethod' ) class ItemFileChangeRequestApprovalServerRequestMethod( RootModel[Literal['item/fileChange/requestApproval']] ): root: Literal['item/fileChange/requestApproval'] = Field( ..., title='Item/fileChange/requestApprovalServerRequestMethod' ) class ItemFileChangeRequestApprovalServerRequest(BaseModel): id: RequestId method: ItemFileChangeRequestApprovalServerRequestMethod = Field( ..., title='Item/fileChange/requestApprovalServerRequestMethod' ) params: FileChangeRequestApprovalParams class ItemToolRequestUserInputServerRequestMethod( RootModel[Literal['item/tool/requestUserInput']] ): root: Literal['item/tool/requestUserInput'] = Field( ..., title='Item/tool/requestUserInputServerRequestMethod' ) class McpServerElicitationRequestServerRequestMethod( RootModel[Literal['mcpServer/elicitation/request']] ): root: Literal['mcpServer/elicitation/request'] = Field( ..., title='McpServer/elicitation/requestServerRequestMethod' ) class ItemPermissionsRequestApprovalServerRequestMethod( RootModel[Literal['item/permissions/requestApproval']] ): root: Literal['item/permissions/requestApproval'] = Field( ..., title='Item/permissions/requestApprovalServerRequestMethod' ) class ItemToolCallServerRequestMethod(RootModel[Literal['item/tool/call']]): root: Literal['item/tool/call'] = Field( ..., title='Item/tool/callServerRequestMethod' ) class ItemToolCallServerRequest(BaseModel): id: RequestId method: ItemToolCallServerRequestMethod = Field( ..., title='Item/tool/callServerRequestMethod' ) params: DynamicToolCallParams class AccountChatgptAuthTokensRefreshServerRequestMethod( RootModel[Literal['account/chatgptAuthTokens/refresh']] ): root: Literal['account/chatgptAuthTokens/refresh'] = Field( ..., title='Account/chatgptAuthTokens/refreshServerRequestMethod' ) class ApplyPatchApprovalServerRequestMethod(RootModel[Literal['applyPatchApproval']]): root: Literal['applyPatchApproval'] = Field( ..., title='ApplyPatchApprovalServerRequestMethod' ) class ExecCommandApprovalServerRequestMethod(RootModel[Literal['execCommandApproval']]): root: Literal['execCommandApproval'] = Field( ..., title='ExecCommandApprovalServerRequestMethod' ) class InitializedClientNotificationMethod(RootModel[Literal['initialized']]): root: Literal['initialized'] = Field( ..., title='InitializedClientNotificationMethod' ) class InitializedClientNotification(BaseModel): method: InitializedClientNotificationMethod = Field( ..., title='InitializedClientNotificationMethod' ) class ClientNotification(RootModel[InitializedClientNotification]): root: InitializedClientNotification = Field(..., title='ClientNotification') class Indice(RootModel[int]): root: int = Field(..., ge=0) class FuzzyFileSearchResult(BaseModel): file_name: str indices: list[Indice] | None = None path: str root: str score: int = Field(..., ge=0) class FuzzyFileSearchSessionCompletedNotification(BaseModel): session_id: str = Field(..., alias='sessionId') class FuzzyFileSearchSessionUpdatedNotification(BaseModel): files: list[FuzzyFileSearchResult] query: str session_id: str = Field(..., alias='sessionId') class ErrorServerNotificationMethod(RootModel[Literal['error']]): root: Literal['error'] = Field(..., title='ErrorServerNotificationMethod') class ThreadStartedServerNotificationMethod(RootModel[Literal['thread/started']]): root: Literal['thread/started'] = Field( ..., title='Thread/startedServerNotificationMethod' ) class ThreadStatusChangedServerNotificationMethod( RootModel[Literal['thread/status/changed']] ): root: Literal['thread/status/changed'] = Field( ..., title='Thread/status/changedServerNotificationMethod' ) class ThreadArchivedServerNotificationMethod(RootModel[Literal['thread/archived']]): root: Literal['thread/archived'] = Field( ..., title='Thread/archivedServerNotificationMethod' ) class ThreadUnarchivedServerNotificationMethod(RootModel[Literal['thread/unarchived']]): root: Literal['thread/unarchived'] = Field( ..., title='Thread/unarchivedServerNotificationMethod' ) class ThreadClosedServerNotificationMethod(RootModel[Literal['thread/closed']]): root: Literal['thread/closed'] = Field( ..., title='Thread/closedServerNotificationMethod' ) class SkillsChangedServerNotificationMethod(RootModel[Literal['skills/changed']]): root: Literal['skills/changed'] = Field( ..., title='Skills/changedServerNotificationMethod' ) class ThreadNameUpdatedServerNotificationMethod( RootModel[Literal['thread/name/updated']] ): root: Literal['thread/name/updated'] = Field( ..., title='Thread/name/updatedServerNotificationMethod' ) class ThreadTokenUsageUpdatedServerNotificationMethod( RootModel[Literal['thread/tokenUsage/updated']] ): root: Literal['thread/tokenUsage/updated'] = Field( ..., title='Thread/tokenUsage/updatedServerNotificationMethod' ) class TurnStartedServerNotificationMethod(RootModel[Literal['turn/started']]): root: Literal['turn/started'] = Field( ..., title='Turn/startedServerNotificationMethod' ) class TurnCompletedServerNotificationMethod(RootModel[Literal['turn/completed']]): root: Literal['turn/completed'] = Field( ..., title='Turn/completedServerNotificationMethod' ) class TurnDiffUpdatedServerNotificationMethod(RootModel[Literal['turn/diff/updated']]): root: Literal['turn/diff/updated'] = Field( ..., title='Turn/diff/updatedServerNotificationMethod' ) class TurnPlanUpdatedServerNotificationMethod(RootModel[Literal['turn/plan/updated']]): root: Literal['turn/plan/updated'] = Field( ..., title='Turn/plan/updatedServerNotificationMethod' ) class ItemStartedServerNotificationMethod(RootModel[Literal['item/started']]): root: Literal['item/started'] = Field( ..., title='Item/startedServerNotificationMethod' ) class ItemCompletedServerNotificationMethod(RootModel[Literal['item/completed']]): root: Literal['item/completed'] = Field( ..., title='Item/completedServerNotificationMethod' ) class ItemAgentMessageDeltaServerNotificationMethod( RootModel[Literal['item/agentMessage/delta']] ): root: Literal['item/agentMessage/delta'] = Field( ..., title='Item/agentMessage/deltaServerNotificationMethod' ) class ItemPlanDeltaServerNotificationMethod(RootModel[Literal['item/plan/delta']]): root: Literal['item/plan/delta'] = Field( ..., title='Item/plan/deltaServerNotificationMethod' ) class CommandExecOutputDeltaServerNotificationMethod( RootModel[Literal['command/exec/outputDelta']] ): root: Literal['command/exec/outputDelta'] = Field( ..., title='Command/exec/outputDeltaServerNotificationMethod' ) class ItemCommandExecutionOutputDeltaServerNotificationMethod( RootModel[Literal['item/commandExecution/outputDelta']] ): root: Literal['item/commandExecution/outputDelta'] = Field( ..., title='Item/commandExecution/outputDeltaServerNotificationMethod' ) class ItemCommandExecutionTerminalInteractionServerNotificationMethod( RootModel[Literal['item/commandExecution/terminalInteraction']] ): root: Literal['item/commandExecution/terminalInteraction'] = Field( ..., title='Item/commandExecution/terminalInteractionServerNotificationMethod' ) class ItemFileChangeOutputDeltaServerNotificationMethod( RootModel[Literal['item/fileChange/outputDelta']] ): root: Literal['item/fileChange/outputDelta'] = Field( ..., title='Item/fileChange/outputDeltaServerNotificationMethod' ) class ServerRequestResolvedServerNotificationMethod( RootModel[Literal['serverRequest/resolved']] ): root: Literal['serverRequest/resolved'] = Field( ..., title='ServerRequest/resolvedServerNotificationMethod' ) class ItemMcpToolCallProgressServerNotificationMethod( RootModel[Literal['item/mcpToolCall/progress']] ): root: Literal['item/mcpToolCall/progress'] = Field( ..., title='Item/mcpToolCall/progressServerNotificationMethod' ) class McpServerOauthLoginCompletedServerNotificationMethod( RootModel[Literal['mcpServer/oauthLogin/completed']] ): root: Literal['mcpServer/oauthLogin/completed'] = Field( ..., title='McpServer/oauthLogin/completedServerNotificationMethod' ) class AccountUpdatedServerNotificationMethod(RootModel[Literal['account/updated']]): root: Literal['account/updated'] = Field( ..., title='Account/updatedServerNotificationMethod' ) class AccountRateLimitsUpdatedServerNotificationMethod( RootModel[Literal['account/rateLimits/updated']] ): root: Literal['account/rateLimits/updated'] = Field( ..., title='Account/rateLimits/updatedServerNotificationMethod' ) class AppListUpdatedServerNotificationMethod(RootModel[Literal['app/list/updated']]): root: Literal['app/list/updated'] = Field( ..., title='App/list/updatedServerNotificationMethod' ) class ItemReasoningSummaryTextDeltaServerNotificationMethod( RootModel[Literal['item/reasoning/summaryTextDelta']] ): root: Literal['item/reasoning/summaryTextDelta'] = Field( ..., title='Item/reasoning/summaryTextDeltaServerNotificationMethod' ) class ItemReasoningSummaryPartAddedServerNotificationMethod( RootModel[Literal['item/reasoning/summaryPartAdded']] ): root: Literal['item/reasoning/summaryPartAdded'] = Field( ..., title='Item/reasoning/summaryPartAddedServerNotificationMethod' ) class ItemReasoningTextDeltaServerNotificationMethod( RootModel[Literal['item/reasoning/textDelta']] ): root: Literal['item/reasoning/textDelta'] = Field( ..., title='Item/reasoning/textDeltaServerNotificationMethod' ) class ThreadCompactedServerNotificationMethod(RootModel[Literal['thread/compacted']]): root: Literal['thread/compacted'] = Field( ..., title='Thread/compactedServerNotificationMethod' ) class ModelReroutedServerNotificationMethod(RootModel[Literal['model/rerouted']]): root: Literal['model/rerouted'] = Field( ..., title='Model/reroutedServerNotificationMethod' ) class DeprecationNoticeServerNotificationMethod( RootModel[Literal['deprecationNotice']] ): root: Literal['deprecationNotice'] = Field( ..., title='DeprecationNoticeServerNotificationMethod' ) class ConfigWarningServerNotificationMethod(RootModel[Literal['configWarning']]): root: Literal['configWarning'] = Field( ..., title='ConfigWarningServerNotificationMethod' ) class FuzzyFileSearchSessionUpdatedServerNotificationMethod( RootModel[Literal['fuzzyFileSearch/sessionUpdated']] ): root: Literal['fuzzyFileSearch/sessionUpdated'] = Field( ..., title='FuzzyFileSearch/sessionUpdatedServerNotificationMethod' ) class FuzzyFileSearchSessionUpdatedServerNotification(BaseModel): method: FuzzyFileSearchSessionUpdatedServerNotificationMethod = Field( ..., title='FuzzyFileSearch/sessionUpdatedServerNotificationMethod' ) params: FuzzyFileSearchSessionUpdatedNotification class FuzzyFileSearchSessionCompletedServerNotificationMethod( RootModel[Literal['fuzzyFileSearch/sessionCompleted']] ): root: Literal['fuzzyFileSearch/sessionCompleted'] = Field( ..., title='FuzzyFileSearch/sessionCompletedServerNotificationMethod' ) class FuzzyFileSearchSessionCompletedServerNotification(BaseModel): method: FuzzyFileSearchSessionCompletedServerNotificationMethod = Field( ..., title='FuzzyFileSearch/sessionCompletedServerNotificationMethod' ) params: FuzzyFileSearchSessionCompletedNotification class ThreadRealtimeStartedServerNotificationMethod( RootModel[Literal['thread/realtime/started']] ): root: Literal['thread/realtime/started'] = Field( ..., title='Thread/realtime/startedServerNotificationMethod' ) class ThreadRealtimeItemAddedServerNotificationMethod( RootModel[Literal['thread/realtime/itemAdded']] ): root: Literal['thread/realtime/itemAdded'] = Field( ..., title='Thread/realtime/itemAddedServerNotificationMethod' ) class ThreadRealtimeOutputAudioDeltaServerNotificationMethod( RootModel[Literal['thread/realtime/outputAudio/delta']] ): root: Literal['thread/realtime/outputAudio/delta'] = Field( ..., title='Thread/realtime/outputAudio/deltaServerNotificationMethod' ) class ThreadRealtimeErrorServerNotificationMethod( RootModel[Literal['thread/realtime/error']] ): root: Literal['thread/realtime/error'] = Field( ..., title='Thread/realtime/errorServerNotificationMethod' ) class ThreadRealtimeClosedServerNotificationMethod( RootModel[Literal['thread/realtime/closed']] ): root: Literal['thread/realtime/closed'] = Field( ..., title='Thread/realtime/closedServerNotificationMethod' ) class WindowsWorldWritableWarningServerNotificationMethod( RootModel[Literal['windows/worldWritableWarning']] ): root: Literal['windows/worldWritableWarning'] = Field( ..., title='Windows/worldWritableWarningServerNotificationMethod' ) class WindowsSandboxSetupCompletedServerNotificationMethod( RootModel[Literal['windowsSandbox/setupCompleted']] ): root: Literal['windowsSandbox/setupCompleted'] = Field( ..., title='WindowsSandbox/setupCompletedServerNotificationMethod' ) class AccountLoginCompletedServerNotificationMethod( RootModel[Literal['account/login/completed']] ): root: Literal['account/login/completed'] = Field( ..., title='Account/login/completedServerNotificationMethod' ) class TextAgentMessageContentType(RootModel[Literal['Text']]): root: Literal['Text'] = Field(..., title='TextAgentMessageContentType') class TextAgentMessageContent(BaseModel): text: str type: TextAgentMessageContentType = Field(..., title='TextAgentMessageContentType') class AgentMessageContent(RootModel[TextAgentMessageContent]): root: TextAgentMessageContent class CompletedAgentStatus(BaseModel): model_config = ConfigDict( extra='forbid', ) completed: str | None class ErroredAgentStatus(BaseModel): model_config = ConfigDict( extra='forbid', ) errored: str class AgentStatus( RootModel[ Literal['pending_init'] | Literal['running'] | CompletedAgentStatus | ErroredAgentStatus | Literal['shutdown'] | Literal['not_found'] ] ): root: ( Literal['pending_init'] | Literal['running'] | CompletedAgentStatus | ErroredAgentStatus | Literal['shutdown'] | Literal['not_found'] ) = Field(..., description='Agent lifecycle status, derived from emitted events.') class CallToolResult(BaseModel): field_meta: Any | None = Field(None, alias='_meta') content: list[Any] is_error: bool | None = Field(default=None, alias='isError') structured_content: Any | None = Field(None, alias='structuredContent') class CustomPrompt(BaseModel): argument_hint: str | None = None content: str description: str | None = None name: str path: str class Duration(BaseModel): nanos: int = Field(..., ge=0) secs: int = Field(..., ge=0) class ElicitationRequest1(BaseModel): field_meta: Any | None = Field(None, alias='_meta') message: str mode: Literal['form'] requested_schema: Any class ElicitationRequest2(BaseModel): field_meta: Any | None = Field(None, alias='_meta') elicitation_id: str message: str mode: Literal['url'] url: str class ElicitationRequest(RootModel[ElicitationRequest1 | ElicitationRequest2]): root: ElicitationRequest1 | ElicitationRequest2 class ExecApprovalRequestSkillMetadata(BaseModel): path_to_skills_md: str class ExecCommandSource(StrEnum): agent = 'agent' user_shell = 'user_shell' unified_exec_startup = 'unified_exec_startup' unified_exec_interaction = 'unified_exec_interaction' class ExecCommandStatus(StrEnum): completed = 'completed' failed = 'failed' declined = 'declined' class ExecOutputStream(StrEnum): stdout = 'stdout' stderr = 'stderr' class HistoryEntry(BaseModel): conversation_id: str text: str ts: int = Field(..., ge=0) class MacOsSeatbeltProfileExtensions(BaseModel): macos_accessibility: bool | None = False macos_automation: MacOsAutomationPermission | None = Field( default_factory=lambda: MacOsAutomationPermission('none') ) macos_calendar: bool | None = False macos_preferences: MacOsPreferencesPermission | None = 'read_only' class McpInvocation(BaseModel): arguments: Any | None = Field( default=None, description='Arguments to the tool call.' ) server: str = Field( ..., description='Name of the MCP server as defined in the config.' ) tool: str = Field(..., description='Name of the tool as given by the MCP server.') class McpStartupFailure(BaseModel): error: str server: str class StartingMcpStartupStatus(BaseModel): state: Literal['starting'] class ReadyMcpStartupStatus(BaseModel): state: Literal['ready'] class McpStartupStatus1(BaseModel): error: str state: Literal['failed'] class CancelledMcpStartupStatus(BaseModel): state: Literal['cancelled'] class McpStartupStatus( RootModel[ StartingMcpStartupStatus | ReadyMcpStartupStatus | McpStartupStatus1 | CancelledMcpStartupStatus ] ): root: ( StartingMcpStartupStatus | ReadyMcpStartupStatus | McpStartupStatus1 | CancelledMcpStartupStatus ) class NetworkPermissions(BaseModel): enabled: bool | None = None class RealtimeAudioFrame(BaseModel): data: str num_channels: int = Field(..., ge=0) sample_rate: int = Field(..., ge=0) samples_per_channel: int | None = Field(default=None, ge=0) class SessionUpdated(BaseModel): instructions: str | None = None session_id: str class SessionUpdatedRealtimeEvent(BaseModel): model_config = ConfigDict( extra='forbid', ) session_updated: SessionUpdated = Field(..., alias='SessionUpdated') class AudioOutRealtimeEvent(BaseModel): model_config = ConfigDict( extra='forbid', ) audio_out: RealtimeAudioFrame = Field(..., alias='AudioOut') class ConversationItemAddedRealtimeEvent(BaseModel): model_config = ConfigDict( extra='forbid', ) conversation_item_added: Any = Field(..., alias='ConversationItemAdded') class ConversationItemDone(BaseModel): item_id: str class ConversationItemDoneRealtimeEvent(BaseModel): model_config = ConfigDict( extra='forbid', ) conversation_item_done: ConversationItemDone = Field( ..., alias='ConversationItemDone' ) class ErrorRealtimeEvent(BaseModel): model_config = ConfigDict( extra='forbid', ) error: str = Field(..., alias='Error') class RealtimeHandoffMessage(BaseModel): role: str text: str class RealtimeHandoffRequested(BaseModel): handoff_id: str input_transcript: str item_id: str messages: list[RealtimeHandoffMessage] class RejectConfig(BaseModel): mcp_elicitations: bool = Field(..., description='Reject MCP elicitation prompts.') rules: bool = Field( ..., description='Reject prompts triggered by execpolicy `prompt` rules.' ) sandbox_approval: bool = Field( ..., description='Reject approval prompts related to sandbox escalation.' ) class RequestUserInputQuestionOption(BaseModel): description: str label: str class OkResultOfCallToolResultOrString(BaseModel): ok: CallToolResult = Field(..., alias='Ok') class ErrResultOfCallToolResultOrString(BaseModel): err: str = Field(..., alias='Err') class ResultOfCallToolResultOrString( RootModel[OkResultOfCallToolResultOrString | ErrResultOfCallToolResultOrString] ): root: OkResultOfCallToolResultOrString | ErrResultOfCallToolResultOrString class ApprovedExecpolicyAmendment(BaseModel): proposed_execpolicy_amendment: list[str] class ApprovedExecpolicyAmendmentReviewDecision(BaseModel): model_config = ConfigDict( extra='forbid', ) approved_execpolicy_amendment: ApprovedExecpolicyAmendment class ReviewLineRange(BaseModel): end: int = Field(..., ge=0) start: int = Field(..., ge=0) class SessionNetworkProxyRuntime(BaseModel): http_addr: str socks_addr: str class StepStatus(StrEnum): pending = 'pending' in_progress = 'in_progress' completed = 'completed' class TokenUsage(BaseModel): cached_input_tokens: int input_tokens: int output_tokens: int reasoning_output_tokens: int total_tokens: int class TokenUsageInfo(BaseModel): last_token_usage: TokenUsage model_context_window: int | None = None total_token_usage: TokenUsage class TurnAbortReason(StrEnum): interrupted = 'interrupted' replaced = 'replaced' review_ended = 'review_ended' class UserMessageTurnItemType(RootModel[Literal['UserMessage']]): root: Literal['UserMessage'] = Field(..., title='UserMessageTurnItemType') class AgentMessageTurnItemType(RootModel[Literal['AgentMessage']]): root: Literal['AgentMessage'] = Field(..., title='AgentMessageTurnItemType') class PlanTurnItemType(RootModel[Literal['Plan']]): root: Literal['Plan'] = Field(..., title='PlanTurnItemType') class PlanTurnItem(BaseModel): id: str text: str type: PlanTurnItemType = Field(..., title='PlanTurnItemType') class ReasoningTurnItemType(RootModel[Literal['Reasoning']]): root: Literal['Reasoning'] = Field(..., title='ReasoningTurnItemType') class ReasoningTurnItem(BaseModel): id: str raw_content: list[str] | None = [] summary_text: list[str] type: ReasoningTurnItemType = Field(..., title='ReasoningTurnItemType') class WebSearchTurnItemType(RootModel[Literal['WebSearch']]): root: Literal['WebSearch'] = Field(..., title='WebSearchTurnItemType') class ImageGenerationTurnItemType(RootModel[Literal['ImageGeneration']]): root: Literal['ImageGeneration'] = Field(..., title='ImageGenerationTurnItemType') class ImageGenerationTurnItem(BaseModel): id: str result: str revised_prompt: str | None = None saved_path: str | None = None status: str type: ImageGenerationTurnItemType = Field(..., title='ImageGenerationTurnItemType') class ContextCompactionTurnItemType(RootModel[Literal['ContextCompaction']]): root: Literal['ContextCompaction'] = Field( ..., title='ContextCompactionTurnItemType' ) class ContextCompactionTurnItem(BaseModel): id: str type: ContextCompactionTurnItemType = Field( ..., title='ContextCompactionTurnItemType' ) class ErrorEventMsgType(RootModel[Literal['error']]): root: Literal['error'] = Field(..., title='ErrorEventMsgType') class WarningEventMsgType(RootModel[Literal['warning']]): root: Literal['warning'] = Field(..., title='WarningEventMsgType') class WarningEventMsg(BaseModel): message: str type: WarningEventMsgType = Field(..., title='WarningEventMsgType') class RealtimeConversationStartedEventMsgType( RootModel[Literal['realtime_conversation_started']] ): root: Literal['realtime_conversation_started'] = Field( ..., title='RealtimeConversationStartedEventMsgType' ) class RealtimeConversationStartedEventMsg(BaseModel): session_id: str | None = None type: RealtimeConversationStartedEventMsgType = Field( ..., title='RealtimeConversationStartedEventMsgType' ) class RealtimeConversationRealtimeEventMsgType( RootModel[Literal['realtime_conversation_realtime']] ): root: Literal['realtime_conversation_realtime'] = Field( ..., title='RealtimeConversationRealtimeEventMsgType' ) class RealtimeConversationClosedEventMsgType( RootModel[Literal['realtime_conversation_closed']] ): root: Literal['realtime_conversation_closed'] = Field( ..., title='RealtimeConversationClosedEventMsgType' ) class RealtimeConversationClosedEventMsg(BaseModel): reason: str | None = None type: RealtimeConversationClosedEventMsgType = Field( ..., title='RealtimeConversationClosedEventMsgType' ) class ModelRerouteEventMsgType(RootModel[Literal['model_reroute']]): root: Literal['model_reroute'] = Field(..., title='ModelRerouteEventMsgType') class ContextCompactedEventMsgType(RootModel[Literal['context_compacted']]): root: Literal['context_compacted'] = Field( ..., title='ContextCompactedEventMsgType' ) class ContextCompactedEventMsg(BaseModel): type: ContextCompactedEventMsgType = Field( ..., title='ContextCompactedEventMsgType' ) class ThreadRolledBackEventMsgType(RootModel[Literal['thread_rolled_back']]): root: Literal['thread_rolled_back'] = Field( ..., title='ThreadRolledBackEventMsgType' ) class ThreadRolledBackEventMsg(BaseModel): num_turns: int = Field( ..., description='Number of user turns that were removed from context.', ge=0 ) type: ThreadRolledBackEventMsgType = Field( ..., title='ThreadRolledBackEventMsgType' ) class TaskStartedEventMsgType(RootModel[Literal['task_started']]): root: Literal['task_started'] = Field(..., title='TaskStartedEventMsgType') class TaskCompleteEventMsgType(RootModel[Literal['task_complete']]): root: Literal['task_complete'] = Field(..., title='TaskCompleteEventMsgType') class TaskCompleteEventMsg(BaseModel): last_agent_message: str | None = None turn_id: str type: TaskCompleteEventMsgType = Field(..., title='TaskCompleteEventMsgType') class TokenCountEventMsgType(RootModel[Literal['token_count']]): root: Literal['token_count'] = Field(..., title='TokenCountEventMsgType') class AgentMessageEventMsgType(RootModel[Literal['agent_message']]): root: Literal['agent_message'] = Field(..., title='AgentMessageEventMsgType') class UserMessageEventMsgType(RootModel[Literal['user_message']]): root: Literal['user_message'] = Field(..., title='UserMessageEventMsgType') class AgentMessageDeltaEventMsgType(RootModel[Literal['agent_message_delta']]): root: Literal['agent_message_delta'] = Field( ..., title='AgentMessageDeltaEventMsgType' ) class AgentMessageDeltaEventMsg(BaseModel): delta: str type: AgentMessageDeltaEventMsgType = Field( ..., title='AgentMessageDeltaEventMsgType' ) class AgentReasoningEventMsgType(RootModel[Literal['agent_reasoning']]): root: Literal['agent_reasoning'] = Field(..., title='AgentReasoningEventMsgType') class AgentReasoningEventMsg(BaseModel): text: str type: AgentReasoningEventMsgType = Field(..., title='AgentReasoningEventMsgType') class AgentReasoningDeltaEventMsgType(RootModel[Literal['agent_reasoning_delta']]): root: Literal['agent_reasoning_delta'] = Field( ..., title='AgentReasoningDeltaEventMsgType' ) class AgentReasoningDeltaEventMsg(BaseModel): delta: str type: AgentReasoningDeltaEventMsgType = Field( ..., title='AgentReasoningDeltaEventMsgType' ) class AgentReasoningRawContentEventMsgType( RootModel[Literal['agent_reasoning_raw_content']] ): root: Literal['agent_reasoning_raw_content'] = Field( ..., title='AgentReasoningRawContentEventMsgType' ) class AgentReasoningRawContentEventMsg(BaseModel): text: str type: AgentReasoningRawContentEventMsgType = Field( ..., title='AgentReasoningRawContentEventMsgType' ) class AgentReasoningRawContentDeltaEventMsgType( RootModel[Literal['agent_reasoning_raw_content_delta']] ): root: Literal['agent_reasoning_raw_content_delta'] = Field( ..., title='AgentReasoningRawContentDeltaEventMsgType' ) class AgentReasoningRawContentDeltaEventMsg(BaseModel): delta: str type: AgentReasoningRawContentDeltaEventMsgType = Field( ..., title='AgentReasoningRawContentDeltaEventMsgType' ) class AgentReasoningSectionBreakEventMsgType( RootModel[Literal['agent_reasoning_section_break']] ): root: Literal['agent_reasoning_section_break'] = Field( ..., title='AgentReasoningSectionBreakEventMsgType' ) class AgentReasoningSectionBreakEventMsg(BaseModel): item_id: str | None = '' summary_index: int | None = 0 type: AgentReasoningSectionBreakEventMsgType = Field( ..., title='AgentReasoningSectionBreakEventMsgType' ) class SessionConfiguredEventMsgType(RootModel[Literal['session_configured']]): root: Literal['session_configured'] = Field( ..., title='SessionConfiguredEventMsgType' ) class ThreadNameUpdatedEventMsgType(RootModel[Literal['thread_name_updated']]): root: Literal['thread_name_updated'] = Field( ..., title='ThreadNameUpdatedEventMsgType' ) class McpStartupUpdateEventMsgType(RootModel[Literal['mcp_startup_update']]): root: Literal['mcp_startup_update'] = Field( ..., title='McpStartupUpdateEventMsgType' ) class McpStartupUpdateEventMsg(BaseModel): server: str = Field(..., description='Server name being started.') status: McpStartupStatus = Field(..., description='Current startup status.') type: McpStartupUpdateEventMsgType = Field( ..., title='McpStartupUpdateEventMsgType' ) class McpStartupCompleteEventMsgType(RootModel[Literal['mcp_startup_complete']]): root: Literal['mcp_startup_complete'] = Field( ..., title='McpStartupCompleteEventMsgType' ) class McpStartupCompleteEventMsg(BaseModel): cancelled: list[str] failed: list[McpStartupFailure] ready: list[str] type: McpStartupCompleteEventMsgType = Field( ..., title='McpStartupCompleteEventMsgType' ) class McpToolCallBeginEventMsgType(RootModel[Literal['mcp_tool_call_begin']]): root: Literal['mcp_tool_call_begin'] = Field( ..., title='McpToolCallBeginEventMsgType' ) class McpToolCallBeginEventMsg(BaseModel): call_id: str = Field( ..., description='Identifier so this can be paired with the McpToolCallEnd event.', ) invocation: McpInvocation type: McpToolCallBeginEventMsgType = Field( ..., title='McpToolCallBeginEventMsgType' ) class McpToolCallEndEventMsgType(RootModel[Literal['mcp_tool_call_end']]): root: Literal['mcp_tool_call_end'] = Field(..., title='McpToolCallEndEventMsgType') class McpToolCallEndEventMsg(BaseModel): call_id: str = Field( ..., description='Identifier for the corresponding McpToolCallBegin that finished.', ) duration: Duration invocation: McpInvocation result: ResultOfCallToolResultOrString = Field( ..., description='Result of the tool call. Note this could be an error.' ) type: McpToolCallEndEventMsgType = Field(..., title='McpToolCallEndEventMsgType') class WebSearchBeginEventMsgType(RootModel[Literal['web_search_begin']]): root: Literal['web_search_begin'] = Field(..., title='WebSearchBeginEventMsgType') class WebSearchBeginEventMsg(BaseModel): call_id: str type: WebSearchBeginEventMsgType = Field(..., title='WebSearchBeginEventMsgType') class WebSearchEndEventMsgType(RootModel[Literal['web_search_end']]): root: Literal['web_search_end'] = Field(..., title='WebSearchEndEventMsgType') class ImageGenerationBeginEventMsgType(RootModel[Literal['image_generation_begin']]): root: Literal['image_generation_begin'] = Field( ..., title='ImageGenerationBeginEventMsgType' ) class ImageGenerationBeginEventMsg(BaseModel): call_id: str type: ImageGenerationBeginEventMsgType = Field( ..., title='ImageGenerationBeginEventMsgType' ) class ImageGenerationEndEventMsgType(RootModel[Literal['image_generation_end']]): root: Literal['image_generation_end'] = Field( ..., title='ImageGenerationEndEventMsgType' ) class ImageGenerationEndEventMsg(BaseModel): call_id: str result: str revised_prompt: str | None = None saved_path: str | None = None status: str type: ImageGenerationEndEventMsgType = Field( ..., title='ImageGenerationEndEventMsgType' ) class ExecCommandBeginEventMsgType(RootModel[Literal['exec_command_begin']]): root: Literal['exec_command_begin'] = Field( ..., title='ExecCommandBeginEventMsgType' ) class ExecCommandBeginEventMsg(BaseModel): call_id: str = Field( ..., description='Identifier so this can be paired with the ExecCommandEnd event.', ) command: list[str] = Field(..., description='The command to be executed.') cwd: str = Field( ..., description="The command's working directory if not the default cwd for the agent.", ) interaction_input: str | None = Field( default=None, description='Raw input sent to a unified exec session (if this is an interaction event).', ) parsed_cmd: list[ParsedCommand] process_id: str | None = Field( default=None, description='Identifier for the underlying PTY process (when available).', ) source: ExecCommandSource | None = Field( default='agent', description='Where the command originated. Defaults to Agent for backward compatibility.', ) turn_id: str = Field(..., description='Turn ID that this command belongs to.') type: ExecCommandBeginEventMsgType = Field( ..., title='ExecCommandBeginEventMsgType' ) class ExecCommandOutputDeltaEventMsgType( RootModel[Literal['exec_command_output_delta']] ): root: Literal['exec_command_output_delta'] = Field( ..., title='ExecCommandOutputDeltaEventMsgType' ) class ExecCommandOutputDeltaEventMsg(BaseModel): call_id: str = Field( ..., description='Identifier for the ExecCommandBegin that produced this chunk.' ) chunk: str = Field( ..., description='Raw bytes from the stream (may not be valid UTF-8).' ) stream: ExecOutputStream = Field( ..., description='Which stream produced this chunk.' ) type: ExecCommandOutputDeltaEventMsgType = Field( ..., title='ExecCommandOutputDeltaEventMsgType' ) class TerminalInteractionEventMsgType(RootModel[Literal['terminal_interaction']]): root: Literal['terminal_interaction'] = Field( ..., title='TerminalInteractionEventMsgType' ) class TerminalInteractionEventMsg(BaseModel): call_id: str = Field( ..., description='Identifier for the ExecCommandBegin that produced this chunk.' ) process_id: str = Field( ..., description='Process id associated with the running command.' ) stdin: str = Field(..., description='Stdin sent to the running session.') type: TerminalInteractionEventMsgType = Field( ..., title='TerminalInteractionEventMsgType' ) class ExecCommandEndEventMsgType(RootModel[Literal['exec_command_end']]): root: Literal['exec_command_end'] = Field(..., title='ExecCommandEndEventMsgType') class ExecCommandEndEventMsg(BaseModel): aggregated_output: str | None = Field( default='', description='Captured aggregated output' ) call_id: str = Field( ..., description='Identifier for the ExecCommandBegin that finished.' ) command: list[str] = Field(..., description='The command that was executed.') cwd: str = Field( ..., description="The command's working directory if not the default cwd for the agent.", ) duration: Duration = Field( ..., description='The duration of the command execution.' ) exit_code: int = Field(..., description="The command's exit code.") formatted_output: str = Field( ..., description='Formatted output from the command, as seen by the model.' ) interaction_input: str | None = Field( default=None, description='Raw input sent to a unified exec session (if this is an interaction event).', ) parsed_cmd: list[ParsedCommand] process_id: str | None = Field( default=None, description='Identifier for the underlying PTY process (when available).', ) source: ExecCommandSource | None = Field( default='agent', description='Where the command originated. Defaults to Agent for backward compatibility.', ) status: ExecCommandStatus = Field( ..., description='Completion status for this command execution.' ) stderr: str = Field(..., description='Captured stderr') stdout: str = Field(..., description='Captured stdout') turn_id: str = Field(..., description='Turn ID that this command belongs to.') type: ExecCommandEndEventMsgType = Field(..., title='ExecCommandEndEventMsgType') class ViewImageToolCallEventMsgType(RootModel[Literal['view_image_tool_call']]): root: Literal['view_image_tool_call'] = Field( ..., title='ViewImageToolCallEventMsgType' ) class ViewImageToolCallEventMsg(BaseModel): call_id: str = Field(..., description='Identifier for the originating tool call.') path: str = Field(..., description='Local filesystem path provided to the tool.') type: ViewImageToolCallEventMsgType = Field( ..., title='ViewImageToolCallEventMsgType' ) class ExecApprovalRequestEventMsgType(RootModel[Literal['exec_approval_request']]): root: Literal['exec_approval_request'] = Field( ..., title='ExecApprovalRequestEventMsgType' ) class RequestPermissionsEventMsgType(RootModel[Literal['request_permissions']]): root: Literal['request_permissions'] = Field( ..., title='RequestPermissionsEventMsgType' ) class RequestUserInputEventMsgType(RootModel[Literal['request_user_input']]): root: Literal['request_user_input'] = Field( ..., title='RequestUserInputEventMsgType' ) class DynamicToolCallRequestEventMsgType( RootModel[Literal['dynamic_tool_call_request']] ): root: Literal['dynamic_tool_call_request'] = Field( ..., title='DynamicToolCallRequestEventMsgType' ) class DynamicToolCallRequestEventMsg(BaseModel): arguments: Any call_id: str = Field(..., alias='callId') tool: str turn_id: str = Field(..., alias='turnId') type: DynamicToolCallRequestEventMsgType = Field( ..., title='DynamicToolCallRequestEventMsgType' ) class DynamicToolCallResponseEventMsgType( RootModel[Literal['dynamic_tool_call_response']] ): root: Literal['dynamic_tool_call_response'] = Field( ..., title='DynamicToolCallResponseEventMsgType' ) class ElicitationRequestEventMsgType(RootModel[Literal['elicitation_request']]): root: Literal['elicitation_request'] = Field( ..., title='ElicitationRequestEventMsgType' ) class ElicitationRequestEventMsg(BaseModel): id: RequestId request: ElicitationRequest server_name: str turn_id: str | None = Field( default=None, description='Turn ID that this elicitation belongs to, when known.', ) type: ElicitationRequestEventMsgType = Field( ..., title='ElicitationRequestEventMsgType' ) class ApplyPatchApprovalRequestEventMsgType( RootModel[Literal['apply_patch_approval_request']] ): root: Literal['apply_patch_approval_request'] = Field( ..., title='ApplyPatchApprovalRequestEventMsgType' ) class ApplyPatchApprovalRequestEventMsg(BaseModel): call_id: str = Field( ..., description='Responses API call id for the associated patch apply call, if available.', ) changes: dict[str, FileChange] grant_root: str | None = Field( default=None, description='When set, the agent is asking the user to allow writes under this root for the remainder of the session.', ) reason: str | None = Field( default=None, description='Optional explanatory reason (e.g. request for extra write access).', ) turn_id: str | None = Field( default='', description='Turn ID that this patch belongs to. Uses `#[serde(default)]` for backwards compatibility with older senders.', ) type: ApplyPatchApprovalRequestEventMsgType = Field( ..., title='ApplyPatchApprovalRequestEventMsgType' ) class DeprecationNoticeEventMsgType(RootModel[Literal['deprecation_notice']]): root: Literal['deprecation_notice'] = Field( ..., title='DeprecationNoticeEventMsgType' ) class DeprecationNoticeEventMsg(BaseModel): details: str | None = Field( default=None, description='Optional extra guidance, such as migration steps or rationale.', ) summary: str = Field(..., description='Concise summary of what is deprecated.') type: DeprecationNoticeEventMsgType = Field( ..., title='DeprecationNoticeEventMsgType' ) class BackgroundEventEventMsgType(RootModel[Literal['background_event']]): root: Literal['background_event'] = Field(..., title='BackgroundEventEventMsgType') class BackgroundEventEventMsg(BaseModel): message: str type: BackgroundEventEventMsgType = Field(..., title='BackgroundEventEventMsgType') class UndoStartedEventMsgType(RootModel[Literal['undo_started']]): root: Literal['undo_started'] = Field(..., title='UndoStartedEventMsgType') class UndoStartedEventMsg(BaseModel): message: str | None = None type: UndoStartedEventMsgType = Field(..., title='UndoStartedEventMsgType') class UndoCompletedEventMsgType(RootModel[Literal['undo_completed']]): root: Literal['undo_completed'] = Field(..., title='UndoCompletedEventMsgType') class UndoCompletedEventMsg(BaseModel): message: str | None = None success: bool type: UndoCompletedEventMsgType = Field(..., title='UndoCompletedEventMsgType') class StreamErrorEventMsgType(RootModel[Literal['stream_error']]): root: Literal['stream_error'] = Field(..., title='StreamErrorEventMsgType') class PatchApplyBeginEventMsgType(RootModel[Literal['patch_apply_begin']]): root: Literal['patch_apply_begin'] = Field(..., title='PatchApplyBeginEventMsgType') class PatchApplyBeginEventMsg(BaseModel): auto_approved: bool = Field( ..., description='If true, there was no ApplyPatchApprovalRequest for this patch.', ) call_id: str = Field( ..., description='Identifier so this can be paired with the PatchApplyEnd event.', ) changes: dict[str, FileChange] = Field( ..., description='The changes to be applied.' ) turn_id: str | None = Field( default='', description='Turn ID that this patch belongs to. Uses `#[serde(default)]` for backwards compatibility.', ) type: PatchApplyBeginEventMsgType = Field(..., title='PatchApplyBeginEventMsgType') class PatchApplyEndEventMsgType(RootModel[Literal['patch_apply_end']]): root: Literal['patch_apply_end'] = Field(..., title='PatchApplyEndEventMsgType') class TurnDiffEventMsgType(RootModel[Literal['turn_diff']]): root: Literal['turn_diff'] = Field(..., title='TurnDiffEventMsgType') class TurnDiffEventMsg(BaseModel): type: TurnDiffEventMsgType = Field(..., title='TurnDiffEventMsgType') unified_diff: str class GetHistoryEntryResponseEventMsgType( RootModel[Literal['get_history_entry_response']] ): root: Literal['get_history_entry_response'] = Field( ..., title='GetHistoryEntryResponseEventMsgType' ) class GetHistoryEntryResponseEventMsg(BaseModel): entry: HistoryEntry | None = Field( default=None, description='The entry at the requested offset, if available and parseable.', ) log_id: int = Field(..., ge=0) offset: int = Field(..., ge=0) type: GetHistoryEntryResponseEventMsgType = Field( ..., title='GetHistoryEntryResponseEventMsgType' ) class McpListToolsResponseEventMsgType(RootModel[Literal['mcp_list_tools_response']]): root: Literal['mcp_list_tools_response'] = Field( ..., title='McpListToolsResponseEventMsgType' ) class ListCustomPromptsResponseEventMsgType( RootModel[Literal['list_custom_prompts_response']] ): root: Literal['list_custom_prompts_response'] = Field( ..., title='ListCustomPromptsResponseEventMsgType' ) class ListCustomPromptsResponseEventMsg(BaseModel): custom_prompts: list[CustomPrompt] type: ListCustomPromptsResponseEventMsgType = Field( ..., title='ListCustomPromptsResponseEventMsgType' ) class ListSkillsResponseEventMsgType(RootModel[Literal['list_skills_response']]): root: Literal['list_skills_response'] = Field( ..., title='ListSkillsResponseEventMsgType' ) class ListRemoteSkillsResponseEventMsgType( RootModel[Literal['list_remote_skills_response']] ): root: Literal['list_remote_skills_response'] = Field( ..., title='ListRemoteSkillsResponseEventMsgType' ) class RemoteSkillDownloadedEventMsgType(RootModel[Literal['remote_skill_downloaded']]): root: Literal['remote_skill_downloaded'] = Field( ..., title='RemoteSkillDownloadedEventMsgType' ) class RemoteSkillDownloadedEventMsg(BaseModel): id: str name: str path: str type: RemoteSkillDownloadedEventMsgType = Field( ..., title='RemoteSkillDownloadedEventMsgType' ) class SkillsUpdateAvailableEventMsgType(RootModel[Literal['skills_update_available']]): root: Literal['skills_update_available'] = Field( ..., title='SkillsUpdateAvailableEventMsgType' ) class SkillsUpdateAvailableEventMsg(BaseModel): type: SkillsUpdateAvailableEventMsgType = Field( ..., title='SkillsUpdateAvailableEventMsgType' ) class PlanUpdateEventMsgType(RootModel[Literal['plan_update']]): root: Literal['plan_update'] = Field(..., title='PlanUpdateEventMsgType') class TurnAbortedEventMsgType(RootModel[Literal['turn_aborted']]): root: Literal['turn_aborted'] = Field(..., title='TurnAbortedEventMsgType') class TurnAbortedEventMsg(BaseModel): reason: TurnAbortReason turn_id: str | None = None type: TurnAbortedEventMsgType = Field(..., title='TurnAbortedEventMsgType') class ShutdownCompleteEventMsgType(RootModel[Literal['shutdown_complete']]): root: Literal['shutdown_complete'] = Field( ..., title='ShutdownCompleteEventMsgType' ) class ShutdownCompleteEventMsg(BaseModel): type: ShutdownCompleteEventMsgType = Field( ..., title='ShutdownCompleteEventMsgType' ) class EnteredReviewModeEventMsgType(RootModel[Literal['entered_review_mode']]): root: Literal['entered_review_mode'] = Field( ..., title='EnteredReviewModeEventMsgType' ) class ExitedReviewModeEventMsgType(RootModel[Literal['exited_review_mode']]): root: Literal['exited_review_mode'] = Field( ..., title='ExitedReviewModeEventMsgType' ) class RawResponseItemEventMsgType(RootModel[Literal['raw_response_item']]): root: Literal['raw_response_item'] = Field(..., title='RawResponseItemEventMsgType') class ItemStartedEventMsgType(RootModel[Literal['item_started']]): root: Literal['item_started'] = Field(..., title='ItemStartedEventMsgType') class ItemCompletedEventMsgType(RootModel[Literal['item_completed']]): root: Literal['item_completed'] = Field(..., title='ItemCompletedEventMsgType') class AgentMessageContentDeltaEventMsgType( RootModel[Literal['agent_message_content_delta']] ): root: Literal['agent_message_content_delta'] = Field( ..., title='AgentMessageContentDeltaEventMsgType' ) class AgentMessageContentDeltaEventMsg(BaseModel): delta: str item_id: str thread_id: str turn_id: str type: AgentMessageContentDeltaEventMsgType = Field( ..., title='AgentMessageContentDeltaEventMsgType' ) class PlanDeltaEventMsgType(RootModel[Literal['plan_delta']]): root: Literal['plan_delta'] = Field(..., title='PlanDeltaEventMsgType') class PlanDeltaEventMsg(BaseModel): delta: str item_id: str thread_id: str turn_id: str type: PlanDeltaEventMsgType = Field(..., title='PlanDeltaEventMsgType') class ReasoningContentDeltaEventMsgType(RootModel[Literal['reasoning_content_delta']]): root: Literal['reasoning_content_delta'] = Field( ..., title='ReasoningContentDeltaEventMsgType' ) class ReasoningContentDeltaEventMsg(BaseModel): delta: str item_id: str summary_index: int | None = 0 thread_id: str turn_id: str type: ReasoningContentDeltaEventMsgType = Field( ..., title='ReasoningContentDeltaEventMsgType' ) class ReasoningRawContentDeltaEventMsgType( RootModel[Literal['reasoning_raw_content_delta']] ): root: Literal['reasoning_raw_content_delta'] = Field( ..., title='ReasoningRawContentDeltaEventMsgType' ) class ReasoningRawContentDeltaEventMsg(BaseModel): content_index: int | None = 0 delta: str item_id: str thread_id: str turn_id: str type: ReasoningRawContentDeltaEventMsgType = Field( ..., title='ReasoningRawContentDeltaEventMsgType' ) class CollabAgentSpawnBeginEventMsgType(RootModel[Literal['collab_agent_spawn_begin']]): root: Literal['collab_agent_spawn_begin'] = Field( ..., title='CollabAgentSpawnBeginEventMsgType' ) class CollabAgentSpawnEndEventMsgType(RootModel[Literal['collab_agent_spawn_end']]): root: Literal['collab_agent_spawn_end'] = Field( ..., title='CollabAgentSpawnEndEventMsgType' ) class CollabAgentInteractionBeginEventMsgType( RootModel[Literal['collab_agent_interaction_begin']] ): root: Literal['collab_agent_interaction_begin'] = Field( ..., title='CollabAgentInteractionBeginEventMsgType' ) class CollabAgentInteractionEndEventMsgType( RootModel[Literal['collab_agent_interaction_end']] ): root: Literal['collab_agent_interaction_end'] = Field( ..., title='CollabAgentInteractionEndEventMsgType' ) class CollabWaitingBeginEventMsgType(RootModel[Literal['collab_waiting_begin']]): root: Literal['collab_waiting_begin'] = Field( ..., title='CollabWaitingBeginEventMsgType' ) class CollabWaitingEndEventMsgType(RootModel[Literal['collab_waiting_end']]): root: Literal['collab_waiting_end'] = Field( ..., title='CollabWaitingEndEventMsgType' ) class CollabCloseBeginEventMsgType(RootModel[Literal['collab_close_begin']]): root: Literal['collab_close_begin'] = Field( ..., title='CollabCloseBeginEventMsgType' ) class CollabCloseEndEventMsgType(RootModel[Literal['collab_close_end']]): root: Literal['collab_close_end'] = Field(..., title='CollabCloseEndEventMsgType') class CollabResumeBeginEventMsgType(RootModel[Literal['collab_resume_begin']]): root: Literal['collab_resume_begin'] = Field( ..., title='CollabResumeBeginEventMsgType' ) class CollabResumeEndEventMsgType(RootModel[Literal['collab_resume_end']]): root: Literal['collab_resume_end'] = Field(..., title='CollabResumeEndEventMsgType') class GrantedMacOsPermissions(BaseModel): accessibility: bool | None = None automations: MacOsAutomationPermission | None = None calendar: bool | None = None preferences: MacOsPreferencesPermission | None = None class InitializeResponse(BaseModel): user_agent: str = Field(..., alias='userAgent') class FuzzyFileSearchResponse(BaseModel): files: list[FuzzyFileSearchResult] class FileChangeApprovalDecision( RootModel[ Literal['accept'] | Literal['acceptForSession'] | Literal['decline'] | Literal['cancel'] ] ): root: ( Literal['accept'] | Literal['acceptForSession'] | Literal['decline'] | Literal['cancel'] ) class FileChangeRequestApprovalResponse(BaseModel): decision: FileChangeApprovalDecision class ToolRequestUserInputAnswer(BaseModel): answers: list[str] class ToolRequestUserInputResponse(BaseModel): answers: dict[str, ToolRequestUserInputAnswer] class McpServerElicitationAction(StrEnum): accept = 'accept' decline = 'decline' cancel = 'cancel' class McpServerElicitationRequestResponse(BaseModel): field_meta: Any | None = Field( default=None, alias='_meta', description='Optional client metadata for form-mode action handling.', ) action: McpServerElicitationAction content: Any | None = Field( default=None, description='Structured user input for accepted elicitations, mirroring RMCP `CreateElicitationResult`.\n\nThis is nullable because decline/cancel responses have no content.', ) class NotLoadedThreadStatusType(RootModel[Literal['notLoaded']]): root: Literal['notLoaded'] = Field(..., title='NotLoadedThreadStatusType') class NotLoadedThreadStatus(BaseModel): type: NotLoadedThreadStatusType = Field(..., title='NotLoadedThreadStatusType') class IdleThreadStatusType(RootModel[Literal['idle']]): root: Literal['idle'] = Field(..., title='IdleThreadStatusType') class IdleThreadStatus(BaseModel): type: IdleThreadStatusType = Field(..., title='IdleThreadStatusType') class SystemErrorThreadStatusType(RootModel[Literal['systemError']]): root: Literal['systemError'] = Field(..., title='SystemErrorThreadStatusType') class SystemErrorThreadStatus(BaseModel): type: SystemErrorThreadStatusType = Field(..., title='SystemErrorThreadStatusType') class ActiveThreadStatusType(RootModel[Literal['active']]): root: Literal['active'] = Field(..., title='ActiveThreadStatusType') class ThreadActiveFlag(StrEnum): waiting_on_approval = 'waitingOnApproval' waiting_on_user_input = 'waitingOnUserInput' class ReasoningSummaryPartAddedNotification(BaseModel): item_id: str = Field(..., alias='itemId') summary_index: int = Field(..., alias='summaryIndex') thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class UserMessageThreadItemType(RootModel[Literal['userMessage']]): root: Literal['userMessage'] = Field(..., title='UserMessageThreadItemType') class AgentMessageThreadItemType(RootModel[Literal['agentMessage']]): root: Literal['agentMessage'] = Field(..., title='AgentMessageThreadItemType') class PlanThreadItemType(RootModel[Literal['plan']]): root: Literal['plan'] = Field(..., title='PlanThreadItemType') class PlanThreadItem(BaseModel): id: str text: str type: PlanThreadItemType = Field(..., title='PlanThreadItemType') class ReasoningThreadItemType(RootModel[Literal['reasoning']]): root: Literal['reasoning'] = Field(..., title='ReasoningThreadItemType') class ReasoningThreadItem(BaseModel): content: list[str] | None = [] id: str summary: list[str] | None = [] type: ReasoningThreadItemType = Field(..., title='ReasoningThreadItemType') class CommandExecutionThreadItemType(RootModel[Literal['commandExecution']]): root: Literal['commandExecution'] = Field( ..., title='CommandExecutionThreadItemType' ) class FileChangeThreadItemType(RootModel[Literal['fileChange']]): root: Literal['fileChange'] = Field(..., title='FileChangeThreadItemType') class McpToolCallThreadItemType(RootModel[Literal['mcpToolCall']]): root: Literal['mcpToolCall'] = Field(..., title='McpToolCallThreadItemType') class DynamicToolCallThreadItemType(RootModel[Literal['dynamicToolCall']]): root: Literal['dynamicToolCall'] = Field(..., title='DynamicToolCallThreadItemType') class CollabAgentToolCallThreadItemType(RootModel[Literal['collabAgentToolCall']]): root: Literal['collabAgentToolCall'] = Field( ..., title='CollabAgentToolCallThreadItemType' ) class WebSearchThreadItemType(RootModel[Literal['webSearch']]): root: Literal['webSearch'] = Field(..., title='WebSearchThreadItemType') class ImageViewThreadItemType(RootModel[Literal['imageView']]): root: Literal['imageView'] = Field(..., title='ImageViewThreadItemType') class ImageViewThreadItem(BaseModel): id: str path: str type: ImageViewThreadItemType = Field(..., title='ImageViewThreadItemType') class ImageGenerationThreadItemType(RootModel[Literal['imageGeneration']]): root: Literal['imageGeneration'] = Field(..., title='ImageGenerationThreadItemType') class ImageGenerationThreadItem(BaseModel): id: str result: str revised_prompt: str | None = Field(default=None, alias='revisedPrompt') status: str type: ImageGenerationThreadItemType = Field( ..., title='ImageGenerationThreadItemType' ) class EnteredReviewModeThreadItemType(RootModel[Literal['enteredReviewMode']]): root: Literal['enteredReviewMode'] = Field( ..., title='EnteredReviewModeThreadItemType' ) class EnteredReviewModeThreadItem(BaseModel): id: str review: str type: EnteredReviewModeThreadItemType = Field( ..., title='EnteredReviewModeThreadItemType' ) class ExitedReviewModeThreadItemType(RootModel[Literal['exitedReviewMode']]): root: Literal['exitedReviewMode'] = Field( ..., title='ExitedReviewModeThreadItemType' ) class ExitedReviewModeThreadItem(BaseModel): id: str review: str type: ExitedReviewModeThreadItemType = Field( ..., title='ExitedReviewModeThreadItemType' ) class ContextCompactionThreadItemType(RootModel[Literal['contextCompaction']]): root: Literal['contextCompaction'] = Field( ..., title='ContextCompactionThreadItemType' ) class ContextCompactionThreadItem(BaseModel): id: str type: ContextCompactionThreadItemType = Field( ..., title='ContextCompactionThreadItemType' ) class CollabAgentToolCallStatus(StrEnum): in_progress = 'inProgress' completed = 'completed' failed = 'failed' class InputTextDynamicToolCallOutputContentItemType(RootModel[Literal['inputText']]): root: Literal['inputText'] = Field( ..., title='InputTextDynamicToolCallOutputContentItemType' ) class InputTextDynamicToolCallOutputContentItem(BaseModel): text: str type: InputTextDynamicToolCallOutputContentItemType = Field( ..., title='InputTextDynamicToolCallOutputContentItemType' ) class InputImageDynamicToolCallOutputContentItemType(RootModel[Literal['inputImage']]): root: Literal['inputImage'] = Field( ..., title='InputImageDynamicToolCallOutputContentItemType' ) class InputImageDynamicToolCallOutputContentItem(BaseModel): image_url: str = Field(..., alias='imageUrl') type: InputImageDynamicToolCallOutputContentItemType = Field( ..., title='InputImageDynamicToolCallOutputContentItemType' ) class DynamicToolCallOutputContentItem( RootModel[ InputTextDynamicToolCallOutputContentItem | InputImageDynamicToolCallOutputContentItem ] ): root: ( InputTextDynamicToolCallOutputContentItem | InputImageDynamicToolCallOutputContentItem ) class MessagePhase(RootModel[Literal['commentary'] | Literal['final_answer']]): root: Literal['commentary'] | Literal['final_answer'] = Field( ..., 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.', ) class McpToolCallError(BaseModel): message: str class McpToolCallStatus(StrEnum): in_progress = 'inProgress' completed = 'completed' failed = 'failed' class DynamicToolCallStatus(StrEnum): in_progress = 'inProgress' completed = 'completed' failed = 'failed' class CollabAgentStatus(StrEnum): pending_init = 'pendingInit' running = 'running' completed = 'completed' errored = 'errored' shutdown = 'shutdown' not_found = 'notFound' class ReadCommandActionType(RootModel[Literal['read']]): root: Literal['read'] = Field(..., title='ReadCommandActionType') class ReadCommandAction(BaseModel): command: str name: str path: str type: ReadCommandActionType = Field(..., title='ReadCommandActionType') class ListFilesCommandActionType(RootModel[Literal['listFiles']]): root: Literal['listFiles'] = Field(..., title='ListFilesCommandActionType') class ListFilesCommandAction(BaseModel): command: str path: str | None = None type: ListFilesCommandActionType = Field(..., title='ListFilesCommandActionType') class SearchCommandActionType(RootModel[Literal['search']]): root: Literal['search'] = Field(..., title='SearchCommandActionType') class SearchCommandAction(BaseModel): command: str path: str | None = None query: str | None = None type: SearchCommandActionType = Field(..., title='SearchCommandActionType') class UnknownCommandActionType(RootModel[Literal['unknown']]): root: Literal['unknown'] = Field(..., title='UnknownCommandActionType') class UnknownCommandAction(BaseModel): command: str type: UnknownCommandActionType = Field(..., title='UnknownCommandActionType') class CommandAction( RootModel[ ReadCommandAction | ListFilesCommandAction | SearchCommandAction | UnknownCommandAction ] ): root: ( ReadCommandAction | ListFilesCommandAction | SearchCommandAction | UnknownCommandAction ) class CollabAgentTool(StrEnum): spawn_agent = 'spawnAgent' send_input = 'sendInput' resume_agent = 'resumeAgent' wait = 'wait' close_agent = 'closeAgent' class CommandExecutionStatus(StrEnum): in_progress = 'inProgress' completed = 'completed' failed = 'failed' declined = 'declined' class TextUserInputType(RootModel[Literal['text']]): root: Literal['text'] = Field(..., title='TextUserInputType') class ImageUserInputType(RootModel[Literal['image']]): root: Literal['image'] = Field(..., title='ImageUserInputType') class ImageUserInput(BaseModel): type: ImageUserInputType = Field(..., title='ImageUserInputType') url: str class LocalImageUserInputType(RootModel[Literal['localImage']]): root: Literal['localImage'] = Field(..., title='LocalImageUserInputType') class LocalImageUserInput(BaseModel): path: str type: LocalImageUserInputType = Field(..., title='LocalImageUserInputType') class SkillUserInputType(RootModel[Literal['skill']]): root: Literal['skill'] = Field(..., title='SkillUserInputType') class SkillUserInput(BaseModel): name: str path: str type: SkillUserInputType = Field(..., title='SkillUserInputType') class MentionUserInputType(RootModel[Literal['mention']]): root: Literal['mention'] = Field(..., title='MentionUserInputType') class MentionUserInput(BaseModel): name: str path: str type: MentionUserInputType = Field(..., title='MentionUserInputType') class ByteRange(BaseModel): end: int = Field(..., ge=0) start: int = Field(..., ge=0) class PatchApplyStatus(StrEnum): in_progress = 'inProgress' completed = 'completed' failed = 'failed' declined = 'declined' class SearchWebSearchActionType(RootModel[Literal['search']]): root: Literal['search'] = Field(..., title='SearchWebSearchActionType') class SearchWebSearchAction(BaseModel): queries: list[str] | None = None query: str | None = None type: SearchWebSearchActionType = Field(..., title='SearchWebSearchActionType') class OpenPageWebSearchActionType(RootModel[Literal['openPage']]): root: Literal['openPage'] = Field(..., title='OpenPageWebSearchActionType') class OpenPageWebSearchAction(BaseModel): type: OpenPageWebSearchActionType = Field(..., title='OpenPageWebSearchActionType') url: str | None = None class FindInPageWebSearchActionType(RootModel[Literal['findInPage']]): root: Literal['findInPage'] = Field(..., title='FindInPageWebSearchActionType') class FindInPageWebSearchAction(BaseModel): pattern: str | None = None type: FindInPageWebSearchActionType = Field( ..., title='FindInPageWebSearchActionType' ) url: str | None = None class OtherWebSearchActionType(RootModel[Literal['other']]): root: Literal['other'] = Field(..., title='OtherWebSearchActionType') class OtherWebSearchAction(BaseModel): type: OtherWebSearchActionType = Field(..., title='OtherWebSearchActionType') class WebSearchAction( RootModel[ SearchWebSearchAction | OpenPageWebSearchAction | FindInPageWebSearchAction | OtherWebSearchAction ] ): root: ( SearchWebSearchAction | OpenPageWebSearchAction | FindInPageWebSearchAction | OtherWebSearchAction ) class AddPatchChangeKindType(RootModel[Literal['add']]): root: Literal['add'] = Field(..., title='AddPatchChangeKindType') class AddPatchChangeKind(BaseModel): type: AddPatchChangeKindType = Field(..., title='AddPatchChangeKindType') class DeletePatchChangeKindType(RootModel[Literal['delete']]): root: Literal['delete'] = Field(..., title='DeletePatchChangeKindType') class DeletePatchChangeKind(BaseModel): type: DeletePatchChangeKindType = Field(..., title='DeletePatchChangeKindType') class UpdatePatchChangeKindType(RootModel[Literal['update']]): root: Literal['update'] = Field(..., title='UpdatePatchChangeKindType') class UpdatePatchChangeKind(BaseModel): move_path: str | None = None type: UpdatePatchChangeKindType = Field(..., title='UpdatePatchChangeKindType') class PatchChangeKind( RootModel[AddPatchChangeKind | DeletePatchChangeKind | UpdatePatchChangeKind] ): root: AddPatchChangeKind | DeletePatchChangeKind | UpdatePatchChangeKind class McpToolCallResult(BaseModel): content: list[Any] structured_content: Any | None = Field(None, alias='structuredContent') class CommandExecTerminalSize(BaseModel): cols: int = Field(..., description='Terminal width in character cells.', ge=0) rows: int = Field(..., description='Terminal height in character cells.', ge=0) class ModelListParams(BaseModel): cursor: str | None = Field( default=None, description='Opaque pagination cursor returned by a previous call.', ) include_hidden: bool | None = Field( default=None, alias='includeHidden', description='When true, include models that are hidden from the default picker list.', ) limit: int | None = Field( default=None, description='Optional page size; defaults to a reasonable server-side value.', ge=0, ) class AbsolutePathBuf(RootModel[str]): root: str = Field( ..., 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.', ) class ModeKind(StrEnum): plan = 'plan' default = 'default' class McpServerOauthLoginParams(BaseModel): name: str scopes: list[str] | None = None timeout_secs: int | None = Field(default=None, alias='timeoutSecs') class AgentMessageDeltaNotification(BaseModel): delta: str item_id: str = Field(..., alias='itemId') thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class SkillsChangedNotification(BaseModel): pass class AppsListParams(BaseModel): cursor: str | None = Field( default=None, description='Opaque pagination cursor returned by a previous call.', ) force_refetch: bool | None = Field( default=None, alias='forceRefetch', description='When true, bypass app caches and fetch the latest data from sources.', ) limit: int | None = Field( default=None, description='Optional page size; defaults to a reasonable server-side value.', ge=0, ) thread_id: str | None = Field( default=None, alias='threadId', description="Optional thread id used to evaluate app feature gating from that thread's config.", ) class CreditsSnapshot(BaseModel): balance: str | None = None has_credits: bool = Field(..., alias='hasCredits') unlimited: bool class RateLimitWindow(BaseModel): resets_at: int | None = Field(default=None, alias='resetsAt') used_percent: int = Field(..., alias='usedPercent') window_duration_mins: int | None = Field(default=None, alias='windowDurationMins') class PlanType(StrEnum): free = 'free' go = 'go' plus = 'plus' pro = 'pro' team = 'team' business = 'business' enterprise = 'enterprise' edu = 'edu' unknown = 'unknown' class CodexErrorInfo1(StrEnum): context_window_exceeded = 'contextWindowExceeded' usage_limit_exceeded = 'usageLimitExceeded' server_overloaded = 'serverOverloaded' internal_server_error = 'internalServerError' unauthorized = 'unauthorized' bad_request = 'badRequest' thread_rollback_failed = 'threadRollbackFailed' sandbox_error = 'sandboxError' other = 'other' class HttpConnectionFailed(BaseModel): http_status_code: int | None = Field(default=None, alias='httpStatusCode', ge=0) class HttpConnectionFailedCodexErrorInfo(BaseModel): model_config = ConfigDict( extra='forbid', ) http_connection_failed: HttpConnectionFailed = Field( ..., alias='httpConnectionFailed' ) class ResponseStreamConnectionFailed(BaseModel): http_status_code: int | None = Field(default=None, alias='httpStatusCode', ge=0) class ResponseStreamConnectionFailedCodexErrorInfo(BaseModel): model_config = ConfigDict( extra='forbid', ) response_stream_connection_failed: ResponseStreamConnectionFailed = Field( ..., alias='responseStreamConnectionFailed' ) class ResponseStreamDisconnected(BaseModel): http_status_code: int | None = Field(default=None, alias='httpStatusCode', ge=0) class ResponseStreamDisconnectedCodexErrorInfo(BaseModel): model_config = ConfigDict( extra='forbid', ) response_stream_disconnected: ResponseStreamDisconnected = Field( ..., alias='responseStreamDisconnected' ) class ResponseTooManyFailedAttempts(BaseModel): http_status_code: int | None = Field(default=None, alias='httpStatusCode', ge=0) class ResponseTooManyFailedAttemptsCodexErrorInfo(BaseModel): model_config = ConfigDict( extra='forbid', ) response_too_many_failed_attempts: ResponseTooManyFailedAttempts = Field( ..., alias='responseTooManyFailedAttempts' ) class CodexErrorInfo( RootModel[ CodexErrorInfo1 | HttpConnectionFailedCodexErrorInfo | ResponseStreamConnectionFailedCodexErrorInfo | ResponseStreamDisconnectedCodexErrorInfo | ResponseTooManyFailedAttemptsCodexErrorInfo ] ): root: ( CodexErrorInfo1 | HttpConnectionFailedCodexErrorInfo | ResponseStreamConnectionFailedCodexErrorInfo | ResponseStreamDisconnectedCodexErrorInfo | ResponseTooManyFailedAttemptsCodexErrorInfo ) = Field( ..., 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.', ) class WindowsWorldWritableWarningNotification(BaseModel): extra_count: int = Field(..., alias='extraCount', ge=0) failed_scan: bool = Field(..., alias='failedScan') sample_paths: list[str] = Field(..., alias='samplePaths') class ThreadLoadedListParams(BaseModel): cursor: str | None = Field( default=None, description='Opaque pagination cursor returned by a previous call.', ) limit: int | None = Field( default=None, description='Optional page size; defaults to no limit.', ge=0 ) class ThreadRealtimeAudioChunk(BaseModel): data: str num_channels: int = Field(..., alias='numChannels', ge=0) sample_rate: int = Field(..., alias='sampleRate', ge=0) samples_per_channel: int | None = Field( default=None, alias='samplesPerChannel', ge=0 ) class TurnError(BaseModel): additional_details: str | None = Field(default=None, alias='additionalDetails') codex_error_info: CodexErrorInfo | None = Field( default=None, alias='codexErrorInfo' ) message: str class TurnStatus(StrEnum): completed = 'completed' interrupted = 'interrupted' failed = 'failed' in_progress = 'inProgress' class SessionSource1(StrEnum): cli = 'cli' vscode = 'vscode' exec = 'exec' app_server = 'appServer' unknown = 'unknown' class SubAgentSource1(StrEnum): review = 'review' compact = 'compact' memory_consolidation = 'memory_consolidation' class OtherSubAgentSource(BaseModel): model_config = ConfigDict( extra='forbid', ) other: str class ThreadId(RootModel[str]): root: str class GitInfo(BaseModel): branch: str | None = None origin_url: str | None = Field(default=None, alias='originUrl') sha: str | None = None class ExternalAgentConfigMigrationItemType(StrEnum): agents_md = 'AGENTS_MD' config = 'CONFIG' skills = 'SKILLS' mcp_server_config = 'MCP_SERVER_CONFIG' class SkillsListExtraRootsForCwd(BaseModel): cwd: str extra_user_roots: list[str] = Field(..., alias='extraUserRoots') class CommandExecTerminateParams(BaseModel): process_id: str = Field( ..., alias='processId', description='Client-supplied, connection-scoped `processId` from the original `command/exec` request.', ) class ApiKeyv2LoginAccountParamsType(RootModel[Literal['apiKey']]): root: Literal['apiKey'] = Field(..., title='ApiKeyv2::LoginAccountParamsType') class ApiKeyv2LoginAccountParams(BaseModel): api_key: str = Field(..., alias='apiKey') type: ApiKeyv2LoginAccountParamsType = Field( ..., title='ApiKeyv2::LoginAccountParamsType' ) class Chatgptv2LoginAccountParamsType(RootModel[Literal['chatgpt']]): root: Literal['chatgpt'] = Field(..., title='Chatgptv2::LoginAccountParamsType') class Chatgptv2LoginAccountParams(BaseModel): type: Chatgptv2LoginAccountParamsType = Field( ..., title='Chatgptv2::LoginAccountParamsType' ) class ChatgptAuthTokensv2LoginAccountParamsType( RootModel[Literal['chatgptAuthTokens']] ): root: Literal['chatgptAuthTokens'] = Field( ..., title='ChatgptAuthTokensv2::LoginAccountParamsType' ) class ChatgptAuthTokensv2LoginAccountParams(BaseModel): access_token: str = Field( ..., alias='accessToken', description='Access token (JWT) supplied by the client. This token is used for backend API requests and email extraction.', ) chatgpt_account_id: str = Field( ..., alias='chatgptAccountId', description='Workspace/account identifier supplied by the client.', ) chatgpt_plan_type: str | None = Field( default=None, alias='chatgptPlanType', description='Optional plan type supplied by the client.\n\nWhen `null`, Codex attempts to derive the plan type from access-token claims. If unavailable, the plan defaults to `unknown`.', ) type: ChatgptAuthTokensv2LoginAccountParamsType = Field( ..., title='ChatgptAuthTokensv2::LoginAccountParamsType' ) class LoginAccountParams( RootModel[ ApiKeyv2LoginAccountParams | Chatgptv2LoginAccountParams | ChatgptAuthTokensv2LoginAccountParams ] ): root: ( ApiKeyv2LoginAccountParams | Chatgptv2LoginAccountParams | ChatgptAuthTokensv2LoginAccountParams ) = Field(..., title='LoginAccountParams') class SandboxMode(StrEnum): read_only = 'read-only' workspace_write = 'workspace-write' danger_full_access = 'danger-full-access' class AskForApproval1(StrEnum): untrusted = 'untrusted' on_failure = 'on-failure' on_request = 'on-request' never = 'never' class Reject(BaseModel): mcp_elicitations: bool rules: bool sandbox_approval: bool class RejectAskForApproval(BaseModel): model_config = ConfigDict( extra='forbid', ) reject: Reject class AskForApproval(RootModel[AskForApproval1 | RejectAskForApproval]): root: AskForApproval1 | RejectAskForApproval class ServiceTier(StrEnum): fast = 'fast' flex = 'flex' class DeprecationNoticeNotification(BaseModel): details: str | None = Field( default=None, description='Optional extra guidance, such as migration steps or rationale.', ) summary: str = Field(..., description='Concise summary of what is deprecated.') class ThreadRealtimeErrorNotification(BaseModel): message: str thread_id: str = Field(..., alias='threadId') class ServerRequestResolvedNotification(BaseModel): request_id: RequestId = Field(..., alias='requestId') thread_id: str = Field(..., alias='threadId') class SkillsConfigWriteParams(BaseModel): enabled: bool path: str class ThreadNameUpdatedNotification(BaseModel): thread_id: str = Field(..., alias='threadId') thread_name: str | None = Field(default=None, alias='threadName') class ThreadArchivedNotification(BaseModel): thread_id: str = Field(..., alias='threadId') class GetAccountParams(BaseModel): refresh_token: bool | None = Field( default=False, alias='refreshToken', description='When `true`, requests a proactive token refresh before returning.\n\nIn managed auth mode this triggers the normal refresh-token flow. In external auth mode this flag is ignored. Clients should refresh tokens themselves and call `account/login/start` with `chatgptAuthTokens`.', ) class ErrorNotification(BaseModel): error: TurnError thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') will_retry: bool = Field(..., alias='willRetry') class ThreadMetadataGitInfoUpdateParams(BaseModel): branch: str | None = Field( default=None, description='Omit to leave the stored branch unchanged, set to `null` to clear it, or provide a non-empty string to replace it.', ) origin_url: str | None = Field( default=None, alias='originUrl', description='Omit to leave the stored origin URL unchanged, set to `null` to clear it, or provide a non-empty string to replace it.', ) sha: str | None = Field( default=None, description='Omit to leave the stored commit unchanged, set to `null` to clear it, or provide a non-empty string to replace it.', ) class Personality(StrEnum): none = 'none' friendly = 'friendly' pragmatic = 'pragmatic' class ThreadRealtimeItemAddedNotification(BaseModel): item: Any thread_id: str = Field(..., alias='threadId') class TokenUsageBreakdown(BaseModel): cached_input_tokens: int = Field(..., alias='cachedInputTokens') input_tokens: int = Field(..., alias='inputTokens') output_tokens: int = Field(..., alias='outputTokens') reasoning_output_tokens: int = Field(..., alias='reasoningOutputTokens') total_tokens: int = Field(..., alias='totalTokens') class ThreadUnsubscribeParams(BaseModel): thread_id: str = Field(..., alias='threadId') class ContextCompactedNotification(BaseModel): thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class SkillsRemoteWriteParams(BaseModel): hazelnut_id: str = Field(..., alias='hazelnutId') class FeedbackUploadParams(BaseModel): classification: str extra_log_files: list[str] | None = Field(default=None, alias='extraLogFiles') include_logs: bool = Field(..., alias='includeLogs') reason: str | None = None thread_id: str | None = Field(default=None, alias='threadId') class MergeStrategy(StrEnum): replace = 'replace' upsert = 'upsert' class ThreadUnarchivedNotification(BaseModel): thread_id: str = Field(..., alias='threadId') class ReasoningEffort(StrEnum): none = 'none' minimal = 'minimal' low = 'low' medium = 'medium' high = 'high' xhigh = 'xhigh' class ReasoningSummary1(StrEnum): auto = 'auto' concise = 'concise' detailed = 'detailed' class ReasoningSummary(RootModel[ReasoningSummary1 | Literal['none']]): root: ReasoningSummary1 | Literal['none'] = Field( ..., description="A summary of the reasoning performed by the model. This can be useful for debugging and understanding the model's reasoning process. See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#reasoning-summaries", ) class DangerFullAccessSandboxPolicyType(RootModel[Literal['dangerFullAccess']]): root: Literal['dangerFullAccess'] = Field( ..., title='DangerFullAccessSandboxPolicyType' ) class DangerFullAccessSandboxPolicy(BaseModel): type: DangerFullAccessSandboxPolicyType = Field( ..., title='DangerFullAccessSandboxPolicyType' ) class ReadOnlySandboxPolicyType(RootModel[Literal['readOnly']]): root: Literal['readOnly'] = Field(..., title='ReadOnlySandboxPolicyType') class ExternalSandboxSandboxPolicyType(RootModel[Literal['externalSandbox']]): root: Literal['externalSandbox'] = Field( ..., title='ExternalSandboxSandboxPolicyType' ) class WorkspaceWriteSandboxPolicyType(RootModel[Literal['workspaceWrite']]): root: Literal['workspaceWrite'] = Field( ..., title='WorkspaceWriteSandboxPolicyType' ) class RestrictedReadOnlyAccessType(RootModel[Literal['restricted']]): root: Literal['restricted'] = Field(..., title='RestrictedReadOnlyAccessType') class RestrictedReadOnlyAccess(BaseModel): include_platform_defaults: bool | None = Field( default=True, alias='includePlatformDefaults' ) readable_roots: list[AbsolutePathBuf] | None = Field( default_factory=list, alias='readableRoots' ) type: RestrictedReadOnlyAccessType = Field( ..., title='RestrictedReadOnlyAccessType' ) class FullAccessReadOnlyAccessType(RootModel[Literal['fullAccess']]): root: Literal['fullAccess'] = Field(..., title='FullAccessReadOnlyAccessType') class FullAccessReadOnlyAccess(BaseModel): type: FullAccessReadOnlyAccessType = Field( ..., title='FullAccessReadOnlyAccessType' ) class ReadOnlyAccess(RootModel[RestrictedReadOnlyAccess | FullAccessReadOnlyAccess]): root: RestrictedReadOnlyAccess | FullAccessReadOnlyAccess class NetworkAccess(StrEnum): restricted = 'restricted' enabled = 'enabled' class TurnDiffUpdatedNotification(BaseModel): diff: str thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class WindowsSandboxSetupMode(StrEnum): elevated = 'elevated' unelevated = 'unelevated' class PluginInstallParams(BaseModel): marketplace_path: AbsolutePathBuf = Field(..., alias='marketplacePath') plugin_name: str = Field(..., alias='pluginName') class AccountLoginCompletedNotification(BaseModel): error: str | None = None login_id: str | None = Field(default=None, alias='loginId') success: bool class CommandExecWriteParams(BaseModel): close_stdin: bool | None = Field( default=None, alias='closeStdin', description='Close stdin after writing `deltaBase64`, if present.', ) delta_base64: str | None = Field( default=None, alias='deltaBase64', description='Optional base64-encoded stdin bytes to write.', ) process_id: str = Field( ..., alias='processId', description='Client-supplied, connection-scoped `processId` from the original `command/exec` request.', ) class AuthMode( RootModel[Literal['apikey'] | Literal['chatgpt'] | Literal['chatgptAuthTokens']] ): root: Literal['apikey'] | Literal['chatgpt'] | Literal['chatgptAuthTokens'] = Field( ..., description='Authentication mode for OpenAI-backed providers.' ) class ThreadRollbackParams(BaseModel): num_turns: int = Field( ..., alias='numTurns', description="The number of turns to drop from the end of the thread. Must be >= 1.\n\nThis only modifies the thread's history and does not revert local file changes that have been made by the agent. Clients are responsible for reverting these changes.", ge=0, ) thread_id: str = Field(..., alias='threadId') class ReasoningSummaryTextDeltaNotification(BaseModel): delta: str item_id: str = Field(..., alias='itemId') summary_index: int = Field(..., alias='summaryIndex') thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class Tool(BaseModel): field_meta: Any | None = Field(None, alias='_meta') annotations: Any | None = None description: str | None = None icons: list[Any] | None = None input_schema: Any = Field(..., alias='inputSchema') name: str output_schema: Any | None = Field(None, alias='outputSchema') title: str | None = None class UncommittedChangesReviewTargetType(RootModel[Literal['uncommittedChanges']]): root: Literal['uncommittedChanges'] = Field( ..., title='UncommittedChangesReviewTargetType' ) class UncommittedChangesReviewTarget(BaseModel): type: UncommittedChangesReviewTargetType = Field( ..., title='UncommittedChangesReviewTargetType' ) class BaseBranchReviewTargetType(RootModel[Literal['baseBranch']]): root: Literal['baseBranch'] = Field(..., title='BaseBranchReviewTargetType') class BaseBranchReviewTarget(BaseModel): branch: str type: BaseBranchReviewTargetType = Field(..., title='BaseBranchReviewTargetType') class CommitReviewTargetType(RootModel[Literal['commit']]): root: Literal['commit'] = Field(..., title='CommitReviewTargetType') class CommitReviewTarget(BaseModel): sha: str title: str | None = Field( default=None, description='Optional human-readable label (e.g., commit subject) for UIs.', ) type: CommitReviewTargetType = Field(..., title='CommitReviewTargetType') class CustomReviewTargetType(RootModel[Literal['custom']]): root: Literal['custom'] = Field(..., title='CustomReviewTargetType') class CustomReviewTarget(BaseModel): instructions: str type: CustomReviewTargetType = Field(..., title='CustomReviewTargetType') class ReviewTarget( RootModel[ UncommittedChangesReviewTarget | BaseBranchReviewTarget | CommitReviewTarget | CustomReviewTarget ] ): root: ( UncommittedChangesReviewTarget | BaseBranchReviewTarget | CommitReviewTarget | CustomReviewTarget ) class ReviewDelivery(StrEnum): inline = 'inline' detached = 'detached' class ModelRerouteReason(RootModel[Literal['highRiskCyberActivity']]): root: Literal['highRiskCyberActivity'] class FileChangeOutputDeltaNotification(BaseModel): delta: str item_id: str = Field(..., alias='itemId') thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class RemoteSkillSummary(BaseModel): description: str id: str name: str class ConfigValueWriteParams(BaseModel): expected_version: str | None = Field(default=None, alias='expectedVersion') file_path: str | None = Field( default=None, alias='filePath', description="Path to the config file to write; defaults to the user's `config.toml` when omitted.", ) key_path: str = Field(..., alias='keyPath') merge_strategy: MergeStrategy = Field(..., alias='mergeStrategy') value: Any class ThreadStartParams(BaseModel): approval_policy: AskForApproval | None = Field(default=None, alias='approvalPolicy') base_instructions: str | None = Field(default=None, alias='baseInstructions') config: dict[str, Any] | None = None cwd: str | None = None developer_instructions: str | None = Field( default=None, alias='developerInstructions' ) service_tier: ServiceTier | None = Field(default=None, alias='serviceTier') ephemeral: bool | None = None sandbox: SandboxMode | None = None personality: Personality | None = None model: str | None = None model_provider: str | None = Field(default=None, alias='modelProvider') service_name: str | None = Field(default=None, alias='serviceName') class MessageResponseItemType(RootModel[Literal['message']]): root: Literal['message'] = Field(..., title='MessageResponseItemType') class ReasoningResponseItemType(RootModel[Literal['reasoning']]): root: Literal['reasoning'] = Field(..., title='ReasoningResponseItemType') class LocalShellCallResponseItemType(RootModel[Literal['local_shell_call']]): root: Literal['local_shell_call'] = Field( ..., title='LocalShellCallResponseItemType' ) class FunctionCallResponseItemType(RootModel[Literal['function_call']]): root: Literal['function_call'] = Field(..., title='FunctionCallResponseItemType') class FunctionCallResponseItem(BaseModel): arguments: str call_id: str id: str | None = None name: str type: FunctionCallResponseItemType = Field( ..., title='FunctionCallResponseItemType' ) class FunctionCallOutputResponseItemType(RootModel[Literal['function_call_output']]): root: Literal['function_call_output'] = Field( ..., title='FunctionCallOutputResponseItemType' ) class CustomToolCallResponseItemType(RootModel[Literal['custom_tool_call']]): root: Literal['custom_tool_call'] = Field( ..., title='CustomToolCallResponseItemType' ) class CustomToolCallResponseItem(BaseModel): call_id: str id: str | None = None input: str name: str status: str | None = None type: CustomToolCallResponseItemType = Field( ..., title='CustomToolCallResponseItemType' ) class CustomToolCallOutputResponseItemType( RootModel[Literal['custom_tool_call_output']] ): root: Literal['custom_tool_call_output'] = Field( ..., title='CustomToolCallOutputResponseItemType' ) class WebSearchCallResponseItemType(RootModel[Literal['web_search_call']]): root: Literal['web_search_call'] = Field(..., title='WebSearchCallResponseItemType') class ImageGenerationCallResponseItemType(RootModel[Literal['image_generation_call']]): root: Literal['image_generation_call'] = Field( ..., title='ImageGenerationCallResponseItemType' ) class ImageGenerationCallResponseItem(BaseModel): id: str result: str revised_prompt: str | None = None status: str type: ImageGenerationCallResponseItemType = Field( ..., title='ImageGenerationCallResponseItemType' ) class GhostSnapshotResponseItemType(RootModel[Literal['ghost_snapshot']]): root: Literal['ghost_snapshot'] = Field(..., title='GhostSnapshotResponseItemType') class CompactionResponseItemType(RootModel[Literal['compaction']]): root: Literal['compaction'] = Field(..., title='CompactionResponseItemType') class CompactionResponseItem(BaseModel): encrypted_content: str type: CompactionResponseItemType = Field(..., title='CompactionResponseItemType') class OtherResponseItemType(RootModel[Literal['other']]): root: Literal['other'] = Field(..., title='OtherResponseItemType') class OtherResponseItem(BaseModel): type: OtherResponseItemType = Field(..., title='OtherResponseItemType') class SearchResponsesApiWebSearchActionType(RootModel[Literal['search']]): root: Literal['search'] = Field(..., title='SearchResponsesApiWebSearchActionType') class SearchResponsesApiWebSearchAction(BaseModel): queries: list[str] | None = None query: str | None = None type: SearchResponsesApiWebSearchActionType = Field( ..., title='SearchResponsesApiWebSearchActionType' ) class OpenPageResponsesApiWebSearchActionType(RootModel[Literal['open_page']]): root: Literal['open_page'] = Field( ..., title='OpenPageResponsesApiWebSearchActionType' ) class OpenPageResponsesApiWebSearchAction(BaseModel): type: OpenPageResponsesApiWebSearchActionType = Field( ..., title='OpenPageResponsesApiWebSearchActionType' ) url: str | None = None class FindInPageResponsesApiWebSearchActionType(RootModel[Literal['find_in_page']]): root: Literal['find_in_page'] = Field( ..., title='FindInPageResponsesApiWebSearchActionType' ) class FindInPageResponsesApiWebSearchAction(BaseModel): pattern: str | None = None type: FindInPageResponsesApiWebSearchActionType = Field( ..., title='FindInPageResponsesApiWebSearchActionType' ) url: str | None = None class OtherResponsesApiWebSearchActionType(RootModel[Literal['other']]): root: Literal['other'] = Field(..., title='OtherResponsesApiWebSearchActionType') class OtherResponsesApiWebSearchAction(BaseModel): type: OtherResponsesApiWebSearchActionType = Field( ..., title='OtherResponsesApiWebSearchActionType' ) class ResponsesApiWebSearchAction( RootModel[ SearchResponsesApiWebSearchAction | OpenPageResponsesApiWebSearchAction | FindInPageResponsesApiWebSearchAction | OtherResponsesApiWebSearchAction ] ): root: ( SearchResponsesApiWebSearchAction | OpenPageResponsesApiWebSearchAction | FindInPageResponsesApiWebSearchAction | OtherResponsesApiWebSearchAction ) class LocalShellStatus(StrEnum): completed = 'completed' in_progress = 'in_progress' incomplete = 'incomplete' class SummaryTextReasoningItemReasoningSummaryType(RootModel[Literal['summary_text']]): root: Literal['summary_text'] = Field( ..., title='SummaryTextReasoningItemReasoningSummaryType' ) class SummaryTextReasoningItemReasoningSummary(BaseModel): text: str type: SummaryTextReasoningItemReasoningSummaryType = Field( ..., title='SummaryTextReasoningItemReasoningSummaryType' ) class ReasoningItemReasoningSummary( RootModel[SummaryTextReasoningItemReasoningSummary] ): root: SummaryTextReasoningItemReasoningSummary class InputTextContentItemType(RootModel[Literal['input_text']]): root: Literal['input_text'] = Field(..., title='InputTextContentItemType') class InputTextContentItem(BaseModel): text: str type: InputTextContentItemType = Field(..., title='InputTextContentItemType') class InputImageContentItemType(RootModel[Literal['input_image']]): root: Literal['input_image'] = Field(..., title='InputImageContentItemType') class InputImageContentItem(BaseModel): image_url: str type: InputImageContentItemType = Field(..., title='InputImageContentItemType') class OutputTextContentItemType(RootModel[Literal['output_text']]): root: Literal['output_text'] = Field(..., title='OutputTextContentItemType') class OutputTextContentItem(BaseModel): text: str type: OutputTextContentItemType = Field(..., title='OutputTextContentItemType') class ContentItem( RootModel[InputTextContentItem | InputImageContentItem | OutputTextContentItem] ): root: InputTextContentItem | InputImageContentItem | OutputTextContentItem class ReasoningTextReasoningItemContentType(RootModel[Literal['reasoning_text']]): root: Literal['reasoning_text'] = Field( ..., title='ReasoningTextReasoningItemContentType' ) class ReasoningTextReasoningItemContent(BaseModel): text: str type: ReasoningTextReasoningItemContentType = Field( ..., title='ReasoningTextReasoningItemContentType' ) class TextReasoningItemContentType(RootModel[Literal['text']]): root: Literal['text'] = Field(..., title='TextReasoningItemContentType') class TextReasoningItemContent(BaseModel): text: str type: TextReasoningItemContentType = Field( ..., title='TextReasoningItemContentType' ) class ReasoningItemContent( RootModel[ReasoningTextReasoningItemContent | TextReasoningItemContent] ): root: ReasoningTextReasoningItemContent | TextReasoningItemContent class ExecLocalShellActionType(RootModel[Literal['exec']]): root: Literal['exec'] = Field(..., title='ExecLocalShellActionType') class ExecLocalShellAction(BaseModel): command: list[str] env: dict[str, Any] | None = None timeout_ms: int | None = Field(default=None, ge=0) type: ExecLocalShellActionType = Field(..., title='ExecLocalShellActionType') user: str | None = None working_directory: str | None = None class LocalShellAction(RootModel[ExecLocalShellAction]): root: ExecLocalShellAction class GhostCommit(BaseModel): id: str parent: str | None = None preexisting_untracked_dirs: list[str] preexisting_untracked_files: list[str] class InputTextFunctionCallOutputContentItemType(RootModel[Literal['input_text']]): root: Literal['input_text'] = Field( ..., title='InputTextFunctionCallOutputContentItemType' ) class InputTextFunctionCallOutputContentItem(BaseModel): text: str type: InputTextFunctionCallOutputContentItemType = Field( ..., title='InputTextFunctionCallOutputContentItemType' ) class InputImageFunctionCallOutputContentItemType(RootModel[Literal['input_image']]): root: Literal['input_image'] = Field( ..., title='InputImageFunctionCallOutputContentItemType' ) class ImageDetail(StrEnum): auto = 'auto' low = 'low' high = 'high' original = 'original' class ThreadRealtimeStartedNotification(BaseModel): session_id: str | None = Field(default=None, alias='sessionId') thread_id: str = Field(..., alias='threadId') class McpToolCallProgressNotification(BaseModel): item_id: str = Field(..., alias='itemId') message: str thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class SkillErrorInfo(BaseModel): message: str path: str class SkillScope(StrEnum): user = 'user' repo = 'repo' system = 'system' admin = 'admin' class SkillInterface(BaseModel): brand_color: str | None = Field(default=None, alias='brandColor') default_prompt: str | None = Field(default=None, alias='defaultPrompt') display_name: str | None = Field(default=None, alias='displayName') icon_large: str | None = Field(default=None, alias='iconLarge') icon_small: str | None = Field(default=None, alias='iconSmall') short_description: str | None = Field(default=None, alias='shortDescription') class SkillToolDependency(BaseModel): command: str | None = None description: str | None = None transport: str | None = None type: str url: str | None = None value: str class CommandExecOutputStream(RootModel[Literal['stdout'] | Literal['stderr']]): root: Literal['stdout'] | Literal['stderr'] = Field( ..., description='Stream label for `command/exec/outputDelta` notifications.' ) class ExternalAgentConfigDetectParams(BaseModel): cwds: list[str] | None = Field( default=None, description='Zero or more working directories to include for repo-scoped detection.', ) include_home: bool | None = Field( default=None, alias='includeHome', description="If true, include detection under the user's home (~/.claude, ~/.codex, etc.).", ) class McpAuthStatus(StrEnum): unsupported = 'unsupported' not_logged_in = 'notLoggedIn' bearer_token = 'bearerToken' o_auth = 'oAuth' class ConfigReadParams(BaseModel): cwd: str | None = Field( default=None, description='Optional working directory to resolve project config layers. If specified, return the effective config as seen from that directory (i.e., including any project layers between `cwd` and the project/repo root).', ) include_layers: bool | None = Field(default=False, alias='includeLayers') class ThreadUnarchiveParams(BaseModel): thread_id: str = Field(..., alias='threadId') class ThreadSourceKind(StrEnum): cli = 'cli' vscode = 'vscode' exec = 'exec' app_server = 'appServer' sub_agent = 'subAgent' sub_agent_review = 'subAgentReview' sub_agent_compact = 'subAgentCompact' sub_agent_thread_spawn = 'subAgentThreadSpawn' sub_agent_other = 'subAgentOther' unknown = 'unknown' class ThreadSortKey(StrEnum): created_at = 'created_at' updated_at = 'updated_at' class ListMcpServerStatusParams(BaseModel): cursor: str | None = Field( default=None, description='Opaque pagination cursor returned by a previous call.', ) limit: int | None = Field( default=None, description='Optional page size; defaults to a server-defined value.', ge=0, ) class ThreadSetNameParams(BaseModel): name: str thread_id: str = Field(..., alias='threadId') class McpServerOauthLoginCompletedNotification(BaseModel): error: str | None = None name: str success: bool class AppScreenshot(BaseModel): file_id: str | None = Field(default=None, alias='fileId') url: str | None = None user_prompt: str = Field(..., alias='userPrompt') class AppReview(BaseModel): status: str class AppBranding(BaseModel): category: str | None = None developer: str | None = None is_discoverable_app: bool = Field(..., alias='isDiscoverableApp') privacy_policy: str | None = Field(default=None, alias='privacyPolicy') terms_of_service: str | None = Field(default=None, alias='termsOfService') website: str | None = None class WindowsSandboxSetupCompletedNotification(BaseModel): error: str | None = None mode: WindowsSandboxSetupMode success: bool class Resource(BaseModel): field_meta: Any | None = Field(None, alias='_meta') annotations: Any | None = None description: str | None = None icons: list[Any] | None = None mime_type: str | None = Field(default=None, alias='mimeType') name: str size: int | None = None title: str | None = None uri: str class PlanDeltaNotification(BaseModel): delta: str item_id: str = Field(..., alias='itemId') thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class ThreadArchiveParams(BaseModel): thread_id: str = Field(..., alias='threadId') class ReasoningTextDeltaNotification(BaseModel): content_index: int = Field(..., alias='contentIndex') delta: str item_id: str = Field(..., alias='itemId') thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class TurnPlanStepStatus(StrEnum): pending = 'pending' in_progress = 'inProgress' completed = 'completed' class TurnInterruptParams(BaseModel): thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class ThreadReadParams(BaseModel): include_turns: bool | None = Field( default=False, alias='includeTurns', description='When true, include turns and their items from rollout history.', ) thread_id: str = Field(..., alias='threadId') class ExperimentalFeatureListParams(BaseModel): cursor: str | None = Field( default=None, description='Opaque pagination cursor returned by a previous call.', ) limit: int | None = Field( default=None, description='Optional page size; defaults to a reasonable server-side value.', ge=0, ) class HazelnutScope(StrEnum): example = 'example' workspace_shared = 'workspace-shared' all_shared = 'all-shared' personal = 'personal' class ProductSurface(StrEnum): chatgpt = 'chatgpt' codex = 'codex' api = 'api' atlas = 'atlas' class CancelLoginAccountParams(BaseModel): login_id: str = Field(..., alias='loginId') class ThreadCompactStartParams(BaseModel): thread_id: str = Field(..., alias='threadId') class TextPosition(BaseModel): column: int = Field( ..., description='1-based column number (in Unicode scalar values).', ge=0 ) line: int = Field(..., description='1-based line number.', ge=0) class CommandExecutionOutputDeltaNotification(BaseModel): delta: str item_id: str = Field(..., alias='itemId') thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class ThreadClosedNotification(BaseModel): thread_id: str = Field(..., alias='threadId') class ResourceTemplate(BaseModel): annotations: Any | None = None description: str | None = None mime_type: str | None = Field(default=None, alias='mimeType') name: str title: str | None = None uri_template: str = Field(..., alias='uriTemplate') class TerminalInteractionNotification(BaseModel): item_id: str = Field(..., alias='itemId') process_id: str = Field(..., alias='processId') stdin: str thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class ThreadRealtimeClosedNotification(BaseModel): reason: str | None = None thread_id: str = Field(..., alias='threadId') class JSONRPCError(BaseModel): error: JSONRPCErrorError id: RequestId class JSONRPCRequest(BaseModel): id: RequestId method: str params: Any | None = None trace: W3cTraceContext | None = Field( default=None, description='Optional W3C Trace Context for distributed tracing.' ) class JSONRPCMessage( RootModel[JSONRPCRequest | JSONRPCNotification | JSONRPCResponse | JSONRPCError] ): root: JSONRPCRequest | JSONRPCNotification | JSONRPCResponse | JSONRPCError = Field( ..., description='Refers to any valid JSON-RPC object that can be decoded off the wire, or encoded to be sent.', title='JSONRPCMessage', ) class ThreadStartClientRequest(BaseModel): id: RequestId method: ThreadStartClientRequestMethod = Field( ..., title='Thread/startClientRequestMethod' ) params: ThreadStartParams class ThreadArchiveClientRequest(BaseModel): id: RequestId method: ThreadArchiveClientRequestMethod = Field( ..., title='Thread/archiveClientRequestMethod' ) params: ThreadArchiveParams class ThreadUnsubscribeClientRequest(BaseModel): id: RequestId method: ThreadUnsubscribeClientRequestMethod = Field( ..., title='Thread/unsubscribeClientRequestMethod' ) params: ThreadUnsubscribeParams class ThreadNameSetClientRequest(BaseModel): id: RequestId method: ThreadNameSetClientRequestMethod = Field( ..., title='Thread/name/setClientRequestMethod' ) params: ThreadSetNameParams class ThreadUnarchiveClientRequest(BaseModel): id: RequestId method: ThreadUnarchiveClientRequestMethod = Field( ..., title='Thread/unarchiveClientRequestMethod' ) params: ThreadUnarchiveParams class ThreadCompactStartClientRequest(BaseModel): id: RequestId method: ThreadCompactStartClientRequestMethod = Field( ..., title='Thread/compact/startClientRequestMethod' ) params: ThreadCompactStartParams class ThreadRollbackClientRequest(BaseModel): id: RequestId method: ThreadRollbackClientRequestMethod = Field( ..., title='Thread/rollbackClientRequestMethod' ) params: ThreadRollbackParams class ThreadLoadedListClientRequest(BaseModel): id: RequestId method: ThreadLoadedListClientRequestMethod = Field( ..., title='Thread/loaded/listClientRequestMethod' ) params: ThreadLoadedListParams class ThreadReadClientRequest(BaseModel): id: RequestId method: ThreadReadClientRequestMethod = Field( ..., title='Thread/readClientRequestMethod' ) params: ThreadReadParams class SkillsRemoteExportClientRequest(BaseModel): id: RequestId method: SkillsRemoteExportClientRequestMethod = Field( ..., title='Skills/remote/exportClientRequestMethod' ) params: SkillsRemoteWriteParams class AppListClientRequest(BaseModel): id: RequestId method: AppListClientRequestMethod = Field(..., title='App/listClientRequestMethod') params: AppsListParams class SkillsConfigWriteClientRequest(BaseModel): id: RequestId method: SkillsConfigWriteClientRequestMethod = Field( ..., title='Skills/config/writeClientRequestMethod' ) params: SkillsConfigWriteParams class PluginInstallClientRequest(BaseModel): id: RequestId method: PluginInstallClientRequestMethod = Field( ..., title='Plugin/installClientRequestMethod' ) params: PluginInstallParams class TurnInterruptClientRequest(BaseModel): id: RequestId method: TurnInterruptClientRequestMethod = Field( ..., title='Turn/interruptClientRequestMethod' ) params: TurnInterruptParams class ModelListClientRequest(BaseModel): id: RequestId method: ModelListClientRequestMethod = Field( ..., title='Model/listClientRequestMethod' ) params: ModelListParams class ExperimentalFeatureListClientRequest(BaseModel): id: RequestId method: ExperimentalFeatureListClientRequestMethod = Field( ..., title='ExperimentalFeature/listClientRequestMethod' ) params: ExperimentalFeatureListParams class McpServerOauthLoginClientRequest(BaseModel): id: RequestId method: McpServerOauthLoginClientRequestMethod = Field( ..., title='McpServer/oauth/loginClientRequestMethod' ) params: McpServerOauthLoginParams class McpServerStatusListClientRequest(BaseModel): id: RequestId method: McpServerStatusListClientRequestMethod = Field( ..., title='McpServerStatus/listClientRequestMethod' ) params: ListMcpServerStatusParams class AccountLoginStartClientRequest(BaseModel): id: RequestId method: AccountLoginStartClientRequestMethod = Field( ..., title='Account/login/startClientRequestMethod' ) params: LoginAccountParams class AccountLoginCancelClientRequest(BaseModel): id: RequestId method: AccountLoginCancelClientRequestMethod = Field( ..., title='Account/login/cancelClientRequestMethod' ) params: CancelLoginAccountParams class FeedbackUploadClientRequest(BaseModel): id: RequestId method: FeedbackUploadClientRequestMethod = Field( ..., title='Feedback/uploadClientRequestMethod' ) params: FeedbackUploadParams class CommandExecWriteClientRequest(BaseModel): id: RequestId method: CommandExecWriteClientRequestMethod = Field( ..., title='Command/exec/writeClientRequestMethod' ) params: CommandExecWriteParams class CommandExecTerminateClientRequest(BaseModel): id: RequestId method: CommandExecTerminateClientRequestMethod = Field( ..., title='Command/exec/terminateClientRequestMethod' ) params: CommandExecTerminateParams class ConfigReadClientRequest(BaseModel): id: RequestId method: ConfigReadClientRequestMethod = Field( ..., title='Config/readClientRequestMethod' ) params: ConfigReadParams class ExternalAgentConfigDetectClientRequest(BaseModel): id: RequestId method: ExternalAgentConfigDetectClientRequestMethod = Field( ..., title='ExternalAgentConfig/detectClientRequestMethod' ) params: ExternalAgentConfigDetectParams class ConfigValueWriteClientRequest(BaseModel): id: RequestId method: ConfigValueWriteClientRequestMethod = Field( ..., title='Config/value/writeClientRequestMethod' ) params: ConfigValueWriteParams class AccountReadClientRequest(BaseModel): id: RequestId method: AccountReadClientRequestMethod = Field( ..., title='Account/readClientRequestMethod' ) params: GetAccountParams class AdditionalFileSystemPermissions(BaseModel): read: list[AbsolutePathBuf] | None = None write: list[AbsolutePathBuf] | None = None class AdditionalMacOsPermissions(BaseModel): accessibility: bool automations: MacOsAutomationPermission calendar: bool preferences: MacOsPreferencesPermission class AdditionalPermissionProfile(BaseModel): file_system: AdditionalFileSystemPermissions | None = Field( default=None, alias='fileSystem' ) macos: AdditionalMacOsPermissions | None = None network: AdditionalNetworkPermissions | None = None class ApplyPatchApprovalParams(BaseModel): call_id: str = Field( ..., alias='callId', description='Use to correlate this with [codex_protocol::protocol::PatchApplyBeginEvent] and [codex_protocol::protocol::PatchApplyEndEvent].', ) conversation_id: ThreadId = Field(..., alias='conversationId') file_changes: dict[str, FileChange] = Field(..., alias='fileChanges') grant_root: str | None = Field( default=None, alias='grantRoot', description='When set, the agent is asking the user to allow writes under this root for the remainder of the session (unclear if this is honored today).', ) reason: str | None = Field( default=None, description='Optional explanatory reason (e.g. request for extra write access).', ) class ChatgptAuthTokensRefreshParams(BaseModel): previous_account_id: str | None = Field( default=None, alias='previousAccountId', description='Workspace/account identifier that Codex was previously using.\n\nClients that manage multiple accounts/workspaces can use this as a hint to refresh the token for the correct workspace.\n\nThis may be `null` when the prior auth state did not include a workspace identifier (`chatgpt_account_id`).', ) reason: ChatgptAuthTokensRefreshReason class ExecCommandApprovalParams(BaseModel): approval_id: str | None = Field( default=None, alias='approvalId', description='Identifier for this specific approval callback.', ) call_id: str = Field( ..., alias='callId', description='Use to correlate this with [codex_protocol::protocol::ExecCommandBeginEvent] and [codex_protocol::protocol::ExecCommandEndEvent].', ) command: list[str] conversation_id: ThreadId = Field(..., alias='conversationId') cwd: str parsed_cmd: list[ParsedCommand] = Field(..., alias='parsedCmd') reason: str | None = None class McpElicitationBooleanSchema(BaseModel): model_config = ConfigDict( extra='forbid', ) default: bool | None = None description: str | None = None title: str | None = None type: McpElicitationBooleanType class McpElicitationLegacyTitledEnumSchema(BaseModel): model_config = ConfigDict( extra='forbid', ) default: str | None = None description: str | None = None enum: list[str] enum_names: list[str] | None = Field(default=None, alias='enumNames') title: str | None = None type: McpElicitationStringType class McpElicitationMultiSelectEnumSchema( RootModel[ McpElicitationUntitledMultiSelectEnumSchema | McpElicitationTitledMultiSelectEnumSchema ] ): root: ( McpElicitationUntitledMultiSelectEnumSchema | McpElicitationTitledMultiSelectEnumSchema ) class McpElicitationNumberSchema(BaseModel): model_config = ConfigDict( extra='forbid', ) default: float | None = None description: str | None = None maximum: float | None = None minimum: float | None = None title: str | None = None type: McpElicitationNumberType class McpElicitationSingleSelectEnumSchema( RootModel[ McpElicitationUntitledSingleSelectEnumSchema | McpElicitationTitledSingleSelectEnumSchema ] ): root: ( McpElicitationUntitledSingleSelectEnumSchema | McpElicitationTitledSingleSelectEnumSchema ) class McpElicitationStringSchema(BaseModel): model_config = ConfigDict( extra='forbid', ) default: str | None = None description: str | None = None format: McpElicitationStringFormat | None = None max_length: int | None = Field(default=None, alias='maxLength', ge=0) min_length: int | None = Field(default=None, alias='minLength', ge=0) title: str | None = None type: McpElicitationStringType class NetworkApprovalContext(BaseModel): host: str protocol: NetworkApprovalProtocol class NetworkPolicyAmendment(BaseModel): action: NetworkPolicyRuleAction host: str class PermissionsRequestApprovalParams(BaseModel): item_id: str = Field(..., alias='itemId') permissions: AdditionalPermissionProfile reason: str | None = None thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class ToolRequestUserInputParams(BaseModel): item_id: str = Field(..., alias='itemId') questions: list[ToolRequestUserInputQuestion] thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class ItemToolRequestUserInputServerRequest(BaseModel): id: RequestId method: ItemToolRequestUserInputServerRequestMethod = Field( ..., title='Item/tool/requestUserInputServerRequestMethod' ) params: ToolRequestUserInputParams class ItemPermissionsRequestApprovalServerRequest(BaseModel): id: RequestId method: ItemPermissionsRequestApprovalServerRequestMethod = Field( ..., title='Item/permissions/requestApprovalServerRequestMethod' ) params: PermissionsRequestApprovalParams class AccountChatgptAuthTokensRefreshServerRequest(BaseModel): id: RequestId method: AccountChatgptAuthTokensRefreshServerRequestMethod = Field( ..., title='Account/chatgptAuthTokens/refreshServerRequestMethod' ) params: ChatgptAuthTokensRefreshParams class ApplyPatchApprovalServerRequest(BaseModel): id: RequestId method: ApplyPatchApprovalServerRequestMethod = Field( ..., title='ApplyPatchApprovalServerRequestMethod' ) params: ApplyPatchApprovalParams class ExecCommandApprovalServerRequest(BaseModel): id: RequestId method: ExecCommandApprovalServerRequestMethod = Field( ..., title='ExecCommandApprovalServerRequestMethod' ) params: ExecCommandApprovalParams class ErrorServerNotification(BaseModel): method: ErrorServerNotificationMethod = Field( ..., title='ErrorServerNotificationMethod' ) params: ErrorNotification class ThreadArchivedServerNotification(BaseModel): method: ThreadArchivedServerNotificationMethod = Field( ..., title='Thread/archivedServerNotificationMethod' ) params: ThreadArchivedNotification class ThreadUnarchivedServerNotification(BaseModel): method: ThreadUnarchivedServerNotificationMethod = Field( ..., title='Thread/unarchivedServerNotificationMethod' ) params: ThreadUnarchivedNotification class ThreadClosedServerNotification(BaseModel): method: ThreadClosedServerNotificationMethod = Field( ..., title='Thread/closedServerNotificationMethod' ) params: ThreadClosedNotification class SkillsChangedServerNotification(BaseModel): method: SkillsChangedServerNotificationMethod = Field( ..., title='Skills/changedServerNotificationMethod' ) params: SkillsChangedNotification class ThreadNameUpdatedServerNotification(BaseModel): method: ThreadNameUpdatedServerNotificationMethod = Field( ..., title='Thread/name/updatedServerNotificationMethod' ) params: ThreadNameUpdatedNotification class TurnDiffUpdatedServerNotification(BaseModel): method: TurnDiffUpdatedServerNotificationMethod = Field( ..., title='Turn/diff/updatedServerNotificationMethod' ) params: TurnDiffUpdatedNotification class ItemAgentMessageDeltaServerNotification(BaseModel): method: ItemAgentMessageDeltaServerNotificationMethod = Field( ..., title='Item/agentMessage/deltaServerNotificationMethod' ) params: AgentMessageDeltaNotification class ItemPlanDeltaServerNotification(BaseModel): method: ItemPlanDeltaServerNotificationMethod = Field( ..., title='Item/plan/deltaServerNotificationMethod' ) params: PlanDeltaNotification class ItemCommandExecutionOutputDeltaServerNotification(BaseModel): method: ItemCommandExecutionOutputDeltaServerNotificationMethod = Field( ..., title='Item/commandExecution/outputDeltaServerNotificationMethod' ) params: CommandExecutionOutputDeltaNotification class ItemCommandExecutionTerminalInteractionServerNotification(BaseModel): method: ItemCommandExecutionTerminalInteractionServerNotificationMethod = Field( ..., title='Item/commandExecution/terminalInteractionServerNotificationMethod' ) params: TerminalInteractionNotification class ItemFileChangeOutputDeltaServerNotification(BaseModel): method: ItemFileChangeOutputDeltaServerNotificationMethod = Field( ..., title='Item/fileChange/outputDeltaServerNotificationMethod' ) params: FileChangeOutputDeltaNotification class ServerRequestResolvedServerNotification(BaseModel): method: ServerRequestResolvedServerNotificationMethod = Field( ..., title='ServerRequest/resolvedServerNotificationMethod' ) params: ServerRequestResolvedNotification class ItemMcpToolCallProgressServerNotification(BaseModel): method: ItemMcpToolCallProgressServerNotificationMethod = Field( ..., title='Item/mcpToolCall/progressServerNotificationMethod' ) params: McpToolCallProgressNotification class McpServerOauthLoginCompletedServerNotification(BaseModel): method: McpServerOauthLoginCompletedServerNotificationMethod = Field( ..., title='McpServer/oauthLogin/completedServerNotificationMethod' ) params: McpServerOauthLoginCompletedNotification class ItemReasoningSummaryTextDeltaServerNotification(BaseModel): method: ItemReasoningSummaryTextDeltaServerNotificationMethod = Field( ..., title='Item/reasoning/summaryTextDeltaServerNotificationMethod' ) params: ReasoningSummaryTextDeltaNotification class ItemReasoningSummaryPartAddedServerNotification(BaseModel): method: ItemReasoningSummaryPartAddedServerNotificationMethod = Field( ..., title='Item/reasoning/summaryPartAddedServerNotificationMethod' ) params: ReasoningSummaryPartAddedNotification class ItemReasoningTextDeltaServerNotification(BaseModel): method: ItemReasoningTextDeltaServerNotificationMethod = Field( ..., title='Item/reasoning/textDeltaServerNotificationMethod' ) params: ReasoningTextDeltaNotification class ThreadCompactedServerNotification(BaseModel): method: ThreadCompactedServerNotificationMethod = Field( ..., title='Thread/compactedServerNotificationMethod' ) params: ContextCompactedNotification class DeprecationNoticeServerNotification(BaseModel): method: DeprecationNoticeServerNotificationMethod = Field( ..., title='DeprecationNoticeServerNotificationMethod' ) params: DeprecationNoticeNotification class ThreadRealtimeStartedServerNotification(BaseModel): method: ThreadRealtimeStartedServerNotificationMethod = Field( ..., title='Thread/realtime/startedServerNotificationMethod' ) params: ThreadRealtimeStartedNotification class ThreadRealtimeItemAddedServerNotification(BaseModel): method: ThreadRealtimeItemAddedServerNotificationMethod = Field( ..., title='Thread/realtime/itemAddedServerNotificationMethod' ) params: ThreadRealtimeItemAddedNotification class ThreadRealtimeErrorServerNotification(BaseModel): method: ThreadRealtimeErrorServerNotificationMethod = Field( ..., title='Thread/realtime/errorServerNotificationMethod' ) params: ThreadRealtimeErrorNotification class ThreadRealtimeClosedServerNotification(BaseModel): method: ThreadRealtimeClosedServerNotificationMethod = Field( ..., title='Thread/realtime/closedServerNotificationMethod' ) params: ThreadRealtimeClosedNotification class WindowsWorldWritableWarningServerNotification(BaseModel): method: WindowsWorldWritableWarningServerNotificationMethod = Field( ..., title='Windows/worldWritableWarningServerNotificationMethod' ) params: WindowsWorldWritableWarningNotification class WindowsSandboxSetupCompletedServerNotification(BaseModel): method: WindowsSandboxSetupCompletedServerNotificationMethod = Field( ..., title='WindowsSandbox/setupCompletedServerNotificationMethod' ) params: WindowsSandboxSetupCompletedNotification class AccountLoginCompletedServerNotification(BaseModel): method: AccountLoginCompletedServerNotificationMethod = Field( ..., title='Account/login/completedServerNotificationMethod' ) params: AccountLoginCompletedNotification class CollabAgentRef(BaseModel): agent_nickname: str | None = Field( default=None, description='Optional nickname assigned to an AgentControl-spawned sub-agent.', ) agent_role: str | None = Field( default=None, description='Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.', ) thread_id: ThreadId = Field(..., description='Thread ID of the receiver/new agent.') class CollabAgentStatusEntry(BaseModel): agent_nickname: str | None = Field( default=None, description='Optional nickname assigned to an AgentControl-spawned sub-agent.', ) agent_role: str | None = Field( default=None, description='Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.', ) status: AgentStatus = Field(..., description='Last known status of the agent.') thread_id: ThreadId = Field(..., description='Thread ID of the receiver/new agent.') class FileSystemPermissions(BaseModel): read: list[AbsolutePathBuf] | None = None write: list[AbsolutePathBuf] | None = None class PermissionProfile(BaseModel): file_system: FileSystemPermissions | None = None macos: MacOsSeatbeltProfileExtensions | None = None network: NetworkPermissions | None = None class PlanItemArg(BaseModel): model_config = ConfigDict( extra='forbid', ) status: StepStatus step: str class HandoffRequestedRealtimeEvent(BaseModel): model_config = ConfigDict( extra='forbid', ) handoff_requested: RealtimeHandoffRequested = Field(..., alias='HandoffRequested') class RealtimeEvent( RootModel[ SessionUpdatedRealtimeEvent | AudioOutRealtimeEvent | ConversationItemAddedRealtimeEvent | ConversationItemDoneRealtimeEvent | HandoffRequestedRealtimeEvent | ErrorRealtimeEvent ] ): root: ( SessionUpdatedRealtimeEvent | AudioOutRealtimeEvent | ConversationItemAddedRealtimeEvent | ConversationItemDoneRealtimeEvent | HandoffRequestedRealtimeEvent | ErrorRealtimeEvent ) class RequestUserInputQuestion(BaseModel): header: str id: str is_other: bool | None = Field(default=False, alias='isOther') is_secret: bool | None = Field(default=False, alias='isSecret') options: list[RequestUserInputQuestionOption] | None = None question: str class ReviewCodeLocation(BaseModel): absolute_file_path: str line_range: ReviewLineRange class NetworkPolicyAmendment1(BaseModel): network_policy_amendment: NetworkPolicyAmendment class NetworkPolicyAmendmentReviewDecision(BaseModel): model_config = ConfigDict( extra='forbid', ) network_policy_amendment: NetworkPolicyAmendment1 class ReviewDecision( RootModel[ Literal['approved'] | ApprovedExecpolicyAmendmentReviewDecision | Literal['approved_for_session'] | NetworkPolicyAmendmentReviewDecision | Literal['denied'] | Literal['abort'] ] ): root: ( Literal['approved'] | ApprovedExecpolicyAmendmentReviewDecision | Literal['approved_for_session'] | NetworkPolicyAmendmentReviewDecision | Literal['denied'] | Literal['abort'] ) = Field(..., description="User's decision in response to an ExecApprovalRequest.") class ReviewFinding(BaseModel): body: str code_location: ReviewCodeLocation confidence_score: float priority: int title: str class ReviewOutputEvent(BaseModel): findings: list[ReviewFinding] overall_confidence_score: float overall_correctness: str overall_explanation: str class AgentMessageTurnItem(BaseModel): content: list[AgentMessageContent] id: str phase: MessagePhase | None = Field( default=None, description='Optional phase metadata carried through from `ResponseItem::Message`.\n\nThis is currently used by TUI rendering to distinguish mid-turn commentary from a final answer and avoid status-indicator jitter.', ) type: AgentMessageTurnItemType = Field(..., title='AgentMessageTurnItemType') class WebSearchTurnItem(BaseModel): action: ResponsesApiWebSearchAction id: str query: str type: WebSearchTurnItemType = Field(..., title='WebSearchTurnItemType') class ErrorEventMsg(BaseModel): codex_error_info: CodexErrorInfo | None = None message: str type: ErrorEventMsgType = Field(..., title='ErrorEventMsgType') class RealtimeConversationRealtimeEventMsg(BaseModel): payload: RealtimeEvent type: RealtimeConversationRealtimeEventMsgType = Field( ..., title='RealtimeConversationRealtimeEventMsgType' ) class ModelRerouteEventMsg(BaseModel): from_model: str reason: ModelRerouteReason to_model: str type: ModelRerouteEventMsgType = Field(..., title='ModelRerouteEventMsgType') class TaskStartedEventMsg(BaseModel): collaboration_mode_kind: ModeKind | None = 'default' model_context_window: int | None = None turn_id: str type: TaskStartedEventMsgType = Field(..., title='TaskStartedEventMsgType') class AgentMessageEventMsg(BaseModel): message: str phase: MessagePhase | None = None type: AgentMessageEventMsgType = Field(..., title='AgentMessageEventMsgType') class ThreadNameUpdatedEventMsg(BaseModel): thread_id: ThreadId thread_name: str | None = None type: ThreadNameUpdatedEventMsgType = Field( ..., title='ThreadNameUpdatedEventMsgType' ) class WebSearchEndEventMsg(BaseModel): action: ResponsesApiWebSearchAction call_id: str query: str type: WebSearchEndEventMsgType = Field(..., title='WebSearchEndEventMsgType') class ExecApprovalRequestEventMsg(BaseModel): additional_permissions: PermissionProfile | None = Field( default=None, description='Optional additional filesystem permissions requested for this command.', ) approval_id: str | None = Field( default=None, description='Identifier for this specific approval callback.\n\nWhen absent, the approval is for the command item itself (`call_id`). This is present for subcommand approvals (via execve intercept).', ) available_decisions: list[ReviewDecision] | None = Field( default=None, description='Ordered list of decisions the client may present for this prompt.\n\nWhen absent, clients should derive the legacy default set from the other fields on this request.', ) call_id: str = Field( ..., description='Identifier for the associated command execution item.' ) command: list[str] = Field(..., description='The command to be executed.') cwd: str = Field(..., description="The command's working directory.") network_approval_context: NetworkApprovalContext | None = Field( default=None, description='Optional network context for a blocked request that can be approved.', ) parsed_cmd: list[ParsedCommand] proposed_execpolicy_amendment: list[str] | None = Field( default=None, description='Proposed execpolicy amendment that can be applied to allow future runs.', ) proposed_network_policy_amendments: list[NetworkPolicyAmendment] | None = Field( default=None, description='Proposed network policy amendments (for example allow/deny this host in future).', ) reason: str | None = Field( default=None, description='Optional human-readable reason for the approval (e.g. retry without sandbox).', ) skill_metadata: ExecApprovalRequestSkillMetadata | None = Field( default=None, description='Optional skill metadata when the approval was triggered by a skill script.', ) turn_id: str | None = Field( default='', description='Turn ID that this command belongs to. Uses `#[serde(default)]` for backwards compatibility.', ) type: ExecApprovalRequestEventMsgType = Field( ..., title='ExecApprovalRequestEventMsgType' ) class RequestPermissionsEventMsg(BaseModel): call_id: str = Field( ..., description='Responses API call id for the associated tool call, if available.', ) permissions: PermissionProfile reason: str | None = None turn_id: str | None = Field( default='', description='Turn ID that this request belongs to. Uses `#[serde(default)]` for backwards compatibility.', ) type: RequestPermissionsEventMsgType = Field( ..., title='RequestPermissionsEventMsgType' ) class RequestUserInputEventMsg(BaseModel): call_id: str = Field( ..., description='Responses API call id for the associated tool call, if available.', ) questions: list[RequestUserInputQuestion] turn_id: str | None = Field( default='', description='Turn ID that this request belongs to. Uses `#[serde(default)]` for backwards compatibility.', ) type: RequestUserInputEventMsgType = Field( ..., title='RequestUserInputEventMsgType' ) class DynamicToolCallResponseEventMsg(BaseModel): arguments: Any = Field(..., description='Dynamic tool call arguments.') call_id: str = Field( ..., description='Identifier for the corresponding DynamicToolCallRequest.' ) content_items: list[DynamicToolCallOutputContentItem] = Field( ..., description='Dynamic tool response content items.' ) duration: Duration = Field( ..., description='The duration of the dynamic tool call.' ) error: str | None = Field( default=None, description='Optional error text when the tool call failed before producing a response.', ) success: bool = Field(..., description='Whether the tool call succeeded.') tool: str = Field(..., description='Dynamic tool name.') turn_id: str = Field( ..., description='Turn ID that this dynamic tool call belongs to.' ) type: DynamicToolCallResponseEventMsgType = Field( ..., title='DynamicToolCallResponseEventMsgType' ) class StreamErrorEventMsg(BaseModel): additional_details: str | None = Field( default=None, description='Optional details about the underlying stream failure (often the same human-readable message that is surfaced as the terminal error if retries are exhausted).', ) codex_error_info: CodexErrorInfo | None = None message: str type: StreamErrorEventMsgType = Field(..., title='StreamErrorEventMsgType') class PatchApplyEndEventMsg(BaseModel): call_id: str = Field( ..., description='Identifier for the PatchApplyBegin that finished.' ) changes: dict[str, FileChange] | None = Field( default_factory=lambda: FileChange({}), description='The changes that were applied (mirrors PatchApplyBeginEvent::changes).', ) status: PatchApplyStatus = Field( ..., description='Completion status for this patch application.' ) stderr: str = Field( ..., description='Captured stderr (parser errors, IO failures, etc.).' ) stdout: str = Field( ..., description='Captured stdout (summary printed by apply_patch).' ) success: bool = Field( ..., description='Whether the patch was applied successfully.' ) turn_id: str | None = Field( default='', description='Turn ID that this patch belongs to. Uses `#[serde(default)]` for backwards compatibility.', ) type: PatchApplyEndEventMsgType = Field(..., title='PatchApplyEndEventMsgType') class McpListToolsResponseEventMsg(BaseModel): auth_statuses: dict[str, McpAuthStatus] = Field( ..., description='Authentication status for each configured MCP server.' ) resource_templates: dict[str, list[ResourceTemplate]] = Field( ..., description='Known resource templates grouped by server name.' ) resources: dict[str, list[Resource]] = Field( ..., description='Known resources grouped by server name.' ) tools: dict[str, Tool] = Field( ..., description='Fully qualified tool name -> tool definition.' ) type: McpListToolsResponseEventMsgType = Field( ..., title='McpListToolsResponseEventMsgType' ) class ListRemoteSkillsResponseEventMsg(BaseModel): skills: list[RemoteSkillSummary] type: ListRemoteSkillsResponseEventMsgType = Field( ..., title='ListRemoteSkillsResponseEventMsgType' ) class PlanUpdateEventMsg(BaseModel): explanation: str | None = Field( default=None, description='Arguments for the `update_plan` todo/checklist tool (not plan mode).', ) plan: list[PlanItemArg] type: PlanUpdateEventMsgType = Field(..., title='PlanUpdateEventMsgType') class EnteredReviewModeEventMsg(BaseModel): target: ReviewTarget type: EnteredReviewModeEventMsgType = Field( ..., title='EnteredReviewModeEventMsgType' ) user_facing_hint: str | None = None class ExitedReviewModeEventMsg(BaseModel): review_output: ReviewOutputEvent | None = None type: ExitedReviewModeEventMsgType = Field( ..., title='ExitedReviewModeEventMsgType' ) class CollabAgentSpawnBeginEventMsg(BaseModel): call_id: str = Field(..., description='Identifier for the collab tool call.') prompt: str = Field( ..., description='Initial prompt sent to the agent. Can be empty to prevent CoT leaking at the beginning.', ) sender_thread_id: ThreadId = Field(..., description='Thread ID of the sender.') type: CollabAgentSpawnBeginEventMsgType = Field( ..., title='CollabAgentSpawnBeginEventMsgType' ) class CollabAgentSpawnEndEventMsg(BaseModel): call_id: str = Field(..., description='Identifier for the collab tool call.') new_agent_nickname: str | None = Field( default=None, description='Optional nickname assigned to the new agent.' ) new_agent_role: str | None = Field( default=None, description='Optional role assigned to the new agent.' ) new_thread_id: ThreadId | None = Field( default=None, description='Thread ID of the newly spawned agent, if it was created.', ) prompt: str = Field( ..., description='Initial prompt sent to the agent. Can be empty to prevent CoT leaking at the beginning.', ) sender_thread_id: ThreadId = Field(..., description='Thread ID of the sender.') status: AgentStatus = Field( ..., description='Last known status of the new agent reported to the sender agent.', ) type: CollabAgentSpawnEndEventMsgType = Field( ..., title='CollabAgentSpawnEndEventMsgType' ) class CollabAgentInteractionBeginEventMsg(BaseModel): call_id: str = Field(..., description='Identifier for the collab tool call.') prompt: str = Field( ..., description='Prompt sent from the sender to the receiver. Can be empty to prevent CoT leaking at the beginning.', ) receiver_thread_id: ThreadId = Field(..., description='Thread ID of the receiver.') sender_thread_id: ThreadId = Field(..., description='Thread ID of the sender.') type: CollabAgentInteractionBeginEventMsgType = Field( ..., title='CollabAgentInteractionBeginEventMsgType' ) class CollabAgentInteractionEndEventMsg(BaseModel): call_id: str = Field(..., description='Identifier for the collab tool call.') prompt: str = Field( ..., description='Prompt sent from the sender to the receiver. Can be empty to prevent CoT leaking at the beginning.', ) receiver_agent_nickname: str | None = Field( default=None, description='Optional nickname assigned to the receiver agent.' ) receiver_agent_role: str | None = Field( default=None, description='Optional role assigned to the receiver agent.' ) receiver_thread_id: ThreadId = Field(..., description='Thread ID of the receiver.') sender_thread_id: ThreadId = Field(..., description='Thread ID of the sender.') status: AgentStatus = Field( ..., description='Last known status of the receiver agent reported to the sender agent.', ) type: CollabAgentInteractionEndEventMsgType = Field( ..., title='CollabAgentInteractionEndEventMsgType' ) class CollabWaitingBeginEventMsg(BaseModel): call_id: str = Field(..., description='ID of the waiting call.') receiver_agents: list[CollabAgentRef] | None = Field( default=None, description='Optional nicknames/roles for receivers.' ) receiver_thread_ids: list[ThreadId] = Field( ..., description='Thread ID of the receivers.' ) sender_thread_id: ThreadId = Field(..., description='Thread ID of the sender.') type: CollabWaitingBeginEventMsgType = Field( ..., title='CollabWaitingBeginEventMsgType' ) class CollabWaitingEndEventMsg(BaseModel): agent_statuses: list[CollabAgentStatusEntry] | None = Field( default=None, description='Optional receiver metadata paired with final statuses.', ) call_id: str = Field(..., description='ID of the waiting call.') sender_thread_id: ThreadId = Field(..., description='Thread ID of the sender.') statuses: dict[str, AgentStatus] = Field( ..., description='Last known status of the receiver agents reported to the sender agent.', ) type: CollabWaitingEndEventMsgType = Field( ..., title='CollabWaitingEndEventMsgType' ) class CollabCloseBeginEventMsg(BaseModel): call_id: str = Field(..., description='Identifier for the collab tool call.') receiver_thread_id: ThreadId = Field(..., description='Thread ID of the receiver.') sender_thread_id: ThreadId = Field(..., description='Thread ID of the sender.') type: CollabCloseBeginEventMsgType = Field( ..., title='CollabCloseBeginEventMsgType' ) class CollabCloseEndEventMsg(BaseModel): call_id: str = Field(..., description='Identifier for the collab tool call.') receiver_agent_nickname: str | None = Field( default=None, description='Optional nickname assigned to the receiver agent.' ) receiver_agent_role: str | None = Field( default=None, description='Optional role assigned to the receiver agent.' ) receiver_thread_id: ThreadId = Field(..., description='Thread ID of the receiver.') sender_thread_id: ThreadId = Field(..., description='Thread ID of the sender.') status: AgentStatus = Field( ..., description='Last known status of the receiver agent reported to the sender agent before the close.', ) type: CollabCloseEndEventMsgType = Field(..., title='CollabCloseEndEventMsgType') class CollabResumeBeginEventMsg(BaseModel): call_id: str = Field(..., description='Identifier for the collab tool call.') receiver_agent_nickname: str | None = Field( default=None, description='Optional nickname assigned to the receiver agent.' ) receiver_agent_role: str | None = Field( default=None, description='Optional role assigned to the receiver agent.' ) receiver_thread_id: ThreadId = Field(..., description='Thread ID of the receiver.') sender_thread_id: ThreadId = Field(..., description='Thread ID of the sender.') type: CollabResumeBeginEventMsgType = Field( ..., title='CollabResumeBeginEventMsgType' ) class CollabResumeEndEventMsg(BaseModel): call_id: str = Field(..., description='Identifier for the collab tool call.') receiver_agent_nickname: str | None = Field( default=None, description='Optional nickname assigned to the receiver agent.' ) receiver_agent_role: str | None = Field( default=None, description='Optional role assigned to the receiver agent.' ) receiver_thread_id: ThreadId = Field(..., description='Thread ID of the receiver.') sender_thread_id: ThreadId = Field(..., description='Thread ID of the sender.') status: AgentStatus = Field( ..., description='Last known status of the receiver agent reported to the sender agent after resume.', ) type: CollabResumeEndEventMsgType = Field(..., title='CollabResumeEndEventMsgType') class DynamicToolCallResponse(BaseModel): content_items: list[DynamicToolCallOutputContentItem] = Field( ..., alias='contentItems' ) success: bool class GrantedPermissionProfile(BaseModel): file_system: AdditionalFileSystemPermissions | None = Field( default=None, alias='fileSystem' ) macos: GrantedMacOsPermissions | None = None network: AdditionalNetworkPermissions | None = None class ActiveThreadStatus(BaseModel): active_flags: list[ThreadActiveFlag] = Field(..., alias='activeFlags') type: ActiveThreadStatusType = Field(..., title='ActiveThreadStatusType') class ThreadStatus( RootModel[ NotLoadedThreadStatus | IdleThreadStatus | SystemErrorThreadStatus | ActiveThreadStatus ] ): root: ( NotLoadedThreadStatus | IdleThreadStatus | SystemErrorThreadStatus | ActiveThreadStatus ) class AgentMessageThreadItem(BaseModel): id: str phase: MessagePhase | None = None text: str type: AgentMessageThreadItemType = Field(..., title='AgentMessageThreadItemType') class CommandExecutionThreadItem(BaseModel): aggregated_output: str | None = Field( default=None, alias='aggregatedOutput', description="The command's output, aggregated from stdout and stderr.", ) command: str = Field(..., description='The command to be executed.') command_actions: list[CommandAction] = Field( ..., alias='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.', ) cwd: str = Field(..., description="The command's working directory.") duration_ms: int | None = Field( default=None, alias='durationMs', description='The duration of the command execution in milliseconds.', ) exit_code: int | None = Field( default=None, alias='exitCode', description="The command's exit code." ) id: str process_id: str | None = Field( default=None, alias='processId', description='Identifier for the underlying PTY process (when available).', ) status: CommandExecutionStatus type: CommandExecutionThreadItemType = Field( ..., title='CommandExecutionThreadItemType' ) class McpToolCallThreadItem(BaseModel): arguments: Any duration_ms: int | None = Field( default=None, alias='durationMs', description='The duration of the MCP tool call in milliseconds.', ) error: McpToolCallError | None = None id: str result: McpToolCallResult | None = None server: str status: McpToolCallStatus tool: str type: McpToolCallThreadItemType = Field(..., title='McpToolCallThreadItemType') class DynamicToolCallThreadItem(BaseModel): arguments: Any content_items: list[DynamicToolCallOutputContentItem] | None = Field( default=None, alias='contentItems' ) duration_ms: int | None = Field( default=None, alias='durationMs', description='The duration of the dynamic tool call in milliseconds.', ) id: str status: DynamicToolCallStatus success: bool | None = None tool: str type: DynamicToolCallThreadItemType = Field( ..., title='DynamicToolCallThreadItemType' ) class WebSearchThreadItem(BaseModel): action: WebSearchAction | None = None id: str query: str type: WebSearchThreadItemType = Field(..., title='WebSearchThreadItemType') class CollabAgentState(BaseModel): message: str | None = None status: CollabAgentStatus class TextElement(BaseModel): byte_range: ByteRange = Field( ..., alias='byteRange', description='Byte range in the parent `text` buffer that this element occupies.', ) placeholder: str | None = Field( default=None, description='Optional human-readable placeholder for the element, displayed in the UI.', ) class FileUpdateChange(BaseModel): diff: str kind: PatchChangeKind path: str class CommandExecResizeParams(BaseModel): process_id: str = Field( ..., alias='processId', description='Client-supplied, connection-scoped `processId` from the original `command/exec` request.', ) size: CommandExecTerminalSize = Field( ..., description='New PTY size in character cells.' ) class PluginListParams(BaseModel): cwds: list[AbsolutePathBuf] | None = Field( default=None, description='Optional working directories used to discover repo marketplaces. When omitted, only home-scoped marketplaces and the official curated marketplace are considered.', ) class RateLimitSnapshot(BaseModel): credits: CreditsSnapshot | None = None limit_id: str | None = Field(default=None, alias='limitId') limit_name: str | None = Field(default=None, alias='limitName') plan_type: PlanType | None = Field(default=None, alias='planType') primary: RateLimitWindow | None = None secondary: RateLimitWindow | None = None class ThreadRealtimeOutputAudioDeltaNotification(BaseModel): audio: ThreadRealtimeAudioChunk thread_id: str = Field(..., alias='threadId') class ThreadSpawn(BaseModel): agent_nickname: str | None = None agent_role: str | None = None depth: int parent_thread_id: ThreadId class ThreadSpawnSubAgentSource(BaseModel): model_config = ConfigDict( extra='forbid', ) thread_spawn: ThreadSpawn class SubAgentSource( RootModel[SubAgentSource1 | ThreadSpawnSubAgentSource | OtherSubAgentSource] ): root: SubAgentSource1 | ThreadSpawnSubAgentSource | OtherSubAgentSource class ExternalAgentConfigMigrationItem(BaseModel): cwd: str | None = Field( default=None, description='Null or empty means home-scoped migration; non-empty means repo-scoped migration.', ) description: str item_type: ExternalAgentConfigMigrationItemType = Field(..., alias='itemType') class SkillsListParams(BaseModel): cwds: list[str] | None = Field( default=None, description='When empty, defaults to the current session working directory.', ) force_reload: bool | None = Field( default=None, alias='forceReload', description='When true, bypass the skills cache and re-scan skills from disk.', ) per_cwd_extra_user_roots: list[SkillsListExtraRootsForCwd] | None = Field( default=None, alias='perCwdExtraUserRoots', description='Optional per-cwd extra roots to scan as user-scoped skills.', ) class ThreadForkParams(BaseModel): approval_policy: AskForApproval | None = Field(default=None, alias='approvalPolicy') base_instructions: str | None = Field(default=None, alias='baseInstructions') config: dict[str, Any] | None = None cwd: str | None = None developer_instructions: str | None = Field( default=None, alias='developerInstructions' ) model: str | None = Field( default=None, description='Configuration overrides for the forked thread, if any.', ) model_provider: str | None = Field(default=None, alias='modelProvider') thread_id: str = Field(..., alias='threadId') service_tier: ServiceTier | None = Field(default=None, alias='serviceTier') sandbox: SandboxMode | None = None class ThreadMetadataUpdateParams(BaseModel): git_info: ThreadMetadataGitInfoUpdateParams | None = Field( default=None, alias='gitInfo', description='Patch the stored Git metadata for this thread. Omit a field to leave it unchanged, set it to `null` to clear it, or provide a string to replace the stored value.', ) thread_id: str = Field(..., alias='threadId') class ThreadResumeParams(BaseModel): approval_policy: AskForApproval | None = Field(default=None, alias='approvalPolicy') base_instructions: str | None = Field(default=None, alias='baseInstructions') config: dict[str, Any] | None = None cwd: str | None = None developer_instructions: str | None = Field( default=None, alias='developerInstructions' ) thread_id: str = Field(..., alias='threadId') model: str | None = Field( default=None, description='Configuration overrides for the resumed thread, if any.', ) model_provider: str | None = Field(default=None, alias='modelProvider') service_tier: ServiceTier | None = Field(default=None, alias='serviceTier') sandbox: SandboxMode | None = None personality: Personality | None = None class ThreadTokenUsage(BaseModel): last: TokenUsageBreakdown model_context_window: int | None = Field(default=None, alias='modelContextWindow') total: TokenUsageBreakdown class ConfigEdit(BaseModel): key_path: str = Field(..., alias='keyPath') merge_strategy: MergeStrategy = Field(..., alias='mergeStrategy') value: Any class ReadOnlySandboxPolicy(BaseModel): access: ReadOnlyAccess | None = Field( default_factory=lambda: ReadOnlyAccess({'type': 'fullAccess'}) ) network_access: bool | None = Field(default=False, alias='networkAccess') type: ReadOnlySandboxPolicyType = Field(..., title='ReadOnlySandboxPolicyType') class ExternalSandboxSandboxPolicy(BaseModel): network_access: NetworkAccess | None = Field( default='restricted', alias='networkAccess' ) type: ExternalSandboxSandboxPolicyType = Field( ..., title='ExternalSandboxSandboxPolicyType' ) class WorkspaceWriteSandboxPolicy(BaseModel): exclude_slash_tmp: bool | None = Field(default=False, alias='excludeSlashTmp') exclude_tmpdir_env_var: bool | None = Field( default=False, alias='excludeTmpdirEnvVar' ) network_access: bool | None = Field(default=False, alias='networkAccess') read_only_access: ReadOnlyAccess | None = Field( default_factory=lambda: ReadOnlyAccess({'type': 'fullAccess'}), alias='readOnlyAccess', ) type: WorkspaceWriteSandboxPolicyType = Field( ..., title='WorkspaceWriteSandboxPolicyType' ) writable_roots: list[AbsolutePathBuf] | None = Field( default_factory=list, alias='writableRoots' ) class SandboxPolicy( RootModel[ DangerFullAccessSandboxPolicy | ReadOnlySandboxPolicy | ExternalSandboxSandboxPolicy | WorkspaceWriteSandboxPolicy ] ): root: ( DangerFullAccessSandboxPolicy | ReadOnlySandboxPolicy | ExternalSandboxSandboxPolicy | WorkspaceWriteSandboxPolicy ) class WindowsSandboxSetupStartParams(BaseModel): cwd: AbsolutePathBuf | None = None mode: WindowsSandboxSetupMode class AccountUpdatedNotification(BaseModel): auth_mode: AuthMode | None = Field(default=None, alias='authMode') plan_type: PlanType | None = Field(default=None, alias='planType') class ReviewStartParams(BaseModel): delivery: ReviewDelivery | None = Field( default=None, description='Where to run the review: inline (default) on the current thread or detached on a new thread (returned in `reviewThreadId`).', ) target: ReviewTarget thread_id: str = Field(..., alias='threadId') class ModelReroutedNotification(BaseModel): from_model: str = Field(..., alias='fromModel') reason: ModelRerouteReason thread_id: str = Field(..., alias='threadId') to_model: str = Field(..., alias='toModel') turn_id: str = Field(..., alias='turnId') class MessageResponseItem(BaseModel): content: list[ContentItem] end_turn: bool | None = None id: str | None = None phase: MessagePhase | None = None role: str type: MessageResponseItemType = Field(..., title='MessageResponseItemType') class ReasoningResponseItem(BaseModel): content: list[ReasoningItemContent] | None = None encrypted_content: str | None = None id: str summary: list[ReasoningItemReasoningSummary] type: ReasoningResponseItemType = Field(..., title='ReasoningResponseItemType') class LocalShellCallResponseItem(BaseModel): action: LocalShellAction call_id: str | None = Field( default=None, description='Set when using the Responses API.' ) id: str | None = Field( default=None, description='Legacy id field retained for compatibility with older payloads.', ) status: LocalShellStatus type: LocalShellCallResponseItemType = Field( ..., title='LocalShellCallResponseItemType' ) class WebSearchCallResponseItem(BaseModel): action: ResponsesApiWebSearchAction | None = None id: str | None = None status: str | None = None type: WebSearchCallResponseItemType = Field( ..., title='WebSearchCallResponseItemType' ) class GhostSnapshotResponseItem(BaseModel): ghost_commit: GhostCommit type: GhostSnapshotResponseItemType = Field( ..., title='GhostSnapshotResponseItemType' ) class InputImageFunctionCallOutputContentItem(BaseModel): detail: ImageDetail | None = None image_url: str type: InputImageFunctionCallOutputContentItemType = Field( ..., title='InputImageFunctionCallOutputContentItemType' ) class FunctionCallOutputContentItem( RootModel[ InputTextFunctionCallOutputContentItem | InputImageFunctionCallOutputContentItem ] ): root: ( InputTextFunctionCallOutputContentItem | InputImageFunctionCallOutputContentItem ) = Field( ..., description='Responses API compatible content items that can be returned by a tool call. This is a subset of ContentItem with the types we support as function call outputs.', ) class SkillDependencies(BaseModel): tools: list[SkillToolDependency] class AccountRateLimitsUpdatedNotification(BaseModel): rate_limits: RateLimitSnapshot = Field(..., alias='rateLimits') class CommandExecOutputDeltaNotification(BaseModel): cap_reached: bool = Field( ..., alias='capReached', description='`true` on the final streamed chunk for a stream when `outputBytesCap` truncated later output on that stream.', ) delta_base64: str = Field( ..., alias='deltaBase64', description='Base64-encoded output bytes.' ) process_id: str = Field( ..., alias='processId', description='Client-supplied, connection-scoped `processId` from the original `command/exec` request.', ) stream: CommandExecOutputStream = Field( ..., description='Output stream for this chunk.' ) class ThreadListParams(BaseModel): archived: bool | None = Field( default=None, description='Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned.', ) cursor: str | None = Field( default=None, description='Opaque pagination cursor returned by a previous call.', ) cwd: str | None = Field( default=None, description='Optional cwd filter; when set, only threads whose session cwd exactly matches this path are returned.', ) limit: int | None = Field( default=None, description='Optional page size; defaults to a reasonable server-side value.', ge=0, ) model_providers: list[str] | None = Field( default=None, alias='modelProviders', description='Optional provider filter; when set, only sessions recorded under these providers are returned. When present but empty, includes all providers.', ) search_term: str | None = Field( default=None, alias='searchTerm', description='Optional substring filter for the extracted thread title.', ) sort_key: ThreadSortKey | None = Field( default=None, alias='sortKey', description='Optional sort key; defaults to created_at.', ) source_kinds: list[ThreadSourceKind] | None = Field( default=None, alias='sourceKinds', description='Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.', ) class AppMetadata(BaseModel): categories: list[str] | None = None developer: str | None = None first_party_requires_install: bool | None = Field( default=None, alias='firstPartyRequiresInstall' ) first_party_type: str | None = Field(default=None, alias='firstPartyType') review: AppReview | None = None screenshots: list[AppScreenshot] | None = None seo_description: str | None = Field(default=None, alias='seoDescription') show_in_composer_when_unlinked: bool | None = Field( default=None, alias='showInComposerWhenUnlinked' ) sub_categories: list[str] | None = Field(default=None, alias='subCategories') version: str | None = None version_id: str | None = Field(default=None, alias='versionId') version_notes: str | None = Field(default=None, alias='versionNotes') class CommandExecParams(BaseModel): command: list[str] = Field( ..., description='Command argv vector. Empty arrays are rejected.' ) cwd: str | None = Field( default=None, description='Optional working directory. Defaults to the server cwd.', ) disable_output_cap: bool | None = Field( default=None, alias='disableOutputCap', description='Disable stdout/stderr capture truncation for this request.\n\nCannot be combined with `outputBytesCap`.', ) disable_timeout: bool | None = Field( default=None, alias='disableTimeout', description='Disable the timeout entirely for this request.\n\nCannot be combined with `timeoutMs`.', ) env: dict[str, Any] | None = Field( default=None, description='Optional environment overrides merged into the server-computed environment.\n\nMatching names override inherited values. Set a key to `null` to unset an inherited variable.', ) output_bytes_cap: int | None = Field( default=None, alias='outputBytesCap', description='Optional per-stream stdout/stderr capture cap in bytes.\n\nWhen omitted, the server default applies. Cannot be combined with `disableOutputCap`.', ge=0, ) process_id: str | None = Field( default=None, alias='processId', description='Optional client-supplied, connection-scoped process id.\n\nRequired for `tty`, `streamStdin`, `streamStdoutStderr`, and follow-up `command/exec/write`, `command/exec/resize`, and `command/exec/terminate` calls. When omitted, buffered execution gets an internal id that is not exposed to the client.', ) sandbox_policy: SandboxPolicy | None = Field( default=None, alias='sandboxPolicy', description="Optional sandbox policy for this command.\n\nUses the same shape as thread/turn execution sandbox configuration and defaults to the user's configured policy when omitted.", ) size: CommandExecTerminalSize | None = Field( default=None, description='Optional initial PTY size in character cells. Only valid when `tty` is true.', ) stream_stdin: bool | None = Field( default=None, alias='streamStdin', description='Allow follow-up `command/exec/write` requests to write stdin bytes.\n\nRequires a client-supplied `processId`.', ) stream_stdout_stderr: bool | None = Field( default=None, alias='streamStdoutStderr', description='Stream stdout/stderr via `command/exec/outputDelta` notifications.\n\nStreamed bytes are not duplicated into the final response and require a client-supplied `processId`.', ) timeout_ms: int | None = Field( default=None, alias='timeoutMs', description='Optional timeout in milliseconds.\n\nWhen omitted, the server default applies. Cannot be combined with `disableTimeout`.', ) tty: bool | None = Field( default=None, description='Enable PTY mode.\n\nThis implies `streamStdin` and `streamStdoutStderr`.', ) class TurnPlanStep(BaseModel): status: TurnPlanStepStatus step: str class SkillsRemoteReadParams(BaseModel): enabled: bool | None = False hazelnut_scope: HazelnutScope | None = Field( default='example', alias='hazelnutScope' ) product_surface: ProductSurface | None = Field( default='codex', alias='productSurface' ) class TextRange(BaseModel): end: TextPosition start: TextPosition class ExecCommandApprovalResponse(BaseModel): decision: ReviewDecision class ApplyPatchApprovalResponse(BaseModel): decision: ReviewDecision class ThreadResumeClientRequest(BaseModel): id: RequestId method: ThreadResumeClientRequestMethod = Field( ..., title='Thread/resumeClientRequestMethod' ) params: ThreadResumeParams class ThreadForkClientRequest(BaseModel): id: RequestId method: ThreadForkClientRequestMethod = Field( ..., title='Thread/forkClientRequestMethod' ) params: ThreadForkParams class ThreadMetadataUpdateClientRequest(BaseModel): id: RequestId method: ThreadMetadataUpdateClientRequestMethod = Field( ..., title='Thread/metadata/updateClientRequestMethod' ) params: ThreadMetadataUpdateParams class ThreadListClientRequest(BaseModel): id: RequestId method: ThreadListClientRequestMethod = Field( ..., title='Thread/listClientRequestMethod' ) params: ThreadListParams class SkillsListClientRequest(BaseModel): id: RequestId method: SkillsListClientRequestMethod = Field( ..., title='Skills/listClientRequestMethod' ) params: SkillsListParams class PluginListClientRequest(BaseModel): id: RequestId method: PluginListClientRequestMethod = Field( ..., title='Plugin/listClientRequestMethod' ) params: PluginListParams class SkillsRemoteListClientRequest(BaseModel): id: RequestId method: SkillsRemoteListClientRequestMethod = Field( ..., title='Skills/remote/listClientRequestMethod' ) params: SkillsRemoteReadParams class ReviewStartClientRequest(BaseModel): id: RequestId method: ReviewStartClientRequestMethod = Field( ..., title='Review/startClientRequestMethod' ) params: ReviewStartParams class WindowsSandboxSetupStartClientRequest(BaseModel): id: RequestId method: WindowsSandboxSetupStartClientRequestMethod = Field( ..., title='WindowsSandbox/setupStartClientRequestMethod' ) params: WindowsSandboxSetupStartParams class CommandExecClientRequest(BaseModel): id: RequestId method: CommandExecClientRequestMethod = Field( ..., title='Command/execClientRequestMethod' ) params: CommandExecParams class CommandExecResizeClientRequest(BaseModel): id: RequestId method: CommandExecResizeClientRequestMethod = Field( ..., title='Command/exec/resizeClientRequestMethod' ) params: CommandExecResizeParams class ApplyNetworkPolicyAmendment(BaseModel): network_policy_amendment: NetworkPolicyAmendment class ApplyNetworkPolicyAmendmentCommandExecutionApprovalDecision(BaseModel): model_config = ConfigDict( extra='forbid', ) apply_network_policy_amendment: ApplyNetworkPolicyAmendment = Field( ..., alias='applyNetworkPolicyAmendment' ) class CommandExecutionApprovalDecision( RootModel[ Literal['accept'] | Literal['acceptForSession'] | AcceptWithExecpolicyAmendmentCommandExecutionApprovalDecision | ApplyNetworkPolicyAmendmentCommandExecutionApprovalDecision | Literal['decline'] | Literal['cancel'] ] ): root: ( Literal['accept'] | Literal['acceptForSession'] | AcceptWithExecpolicyAmendmentCommandExecutionApprovalDecision | ApplyNetworkPolicyAmendmentCommandExecutionApprovalDecision | Literal['decline'] | Literal['cancel'] ) class CommandExecutionRequestApprovalParams(BaseModel): thread_id: str = Field(..., alias='threadId') approval_id: str | None = Field( default=None, alias='approvalId', description='Unique identifier for this specific approval callback.\n\nFor regular shell/unified_exec approvals, this is null.\n\nFor zsh-exec-bridge subcommand approvals, multiple callbacks can belong to one parent `itemId`, so `approvalId` is a distinct opaque callback id (a UUID) used to disambiguate routing.', ) turn_id: str = Field(..., alias='turnId') command: str | None = Field(default=None, description='The command to be executed.') command_actions: list[CommandAction] | None = Field( default=None, alias='commandActions', description='Best-effort parsed command actions for friendly display.', ) cwd: str | None = Field( default=None, description="The command's working directory." ) item_id: str = Field(..., alias='itemId') network_approval_context: NetworkApprovalContext | None = Field( default=None, alias='networkApprovalContext', description='Optional context for a managed-network approval prompt.', ) proposed_execpolicy_amendment: list[str] | None = Field( default=None, alias='proposedExecpolicyAmendment', description='Optional proposed execpolicy amendment to allow similar commands without prompting.', ) proposed_network_policy_amendments: list[NetworkPolicyAmendment] | None = Field( default=None, alias='proposedNetworkPolicyAmendments', description='Optional proposed network policy amendments (allow/deny host) for future requests.', ) reason: str | None = Field( default=None, description='Optional explanatory reason (e.g. request for network access).', ) class McpElicitationEnumSchema( RootModel[ McpElicitationSingleSelectEnumSchema | McpElicitationMultiSelectEnumSchema | McpElicitationLegacyTitledEnumSchema ] ): root: ( McpElicitationSingleSelectEnumSchema | McpElicitationMultiSelectEnumSchema | McpElicitationLegacyTitledEnumSchema ) class McpElicitationPrimitiveSchema( RootModel[ McpElicitationEnumSchema | McpElicitationStringSchema | McpElicitationNumberSchema | McpElicitationBooleanSchema ] ): root: ( McpElicitationEnumSchema | McpElicitationStringSchema | McpElicitationNumberSchema | McpElicitationBooleanSchema ) class McpElicitationSchema(BaseModel): model_config = ConfigDict( extra='forbid', ) field_schema: str | None = Field(default=None, alias='$schema') properties: dict[str, McpElicitationPrimitiveSchema] required: list[str] | None = None type: McpElicitationObjectType class McpServerElicitationRequestParams1(BaseModel): server_name: str = Field(..., alias='serverName') thread_id: str = Field(..., alias='threadId') turn_id: str | None = Field( default=None, alias='turnId', description='Active Codex turn when this elicitation was observed, if app-server could correlate one.\n\nThis is nullable because MCP models elicitation as a standalone server-to-client request identified by the MCP server request id. It may be triggered during a turn, but turn context is app-server correlation rather than part of the protocol identity of the elicitation itself.', ) field_meta: Any | None = Field(None, alias='_meta') message: str mode: Literal['form'] requested_schema: McpElicitationSchema = Field(..., alias='requestedSchema') class McpServerElicitationRequestParams( RootModel[McpServerElicitationRequestParams1 | McpServerElicitationRequestParams2] ): root: McpServerElicitationRequestParams1 | McpServerElicitationRequestParams2 = ( Field(..., title='McpServerElicitationRequestParams') ) class ItemCommandExecutionRequestApprovalServerRequest(BaseModel): id: RequestId method: ItemCommandExecutionRequestApprovalServerRequestMethod = Field( ..., title='Item/commandExecution/requestApprovalServerRequestMethod' ) params: CommandExecutionRequestApprovalParams class McpServerElicitationRequestServerRequest(BaseModel): id: RequestId method: McpServerElicitationRequestServerRequestMethod = Field( ..., title='McpServer/elicitation/requestServerRequestMethod' ) params: McpServerElicitationRequestParams class ServerRequest( RootModel[ ItemCommandExecutionRequestApprovalServerRequest | ItemFileChangeRequestApprovalServerRequest | ItemToolRequestUserInputServerRequest | McpServerElicitationRequestServerRequest | ItemPermissionsRequestApprovalServerRequest | ItemToolCallServerRequest | AccountChatgptAuthTokensRefreshServerRequest | ApplyPatchApprovalServerRequest | ExecCommandApprovalServerRequest ] ): root: ( ItemCommandExecutionRequestApprovalServerRequest | ItemFileChangeRequestApprovalServerRequest | ItemToolRequestUserInputServerRequest | McpServerElicitationRequestServerRequest | ItemPermissionsRequestApprovalServerRequest | ItemToolCallServerRequest | AccountChatgptAuthTokensRefreshServerRequest | ApplyPatchApprovalServerRequest | ExecCommandApprovalServerRequest ) = Field( ..., description='Request initiated from the server and sent to the client.', title='ServerRequest', ) class CommandExecOutputDeltaServerNotification(BaseModel): method: CommandExecOutputDeltaServerNotificationMethod = Field( ..., title='Command/exec/outputDeltaServerNotificationMethod' ) params: CommandExecOutputDeltaNotification class AccountUpdatedServerNotification(BaseModel): method: AccountUpdatedServerNotificationMethod = Field( ..., title='Account/updatedServerNotificationMethod' ) params: AccountUpdatedNotification class AccountRateLimitsUpdatedServerNotification(BaseModel): method: AccountRateLimitsUpdatedServerNotificationMethod = Field( ..., title='Account/rateLimits/updatedServerNotificationMethod' ) params: AccountRateLimitsUpdatedNotification class ModelReroutedServerNotification(BaseModel): method: ModelReroutedServerNotificationMethod = Field( ..., title='Model/reroutedServerNotificationMethod' ) params: ModelReroutedNotification class ThreadRealtimeOutputAudioDeltaServerNotification(BaseModel): method: ThreadRealtimeOutputAudioDeltaServerNotificationMethod = Field( ..., title='Thread/realtime/outputAudio/deltaServerNotificationMethod' ) params: ThreadRealtimeOutputAudioDeltaNotification class TokenCountEventMsg(BaseModel): info: TokenUsageInfo | None = None rate_limits: RateLimitSnapshot | None = None type: TokenCountEventMsgType = Field(..., title='TokenCountEventMsgType') class UserMessageEventMsg(BaseModel): images: list[str] | None = Field( default=None, description='Image URLs sourced from `UserInput::Image`. These are safe to replay in legacy UI history events and correspond to images sent to the model.', ) local_images: list[str] | None = Field( default=[], description='Local file paths sourced from `UserInput::LocalImage`. These are kept so the UI can reattach images when editing history, and should not be sent to the model or treated as API-ready URLs.', ) message: str text_elements: list[TextElement] | None = Field( default_factory=list, description='UI-defined spans within `message` used to render or persist special elements.', ) type: UserMessageEventMsgType = Field(..., title='UserMessageEventMsgType') class PermissionsRequestApprovalResponse(BaseModel): permissions: GrantedPermissionProfile class CommandExecutionRequestApprovalResponse(BaseModel): decision: CommandExecutionApprovalDecision class ThreadStatusChangedNotification(BaseModel): status: ThreadStatus thread_id: str = Field(..., alias='threadId') class FileChangeThreadItem(BaseModel): changes: list[FileUpdateChange] id: str status: PatchApplyStatus type: FileChangeThreadItemType = Field(..., title='FileChangeThreadItemType') class CollabAgentToolCallThreadItem(BaseModel): agents_states: dict[str, CollabAgentState] = Field( ..., alias='agentsStates', description='Last known status of the target agents, when available.', ) id: str = Field(..., description='Unique identifier for this collab tool call.') prompt: str | None = Field( default=None, description='Prompt text sent as part of the collab tool call, when available.', ) receiver_thread_ids: list[str] = Field( ..., alias='receiverThreadIds', description='Thread ID of the receiving agent, when applicable. In case of spawn operation, this corresponds to the newly spawned agent.', ) sender_thread_id: str = Field( ..., alias='senderThreadId', description='Thread ID of the agent issuing the collab request.', ) status: CollabAgentToolCallStatus = Field( ..., description='Current status of the collab tool call.' ) tool: CollabAgentTool = Field( ..., description='Name of the collab tool that was invoked.' ) type: CollabAgentToolCallThreadItemType = Field( ..., title='CollabAgentToolCallThreadItemType' ) class TextUserInput(BaseModel): text: str text_elements: list[TextElement] | None = Field( default_factory=list, description='UI-defined spans within `text` used to render or persist special elements.', ) type: TextUserInputType = Field(..., title='TextUserInputType') class UserInput( RootModel[ TextUserInput | ImageUserInput | LocalImageUserInput | SkillUserInput | MentionUserInput ] ): root: ( TextUserInput | ImageUserInput | LocalImageUserInput | SkillUserInput | MentionUserInput ) class SubAgentSessionSource(BaseModel): model_config = ConfigDict( extra='forbid', ) sub_agent: SubAgentSource = Field(..., alias='subAgent') class SessionSource(RootModel[SessionSource1 | SubAgentSessionSource]): root: SessionSource1 | SubAgentSessionSource class ExternalAgentConfigImportParams(BaseModel): migration_items: list[ExternalAgentConfigMigrationItem] = Field( ..., alias='migrationItems' ) class ThreadTokenUsageUpdatedNotification(BaseModel): thread_id: str = Field(..., alias='threadId') token_usage: ThreadTokenUsage = Field(..., alias='tokenUsage') turn_id: str = Field(..., alias='turnId') class ConfigBatchWriteParams(BaseModel): edits: list[ConfigEdit] expected_version: str | None = Field(default=None, alias='expectedVersion') file_path: str | None = Field( default=None, alias='filePath', description="Path to the config file to write; defaults to the user's `config.toml` when omitted.", ) reload_user_config: bool | None = Field( default=None, alias='reloadUserConfig', description='When true, hot-reload the updated user config into all loaded threads after writing.', ) class TurnStartParams(BaseModel): approval_policy: AskForApproval | None = Field( default=None, alias='approvalPolicy', description='Override the approval policy for this turn and subsequent turns.', ) thread_id: str = Field(..., alias='threadId') cwd: str | None = Field( default=None, description='Override the working directory for this turn and subsequent turns.', ) effort: ReasoningEffort | None = Field( default=None, description='Override the reasoning effort for this turn and subsequent turns.', ) input: list[UserInput] model: str | None = Field( default=None, description='Override the model for this turn and subsequent turns.', ) output_schema: Any | None = Field( default=None, alias='outputSchema', description='Optional JSON Schema used to constrain the final assistant message for this turn.', ) personality: Personality | None = Field( default=None, description='Override the personality for this turn and subsequent turns.', ) sandbox_policy: SandboxPolicy | None = Field( default=None, alias='sandboxPolicy', description='Override the sandbox policy for this turn and subsequent turns.', ) service_tier: ServiceTier | None = Field( default=None, alias='serviceTier', description='Override the service tier for this turn and subsequent turns.', ) summary: ReasoningSummary | None = Field( default=None, description='Override the reasoning summary for this turn and subsequent turns.', ) class FunctionCallOutputBody(RootModel[str | list[FunctionCallOutputContentItem]]): root: str | list[FunctionCallOutputContentItem] class SkillMetadata(BaseModel): dependencies: SkillDependencies | None = None description: str enabled: bool interface: SkillInterface | None = None name: str path: str scope: SkillScope short_description: str | None = Field( default=None, alias='shortDescription', description='Legacy short_description from SKILL.md. Prefer SKILL.json interface.short_description.', ) class AppInfo(BaseModel): app_metadata: AppMetadata | None = Field(default=None, alias='appMetadata') branding: AppBranding | None = None description: str | None = None distribution_channel: str | None = Field(default=None, alias='distributionChannel') id: str install_url: str | None = Field(default=None, alias='installUrl') is_accessible: bool | None = Field(default=False, alias='isAccessible') is_enabled: bool | None = Field( default=True, alias='isEnabled', description='Whether this app is enabled in config.toml. Example: ```toml [apps.bad_app] enabled = false ```', ) labels: dict[str, Any] | None = None logo_url: str | None = Field(default=None, alias='logoUrl') logo_url_dark: str | None = Field(default=None, alias='logoUrlDark') name: str plugin_display_names: list[str] | None = Field( default=[], alias='pluginDisplayNames' ) class TurnPlanUpdatedNotification(BaseModel): explanation: str | None = None plan: list[TurnPlanStep] thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class TurnSteerParams(BaseModel): expected_turn_id: str = Field( ..., alias='expectedTurnId', description='Required active turn id precondition. The request fails when it does not match the currently active turn.', ) input: list[UserInput] thread_id: str = Field(..., alias='threadId') class ConfigWarningNotification(BaseModel): details: str | None = Field( default=None, description='Optional extra guidance or error details.' ) path: str | None = Field( default=None, description='Optional path to the config file that triggered the warning.', ) range: TextRange | None = Field( default=None, description='Optional range for the error location inside the config file.', ) summary: str = Field(..., description='Concise summary of the warning.') class TurnStartClientRequest(BaseModel): id: RequestId method: TurnStartClientRequestMethod = Field( ..., title='Turn/startClientRequestMethod' ) params: TurnStartParams class TurnSteerClientRequest(BaseModel): id: RequestId method: TurnSteerClientRequestMethod = Field( ..., title='Turn/steerClientRequestMethod' ) params: TurnSteerParams class ExternalAgentConfigImportClientRequest(BaseModel): id: RequestId method: ExternalAgentConfigImportClientRequestMethod = Field( ..., title='ExternalAgentConfig/importClientRequestMethod' ) params: ExternalAgentConfigImportParams class ConfigBatchWriteClientRequest(BaseModel): id: RequestId method: ConfigBatchWriteClientRequestMethod = Field( ..., title='Config/batchWriteClientRequestMethod' ) params: ConfigBatchWriteParams class ClientRequest( RootModel[ InitializeClientRequest | ThreadStartClientRequest | ThreadResumeClientRequest | ThreadForkClientRequest | ThreadArchiveClientRequest | ThreadUnsubscribeClientRequest | ThreadNameSetClientRequest | ThreadMetadataUpdateClientRequest | ThreadUnarchiveClientRequest | ThreadCompactStartClientRequest | ThreadRollbackClientRequest | ThreadListClientRequest | ThreadLoadedListClientRequest | ThreadReadClientRequest | SkillsListClientRequest | PluginListClientRequest | SkillsRemoteListClientRequest | SkillsRemoteExportClientRequest | AppListClientRequest | SkillsConfigWriteClientRequest | PluginInstallClientRequest | TurnStartClientRequest | TurnSteerClientRequest | TurnInterruptClientRequest | ReviewStartClientRequest | ModelListClientRequest | ExperimentalFeatureListClientRequest | McpServerOauthLoginClientRequest | ConfigMcpServerReloadClientRequest | McpServerStatusListClientRequest | WindowsSandboxSetupStartClientRequest | AccountLoginStartClientRequest | AccountLoginCancelClientRequest | AccountLogoutClientRequest | AccountRateLimitsReadClientRequest | FeedbackUploadClientRequest | CommandExecClientRequest | CommandExecWriteClientRequest | CommandExecTerminateClientRequest | CommandExecResizeClientRequest | ConfigReadClientRequest | ExternalAgentConfigDetectClientRequest | ExternalAgentConfigImportClientRequest | ConfigValueWriteClientRequest | ConfigBatchWriteClientRequest | ConfigRequirementsReadClientRequest | AccountReadClientRequest | FuzzyFileSearchClientRequest ] ): root: ( InitializeClientRequest | ThreadStartClientRequest | ThreadResumeClientRequest | ThreadForkClientRequest | ThreadArchiveClientRequest | ThreadUnsubscribeClientRequest | ThreadNameSetClientRequest | ThreadMetadataUpdateClientRequest | ThreadUnarchiveClientRequest | ThreadCompactStartClientRequest | ThreadRollbackClientRequest | ThreadListClientRequest | ThreadLoadedListClientRequest | ThreadReadClientRequest | SkillsListClientRequest | PluginListClientRequest | SkillsRemoteListClientRequest | SkillsRemoteExportClientRequest | AppListClientRequest | SkillsConfigWriteClientRequest | PluginInstallClientRequest | TurnStartClientRequest | TurnSteerClientRequest | TurnInterruptClientRequest | ReviewStartClientRequest | ModelListClientRequest | ExperimentalFeatureListClientRequest | McpServerOauthLoginClientRequest | ConfigMcpServerReloadClientRequest | McpServerStatusListClientRequest | WindowsSandboxSetupStartClientRequest | AccountLoginStartClientRequest | AccountLoginCancelClientRequest | AccountLogoutClientRequest | AccountRateLimitsReadClientRequest | FeedbackUploadClientRequest | CommandExecClientRequest | CommandExecWriteClientRequest | CommandExecTerminateClientRequest | CommandExecResizeClientRequest | ConfigReadClientRequest | ExternalAgentConfigDetectClientRequest | ExternalAgentConfigImportClientRequest | ConfigValueWriteClientRequest | ConfigBatchWriteClientRequest | ConfigRequirementsReadClientRequest | AccountReadClientRequest | FuzzyFileSearchClientRequest ) = Field( ..., description='Request from the client to the server.', title='ClientRequest' ) class ThreadStatusChangedServerNotification(BaseModel): method: ThreadStatusChangedServerNotificationMethod = Field( ..., title='Thread/status/changedServerNotificationMethod' ) params: ThreadStatusChangedNotification class ThreadTokenUsageUpdatedServerNotification(BaseModel): method: ThreadTokenUsageUpdatedServerNotificationMethod = Field( ..., title='Thread/tokenUsage/updatedServerNotificationMethod' ) params: ThreadTokenUsageUpdatedNotification class TurnPlanUpdatedServerNotification(BaseModel): method: TurnPlanUpdatedServerNotificationMethod = Field( ..., title='Turn/plan/updatedServerNotificationMethod' ) params: TurnPlanUpdatedNotification class ConfigWarningServerNotification(BaseModel): method: ConfigWarningServerNotificationMethod = Field( ..., title='ConfigWarningServerNotificationMethod' ) params: ConfigWarningNotification class UserMessageTurnItem(BaseModel): content: list[UserInput] id: str type: UserMessageTurnItemType = Field(..., title='UserMessageTurnItemType') class TurnItem( RootModel[ UserMessageTurnItem | AgentMessageTurnItem | PlanTurnItem | ReasoningTurnItem | WebSearchTurnItem | ImageGenerationTurnItem | ContextCompactionTurnItem ] ): root: ( UserMessageTurnItem | AgentMessageTurnItem | PlanTurnItem | ReasoningTurnItem | WebSearchTurnItem | ImageGenerationTurnItem | ContextCompactionTurnItem ) class ItemStartedEventMsg(BaseModel): item: TurnItem thread_id: ThreadId turn_id: str type: ItemStartedEventMsgType = Field(..., title='ItemStartedEventMsgType') class ItemCompletedEventMsg(BaseModel): item: TurnItem thread_id: ThreadId turn_id: str type: ItemCompletedEventMsgType = Field(..., title='ItemCompletedEventMsgType') class UserMessageThreadItem(BaseModel): content: list[UserInput] id: str type: UserMessageThreadItemType = Field(..., title='UserMessageThreadItemType') class ThreadItem( RootModel[ UserMessageThreadItem | AgentMessageThreadItem | PlanThreadItem | ReasoningThreadItem | CommandExecutionThreadItem | FileChangeThreadItem | McpToolCallThreadItem | DynamicToolCallThreadItem | CollabAgentToolCallThreadItem | WebSearchThreadItem | ImageViewThreadItem | ImageGenerationThreadItem | EnteredReviewModeThreadItem | ExitedReviewModeThreadItem | ContextCompactionThreadItem ] ): root: ( UserMessageThreadItem | AgentMessageThreadItem | PlanThreadItem | ReasoningThreadItem | CommandExecutionThreadItem | FileChangeThreadItem | McpToolCallThreadItem | DynamicToolCallThreadItem | CollabAgentToolCallThreadItem | WebSearchThreadItem | ImageViewThreadItem | ImageGenerationThreadItem | EnteredReviewModeThreadItem | ExitedReviewModeThreadItem | ContextCompactionThreadItem ) class Turn(BaseModel): error: TurnError | None = Field( default=None, description="Only populated when the Turn's status is failed." ) id: str items: list[ThreadItem] = Field( ..., description='Only populated on a `thread/resume` or `thread/fork` response. For all other responses and notifications returning a Turn, the items field will be an empty list.', ) status: TurnStatus class FunctionCallOutputPayload(BaseModel): body: FunctionCallOutputBody success: bool | None = None class SkillsListEntry(BaseModel): cwd: str errors: list[SkillErrorInfo] skills: list[SkillMetadata] class AppListUpdatedNotification(BaseModel): data: list[AppInfo] class TurnCompletedNotification(BaseModel): thread_id: str = Field(..., alias='threadId') turn: Turn class ItemCompletedNotification(BaseModel): item: ThreadItem thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class TurnStartedNotification(BaseModel): thread_id: str = Field(..., alias='threadId') turn: Turn class TurnStartedServerNotification(BaseModel): method: TurnStartedServerNotificationMethod = Field( ..., title='Turn/startedServerNotificationMethod' ) params: TurnStartedNotification class TurnCompletedServerNotification(BaseModel): method: TurnCompletedServerNotificationMethod = Field( ..., title='Turn/completedServerNotificationMethod' ) params: TurnCompletedNotification class ItemCompletedServerNotification(BaseModel): method: ItemCompletedServerNotificationMethod = Field( ..., title='Item/completedServerNotificationMethod' ) params: ItemCompletedNotification class AppListUpdatedServerNotification(BaseModel): method: AppListUpdatedServerNotificationMethod = Field( ..., title='App/list/updatedServerNotificationMethod' ) params: AppListUpdatedNotification class ListSkillsResponseEventMsg(BaseModel): skills: list[SkillsListEntry] type: ListSkillsResponseEventMsgType = Field( ..., title='ListSkillsResponseEventMsgType' ) class ItemStartedNotification(BaseModel): item: ThreadItem thread_id: str = Field(..., alias='threadId') turn_id: str = Field(..., alias='turnId') class Thread(BaseModel): agent_nickname: str | None = Field( default=None, alias='agentNickname', description='Optional random unique nickname assigned to an AgentControl-spawned sub-agent.', ) agent_role: str | None = Field( default=None, alias='agentRole', description='Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.', ) cli_version: str = Field( ..., alias='cliVersion', description='Version of the CLI that created the thread.', ) created_at: int = Field( ..., alias='createdAt', description='Unix timestamp (in seconds) when the thread was created.', ) cwd: str = Field(..., description='Working directory captured for the thread.') ephemeral: bool = Field( ..., description='Whether the thread is ephemeral and should not be materialized on disk.', ) git_info: GitInfo | None = Field( default=None, alias='gitInfo', description='Optional Git metadata captured when the thread was created.', ) id: str model_provider: str = Field( ..., alias='modelProvider', description="Model provider used for this thread (for example, 'openai').", ) name: str | None = Field( default=None, description='Optional user-facing thread title.' ) path: str | None = Field( default=None, description='[UNSTABLE] Path to the thread on disk.' ) preview: str = Field( ..., description='Usually the first user message in the thread, if available.' ) source: SessionSource = Field( ..., description='Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.).', ) status: ThreadStatus = Field( ..., description='Current runtime status for the thread.' ) turns: list[Turn] = Field( ..., 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.', ) updated_at: int = Field( ..., alias='updatedAt', description='Unix timestamp (in seconds) when the thread was last updated.', ) class FunctionCallOutputResponseItem(BaseModel): call_id: str output: FunctionCallOutputPayload type: FunctionCallOutputResponseItemType = Field( ..., title='FunctionCallOutputResponseItemType' ) class CustomToolCallOutputResponseItem(BaseModel): call_id: str output: FunctionCallOutputPayload type: CustomToolCallOutputResponseItemType = Field( ..., title='CustomToolCallOutputResponseItemType' ) class ResponseItem( RootModel[ MessageResponseItem | ReasoningResponseItem | LocalShellCallResponseItem | FunctionCallResponseItem | FunctionCallOutputResponseItem | CustomToolCallResponseItem | CustomToolCallOutputResponseItem | WebSearchCallResponseItem | ImageGenerationCallResponseItem | GhostSnapshotResponseItem | CompactionResponseItem | OtherResponseItem ] ): root: ( MessageResponseItem | ReasoningResponseItem | LocalShellCallResponseItem | FunctionCallResponseItem | FunctionCallOutputResponseItem | CustomToolCallResponseItem | CustomToolCallOutputResponseItem | WebSearchCallResponseItem | ImageGenerationCallResponseItem | GhostSnapshotResponseItem | CompactionResponseItem | OtherResponseItem ) class ItemStartedServerNotification(BaseModel): method: ItemStartedServerNotificationMethod = Field( ..., title='Item/startedServerNotificationMethod' ) params: ItemStartedNotification class RawResponseItemEventMsg(BaseModel): item: ResponseItem type: RawResponseItemEventMsgType = Field(..., title='RawResponseItemEventMsgType') class ThreadStartedNotification(BaseModel): thread: Thread class ThreadStartedServerNotification(BaseModel): method: ThreadStartedServerNotificationMethod = Field( ..., title='Thread/startedServerNotificationMethod' ) params: ThreadStartedNotification class ServerNotification( RootModel[ ErrorServerNotification | ThreadStartedServerNotification | ThreadStatusChangedServerNotification | ThreadArchivedServerNotification | ThreadUnarchivedServerNotification | ThreadClosedServerNotification | SkillsChangedServerNotification | ThreadNameUpdatedServerNotification | ThreadTokenUsageUpdatedServerNotification | TurnStartedServerNotification | TurnCompletedServerNotification | TurnDiffUpdatedServerNotification | TurnPlanUpdatedServerNotification | ItemStartedServerNotification | ItemCompletedServerNotification | ItemAgentMessageDeltaServerNotification | ItemPlanDeltaServerNotification | CommandExecOutputDeltaServerNotification | ItemCommandExecutionOutputDeltaServerNotification | ItemCommandExecutionTerminalInteractionServerNotification | ItemFileChangeOutputDeltaServerNotification | ServerRequestResolvedServerNotification | ItemMcpToolCallProgressServerNotification | McpServerOauthLoginCompletedServerNotification | AccountUpdatedServerNotification | AccountRateLimitsUpdatedServerNotification | AppListUpdatedServerNotification | ItemReasoningSummaryTextDeltaServerNotification | ItemReasoningSummaryPartAddedServerNotification | ItemReasoningTextDeltaServerNotification | ThreadCompactedServerNotification | ModelReroutedServerNotification | DeprecationNoticeServerNotification | ConfigWarningServerNotification | FuzzyFileSearchSessionUpdatedServerNotification | FuzzyFileSearchSessionCompletedServerNotification | ThreadRealtimeStartedServerNotification | ThreadRealtimeItemAddedServerNotification | ThreadRealtimeOutputAudioDeltaServerNotification | ThreadRealtimeErrorServerNotification | ThreadRealtimeClosedServerNotification | WindowsWorldWritableWarningServerNotification | WindowsSandboxSetupCompletedServerNotification | AccountLoginCompletedServerNotification ] ): root: ( ErrorServerNotification | ThreadStartedServerNotification | ThreadStatusChangedServerNotification | ThreadArchivedServerNotification | ThreadUnarchivedServerNotification | ThreadClosedServerNotification | SkillsChangedServerNotification | ThreadNameUpdatedServerNotification | ThreadTokenUsageUpdatedServerNotification | TurnStartedServerNotification | TurnCompletedServerNotification | TurnDiffUpdatedServerNotification | TurnPlanUpdatedServerNotification | ItemStartedServerNotification | ItemCompletedServerNotification | ItemAgentMessageDeltaServerNotification | ItemPlanDeltaServerNotification | CommandExecOutputDeltaServerNotification | ItemCommandExecutionOutputDeltaServerNotification | ItemCommandExecutionTerminalInteractionServerNotification | ItemFileChangeOutputDeltaServerNotification | ServerRequestResolvedServerNotification | ItemMcpToolCallProgressServerNotification | McpServerOauthLoginCompletedServerNotification | AccountUpdatedServerNotification | AccountRateLimitsUpdatedServerNotification | AppListUpdatedServerNotification | ItemReasoningSummaryTextDeltaServerNotification | ItemReasoningSummaryPartAddedServerNotification | ItemReasoningTextDeltaServerNotification | ThreadCompactedServerNotification | ModelReroutedServerNotification | DeprecationNoticeServerNotification | ConfigWarningServerNotification | FuzzyFileSearchSessionUpdatedServerNotification | FuzzyFileSearchSessionCompletedServerNotification | ThreadRealtimeStartedServerNotification | ThreadRealtimeItemAddedServerNotification | ThreadRealtimeOutputAudioDeltaServerNotification | ThreadRealtimeErrorServerNotification | ThreadRealtimeClosedServerNotification | WindowsWorldWritableWarningServerNotification | WindowsSandboxSetupCompletedServerNotification | AccountLoginCompletedServerNotification ) = Field( ..., description='Notification sent from the server to the client.', title='ServerNotification', ) class SessionConfiguredEventMsg(BaseModel): approval_policy: AskForApproval = Field( ..., description='When to escalate for approval for execution' ) cwd: str = Field( ..., description='Working directory that should be treated as the *root* of the session.', ) forked_from_id: ThreadId | None = None history_entry_count: int = Field( ..., description='Current number of entries in the history log.', ge=0 ) history_log_id: int = Field( ..., description='Identifier of the history log file (inode on Unix, 0 otherwise).', ge=0, ) initial_messages: list[EventMsg] | None = Field( default=None, description='Optional initial messages (as events) for resumed sessions. When present, UIs can use these to seed the history.', ) model: str = Field(..., description='Tell the client what model is being queried.') model_provider_id: str network_proxy: SessionNetworkProxyRuntime | None = Field( default=None, description='Runtime proxy bind addresses, when the managed proxy was started for this session.', ) reasoning_effort: ReasoningEffort | None = Field( default=None, description="The effort the model is putting into reasoning about the user's request.", ) rollout_path: str | None = Field( default=None, description='Path in which the rollout is stored. Can be `None` for ephemeral threads', ) sandbox_policy: SandboxPolicy = Field( ..., description='How to sandbox commands executed in the system' ) service_tier: ServiceTier | None = None session_id: ThreadId thread_name: str | None = Field( default=None, description='Optional user-facing thread name (may be unset).' ) type: SessionConfiguredEventMsgType = Field( ..., title='SessionConfiguredEventMsgType' ) class EventMsg( RootModel[ ErrorEventMsg | WarningEventMsg | RealtimeConversationStartedEventMsg | RealtimeConversationRealtimeEventMsg | RealtimeConversationClosedEventMsg | ModelRerouteEventMsg | ContextCompactedEventMsg | ThreadRolledBackEventMsg | TaskStartedEventMsg | TaskCompleteEventMsg | TokenCountEventMsg | AgentMessageEventMsg | UserMessageEventMsg | AgentMessageDeltaEventMsg | AgentReasoningEventMsg | AgentReasoningDeltaEventMsg | AgentReasoningRawContentEventMsg | AgentReasoningRawContentDeltaEventMsg | AgentReasoningSectionBreakEventMsg | SessionConfiguredEventMsg | ThreadNameUpdatedEventMsg | McpStartupUpdateEventMsg | McpStartupCompleteEventMsg | McpToolCallBeginEventMsg | McpToolCallEndEventMsg | WebSearchBeginEventMsg | WebSearchEndEventMsg | ImageGenerationBeginEventMsg | ImageGenerationEndEventMsg | ExecCommandBeginEventMsg | ExecCommandOutputDeltaEventMsg | TerminalInteractionEventMsg | ExecCommandEndEventMsg | ViewImageToolCallEventMsg | ExecApprovalRequestEventMsg | RequestPermissionsEventMsg | RequestUserInputEventMsg | DynamicToolCallRequestEventMsg | DynamicToolCallResponseEventMsg | ElicitationRequestEventMsg | ApplyPatchApprovalRequestEventMsg | DeprecationNoticeEventMsg | BackgroundEventEventMsg | UndoStartedEventMsg | UndoCompletedEventMsg | StreamErrorEventMsg | PatchApplyBeginEventMsg | PatchApplyEndEventMsg | TurnDiffEventMsg | GetHistoryEntryResponseEventMsg | McpListToolsResponseEventMsg | ListCustomPromptsResponseEventMsg | ListSkillsResponseEventMsg | ListRemoteSkillsResponseEventMsg | RemoteSkillDownloadedEventMsg | SkillsUpdateAvailableEventMsg | PlanUpdateEventMsg | TurnAbortedEventMsg | ShutdownCompleteEventMsg | EnteredReviewModeEventMsg | ExitedReviewModeEventMsg | RawResponseItemEventMsg | ItemStartedEventMsg | ItemCompletedEventMsg | AgentMessageContentDeltaEventMsg | PlanDeltaEventMsg | ReasoningContentDeltaEventMsg | ReasoningRawContentDeltaEventMsg | CollabAgentSpawnBeginEventMsg | CollabAgentSpawnEndEventMsg | CollabAgentInteractionBeginEventMsg | CollabAgentInteractionEndEventMsg | CollabWaitingBeginEventMsg | CollabWaitingEndEventMsg | CollabCloseBeginEventMsg | CollabCloseEndEventMsg | CollabResumeBeginEventMsg | CollabResumeEndEventMsg ] ): root: ( ErrorEventMsg | WarningEventMsg | RealtimeConversationStartedEventMsg | RealtimeConversationRealtimeEventMsg | RealtimeConversationClosedEventMsg | ModelRerouteEventMsg | ContextCompactedEventMsg | ThreadRolledBackEventMsg | TaskStartedEventMsg | TaskCompleteEventMsg | TokenCountEventMsg | AgentMessageEventMsg | UserMessageEventMsg | AgentMessageDeltaEventMsg | AgentReasoningEventMsg | AgentReasoningDeltaEventMsg | AgentReasoningRawContentEventMsg | AgentReasoningRawContentDeltaEventMsg | AgentReasoningSectionBreakEventMsg | SessionConfiguredEventMsg | ThreadNameUpdatedEventMsg | McpStartupUpdateEventMsg | McpStartupCompleteEventMsg | McpToolCallBeginEventMsg | McpToolCallEndEventMsg | WebSearchBeginEventMsg | WebSearchEndEventMsg | ImageGenerationBeginEventMsg | ImageGenerationEndEventMsg | ExecCommandBeginEventMsg | ExecCommandOutputDeltaEventMsg | TerminalInteractionEventMsg | ExecCommandEndEventMsg | ViewImageToolCallEventMsg | ExecApprovalRequestEventMsg | RequestPermissionsEventMsg | RequestUserInputEventMsg | DynamicToolCallRequestEventMsg | DynamicToolCallResponseEventMsg | ElicitationRequestEventMsg | ApplyPatchApprovalRequestEventMsg | DeprecationNoticeEventMsg | BackgroundEventEventMsg | UndoStartedEventMsg | UndoCompletedEventMsg | StreamErrorEventMsg | PatchApplyBeginEventMsg | PatchApplyEndEventMsg | TurnDiffEventMsg | GetHistoryEntryResponseEventMsg | McpListToolsResponseEventMsg | ListCustomPromptsResponseEventMsg | ListSkillsResponseEventMsg | ListRemoteSkillsResponseEventMsg | RemoteSkillDownloadedEventMsg | SkillsUpdateAvailableEventMsg | PlanUpdateEventMsg | TurnAbortedEventMsg | ShutdownCompleteEventMsg | EnteredReviewModeEventMsg | ExitedReviewModeEventMsg | RawResponseItemEventMsg | ItemStartedEventMsg | ItemCompletedEventMsg | AgentMessageContentDeltaEventMsg | PlanDeltaEventMsg | ReasoningContentDeltaEventMsg | ReasoningRawContentDeltaEventMsg | CollabAgentSpawnBeginEventMsg | CollabAgentSpawnEndEventMsg | CollabAgentInteractionBeginEventMsg | CollabAgentInteractionEndEventMsg | CollabWaitingBeginEventMsg | CollabWaitingEndEventMsg | CollabCloseBeginEventMsg | CollabCloseEndEventMsg | CollabResumeBeginEventMsg | CollabResumeEndEventMsg ) = Field( ..., description='Response event from the agent NOTE: Make sure none of these values have optional types, as it will mess up the extension code-gen.', title='EventMsg', ) SessionConfiguredEventMsg.model_rebuild()