Files
codex/codex-rs/app-server-protocol/schema/python/codex_app_server_protocol/models.py
2026-03-09 19:55:31 -07:00

7390 lines
229 KiB
Python

# 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()