# generated by datamodel-codegen: # filename: codex_app_server_protocol.v2.schemas.json from __future__ import annotations from pydantic import BaseModel, ConfigDict, Field, RootModel from typing import Annotated, Any, Literal from enum import Enum class CodexAppServerProtocolV2(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class AbsolutePathBuf(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ 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 ApiKeyAccount(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["apiKey"], Field(title="ApiKeyAccountType")] class AmazonBedrockAccount(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["amazonBedrock"], Field(title="AmazonBedrockAccountType")] class AccountLoginCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) error: str | None = None login_id: Annotated[str | None, Field(alias="loginId")] = None success: bool class AdditionalWritableRootActivePermissionProfileModification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: AbsolutePathBuf type: Annotated[ Literal["additionalWritableRoot"], Field(title="AdditionalWritableRootActivePermissionProfileModificationType"), ] class ActivePermissionProfileModification( RootModel[AdditionalWritableRootActivePermissionProfileModification] ): model_config = ConfigDict( populate_by_name=True, ) root: AdditionalWritableRootActivePermissionProfileModification class AddCreditsNudgeCreditType(Enum): credits = "credits" usage_limit = "usage_limit" class AddCreditsNudgeEmailStatus(Enum): sent = "sent" cooldown_active = "cooldown_active" class AdditionalNetworkPermissions(BaseModel): model_config = ConfigDict( populate_by_name=True, ) enabled: bool | None = None class AgentMessageDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) delta: str item_id: Annotated[str, Field(alias="itemId")] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class AgentPath(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: str class AnalyticsConfig(BaseModel): model_config = ConfigDict( extra="allow", populate_by_name=True, ) enabled: bool | None = None class AppBranding(BaseModel): model_config = ConfigDict( populate_by_name=True, ) category: str | None = None developer: str | None = None is_discoverable_app: Annotated[bool, Field(alias="isDiscoverableApp")] privacy_policy: Annotated[str | None, Field(alias="privacyPolicy")] = None terms_of_service: Annotated[str | None, Field(alias="termsOfService")] = None website: str | None = None class AppReview(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: str class AppScreenshot(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file_id: Annotated[str | None, Field(alias="fileId")] = None url: str | None = None user_prompt: Annotated[str, Field(alias="userPrompt")] class AppSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) description: str | None = None id: str install_url: Annotated[str | None, Field(alias="installUrl")] = None name: str needs_auth: Annotated[bool, Field(alias="needsAuth")] class AppToolApproval(Enum): auto = "auto" prompt = "prompt" approve = "approve" class AppToolConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approval_mode: AppToolApproval | None = None enabled: bool | None = None class AppToolsConfig(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ApprovalsReviewer(Enum): user = "user" auto_review = "auto_review" guardian_subagent = "guardian_subagent" class AppsDefaultConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) destructive_enabled: bool | None = True enabled: bool | None = True open_world_enabled: bool | None = True class AppsListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cursor: Annotated[ str | None, Field(description="Opaque pagination cursor returned by a previous call."), ] = None force_refetch: Annotated[ bool | None, Field( alias="forceRefetch", description="When true, bypass app caches and fetch the latest data from sources.", ), ] = None limit: Annotated[ int | None, Field( description="Optional page size; defaults to a reasonable server-side value.", ge=0, ), ] = None thread_id: Annotated[ str | None, Field( alias="threadId", description="Optional thread id used to evaluate app feature gating from that thread's config.", ), ] = None class AskForApprovalValue(Enum): untrusted = "untrusted" on_failure = "on-failure" on_request = "on-request" never = "never" class Granular(BaseModel): model_config = ConfigDict( populate_by_name=True, ) mcp_elicitations: bool request_permissions: bool | None = False rules: bool sandbox_approval: bool skill_approval: bool | None = False class GranularAskForApproval(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) granular: Granular class AskForApproval(RootModel[AskForApprovalValue | GranularAskForApproval]): model_config = ConfigDict( populate_by_name=True, ) root: AskForApprovalValue | GranularAskForApproval class AuthMode(Enum): apikey = "apikey" chatgpt = "chatgpt" chatgpt_auth_tokens = "chatgptAuthTokens" agent_identity = "agentIdentity" class AutoReviewDecisionSource(RootModel[Literal["agent"]]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ Literal["agent"], Field( description="[UNSTABLE] Source that produced a terminal approval auto-review decision." ), ] class ByteRange(BaseModel): model_config = ConfigDict( populate_by_name=True, ) end: Annotated[int, Field(ge=0)] start: Annotated[int, Field(ge=0)] class CancelLoginAccountParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) login_id: Annotated[str, Field(alias="loginId")] class CancelLoginAccountStatus(Enum): canceled = "canceled" not_found = "notFound" class ClientInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str title: str | None = None version: str class CodexErrorInfoValue(Enum): context_window_exceeded = "contextWindowExceeded" usage_limit_exceeded = "usageLimitExceeded" server_overloaded = "serverOverloaded" cyber_policy = "cyberPolicy" internal_server_error = "internalServerError" unauthorized = "unauthorized" bad_request = "badRequest" thread_rollback_failed = "threadRollbackFailed" sandbox_error = "sandboxError" other = "other" class HttpConnectionFailed(BaseModel): model_config = ConfigDict( populate_by_name=True, ) http_status_code: Annotated[int | None, Field(alias="httpStatusCode", ge=0)] = None class HttpConnectionFailedCodexErrorInfo(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) http_connection_failed: Annotated[ HttpConnectionFailed, Field(alias="httpConnectionFailed") ] class ResponseStreamConnectionFailed(BaseModel): model_config = ConfigDict( populate_by_name=True, ) http_status_code: Annotated[int | None, Field(alias="httpStatusCode", ge=0)] = None class ResponseStreamConnectionFailedCodexErrorInfo(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) response_stream_connection_failed: Annotated[ ResponseStreamConnectionFailed, Field(alias="responseStreamConnectionFailed") ] class ResponseStreamDisconnected(BaseModel): model_config = ConfigDict( populate_by_name=True, ) http_status_code: Annotated[int | None, Field(alias="httpStatusCode", ge=0)] = None class ResponseStreamDisconnectedCodexErrorInfo(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) response_stream_disconnected: Annotated[ ResponseStreamDisconnected, Field(alias="responseStreamDisconnected") ] class ResponseTooManyFailedAttempts(BaseModel): model_config = ConfigDict( populate_by_name=True, ) http_status_code: Annotated[int | None, Field(alias="httpStatusCode", ge=0)] = None class ResponseTooManyFailedAttemptsCodexErrorInfo(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) response_too_many_failed_attempts: Annotated[ ResponseTooManyFailedAttempts, Field(alias="responseTooManyFailedAttempts") ] class CollabAgentStatus(Enum): pending_init = "pendingInit" running = "running" interrupted = "interrupted" completed = "completed" errored = "errored" shutdown = "shutdown" not_found = "notFound" class CollabAgentTool(Enum): spawn_agent = "spawnAgent" send_input = "sendInput" resume_agent = "resumeAgent" wait = "wait" close_agent = "closeAgent" class CollabAgentToolCallStatus(Enum): in_progress = "inProgress" completed = "completed" failed = "failed" class ReadCommandAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: str name: str path: AbsolutePathBuf type: Annotated[Literal["read"], Field(title="ReadCommandActionType")] class ListFilesCommandAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: str path: str | None = None type: Annotated[Literal["listFiles"], Field(title="ListFilesCommandActionType")] class SearchCommandAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: str path: str | None = None query: str | None = None type: Annotated[Literal["search"], Field(title="SearchCommandActionType")] class UnknownCommandAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: str type: Annotated[Literal["unknown"], Field(title="UnknownCommandActionType")] class CommandAction( RootModel[ ReadCommandAction | ListFilesCommandAction | SearchCommandAction | UnknownCommandAction ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( ReadCommandAction | ListFilesCommandAction | SearchCommandAction | UnknownCommandAction ) class CommandExecOutputStream(Enum): stdout = "stdout" stderr = "stderr" class CommandExecResizeResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class CommandExecResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) exit_code: Annotated[int, Field(alias="exitCode", description="Process exit code.")] stderr: Annotated[ str, Field( description="Buffered stderr capture.\n\nEmpty when stderr was streamed via `command/exec/outputDelta`." ), ] stdout: Annotated[ str, Field( description="Buffered stdout capture.\n\nEmpty when stdout was streamed via `command/exec/outputDelta`." ), ] class CommandExecTerminalSize(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cols: Annotated[int, Field(description="Terminal width in character cells.", ge=0)] rows: Annotated[int, Field(description="Terminal height in character cells.", ge=0)] class CommandExecTerminateParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) process_id: Annotated[ str, Field( alias="processId", description="Client-supplied, connection-scoped `processId` from the original `command/exec` request.", ), ] class CommandExecTerminateResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class CommandExecWriteParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) close_stdin: Annotated[ bool | None, Field( alias="closeStdin", description="Close stdin after writing `deltaBase64`, if present.", ), ] = None delta_base64: Annotated[ str | None, Field( alias="deltaBase64", description="Optional base64-encoded stdin bytes to write.", ), ] = None process_id: Annotated[ str, Field( alias="processId", description="Client-supplied, connection-scoped `processId` from the original `command/exec` request.", ), ] class CommandExecWriteResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class CommandExecutionOutputDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) delta: str item_id: Annotated[str, Field(alias="itemId")] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class CommandExecutionSource(Enum): agent = "agent" user_shell = "userShell" unified_exec_startup = "unifiedExecStartup" unified_exec_interaction = "unifiedExecInteraction" class CommandExecutionStatus(Enum): in_progress = "inProgress" completed = "completed" failed = "failed" declined = "declined" class CommandMigration(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str class MdmConfigLayerSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) domain: str key: str type: Annotated[Literal["mdm"], Field(title="MdmConfigLayerSourceType")] class SystemConfigLayerSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file: Annotated[ AbsolutePathBuf, Field( description="This is the path to the system config.toml file, though it is not guaranteed to exist." ), ] type: Annotated[Literal["system"], Field(title="SystemConfigLayerSourceType")] class UserConfigLayerSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file: Annotated[ AbsolutePathBuf, Field( description="This is the path to the user's config.toml file, though it is not guaranteed to exist." ), ] type: Annotated[Literal["user"], Field(title="UserConfigLayerSourceType")] class ProjectConfigLayerSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) dot_codex_folder: Annotated[AbsolutePathBuf, Field(alias="dotCodexFolder")] type: Annotated[Literal["project"], Field(title="ProjectConfigLayerSourceType")] class SessionFlagsConfigLayerSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["sessionFlags"], Field(title="SessionFlagsConfigLayerSourceType") ] class LegacyManagedConfigTomlFromFileConfigLayerSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file: AbsolutePathBuf type: Annotated[ Literal["legacyManagedConfigTomlFromFile"], Field(title="LegacyManagedConfigTomlFromFileConfigLayerSourceType"), ] class LegacyManagedConfigTomlFromMdmConfigLayerSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["legacyManagedConfigTomlFromMdm"], Field(title="LegacyManagedConfigTomlFromMdmConfigLayerSourceType"), ] class ConfigLayerSource( RootModel[ MdmConfigLayerSource | SystemConfigLayerSource | UserConfigLayerSource | ProjectConfigLayerSource | SessionFlagsConfigLayerSource | LegacyManagedConfigTomlFromFileConfigLayerSource | LegacyManagedConfigTomlFromMdmConfigLayerSource ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( MdmConfigLayerSource | SystemConfigLayerSource | UserConfigLayerSource | ProjectConfigLayerSource | SessionFlagsConfigLayerSource | LegacyManagedConfigTomlFromFileConfigLayerSource | LegacyManagedConfigTomlFromMdmConfigLayerSource ) class ConfigReadParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: Annotated[ str | None, Field( 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)." ), ] = None include_layers: Annotated[bool | None, Field(alias="includeLayers")] = False class CommandConfiguredHookHandler(BaseModel): model_config = ConfigDict( populate_by_name=True, ) async_: Annotated[bool, Field(alias="async")] command: str status_message: Annotated[str | None, Field(alias="statusMessage")] = None timeout_sec: Annotated[int | None, Field(alias="timeoutSec", ge=0)] = None type: Annotated[Literal["command"], Field(title="CommandConfiguredHookHandlerType")] class PromptConfiguredHookHandler(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["prompt"], Field(title="PromptConfiguredHookHandlerType")] class AgentConfiguredHookHandler(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["agent"], Field(title="AgentConfiguredHookHandlerType")] class ConfiguredHookHandler( RootModel[ CommandConfiguredHookHandler | PromptConfiguredHookHandler | AgentConfiguredHookHandler ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( CommandConfiguredHookHandler | PromptConfiguredHookHandler | AgentConfiguredHookHandler ) class ConfiguredHookMatcherGroup(BaseModel): model_config = ConfigDict( populate_by_name=True, ) hooks: list[ConfiguredHookHandler] matcher: str | None = None class InputTextContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Annotated[Literal["input_text"], Field(title="InputTextContentItemType")] class OutputTextContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Annotated[Literal["output_text"], Field(title="OutputTextContentItemType")] class ContextCompactedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class CreditsSnapshot(BaseModel): model_config = ConfigDict( populate_by_name=True, ) balance: str | None = None has_credits: Annotated[bool, Field(alias="hasCredits")] unlimited: bool class DeprecationNoticeNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) details: Annotated[ str | None, Field( description="Optional extra guidance, such as migration steps or rationale." ), ] = None summary: Annotated[str, Field(description="Concise summary of what is deprecated.")] class InputTextDynamicToolCallOutputContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Annotated[ Literal["inputText"], Field(title="InputTextDynamicToolCallOutputContentItemType"), ] class InputImageDynamicToolCallOutputContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) image_url: Annotated[str, Field(alias="imageUrl")] type: Annotated[ Literal["inputImage"], Field(title="InputImageDynamicToolCallOutputContentItemType"), ] class DynamicToolCallOutputContentItem( RootModel[ InputTextDynamicToolCallOutputContentItem | InputImageDynamicToolCallOutputContentItem ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( InputTextDynamicToolCallOutputContentItem | InputImageDynamicToolCallOutputContentItem ) class DynamicToolCallStatus(Enum): in_progress = "inProgress" completed = "completed" failed = "failed" class DynamicToolSpec(BaseModel): model_config = ConfigDict( populate_by_name=True, ) defer_loading: Annotated[bool | None, Field(alias="deferLoading")] = None description: str input_schema: Annotated[Any, Field(alias="inputSchema")] name: str namespace: str | None = None class ExperimentalFeatureEnablementSetParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) enablement: Annotated[ dict[str, bool], Field( description="Process-wide runtime feature enablement keyed by canonical feature name.\n\nOnly named features are updated. Omitted features are left unchanged. Send an empty map for a no-op." ), ] class ExperimentalFeatureEnablementSetResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) enablement: Annotated[ dict[str, bool], Field(description="Feature enablement entries updated by this request."), ] class ExperimentalFeatureListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cursor: Annotated[ str | None, Field(description="Opaque pagination cursor returned by a previous call."), ] = None limit: Annotated[ int | None, Field( description="Optional page size; defaults to a reasonable server-side value.", ge=0, ), ] = None class ExperimentalFeatureStage(Enum): beta = "beta" under_development = "underDevelopment" stable = "stable" deprecated = "deprecated" removed = "removed" class ExternalAgentConfigDetectParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwds: Annotated[ list[str] | None, Field( description="Zero or more working directories to include for repo-scoped detection." ), ] = None include_home: Annotated[ bool | None, Field( alias="includeHome", description="If true, include detection under the user's home (~/.claude, ~/.codex, etc.).", ), ] = None class ExternalAgentConfigImportCompletedNotification(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ExternalAgentConfigImportResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ExternalAgentConfigMigrationItemType(Enum): agents_md = "AGENTS_MD" config = "CONFIG" skills = "SKILLS" plugins = "PLUGINS" mcp_server_config = "MCP_SERVER_CONFIG" subagents = "SUBAGENTS" hooks = "HOOKS" commands = "COMMANDS" sessions = "SESSIONS" class FeedbackUploadParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) classification: str extra_log_files: Annotated[list[str] | None, Field(alias="extraLogFiles")] = None include_logs: Annotated[bool, Field(alias="includeLogs")] reason: str | None = None tags: dict[str, Any] | None = None thread_id: Annotated[str | None, Field(alias="threadId")] = None class FeedbackUploadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class FileChangeOutputDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) delta: str item_id: Annotated[str, Field(alias="itemId")] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class FileSystemAccessMode(Enum): read = "read" write = "write" none = "none" class PathFileSystemPath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: AbsolutePathBuf type: Annotated[Literal["path"], Field(title="PathFileSystemPathType")] class GlobPatternFileSystemPath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) pattern: str type: Annotated[ Literal["glob_pattern"], Field(title="GlobPatternFileSystemPathType") ] class RootFileSystemSpecialPath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind: Literal["root"] class MinimalFileSystemSpecialPath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind: Literal["minimal"] class KindFileSystemSpecialPath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind: Literal["project_roots"] subpath: str | None = None class TmpdirFileSystemSpecialPath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind: Literal["tmpdir"] class SlashTmpFileSystemSpecialPath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind: Literal["slash_tmp"] class FileSystemSpecialPath1(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind: Literal["unknown"] path: str subpath: str | None = None class FileSystemSpecialPath( RootModel[ RootFileSystemSpecialPath | MinimalFileSystemSpecialPath | KindFileSystemSpecialPath | TmpdirFileSystemSpecialPath | SlashTmpFileSystemSpecialPath | FileSystemSpecialPath1 ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( RootFileSystemSpecialPath | MinimalFileSystemSpecialPath | KindFileSystemSpecialPath | TmpdirFileSystemSpecialPath | SlashTmpFileSystemSpecialPath | FileSystemSpecialPath1 ) class ForcedLoginMethod(Enum): chatgpt = "chatgpt" api = "api" class FsChangedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) changed_paths: Annotated[ list[AbsolutePathBuf], Field( alias="changedPaths", description="File or directory paths associated with this event.", ), ] watch_id: Annotated[ str, Field( alias="watchId", description="Watch identifier previously provided to `fs/watch`.", ), ] class FsCopyParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) destination_path: Annotated[ AbsolutePathBuf, Field(alias="destinationPath", description="Absolute destination path."), ] recursive: Annotated[ bool | None, Field(description="Required for directory copies; ignored for file copies."), ] = None source_path: Annotated[ AbsolutePathBuf, Field(alias="sourcePath", description="Absolute source path.") ] class FsCopyResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class FsCreateDirectoryParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: Annotated[ AbsolutePathBuf, Field(description="Absolute directory path to create.") ] recursive: Annotated[ bool | None, Field( description="Whether parent directories should also be created. Defaults to `true`." ), ] = None class FsCreateDirectoryResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class FsGetMetadataParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: Annotated[AbsolutePathBuf, Field(description="Absolute path to inspect.")] class FsGetMetadataResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) created_at_ms: Annotated[ int, Field( alias="createdAtMs", description="File creation time in Unix milliseconds when available, otherwise `0`.", ), ] is_directory: Annotated[ bool, Field( alias="isDirectory", description="Whether the path resolves to a directory." ), ] is_file: Annotated[ bool, Field( alias="isFile", description="Whether the path resolves to a regular file." ), ] is_symlink: Annotated[ bool, Field( alias="isSymlink", description="Whether the path itself is a symbolic link." ), ] modified_at_ms: Annotated[ int, Field( alias="modifiedAtMs", description="File modification time in Unix milliseconds when available, otherwise `0`.", ), ] class FsReadDirectoryEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file_name: Annotated[ str, Field( alias="fileName", description="Direct child entry name only, not an absolute or relative path.", ), ] is_directory: Annotated[ bool, Field( alias="isDirectory", description="Whether this entry resolves to a directory.", ), ] is_file: Annotated[ bool, Field( alias="isFile", description="Whether this entry resolves to a regular file." ), ] class FsReadDirectoryParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: Annotated[ AbsolutePathBuf, Field(description="Absolute directory path to read.") ] class FsReadDirectoryResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) entries: Annotated[ list[FsReadDirectoryEntry], Field(description="Direct child entries in the requested directory."), ] class FsReadFileParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: Annotated[AbsolutePathBuf, Field(description="Absolute path to read.")] class FsReadFileResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data_base64: Annotated[ str, Field(alias="dataBase64", description="File contents encoded as base64.") ] class FsRemoveParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) force: Annotated[ bool | None, Field( description="Whether missing paths should be ignored. Defaults to `true`." ), ] = None path: Annotated[AbsolutePathBuf, Field(description="Absolute path to remove.")] recursive: Annotated[ bool | None, Field( description="Whether directory removal should recurse. Defaults to `true`." ), ] = None class FsRemoveResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class FsUnwatchParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) watch_id: Annotated[ str, Field( alias="watchId", description="Watch identifier previously provided to `fs/watch`.", ), ] class FsUnwatchResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class FsWatchParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: Annotated[ AbsolutePathBuf, Field(description="Absolute file or directory path to watch.") ] watch_id: Annotated[ str, Field( alias="watchId", description="Connection-scoped watch identifier used for `fs/unwatch` and `fs/changed`.", ), ] class FsWatchResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: Annotated[ AbsolutePathBuf, Field(description="Canonicalized path associated with the watch."), ] class FsWriteFileParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data_base64: Annotated[ str, Field(alias="dataBase64", description="File contents encoded as base64.") ] path: Annotated[AbsolutePathBuf, Field(description="Absolute path to write.")] class FsWriteFileResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class InputTextFunctionCallOutputContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Annotated[ Literal["input_text"], Field(title="InputTextFunctionCallOutputContentItemType") ] class FuzzyFileSearchMatchType(Enum): file = "file" directory = "directory" class FuzzyFileSearchParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cancellation_token: Annotated[str | None, Field(alias="cancellationToken")] = None query: str roots: list[str] class Indice(RootModel[int]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[int, Field(ge=0)] class FuzzyFileSearchResult(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file_name: str indices: list[Indice] | None = None match_type: FuzzyFileSearchMatchType path: str root: str score: Annotated[int, Field(ge=0)] class FuzzyFileSearchSessionCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) session_id: Annotated[str, Field(alias="sessionId")] class FuzzyFileSearchSessionUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) files: list[FuzzyFileSearchResult] query: str session_id: Annotated[str, Field(alias="sessionId")] class GetAccountParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) refresh_token: Annotated[ bool | None, Field( 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`.", ), ] = False class GitInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) branch: str | None = None origin_url: Annotated[str | None, Field(alias="originUrl")] = None sha: str | None = None class ApplyPatchGuardianApprovalReviewAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: AbsolutePathBuf files: list[AbsolutePathBuf] type: Annotated[ Literal["applyPatch"], Field(title="ApplyPatchGuardianApprovalReviewActionType") ] class McpToolCallGuardianApprovalReviewAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) connector_id: Annotated[str | None, Field(alias="connectorId")] = None connector_name: Annotated[str | None, Field(alias="connectorName")] = None server: str tool_name: Annotated[str, Field(alias="toolName")] tool_title: Annotated[str | None, Field(alias="toolTitle")] = None type: Annotated[ Literal["mcpToolCall"], Field(title="McpToolCallGuardianApprovalReviewActionType"), ] class GuardianApprovalReviewStatus(Enum): in_progress = "inProgress" approved = "approved" denied = "denied" timed_out = "timedOut" aborted = "aborted" class GuardianCommandSource(Enum): shell = "shell" unified_exec = "unifiedExec" class GuardianRiskLevel(Enum): low = "low" medium = "medium" high = "high" critical = "critical" class GuardianUserAuthorization(Enum): unknown = "unknown" low = "low" medium = "medium" high = "high" class GuardianWarningNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: Annotated[ str, Field(description="Concise guardian warning message for the user.") ] thread_id: Annotated[ str, Field(alias="threadId", description="Thread target for the guardian warning."), ] class HookErrorInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: str path: str class HookEventName(Enum): pre_tool_use = "preToolUse" permission_request = "permissionRequest" post_tool_use = "postToolUse" pre_compact = "preCompact" post_compact = "postCompact" session_start = "sessionStart" user_prompt_submit = "userPromptSubmit" stop = "stop" class HookExecutionMode(Enum): sync = "sync" async_ = "async" class HookHandlerType(Enum): command = "command" prompt = "prompt" agent = "agent" class HookMigration(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str class HookOutputEntryKind(Enum): warning = "warning" stop = "stop" feedback = "feedback" context = "context" error = "error" class HookPromptFragment(BaseModel): model_config = ConfigDict( populate_by_name=True, ) hook_run_id: Annotated[str, Field(alias="hookRunId")] text: str class HookRunStatus(Enum): running = "running" completed = "completed" failed = "failed" blocked = "blocked" stopped = "stopped" class HookScope(Enum): thread = "thread" turn = "turn" class HookSource(Enum): system = "system" user = "user" project = "project" mdm = "mdm" session_flags = "sessionFlags" plugin = "plugin" cloud_requirements = "cloudRequirements" legacy_managed_config_file = "legacyManagedConfigFile" legacy_managed_config_mdm = "legacyManagedConfigMdm" unknown = "unknown" class HookTrustStatus(Enum): managed = "managed" untrusted = "untrusted" trusted = "trusted" modified = "modified" class HooksListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwds: Annotated[ list[str] | None, Field( description="When empty, defaults to the current session working directory." ), ] = None class ImageDetail(Enum): auto = "auto" low = "low" high = "high" original = "original" class InitializeCapabilities(BaseModel): model_config = ConfigDict( populate_by_name=True, ) experimental_api: Annotated[ bool | None, Field( alias="experimentalApi", description="Opt into receiving experimental API methods and fields.", ), ] = False opt_out_notification_methods: Annotated[ list[str] | None, Field( alias="optOutNotificationMethods", description="Exact notification method names that should be suppressed for this connection (for example `thread/started`).", ), ] = None request_attestation: Annotated[ bool | None, Field( alias="requestAttestation", description="Opt into `attestation/generate` requests for upstream `x-oai-attestation`.", ), ] = False class InitializeParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) capabilities: InitializeCapabilities | None = None client_info: Annotated[ClientInfo, Field(alias="clientInfo")] class InputModality(Enum): text = "text" image = "image" class ExecLocalShellAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: list[str] env: dict[str, Any] | None = None timeout_ms: Annotated[int | None, Field(ge=0)] = None type: Annotated[Literal["exec"], Field(title="ExecLocalShellActionType")] user: str | None = None working_directory: str | None = None class LocalShellAction(RootModel[ExecLocalShellAction]): model_config = ConfigDict( populate_by_name=True, ) root: ExecLocalShellAction class LocalShellStatus(Enum): completed = "completed" in_progress = "in_progress" incomplete = "incomplete" class ApiKeyLoginAccountParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) api_key: Annotated[str, Field(alias="apiKey")] type: Annotated[Literal["apiKey"], Field(title="ApiKeyv2::LoginAccountParamsType")] class ChatgptLoginAccountParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) codex_streamlined_login: Annotated[ bool | None, Field(alias="codexStreamlinedLogin") ] = None type: Annotated[ Literal["chatgpt"], Field(title="Chatgptv2::LoginAccountParamsType") ] class ChatgptDeviceCodeLoginAccountParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["chatgptDeviceCode"], Field(title="ChatgptDeviceCodev2::LoginAccountParamsType"), ] class ChatgptAuthTokensLoginAccountParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) access_token: Annotated[ 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: Annotated[ str, Field( alias="chatgptAccountId", description="Workspace/account identifier supplied by the client.", ), ] chatgpt_plan_type: Annotated[ str | None, Field( 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`.", ), ] = None type: Annotated[ Literal["chatgptAuthTokens"], Field(title="ChatgptAuthTokensv2::LoginAccountParamsType"), ] class LoginAccountParams( RootModel[ ApiKeyLoginAccountParams | ChatgptLoginAccountParams | ChatgptDeviceCodeLoginAccountParams | ChatgptAuthTokensLoginAccountParams ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ ApiKeyLoginAccountParams | ChatgptLoginAccountParams | ChatgptDeviceCodeLoginAccountParams | ChatgptAuthTokensLoginAccountParams, Field(title="LoginAccountParams"), ] class ApiKeyLoginAccountResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["apiKey"], Field(title="ApiKeyv2::LoginAccountResponseType") ] class ChatgptLoginAccountResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) auth_url: Annotated[ str, Field( alias="authUrl", description="URL the client should open in a browser to initiate the OAuth flow.", ), ] login_id: Annotated[str, Field(alias="loginId")] type: Annotated[ Literal["chatgpt"], Field(title="Chatgptv2::LoginAccountResponseType") ] class ChatgptDeviceCodeLoginAccountResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) login_id: Annotated[str, Field(alias="loginId")] type: Annotated[ Literal["chatgptDeviceCode"], Field(title="ChatgptDeviceCodev2::LoginAccountResponseType"), ] user_code: Annotated[ str, Field( alias="userCode", description="One-time code the user must enter after signing in.", ), ] verification_url: Annotated[ str, Field( alias="verificationUrl", description="URL the client should open in a browser to complete device code authorization.", ), ] class ChatgptAuthTokensLoginAccountResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["chatgptAuthTokens"], Field(title="ChatgptAuthTokensv2::LoginAccountResponseType"), ] class LoginAccountResponse( RootModel[ ApiKeyLoginAccountResponse | ChatgptLoginAccountResponse | ChatgptDeviceCodeLoginAccountResponse | ChatgptAuthTokensLoginAccountResponse ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ ApiKeyLoginAccountResponse | ChatgptLoginAccountResponse | ChatgptDeviceCodeLoginAccountResponse | ChatgptAuthTokensLoginAccountResponse, Field(title="LoginAccountResponse"), ] class LogoutAccountResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ManagedHooksRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) permission_request: Annotated[ list[ConfiguredHookMatcherGroup], Field(alias="PermissionRequest") ] post_compact: Annotated[ list[ConfiguredHookMatcherGroup], Field(alias="PostCompact") ] post_tool_use: Annotated[ list[ConfiguredHookMatcherGroup], Field(alias="PostToolUse") ] pre_compact: Annotated[list[ConfiguredHookMatcherGroup], Field(alias="PreCompact")] pre_tool_use: Annotated[list[ConfiguredHookMatcherGroup], Field(alias="PreToolUse")] session_start: Annotated[ list[ConfiguredHookMatcherGroup], Field(alias="SessionStart") ] stop: Annotated[list[ConfiguredHookMatcherGroup], Field(alias="Stop")] user_prompt_submit: Annotated[ list[ConfiguredHookMatcherGroup], Field(alias="UserPromptSubmit") ] managed_dir: Annotated[str | None, Field(alias="managedDir")] = None windows_managed_dir: Annotated[str | None, Field(alias="windowsManagedDir")] = None class MarketplaceAddParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) ref_name: Annotated[str | None, Field(alias="refName")] = None source: str sparse_paths: Annotated[list[str] | None, Field(alias="sparsePaths")] = None class MarketplaceAddResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) already_added: Annotated[bool, Field(alias="alreadyAdded")] installed_root: Annotated[AbsolutePathBuf, Field(alias="installedRoot")] marketplace_name: Annotated[str, Field(alias="marketplaceName")] class MarketplaceInterface(BaseModel): model_config = ConfigDict( populate_by_name=True, ) display_name: Annotated[str | None, Field(alias="displayName")] = None class MarketplaceLoadErrorInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) marketplace_path: Annotated[AbsolutePathBuf, Field(alias="marketplacePath")] message: str class MarketplaceRemoveParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) marketplace_name: Annotated[str, Field(alias="marketplaceName")] class MarketplaceRemoveResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) installed_root: Annotated[AbsolutePathBuf | None, Field(alias="installedRoot")] = ( None ) marketplace_name: Annotated[str, Field(alias="marketplaceName")] class MarketplaceUpgradeErrorInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) marketplace_name: Annotated[str, Field(alias="marketplaceName")] message: str class MarketplaceUpgradeParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) marketplace_name: Annotated[str | None, Field(alias="marketplaceName")] = None class MarketplaceUpgradeResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) errors: list[MarketplaceUpgradeErrorInfo] selected_marketplaces: Annotated[list[str], Field(alias="selectedMarketplaces")] upgraded_roots: Annotated[list[AbsolutePathBuf], Field(alias="upgradedRoots")] class McpAuthStatus(Enum): unsupported = "unsupported" not_logged_in = "notLoggedIn" bearer_token = "bearerToken" o_auth = "oAuth" class McpResourceReadParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) server: str thread_id: Annotated[str | None, Field(alias="threadId")] = None uri: str class McpServerMigration(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str class McpServerOauthLoginCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) error: str | None = None name: str success: bool class McpServerOauthLoginParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str scopes: list[str] | None = None timeout_secs: Annotated[int | None, Field(alias="timeoutSecs")] = None class McpServerOauthLoginResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) authorization_url: Annotated[str, Field(alias="authorizationUrl")] class McpServerRefreshResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class McpServerStartupState(Enum): starting = "starting" ready = "ready" failed = "failed" cancelled = "cancelled" class McpServerStatusDetail(Enum): full = "full" tools_and_auth_only = "toolsAndAuthOnly" class McpServerStatusUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) error: str | None = None name: str status: McpServerStartupState class McpServerToolCallParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) field_meta: Annotated[Any | None, Field(alias="_meta")] = None arguments: Any | None = None server: str thread_id: Annotated[str, Field(alias="threadId")] tool: str class McpServerToolCallResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) field_meta: Annotated[Any | None, Field(alias="_meta")] = None content: list is_error: Annotated[bool | None, Field(alias="isError")] = None structured_content: Annotated[Any | None, Field(alias="structuredContent")] = None class McpToolCallError(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: str class McpToolCallProgressNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item_id: Annotated[str, Field(alias="itemId")] message: str thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class McpToolCallResult(BaseModel): model_config = ConfigDict( populate_by_name=True, ) field_meta: Annotated[Any | None, Field(alias="_meta")] = None content: list structured_content: Annotated[Any | None, Field(alias="structuredContent")] = None class McpToolCallStatus(Enum): in_progress = "inProgress" completed = "completed" failed = "failed" class MemoryCitationEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) line_end: Annotated[int, Field(alias="lineEnd", ge=0)] line_start: Annotated[int, Field(alias="lineStart", ge=0)] note: str path: str class MergeStrategy(Enum): replace = "replace" upsert = "upsert" class MessagePhase(Enum): commentary = "commentary" final_answer = "final_answer" class ModeKind(Enum): plan = "plan" default = "default" class ModelAvailabilityNux(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: str class ModelListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cursor: Annotated[ str | None, Field(description="Opaque pagination cursor returned by a previous call."), ] = None include_hidden: Annotated[ bool | None, Field( alias="includeHidden", description="When true, include models that are hidden from the default picker list.", ), ] = None limit: Annotated[ int | None, Field( description="Optional page size; defaults to a reasonable server-side value.", ge=0, ), ] = None class ModelProviderCapabilitiesReadParams(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ModelProviderCapabilitiesReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) image_generation: Annotated[bool, Field(alias="imageGeneration")] namespace_tools: Annotated[bool, Field(alias="namespaceTools")] web_search: Annotated[bool, Field(alias="webSearch")] class ModelRerouteReason(RootModel[Literal["highRiskCyberActivity"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["highRiskCyberActivity"] class ModelReroutedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) from_model: Annotated[str, Field(alias="fromModel")] reason: ModelRerouteReason thread_id: Annotated[str, Field(alias="threadId")] to_model: Annotated[str, Field(alias="toModel")] turn_id: Annotated[str, Field(alias="turnId")] class ModelServiceTier(BaseModel): model_config = ConfigDict( populate_by_name=True, ) description: str id: str name: str class ModelUpgradeInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) migration_markdown: Annotated[str | None, Field(alias="migrationMarkdown")] = None model: str model_link: Annotated[str | None, Field(alias="modelLink")] = None upgrade_copy: Annotated[str | None, Field(alias="upgradeCopy")] = None class ModelVerification(RootModel[Literal["trustedAccessForCyber"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["trustedAccessForCyber"] class ModelVerificationNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] verifications: list[ModelVerification] class NetworkAccess(Enum): restricted = "restricted" enabled = "enabled" class NetworkApprovalProtocol(Enum): http = "http" https = "https" socks5_tcp = "socks5Tcp" socks5_udp = "socks5Udp" class NetworkDomainPermission(Enum): allow = "allow" deny = "deny" class NetworkRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) allow_local_binding: Annotated[bool | None, Field(alias="allowLocalBinding")] = None allow_unix_sockets: Annotated[ list[str] | None, Field( alias="allowUnixSockets", description="Legacy compatibility view derived from `unix_sockets`.", ), ] = None allow_upstream_proxy: Annotated[bool | None, Field(alias="allowUpstreamProxy")] = ( None ) allowed_domains: Annotated[ list[str] | None, Field( alias="allowedDomains", description="Legacy compatibility view derived from `domains`.", ), ] = None dangerously_allow_all_unix_sockets: Annotated[ bool | None, Field(alias="dangerouslyAllowAllUnixSockets") ] = None dangerously_allow_non_loopback_proxy: Annotated[ bool | None, Field(alias="dangerouslyAllowNonLoopbackProxy") ] = None denied_domains: Annotated[ list[str] | None, Field( alias="deniedDomains", description="Legacy compatibility view derived from `domains`.", ), ] = None domains: Annotated[ dict[str, Any] | None, Field( description="Canonical network permission map for `experimental_network`." ), ] = None enabled: bool | None = None http_port: Annotated[int | None, Field(alias="httpPort", ge=0)] = None managed_allowed_domains_only: Annotated[ bool | None, Field( alias="managedAllowedDomainsOnly", description="When true, only managed allowlist entries are respected while managed network enforcement is active.", ), ] = None socks_port: Annotated[int | None, Field(alias="socksPort", ge=0)] = None unix_sockets: Annotated[ dict[str, Any] | None, Field( alias="unixSockets", description="Canonical unix socket permission map for `experimental_network`.", ), ] = None class NetworkUnixSocketPermission(Enum): allow = "allow" none = "none" class NonSteerableTurnKind(Enum): review = "review" compact = "compact" class PatchApplyStatus(Enum): in_progress = "inProgress" completed = "completed" failed = "failed" declined = "declined" class AddPatchChangeKind(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["add"], Field(title="AddPatchChangeKindType")] class DeletePatchChangeKind(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["delete"], Field(title="DeletePatchChangeKindType")] class UpdatePatchChangeKind(BaseModel): model_config = ConfigDict( populate_by_name=True, ) move_path: str | None = None type: Annotated[Literal["update"], Field(title="UpdatePatchChangeKindType")] class PatchChangeKind( RootModel[AddPatchChangeKind | DeletePatchChangeKind | UpdatePatchChangeKind] ): model_config = ConfigDict( populate_by_name=True, ) root: AddPatchChangeKind | DeletePatchChangeKind | UpdatePatchChangeKind class DisabledPermissionProfile(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["disabled"], Field(title="DisabledPermissionProfileType")] class UnrestrictedPermissionProfileFileSystemPermissions(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["unrestricted"], Field(title="UnrestrictedPermissionProfileFileSystemPermissionsType"), ] class AdditionalWritableRootPermissionProfileModificationParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: AbsolutePathBuf type: Annotated[ Literal["additionalWritableRoot"], Field(title="AdditionalWritableRootPermissionProfileModificationParamsType"), ] class PermissionProfileModificationParams( RootModel[AdditionalWritableRootPermissionProfileModificationParams] ): model_config = ConfigDict( populate_by_name=True, ) root: AdditionalWritableRootPermissionProfileModificationParams class PermissionProfileNetworkPermissions(BaseModel): model_config = ConfigDict( populate_by_name=True, ) enabled: bool class ProfilePermissionProfileSelectionParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str modifications: list[PermissionProfileModificationParams] | None = None type: Annotated[ Literal["profile"], Field(title="ProfilePermissionProfileSelectionParamsType") ] class PermissionProfileSelectionParams( RootModel[ProfilePermissionProfileSelectionParams] ): model_config = ConfigDict( populate_by_name=True, ) root: ProfilePermissionProfileSelectionParams class Personality(Enum): none = "none" friendly = "friendly" pragmatic = "pragmatic" class PlanDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) delta: str item_id: Annotated[str, Field(alias="itemId")] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class PlanType(Enum): free = "free" go = "go" plus = "plus" pro = "pro" prolite = "prolite" team = "team" self_serve_business_usage_based = "self_serve_business_usage_based" business = "business" enterprise_cbp_usage_based = "enterprise_cbp_usage_based" enterprise = "enterprise" edu = "edu" unknown = "unknown" class PluginAuthPolicy(Enum): on_install = "ON_INSTALL" on_use = "ON_USE" class PluginAvailability(Enum): disabled_by_admin = "DISABLED_BY_ADMIN" available = "AVAILABLE" class PluginHookSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) event_name: Annotated[HookEventName, Field(alias="eventName")] key: str class PluginInstallParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) marketplace_path: Annotated[ AbsolutePathBuf | None, Field(alias="marketplacePath") ] = None plugin_name: Annotated[str, Field(alias="pluginName")] remote_marketplace_name: Annotated[ str | None, Field(alias="remoteMarketplaceName") ] = None class PluginInstallPolicy(Enum): not_available = "NOT_AVAILABLE" available = "AVAILABLE" installed_by_default = "INSTALLED_BY_DEFAULT" class PluginInstallResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) apps_needing_auth: Annotated[list[AppSummary], Field(alias="appsNeedingAuth")] auth_policy: Annotated[PluginAuthPolicy, Field(alias="authPolicy")] class PluginInterface(BaseModel): model_config = ConfigDict( populate_by_name=True, ) brand_color: Annotated[str | None, Field(alias="brandColor")] = None capabilities: list[str] category: str | None = None composer_icon: Annotated[ AbsolutePathBuf | None, Field( alias="composerIcon", description="Local composer icon path, resolved from the installed plugin package.", ), ] = None composer_icon_url: Annotated[ str | None, Field( alias="composerIconUrl", description="Remote composer icon URL from the plugin catalog.", ), ] = None default_prompt: Annotated[ list[str] | None, Field( alias="defaultPrompt", description="Starter prompts for the plugin. Capped at 3 entries with a maximum of 128 characters per entry.", ), ] = None developer_name: Annotated[str | None, Field(alias="developerName")] = None display_name: Annotated[str | None, Field(alias="displayName")] = None logo: Annotated[ AbsolutePathBuf | None, Field( description="Local logo path, resolved from the installed plugin package." ), ] = None logo_url: Annotated[ str | None, Field(alias="logoUrl", description="Remote logo URL from the plugin catalog."), ] = None long_description: Annotated[str | None, Field(alias="longDescription")] = None privacy_policy_url: Annotated[str | None, Field(alias="privacyPolicyUrl")] = None screenshot_urls: Annotated[ list[str], Field( alias="screenshotUrls", description="Remote screenshot URLs from the plugin catalog.", ), ] screenshots: Annotated[ list[AbsolutePathBuf], Field( description="Local screenshot paths, resolved from the installed plugin package." ), ] short_description: Annotated[str | None, Field(alias="shortDescription")] = None terms_of_service_url: Annotated[str | None, Field(alias="termsOfServiceUrl")] = None website_url: Annotated[str | None, Field(alias="websiteUrl")] = None class PluginListMarketplaceKind(Enum): local = "local" workspace_directory = "workspace-directory" shared_with_me = "shared-with-me" class PluginListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwds: Annotated[ list[AbsolutePathBuf] | None, Field( description="Optional working directories used to discover repo marketplaces. When omitted, only home-scoped marketplaces and the official curated marketplace are considered." ), ] = None marketplace_kinds: Annotated[ list[PluginListMarketplaceKind] | None, Field( alias="marketplaceKinds", description="Optional marketplace kind filter. When omitted, only local marketplaces are queried, plus the default remote catalog when enabled by feature flag.", ), ] = None class PluginReadParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) marketplace_path: Annotated[ AbsolutePathBuf | None, Field(alias="marketplacePath") ] = None plugin_name: Annotated[str, Field(alias="pluginName")] remote_marketplace_name: Annotated[ str | None, Field(alias="remoteMarketplaceName") ] = None class PluginShareDeleteParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) remote_plugin_id: Annotated[str, Field(alias="remotePluginId")] class PluginShareDeleteResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class PluginShareDiscoverability(Enum): listed = "LISTED" unlisted = "UNLISTED" private = "PRIVATE" class PluginShareListParams(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class PluginSharePrincipalRole(Enum): reader = "reader" editor = "editor" owner = "owner" class PluginSharePrincipalType(Enum): user = "user" group = "group" workspace = "workspace" class PluginShareSaveResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) remote_plugin_id: Annotated[str, Field(alias="remotePluginId")] share_url: Annotated[str, Field(alias="shareUrl")] class PluginShareTargetRole(Enum): reader = "reader" editor = "editor" class PluginShareUpdateDiscoverability(Enum): unlisted = "UNLISTED" private = "PRIVATE" class PluginSkillReadParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) remote_marketplace_name: Annotated[str, Field(alias="remoteMarketplaceName")] remote_plugin_id: Annotated[str, Field(alias="remotePluginId")] skill_name: Annotated[str, Field(alias="skillName")] class PluginSkillReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) contents: str | None = None class LocalPluginSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: AbsolutePathBuf type: Annotated[Literal["local"], Field(title="LocalPluginSourceType")] class GitPluginSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: str | None = None ref_name: Annotated[str | None, Field(alias="refName")] = None sha: str | None = None type: Annotated[Literal["git"], Field(title="GitPluginSourceType")] url: str class RemotePluginSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["remote"], Field(title="RemotePluginSourceType")] class PluginSource(RootModel[LocalPluginSource | GitPluginSource | RemotePluginSource]): model_config = ConfigDict( populate_by_name=True, ) root: LocalPluginSource | GitPluginSource | RemotePluginSource class PluginUninstallParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) plugin_id: Annotated[str, Field(alias="pluginId")] class PluginUninstallResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class PluginsMigration(BaseModel): model_config = ConfigDict( populate_by_name=True, ) marketplace_name: Annotated[str, Field(alias="marketplaceName")] plugin_names: Annotated[list[str], Field(alias="pluginNames")] class ProcessExitedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) exit_code: Annotated[int, Field(alias="exitCode", description="Process exit code.")] process_handle: Annotated[ str, Field( alias="processHandle", description="Client-supplied, connection-scoped `processHandle` from `process/spawn`.", ), ] stderr: Annotated[ str, Field( description="Buffered stderr capture.\n\nEmpty when stderr was streamed via `process/outputDelta`." ), ] stderr_cap_reached: Annotated[ bool, Field( alias="stderrCapReached", description="Whether stderr reached `outputBytesCap`.\n\nIn streaming mode, stderr is empty and cap state is also reported on the final stderr `process/outputDelta` notification.", ), ] stdout: Annotated[ str, Field( description="Buffered stdout capture.\n\nEmpty when stdout was streamed via `process/outputDelta`." ), ] stdout_cap_reached: Annotated[ bool, Field( alias="stdoutCapReached", description="Whether stdout reached `outputBytesCap`.\n\nIn streaming mode, stdout is empty and cap state is also reported on the final stdout `process/outputDelta` notification.", ), ] class ProcessOutputStream(Enum): stdout = "stdout" stderr = "stderr" class ProcessTerminalSize(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cols: Annotated[int, Field(description="Terminal width in character cells.", ge=0)] rows: Annotated[int, Field(description="Terminal height in character cells.", ge=0)] class RateLimitReachedType(Enum): rate_limit_reached = "rate_limit_reached" workspace_owner_credits_depleted = "workspace_owner_credits_depleted" workspace_member_credits_depleted = "workspace_member_credits_depleted" workspace_owner_usage_limit_reached = "workspace_owner_usage_limit_reached" workspace_member_usage_limit_reached = "workspace_member_usage_limit_reached" class RateLimitWindow(BaseModel): model_config = ConfigDict( populate_by_name=True, ) resets_at: Annotated[int | None, Field(alias="resetsAt")] = None used_percent: Annotated[int, Field(alias="usedPercent")] window_duration_mins: Annotated[int | None, Field(alias="windowDurationMins")] = ( None ) class RealtimeConversationVersion(Enum): v1 = "v1" v2 = "v2" class RealtimeOutputModality(Enum): text = "text" audio = "audio" class RealtimeVoice(Enum): alloy = "alloy" arbor = "arbor" ash = "ash" ballad = "ballad" breeze = "breeze" cedar = "cedar" coral = "coral" cove = "cove" echo = "echo" ember = "ember" juniper = "juniper" maple = "maple" marin = "marin" sage = "sage" shimmer = "shimmer" sol = "sol" spruce = "spruce" vale = "vale" verse = "verse" class RealtimeVoicesList(BaseModel): model_config = ConfigDict( populate_by_name=True, ) default_v1: Annotated[RealtimeVoice, Field(alias="defaultV1")] default_v2: Annotated[RealtimeVoice, Field(alias="defaultV2")] v1: list[RealtimeVoice] v2: list[RealtimeVoice] class ReasoningEffort(Enum): none = "none" minimal = "minimal" low = "low" medium = "medium" high = "high" xhigh = "xhigh" class ReasoningEffortOption(BaseModel): model_config = ConfigDict( populate_by_name=True, ) description: str reasoning_effort: Annotated[ReasoningEffort, Field(alias="reasoningEffort")] class ReasoningTextReasoningItemContent(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Annotated[ Literal["reasoning_text"], Field(title="ReasoningTextReasoningItemContentType") ] class TextReasoningItemContent(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Annotated[Literal["text"], Field(title="TextReasoningItemContentType")] class ReasoningItemContent( RootModel[ReasoningTextReasoningItemContent | TextReasoningItemContent] ): model_config = ConfigDict( populate_by_name=True, ) root: ReasoningTextReasoningItemContent | TextReasoningItemContent class SummaryTextReasoningItemReasoningSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Annotated[ Literal["summary_text"], Field(title="SummaryTextReasoningItemReasoningSummaryType"), ] class ReasoningItemReasoningSummary( RootModel[SummaryTextReasoningItemReasoningSummary] ): model_config = ConfigDict( populate_by_name=True, ) root: SummaryTextReasoningItemReasoningSummary class ReasoningSummaryValue(Enum): auto = "auto" concise = "concise" detailed = "detailed" class ReasoningSummary(RootModel[ReasoningSummaryValue | Literal["none"]]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ ReasoningSummaryValue | 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 ReasoningSummaryPartAddedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item_id: Annotated[str, Field(alias="itemId")] summary_index: Annotated[int, Field(alias="summaryIndex")] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class ReasoningSummaryTextDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) delta: str item_id: Annotated[str, Field(alias="itemId")] summary_index: Annotated[int, Field(alias="summaryIndex")] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class ReasoningTextDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) content_index: Annotated[int, Field(alias="contentIndex")] delta: str item_id: Annotated[str, Field(alias="itemId")] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class RemoteControlConnectionStatus(Enum): disabled = "disabled" connecting = "connecting" connected = "connected" errored = "errored" class RemoteControlStatusChangedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) environment_id: Annotated[str | None, Field(alias="environmentId")] = None installation_id: Annotated[str, Field(alias="installationId")] status: RemoteControlConnectionStatus class RequestId(RootModel[str | int]): model_config = ConfigDict( populate_by_name=True, ) root: str | int class ResidencyRequirement(RootModel[Literal["us"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["us"] class Resource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) field_meta: Annotated[Any | None, Field(alias="_meta")] = None annotations: Any | None = None description: str | None = None icons: list | None = None mime_type: Annotated[str | None, Field(alias="mimeType")] = None name: str size: int | None = None title: str | None = None uri: str class ResourceContent1(BaseModel): model_config = ConfigDict( populate_by_name=True, ) field_meta: Annotated[Any | None, Field(alias="_meta")] = None mime_type: Annotated[str | None, Field(alias="mimeType")] = None text: str uri: Annotated[str, Field(description="The URI of this resource.")] class ResourceContent2(BaseModel): model_config = ConfigDict( populate_by_name=True, ) field_meta: Annotated[Any | None, Field(alias="_meta")] = None blob: str mime_type: Annotated[str | None, Field(alias="mimeType")] = None uri: Annotated[str, Field(description="The URI of this resource.")] class ResourceContent(RootModel[ResourceContent1 | ResourceContent2]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ ResourceContent1 | ResourceContent2, Field( description="Contents returned when reading a resource from an MCP server." ), ] class ResourceTemplate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) annotations: Any | None = None description: str | None = None mime_type: Annotated[str | None, Field(alias="mimeType")] = None name: str title: str | None = None uri_template: Annotated[str, Field(alias="uriTemplate")] class ReasoningResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) content: list[ReasoningItemContent] | None = None encrypted_content: str | None = None summary: list[ReasoningItemReasoningSummary] type: Annotated[Literal["reasoning"], Field(title="ReasoningResponseItemType")] class LocalShellCallResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) action: LocalShellAction call_id: Annotated[ str | None, Field(description="Set when using the Responses API.") ] = None id: Annotated[ str | None, Field( description="Legacy id field retained for compatibility with older payloads." ), ] = None status: LocalShellStatus type: Annotated[ Literal["local_shell_call"], Field(title="LocalShellCallResponseItemType") ] class FunctionCallResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) arguments: str call_id: str id: str | None = None name: str namespace: str | None = None type: Annotated[ Literal["function_call"], Field(title="FunctionCallResponseItemType") ] class ToolSearchCallResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) arguments: Any call_id: str | None = None execution: str id: str | None = None status: str | None = None type: Annotated[ Literal["tool_search_call"], Field(title="ToolSearchCallResponseItemType") ] class CustomToolCallResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) call_id: str id: str | None = None input: str name: str status: str | None = None type: Annotated[ Literal["custom_tool_call"], Field(title="CustomToolCallResponseItemType") ] class ToolSearchOutputResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) call_id: str | None = None execution: str status: str tools: list type: Annotated[ Literal["tool_search_output"], Field(title="ToolSearchOutputResponseItemType") ] class ImageGenerationCallResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str result: str revised_prompt: str | None = None status: str type: Annotated[ Literal["image_generation_call"], Field(title="ImageGenerationCallResponseItemType"), ] class CompactionResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) encrypted_content: str type: Annotated[Literal["compaction"], Field(title="CompactionResponseItemType")] class ContextCompactionResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) encrypted_content: str | None = None type: Annotated[ Literal["context_compaction"], Field(title="ContextCompactionResponseItemType") ] class OtherResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["other"], Field(title="OtherResponseItemType")] class SearchResponsesApiWebSearchAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) queries: list[str] | None = None query: str | None = None type: Annotated[ Literal["search"], Field(title="SearchResponsesApiWebSearchActionType") ] class OpenPageResponsesApiWebSearchAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["open_page"], Field(title="OpenPageResponsesApiWebSearchActionType") ] url: str | None = None class FindInPageResponsesApiWebSearchAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) pattern: str | None = None type: Annotated[ Literal["find_in_page"], Field(title="FindInPageResponsesApiWebSearchActionType"), ] url: str | None = None class OtherResponsesApiWebSearchAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["other"], Field(title="OtherResponsesApiWebSearchActionType") ] class ResponsesApiWebSearchAction( RootModel[ SearchResponsesApiWebSearchAction | OpenPageResponsesApiWebSearchAction | FindInPageResponsesApiWebSearchAction | OtherResponsesApiWebSearchAction ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( SearchResponsesApiWebSearchAction | OpenPageResponsesApiWebSearchAction | FindInPageResponsesApiWebSearchAction | OtherResponsesApiWebSearchAction ) class ReviewDelivery(Enum): inline = "inline" detached = "detached" class UncommittedChangesReviewTarget(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["uncommittedChanges"], Field(title="UncommittedChangesReviewTargetType") ] class BaseBranchReviewTarget(BaseModel): model_config = ConfigDict( populate_by_name=True, ) branch: str type: Annotated[Literal["baseBranch"], Field(title="BaseBranchReviewTargetType")] class CommitReviewTarget(BaseModel): model_config = ConfigDict( populate_by_name=True, ) sha: str title: Annotated[ str | None, Field( description="Optional human-readable label (e.g., commit subject) for UIs." ), ] = None type: Annotated[Literal["commit"], Field(title="CommitReviewTargetType")] class CustomReviewTarget(BaseModel): model_config = ConfigDict( populate_by_name=True, ) instructions: str type: Annotated[Literal["custom"], Field(title="CustomReviewTargetType")] class ReviewTarget( RootModel[ UncommittedChangesReviewTarget | BaseBranchReviewTarget | CommitReviewTarget | CustomReviewTarget ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( UncommittedChangesReviewTarget | BaseBranchReviewTarget | CommitReviewTarget | CustomReviewTarget ) class SandboxMode(Enum): read_only = "read-only" workspace_write = "workspace-write" danger_full_access = "danger-full-access" class DangerFullAccessSandboxPolicy(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["dangerFullAccess"], Field(title="DangerFullAccessSandboxPolicyType") ] class ReadOnlySandboxPolicy(BaseModel): model_config = ConfigDict( populate_by_name=True, ) network_access: Annotated[bool | None, Field(alias="networkAccess")] = False type: Annotated[Literal["readOnly"], Field(title="ReadOnlySandboxPolicyType")] class ExternalSandboxSandboxPolicy(BaseModel): model_config = ConfigDict( populate_by_name=True, ) network_access: Annotated[NetworkAccess | None, Field(alias="networkAccess")] = ( "restricted" ) type: Annotated[ Literal["externalSandbox"], Field(title="ExternalSandboxSandboxPolicyType") ] class WorkspaceWriteSandboxPolicy(BaseModel): model_config = ConfigDict( populate_by_name=True, ) exclude_slash_tmp: Annotated[bool | None, Field(alias="excludeSlashTmp")] = False exclude_tmpdir_env_var: Annotated[ bool | None, Field(alias="excludeTmpdirEnvVar") ] = False network_access: Annotated[bool | None, Field(alias="networkAccess")] = False type: Annotated[ Literal["workspaceWrite"], Field(title="WorkspaceWriteSandboxPolicyType") ] writable_roots: Annotated[ list[AbsolutePathBuf] | None, Field(alias="writableRoots") ] = [] class SandboxPolicy( RootModel[ DangerFullAccessSandboxPolicy | ReadOnlySandboxPolicy | ExternalSandboxSandboxPolicy | WorkspaceWriteSandboxPolicy ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( DangerFullAccessSandboxPolicy | ReadOnlySandboxPolicy | ExternalSandboxSandboxPolicy | WorkspaceWriteSandboxPolicy ) class SandboxWorkspaceWrite(BaseModel): model_config = ConfigDict( populate_by_name=True, ) exclude_slash_tmp: bool | None = False exclude_tmpdir_env_var: bool | None = False network_access: bool | None = False writable_roots: list[str] | None = [] class SendAddCreditsNudgeEmailParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) credit_type: Annotated[AddCreditsNudgeCreditType, Field(alias="creditType")] class SendAddCreditsNudgeEmailResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: AddCreditsNudgeEmailStatus class ItemAgentMessageDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/agentMessage/delta"], Field(title="Item/agentMessage/deltaNotificationMethod"), ] params: AgentMessageDeltaNotification class ItemPlanDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/plan/delta"], Field(title="Item/plan/deltaNotificationMethod") ] params: PlanDeltaNotification class ProcessExitedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["process/exited"], Field(title="Process/exitedNotificationMethod") ] params: ProcessExitedNotification class ItemCommandExecutionOutputDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/commandExecution/outputDelta"], Field(title="Item/commandExecution/outputDeltaNotificationMethod"), ] params: CommandExecutionOutputDeltaNotification class ItemFileChangeOutputDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/fileChange/outputDelta"], Field(title="Item/fileChange/outputDeltaNotificationMethod"), ] params: FileChangeOutputDeltaNotification class ItemMcpToolCallProgressServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/mcpToolCall/progress"], Field(title="Item/mcpToolCall/progressNotificationMethod"), ] params: McpToolCallProgressNotification class McpServerOauthLoginCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["mcpServer/oauthLogin/completed"], Field(title="McpServer/oauthLogin/completedNotificationMethod"), ] params: McpServerOauthLoginCompletedNotification class McpServerStartupStatusUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["mcpServer/startupStatus/updated"], Field(title="McpServer/startupStatus/updatedNotificationMethod"), ] params: McpServerStatusUpdatedNotification class RemoteControlStatusChangedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["remoteControl/status/changed"], Field(title="RemoteControl/status/changedNotificationMethod"), ] params: RemoteControlStatusChangedNotification class ExternalAgentConfigImportCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["externalAgentConfig/import/completed"], Field(title="ExternalAgentConfig/import/completedNotificationMethod"), ] params: ExternalAgentConfigImportCompletedNotification class FsChangedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["fs/changed"], Field(title="Fs/changedNotificationMethod") ] params: FsChangedNotification class ItemReasoningSummaryTextDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/reasoning/summaryTextDelta"], Field(title="Item/reasoning/summaryTextDeltaNotificationMethod"), ] params: ReasoningSummaryTextDeltaNotification class ItemReasoningSummaryPartAddedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/reasoning/summaryPartAdded"], Field(title="Item/reasoning/summaryPartAddedNotificationMethod"), ] params: ReasoningSummaryPartAddedNotification class ItemReasoningTextDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/reasoning/textDelta"], Field(title="Item/reasoning/textDeltaNotificationMethod"), ] params: ReasoningTextDeltaNotification class ThreadCompactedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/compacted"], Field(title="Thread/compactedNotificationMethod") ] params: ContextCompactedNotification class ModelReroutedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["model/rerouted"], Field(title="Model/reroutedNotificationMethod") ] params: ModelReroutedNotification class ModelVerificationServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["model/verification"], Field(title="Model/verificationNotificationMethod"), ] params: ModelVerificationNotification class GuardianWarningServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["guardianWarning"], Field(title="GuardianWarningNotificationMethod") ] params: GuardianWarningNotification class DeprecationNoticeServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["deprecationNotice"], Field(title="DeprecationNoticeNotificationMethod") ] params: DeprecationNoticeNotification class FuzzyFileSearchSessionUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["fuzzyFileSearch/sessionUpdated"], Field(title="FuzzyFileSearch/sessionUpdatedNotificationMethod"), ] params: FuzzyFileSearchSessionUpdatedNotification class FuzzyFileSearchSessionCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["fuzzyFileSearch/sessionCompleted"], Field(title="FuzzyFileSearch/sessionCompletedNotificationMethod"), ] params: FuzzyFileSearchSessionCompletedNotification class AccountLoginCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["account/login/completed"], Field(title="Account/login/completedNotificationMethod"), ] params: AccountLoginCompletedNotification class ServerRequestResolvedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) request_id: Annotated[RequestId, Field(alias="requestId")] thread_id: Annotated[str, Field(alias="threadId")] class SessionMigration(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: str path: str title: str | None = None class SessionSourceValue(Enum): cli = "cli" vscode = "vscode" exec = "exec" app_server = "appServer" unknown = "unknown" class CustomSessionSource(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) custom: str class Settings(BaseModel): model_config = ConfigDict( populate_by_name=True, ) developer_instructions: str | None = None model: str reasoning_effort: ReasoningEffort | None = None class SkillErrorInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: str path: str class SkillInterface(BaseModel): model_config = ConfigDict( populate_by_name=True, ) brand_color: Annotated[str | None, Field(alias="brandColor")] = None default_prompt: Annotated[str | None, Field(alias="defaultPrompt")] = None display_name: Annotated[str | None, Field(alias="displayName")] = None icon_large: Annotated[AbsolutePathBuf | None, Field(alias="iconLarge")] = None icon_small: Annotated[AbsolutePathBuf | None, Field(alias="iconSmall")] = None short_description: Annotated[str | None, Field(alias="shortDescription")] = None class SkillScope(Enum): user = "user" repo = "repo" system = "system" admin = "admin" class SkillSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) description: str enabled: bool interface: SkillInterface | None = None name: str path: AbsolutePathBuf | None = None short_description: Annotated[str | None, Field(alias="shortDescription")] = None class SkillToolDependency(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: str | None = None description: str | None = None transport: str | None = None type: str url: str | None = None value: str class SkillsChangedNotification(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class SkillsConfigWriteParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) enabled: bool name: Annotated[str | None, Field(description="Name-based selector.")] = None path: Annotated[ AbsolutePathBuf | None, Field(description="Path-based selector.") ] = None class SkillsConfigWriteResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) effective_enabled: Annotated[bool, Field(alias="effectiveEnabled")] class SkillsListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwds: Annotated[ list[str] | None, Field( description="When empty, defaults to the current session working directory." ), ] = None force_reload: Annotated[ bool | None, Field( alias="forceReload", description="When true, bypass the skills cache and re-scan skills from disk.", ), ] = None class SortDirection(Enum): asc = "asc" desc = "desc" class SubAgentSourceValue(Enum): review = "review" compact = "compact" memory_consolidation = "memory_consolidation" class OtherSubAgentSource(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) other: str class SubagentMigration(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str class TerminalInteractionNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item_id: Annotated[str, Field(alias="itemId")] process_id: Annotated[str, Field(alias="processId")] stdin: str thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class TextElement(BaseModel): model_config = ConfigDict( populate_by_name=True, ) byte_range: Annotated[ ByteRange, Field( alias="byteRange", description="Byte range in the parent `text` buffer that this element occupies.", ), ] placeholder: Annotated[ str | None, Field( description="Optional human-readable placeholder for the element, displayed in the UI." ), ] = None class TextPosition(BaseModel): model_config = ConfigDict( populate_by_name=True, ) column: Annotated[ int, Field(description="1-based column number (in Unicode scalar values).", ge=0), ] line: Annotated[int, Field(description="1-based line number.", ge=0)] class TextRange(BaseModel): model_config = ConfigDict( populate_by_name=True, ) end: TextPosition start: TextPosition class ThreadActiveFlag(Enum): waiting_on_approval = "waitingOnApproval" waiting_on_user_input = "waitingOnUserInput" class ThreadApproveGuardianDeniedActionParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) event: Annotated[ Any, Field( description="Serialized `codex_protocol::protocol::GuardianAssessmentEvent`." ), ] thread_id: Annotated[str, Field(alias="threadId")] class ThreadApproveGuardianDeniedActionResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ThreadArchiveParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadArchiveResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ThreadArchivedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadClosedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadCompactStartParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadCompactStartResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ThreadGoalClearedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadGoalStatus(Enum): active = "active" paused = "paused" budget_limited = "budgetLimited" complete = "complete" class ThreadId(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: str class ThreadInjectItemsParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) items: Annotated[ list, Field( description="Raw Responses API items to append to the thread's model-visible history." ), ] thread_id: Annotated[str, Field(alias="threadId")] class ThreadInjectItemsResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class HookPromptThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) fragments: list[HookPromptFragment] id: str type: Annotated[Literal["hookPrompt"], Field(title="HookPromptThreadItemType")] class PlanThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str text: str type: Annotated[Literal["plan"], Field(title="PlanThreadItemType")] class ReasoningThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) content: list[str] | None = [] id: str summary: list[str] | None = [] type: Annotated[Literal["reasoning"], Field(title="ReasoningThreadItemType")] class CommandExecutionThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) aggregated_output: Annotated[ str | None, Field( alias="aggregatedOutput", description="The command's output, aggregated from stdout and stderr.", ), ] = None command: Annotated[str, Field(description="The command to be executed.")] command_actions: Annotated[ 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: Annotated[ AbsolutePathBuf, Field(description="The command's working directory.") ] duration_ms: Annotated[ int | None, Field( alias="durationMs", description="The duration of the command execution in milliseconds.", ), ] = None exit_code: Annotated[ int | None, Field(alias="exitCode", description="The command's exit code.") ] = None id: str process_id: Annotated[ str | None, Field( alias="processId", description="Identifier for the underlying PTY process (when available).", ), ] = None source: CommandExecutionSource | None = "agent" status: CommandExecutionStatus type: Annotated[ Literal["commandExecution"], Field(title="CommandExecutionThreadItemType") ] class McpToolCallThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) arguments: Any duration_ms: Annotated[ int | None, Field( alias="durationMs", description="The duration of the MCP tool call in milliseconds.", ), ] = None error: McpToolCallError | None = None id: str mcp_app_resource_uri: Annotated[str | None, Field(alias="mcpAppResourceUri")] = None result: McpToolCallResult | None = None server: str status: McpToolCallStatus tool: str type: Annotated[Literal["mcpToolCall"], Field(title="McpToolCallThreadItemType")] class DynamicToolCallThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) arguments: Any content_items: Annotated[ list[DynamicToolCallOutputContentItem] | None, Field(alias="contentItems") ] = None duration_ms: Annotated[ int | None, Field( alias="durationMs", description="The duration of the dynamic tool call in milliseconds.", ), ] = None id: str namespace: str | None = None status: DynamicToolCallStatus success: bool | None = None tool: str type: Annotated[ Literal["dynamicToolCall"], Field(title="DynamicToolCallThreadItemType") ] class ImageViewThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str path: AbsolutePathBuf type: Annotated[Literal["imageView"], Field(title="ImageViewThreadItemType")] class ImageGenerationThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str result: str revised_prompt: Annotated[str | None, Field(alias="revisedPrompt")] = None saved_path: Annotated[AbsolutePathBuf | None, Field(alias="savedPath")] = None status: str type: Annotated[ Literal["imageGeneration"], Field(title="ImageGenerationThreadItemType") ] class EnteredReviewModeThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str review: str type: Annotated[ Literal["enteredReviewMode"], Field(title="EnteredReviewModeThreadItemType") ] class ExitedReviewModeThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str review: str type: Annotated[ Literal["exitedReviewMode"], Field(title="ExitedReviewModeThreadItemType") ] class ContextCompactionThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str type: Annotated[ Literal["contextCompaction"], Field(title="ContextCompactionThreadItemType") ] class ThreadListCwdFilter(RootModel[str | list[str]]): model_config = ConfigDict( populate_by_name=True, ) root: str | list[str] class ThreadLoadedListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cursor: Annotated[ str | None, Field(description="Opaque pagination cursor returned by a previous call."), ] = None limit: Annotated[ int | None, Field(description="Optional page size; defaults to no limit.", ge=0) ] = None class ThreadLoadedListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: Annotated[ list[str], Field(description="Thread ids for sessions currently loaded in memory."), ] next_cursor: Annotated[ str | None, Field( alias="nextCursor", description="Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", ), ] = None class ThreadMemoryMode(Enum): enabled = "enabled" disabled = "disabled" class ThreadMetadataGitInfoUpdateParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) branch: Annotated[ str | None, Field( description="Omit to leave the stored branch unchanged, set to `null` to clear it, or provide a non-empty string to replace it." ), ] = None origin_url: Annotated[ str | None, Field( 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.", ), ] = None sha: Annotated[ str | None, Field( description="Omit to leave the stored commit unchanged, set to `null` to clear it, or provide a non-empty string to replace it." ), ] = None class ThreadMetadataUpdateParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) git_info: Annotated[ ThreadMetadataGitInfoUpdateParams | None, Field( 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.", ), ] = None thread_id: Annotated[str, Field(alias="threadId")] class ThreadNameUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] thread_name: Annotated[str | None, Field(alias="threadName")] = None class ThreadReadParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) include_turns: Annotated[ bool | None, Field( alias="includeTurns", description="When true, include turns and their items from rollout history.", ), ] = False thread_id: Annotated[str, Field(alias="threadId")] class ThreadRealtimeAudioChunk(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: str item_id: Annotated[str | None, Field(alias="itemId")] = None num_channels: Annotated[int, Field(alias="numChannels", ge=0)] sample_rate: Annotated[int, Field(alias="sampleRate", ge=0)] samples_per_channel: Annotated[ int | None, Field(alias="samplesPerChannel", ge=0) ] = None class ThreadRealtimeClosedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) reason: str | None = None thread_id: Annotated[str, Field(alias="threadId")] class ThreadRealtimeErrorNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: str thread_id: Annotated[str, Field(alias="threadId")] class ThreadRealtimeItemAddedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item: Any thread_id: Annotated[str, Field(alias="threadId")] class ThreadRealtimeOutputAudioDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) audio: ThreadRealtimeAudioChunk thread_id: Annotated[str, Field(alias="threadId")] class ThreadRealtimeSdpNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) sdp: str thread_id: Annotated[str, Field(alias="threadId")] class WebsocketThreadRealtimeStartTransport(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["websocket"], Field(title="WebsocketThreadRealtimeStartTransportType") ] class WebrtcThreadRealtimeStartTransport(BaseModel): model_config = ConfigDict( populate_by_name=True, ) sdp: Annotated[ str, Field( description="SDP offer generated by a WebRTC RTCPeerConnection after configuring audio and the realtime events data channel." ), ] type: Annotated[ Literal["webrtc"], Field(title="WebrtcThreadRealtimeStartTransportType") ] class ThreadRealtimeStartTransport( RootModel[ WebsocketThreadRealtimeStartTransport | WebrtcThreadRealtimeStartTransport ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ WebsocketThreadRealtimeStartTransport | WebrtcThreadRealtimeStartTransport, Field(description="EXPERIMENTAL - transport used by thread realtime."), ] class ThreadRealtimeStartedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) realtime_session_id: Annotated[str | None, Field(alias="realtimeSessionId")] = None thread_id: Annotated[str, Field(alias="threadId")] version: RealtimeConversationVersion class ThreadRealtimeTranscriptDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) delta: Annotated[ str, Field(description="Live transcript delta from the realtime event.") ] role: str thread_id: Annotated[str, Field(alias="threadId")] class ThreadRealtimeTranscriptDoneNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: str text: Annotated[ str, Field(description="Final complete text for the transcript part.") ] thread_id: Annotated[str, Field(alias="threadId")] class ThreadResumeParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approval_policy: Annotated[AskForApproval | None, Field(alias="approvalPolicy")] = ( None ) approvals_reviewer: Annotated[ ApprovalsReviewer | None, Field( alias="approvalsReviewer", description="Override where approval requests are routed for review on this thread and subsequent turns.", ), ] = None base_instructions: Annotated[str | None, Field(alias="baseInstructions")] = None config: dict[str, Any] | None = None cwd: str | None = None developer_instructions: Annotated[ str | None, Field(alias="developerInstructions") ] = None model: Annotated[ str | None, Field(description="Configuration overrides for the resumed thread, if any."), ] = None model_provider: Annotated[str | None, Field(alias="modelProvider")] = None personality: Personality | None = None sandbox: SandboxMode | None = None service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread_id: Annotated[str, Field(alias="threadId")] class ThreadRollbackParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) num_turns: Annotated[ 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: Annotated[str, Field(alias="threadId")] class ThreadSetNameParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str thread_id: Annotated[str, Field(alias="threadId")] class ThreadSetNameResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ThreadShellCommandParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: Annotated[ str, Field( description="Shell command string evaluated by the thread's configured shell. Unlike `command/exec`, this intentionally preserves shell syntax such as pipes, redirects, and quoting. This runs unsandboxed with full access rather than inheriting the thread sandbox policy." ), ] thread_id: Annotated[str, Field(alias="threadId")] class ThreadShellCommandResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ThreadSortKey(Enum): created_at = "created_at" updated_at = "updated_at" class ThreadSource(Enum): user = "user" subagent = "subagent" memory_consolidation = "memory_consolidation" class ThreadSourceKind(Enum): 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 ThreadStartSource(Enum): startup = "startup" clear = "clear" class NotLoadedThreadStatus(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["notLoaded"], Field(title="NotLoadedThreadStatusType")] class IdleThreadStatus(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["idle"], Field(title="IdleThreadStatusType")] class SystemErrorThreadStatus(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["systemError"], Field(title="SystemErrorThreadStatusType")] class ActiveThreadStatus(BaseModel): model_config = ConfigDict( populate_by_name=True, ) active_flags: Annotated[list[ThreadActiveFlag], Field(alias="activeFlags")] type: Annotated[Literal["active"], Field(title="ActiveThreadStatusType")] class ThreadStatus( RootModel[ NotLoadedThreadStatus | IdleThreadStatus | SystemErrorThreadStatus | ActiveThreadStatus ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( NotLoadedThreadStatus | IdleThreadStatus | SystemErrorThreadStatus | ActiveThreadStatus ) class ThreadStatusChangedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: ThreadStatus thread_id: Annotated[str, Field(alias="threadId")] class ThreadUnarchiveParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadUnarchivedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadUnsubscribeParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadUnsubscribeStatus(Enum): not_loaded = "notLoaded" not_subscribed = "notSubscribed" unsubscribed = "unsubscribed" class TokenUsageBreakdown(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cached_input_tokens: Annotated[int, Field(alias="cachedInputTokens")] input_tokens: Annotated[int, Field(alias="inputTokens")] output_tokens: Annotated[int, Field(alias="outputTokens")] reasoning_output_tokens: Annotated[int, Field(alias="reasoningOutputTokens")] total_tokens: Annotated[int, Field(alias="totalTokens")] class Tool(BaseModel): model_config = ConfigDict( populate_by_name=True, ) field_meta: Annotated[Any | None, Field(alias="_meta")] = None annotations: Any | None = None description: str | None = None icons: list | None = None input_schema: Annotated[Any, Field(alias="inputSchema")] name: str output_schema: Annotated[Any | None, Field(alias="outputSchema")] = None title: str | None = None class TurnDiffUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) diff: str thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class TurnEnvironmentParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: AbsolutePathBuf environment_id: Annotated[str, Field(alias="environmentId")] class TurnInterruptParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class TurnInterruptResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class TurnItemsView(Enum): not_loaded = "notLoaded" summary = "summary" full = "full" class TurnPlanStepStatus(Enum): pending = "pending" in_progress = "inProgress" completed = "completed" class TurnStatus(Enum): completed = "completed" interrupted = "interrupted" failed = "failed" in_progress = "inProgress" class TurnSteerResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) turn_id: Annotated[str, Field(alias="turnId")] class TextUserInput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str text_elements: Annotated[ list[TextElement] | None, Field( description="UI-defined spans within `text` used to render or persist special elements." ), ] = [] type: Annotated[Literal["text"], Field(title="TextUserInputType")] class ImageUserInput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["image"], Field(title="ImageUserInputType")] url: str class LocalImageUserInput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: str type: Annotated[Literal["localImage"], Field(title="LocalImageUserInputType")] class SkillUserInput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str path: str type: Annotated[Literal["skill"], Field(title="SkillUserInputType")] class MentionUserInput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str path: str type: Annotated[Literal["mention"], Field(title="MentionUserInputType")] class UserInput( RootModel[ TextUserInput | ImageUserInput | LocalImageUserInput | SkillUserInput | MentionUserInput ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( TextUserInput | ImageUserInput | LocalImageUserInput | SkillUserInput | MentionUserInput ) class Verbosity(Enum): low = "low" medium = "medium" high = "high" class WarningNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: Annotated[str, Field(description="Concise warning message for the user.")] thread_id: Annotated[ str | None, Field( alias="threadId", description="Optional thread target when the warning applies to a specific thread.", ), ] = None class SearchWebSearchAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) queries: list[str] | None = None query: str | None = None type: Annotated[Literal["search"], Field(title="SearchWebSearchActionType")] class OpenPageWebSearchAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["openPage"], Field(title="OpenPageWebSearchActionType")] url: str | None = None class FindInPageWebSearchAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) pattern: str | None = None type: Annotated[Literal["findInPage"], Field(title="FindInPageWebSearchActionType")] url: str | None = None class OtherWebSearchAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["other"], Field(title="OtherWebSearchActionType")] class WebSearchAction( RootModel[ SearchWebSearchAction | OpenPageWebSearchAction | FindInPageWebSearchAction | OtherWebSearchAction ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( SearchWebSearchAction | OpenPageWebSearchAction | FindInPageWebSearchAction | OtherWebSearchAction ) class WebSearchContextSize(Enum): low = "low" medium = "medium" high = "high" class WebSearchLocation(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) city: str | None = None country: str | None = None region: str | None = None timezone: str | None = None class WebSearchMode(Enum): disabled = "disabled" cached = "cached" live = "live" class WebSearchToolConfig(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) allowed_domains: list[str] | None = None context_size: WebSearchContextSize | None = None location: WebSearchLocation | None = None class WindowsSandboxReadiness(Enum): ready = "ready" not_configured = "notConfigured" update_required = "updateRequired" class WindowsSandboxReadinessResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: WindowsSandboxReadiness class WindowsSandboxSetupMode(Enum): elevated = "elevated" unelevated = "unelevated" class WindowsSandboxSetupStartParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: AbsolutePathBuf | None = None mode: WindowsSandboxSetupMode class WindowsSandboxSetupStartResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) started: bool class WindowsWorldWritableWarningNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) extra_count: Annotated[int, Field(alias="extraCount", ge=0)] failed_scan: Annotated[bool, Field(alias="failedScan")] sample_paths: Annotated[list[str], Field(alias="samplePaths")] class WriteStatus(Enum): ok = "ok" ok_overridden = "okOverridden" class ChatgptAccount(BaseModel): model_config = ConfigDict( populate_by_name=True, ) email: str plan_type: Annotated[PlanType, Field(alias="planType")] type: Annotated[Literal["chatgpt"], Field(title="ChatgptAccountType")] class Account(RootModel[ApiKeyAccount | ChatgptAccount | AmazonBedrockAccount]): model_config = ConfigDict( populate_by_name=True, ) root: ApiKeyAccount | ChatgptAccount | AmazonBedrockAccount class AccountUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) auth_mode: Annotated[AuthMode | None, Field(alias="authMode")] = None plan_type: Annotated[PlanType | None, Field(alias="planType")] = None class ActivePermissionProfile(BaseModel): model_config = ConfigDict( populate_by_name=True, ) extends: Annotated[ str | None, Field( description="Parent profile identifier once permissions profiles support inheritance. This is currently always `null`." ), ] = None id: Annotated[ str, Field( description="Identifier from `default_permissions` or the implicit built-in default, such as `:workspace` or a user-defined `[permissions.]` profile." ), ] modifications: Annotated[ list[ActivePermissionProfileModification] | None, Field( description="Bounded user-requested modifications applied on top of the named profile, if any." ), ] = [] class AppConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) default_tools_approval_mode: AppToolApproval | None = None default_tools_enabled: bool | None = None destructive_enabled: bool | None = None enabled: bool | None = True open_world_enabled: bool | None = None tools: AppToolsConfig | None = None class AppMetadata(BaseModel): model_config = ConfigDict( populate_by_name=True, ) categories: list[str] | None = None developer: str | None = None first_party_requires_install: Annotated[ bool | None, Field(alias="firstPartyRequiresInstall") ] = None first_party_type: Annotated[str | None, Field(alias="firstPartyType")] = None review: AppReview | None = None screenshots: list[AppScreenshot] | None = None seo_description: Annotated[str | None, Field(alias="seoDescription")] = None show_in_composer_when_unlinked: Annotated[ bool | None, Field(alias="showInComposerWhenUnlinked") ] = None sub_categories: Annotated[list[str] | None, Field(alias="subCategories")] = None version: str | None = None version_id: Annotated[str | None, Field(alias="versionId")] = None version_notes: Annotated[str | None, Field(alias="versionNotes")] = None class AppsConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) field_default: Annotated[AppsDefaultConfig | None, Field(alias="_default")] = None class CancelLoginAccountResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: CancelLoginAccountStatus class InitializeRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["initialize"], Field(title="InitializeRequestMethod")] params: InitializeParams class ThreadResumeRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/resume"], Field(title="Thread/resumeRequestMethod") ] params: ThreadResumeParams class ThreadArchiveRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/archive"], Field(title="Thread/archiveRequestMethod") ] params: ThreadArchiveParams class ThreadUnsubscribeRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/unsubscribe"], Field(title="Thread/unsubscribeRequestMethod") ] params: ThreadUnsubscribeParams class ThreadNameSetRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/name/set"], Field(title="Thread/name/setRequestMethod") ] params: ThreadSetNameParams class ThreadMetadataUpdateRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/metadata/update"], Field(title="Thread/metadata/updateRequestMethod"), ] params: ThreadMetadataUpdateParams class ThreadUnarchiveRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/unarchive"], Field(title="Thread/unarchiveRequestMethod") ] params: ThreadUnarchiveParams class ThreadCompactStartRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/compact/start"], Field(title="Thread/compact/startRequestMethod"), ] params: ThreadCompactStartParams class ThreadShellCommandRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/shellCommand"], Field(title="Thread/shellCommandRequestMethod") ] params: ThreadShellCommandParams class ThreadApproveGuardianDeniedActionRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/approveGuardianDeniedAction"], Field(title="Thread/approveGuardianDeniedActionRequestMethod"), ] params: ThreadApproveGuardianDeniedActionParams class ThreadRollbackRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/rollback"], Field(title="Thread/rollbackRequestMethod") ] params: ThreadRollbackParams class ThreadLoadedListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/loaded/list"], Field(title="Thread/loaded/listRequestMethod") ] params: ThreadLoadedListParams class ThreadReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/read"], Field(title="Thread/readRequestMethod")] params: ThreadReadParams class ThreadInjectItemsRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/inject_items"], Field(title="Thread/injectItemsRequestMethod") ] params: ThreadInjectItemsParams class SkillsListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["skills/list"], Field(title="Skills/listRequestMethod")] params: SkillsListParams class HooksListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["hooks/list"], Field(title="Hooks/listRequestMethod")] params: HooksListParams class MarketplaceAddRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["marketplace/add"], Field(title="Marketplace/addRequestMethod") ] params: MarketplaceAddParams class MarketplaceRemoveRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["marketplace/remove"], Field(title="Marketplace/removeRequestMethod") ] params: MarketplaceRemoveParams class MarketplaceUpgradeRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["marketplace/upgrade"], Field(title="Marketplace/upgradeRequestMethod") ] params: MarketplaceUpgradeParams class PluginListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["plugin/list"], Field(title="Plugin/listRequestMethod")] params: PluginListParams class PluginReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["plugin/read"], Field(title="Plugin/readRequestMethod")] params: PluginReadParams class PluginSkillReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["plugin/skill/read"], Field(title="Plugin/skill/readRequestMethod") ] params: PluginSkillReadParams class PluginShareListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["plugin/share/list"], Field(title="Plugin/share/listRequestMethod") ] params: PluginShareListParams class PluginShareDeleteRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["plugin/share/delete"], Field(title="Plugin/share/deleteRequestMethod") ] params: PluginShareDeleteParams class AppListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["app/list"], Field(title="App/listRequestMethod")] params: AppsListParams class FsReadFileRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["fs/readFile"], Field(title="Fs/readFileRequestMethod")] params: FsReadFileParams class FsWriteFileRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["fs/writeFile"], Field(title="Fs/writeFileRequestMethod")] params: FsWriteFileParams class FsCreateDirectoryRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["fs/createDirectory"], Field(title="Fs/createDirectoryRequestMethod") ] params: FsCreateDirectoryParams class FsGetMetadataRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["fs/getMetadata"], Field(title="Fs/getMetadataRequestMethod") ] params: FsGetMetadataParams class FsReadDirectoryRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["fs/readDirectory"], Field(title="Fs/readDirectoryRequestMethod") ] params: FsReadDirectoryParams class FsRemoveRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["fs/remove"], Field(title="Fs/removeRequestMethod")] params: FsRemoveParams class FsCopyRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["fs/copy"], Field(title="Fs/copyRequestMethod")] params: FsCopyParams class FsWatchRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["fs/watch"], Field(title="Fs/watchRequestMethod")] params: FsWatchParams class FsUnwatchRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["fs/unwatch"], Field(title="Fs/unwatchRequestMethod")] params: FsUnwatchParams class SkillsConfigWriteRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["skills/config/write"], Field(title="Skills/config/writeRequestMethod") ] params: SkillsConfigWriteParams class PluginInstallRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["plugin/install"], Field(title="Plugin/installRequestMethod") ] params: PluginInstallParams class PluginUninstallRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["plugin/uninstall"], Field(title="Plugin/uninstallRequestMethod") ] params: PluginUninstallParams class TurnInterruptRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["turn/interrupt"], Field(title="Turn/interruptRequestMethod") ] params: TurnInterruptParams class ModelListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["model/list"], Field(title="Model/listRequestMethod")] params: ModelListParams class ModelProviderCapabilitiesReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["modelProvider/capabilities/read"], Field(title="ModelProvider/capabilities/readRequestMethod"), ] params: ModelProviderCapabilitiesReadParams class ExperimentalFeatureListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["experimentalFeature/list"], Field(title="ExperimentalFeature/listRequestMethod"), ] params: ExperimentalFeatureListParams class ExperimentalFeatureEnablementSetRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["experimentalFeature/enablement/set"], Field(title="ExperimentalFeature/enablement/setRequestMethod"), ] params: ExperimentalFeatureEnablementSetParams class McpServerOauthLoginRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["mcpServer/oauth/login"], Field(title="McpServer/oauth/loginRequestMethod"), ] params: McpServerOauthLoginParams class ConfigMcpServerReloadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["config/mcpServer/reload"], Field(title="Config/mcpServer/reloadRequestMethod"), ] params: None = None class McpServerResourceReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["mcpServer/resource/read"], Field(title="McpServer/resource/readRequestMethod"), ] params: McpResourceReadParams class McpServerToolCallRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["mcpServer/tool/call"], Field(title="McpServer/tool/callRequestMethod") ] params: McpServerToolCallParams class WindowsSandboxSetupStartRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["windowsSandbox/setupStart"], Field(title="WindowsSandbox/setupStartRequestMethod"), ] params: WindowsSandboxSetupStartParams class WindowsSandboxReadinessRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["windowsSandbox/readiness"], Field(title="WindowsSandbox/readinessRequestMethod"), ] params: None = None class AccountLoginStartRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["account/login/start"], Field(title="Account/login/startRequestMethod") ] params: LoginAccountParams class AccountLoginCancelRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["account/login/cancel"], Field(title="Account/login/cancelRequestMethod"), ] params: CancelLoginAccountParams class AccountLogoutRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["account/logout"], Field(title="Account/logoutRequestMethod") ] params: None = None class AccountRateLimitsReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["account/rateLimits/read"], Field(title="Account/rateLimits/readRequestMethod"), ] params: None = None class AccountSendAddCreditsNudgeEmailRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["account/sendAddCreditsNudgeEmail"], Field(title="Account/sendAddCreditsNudgeEmailRequestMethod"), ] params: SendAddCreditsNudgeEmailParams class FeedbackUploadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["feedback/upload"], Field(title="Feedback/uploadRequestMethod") ] params: FeedbackUploadParams class CommandExecWriteRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["command/exec/write"], Field(title="Command/exec/writeRequestMethod") ] params: CommandExecWriteParams class CommandExecTerminateRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["command/exec/terminate"], Field(title="Command/exec/terminateRequestMethod"), ] params: CommandExecTerminateParams class ConfigReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["config/read"], Field(title="Config/readRequestMethod")] params: ConfigReadParams class ExternalAgentConfigDetectRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["externalAgentConfig/detect"], Field(title="ExternalAgentConfig/detectRequestMethod"), ] params: ExternalAgentConfigDetectParams class ConfigRequirementsReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["configRequirements/read"], Field(title="ConfigRequirements/readRequestMethod"), ] params: None = None class AccountReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["account/read"], Field(title="Account/readRequestMethod")] params: GetAccountParams class FuzzyFileSearchRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["fuzzyFileSearch"], Field(title="FuzzyFileSearchRequestMethod") ] params: FuzzyFileSearchParams class ActiveTurnNotSteerable(BaseModel): model_config = ConfigDict( populate_by_name=True, ) turn_kind: Annotated[NonSteerableTurnKind, Field(alias="turnKind")] class ActiveTurnNotSteerableCodexErrorInfo(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) active_turn_not_steerable: Annotated[ ActiveTurnNotSteerable, Field(alias="activeTurnNotSteerable") ] class CodexErrorInfo( RootModel[ CodexErrorInfoValue | HttpConnectionFailedCodexErrorInfo | ResponseStreamConnectionFailedCodexErrorInfo | ResponseStreamDisconnectedCodexErrorInfo | ResponseTooManyFailedAttemptsCodexErrorInfo | ActiveTurnNotSteerableCodexErrorInfo ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ CodexErrorInfoValue | HttpConnectionFailedCodexErrorInfo | ResponseStreamConnectionFailedCodexErrorInfo | ResponseStreamDisconnectedCodexErrorInfo | ResponseTooManyFailedAttemptsCodexErrorInfo | ActiveTurnNotSteerableCodexErrorInfo, 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 CollabAgentState(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: str | None = None status: CollabAgentStatus class CollaborationMode(BaseModel): model_config = ConfigDict( populate_by_name=True, ) mode: ModeKind settings: Settings class CollaborationModeMask(BaseModel): model_config = ConfigDict( populate_by_name=True, ) mode: ModeKind | None = None model: str | None = None name: str reasoning_effort: ReasoningEffort | None = None class CommandExecOutputDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cap_reached: Annotated[ bool, Field( alias="capReached", description="`true` on the final streamed chunk for a stream when `outputBytesCap` truncated later output on that stream.", ), ] delta_base64: Annotated[ str, Field(alias="deltaBase64", description="Base64-encoded output bytes.") ] process_id: Annotated[ str, Field( alias="processId", description="Client-supplied, connection-scoped `processId` from the original `command/exec` request.", ), ] stream: Annotated[ CommandExecOutputStream, Field(description="Output stream for this chunk.") ] class CommandExecParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: Annotated[ list[str], Field(description="Command argv vector. Empty arrays are rejected.") ] cwd: Annotated[ str | None, Field(description="Optional working directory. Defaults to the server cwd."), ] = None disable_output_cap: Annotated[ bool | None, Field( alias="disableOutputCap", description="Disable stdout/stderr capture truncation for this request.\n\nCannot be combined with `outputBytesCap`.", ), ] = None disable_timeout: Annotated[ bool | None, Field( alias="disableTimeout", description="Disable the timeout entirely for this request.\n\nCannot be combined with `timeoutMs`.", ), ] = None env: Annotated[ dict[str, Any] | None, Field( 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." ), ] = None output_bytes_cap: Annotated[ int | None, Field( 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, ), ] = None process_id: Annotated[ str | None, Field( 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.", ), ] = None sandbox_policy: Annotated[ SandboxPolicy | None, Field( 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. Cannot be combined with `permissionProfile`.", ), ] = None size: Annotated[ CommandExecTerminalSize | None, Field( description="Optional initial PTY size in character cells. Only valid when `tty` is true." ), ] = None stream_stdin: Annotated[ bool | None, Field( alias="streamStdin", description="Allow follow-up `command/exec/write` requests to write stdin bytes.\n\nRequires a client-supplied `processId`.", ), ] = None stream_stdout_stderr: Annotated[ bool | None, Field( 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`.", ), ] = None timeout_ms: Annotated[ int | None, Field( alias="timeoutMs", description="Optional timeout in milliseconds.\n\nWhen omitted, the server default applies. Cannot be combined with `disableTimeout`.", ), ] = None tty: Annotated[ bool | None, Field( description="Enable PTY mode.\n\nThis implies `streamStdin` and `streamStdoutStderr`." ), ] = None class CommandExecResizeParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) process_id: Annotated[ str, Field( alias="processId", description="Client-supplied, connection-scoped `processId` from the original `command/exec` request.", ), ] size: Annotated[ CommandExecTerminalSize, Field(description="New PTY size in character cells.") ] class ConfigEdit(BaseModel): model_config = ConfigDict( populate_by_name=True, ) key_path: Annotated[str, Field(alias="keyPath")] merge_strategy: Annotated[MergeStrategy, Field(alias="mergeStrategy")] value: Any class ConfigLayer(BaseModel): model_config = ConfigDict( populate_by_name=True, ) config: Any disabled_reason: Annotated[str | None, Field(alias="disabledReason")] = None name: ConfigLayerSource version: str class ConfigLayerMetadata(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: ConfigLayerSource version: str class ConfigRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) allowed_approval_policies: Annotated[ list[AskForApproval] | None, Field(alias="allowedApprovalPolicies") ] = None allowed_sandbox_modes: Annotated[ list[SandboxMode] | None, Field(alias="allowedSandboxModes") ] = None allowed_web_search_modes: Annotated[ list[WebSearchMode] | None, Field(alias="allowedWebSearchModes") ] = None enforce_residency: Annotated[ ResidencyRequirement | None, Field(alias="enforceResidency") ] = None feature_requirements: Annotated[ dict[str, Any] | None, Field(alias="featureRequirements") ] = None class ConfigRequirementsReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) requirements: Annotated[ ConfigRequirements | None, Field( description="Null if no requirements are configured (e.g. no requirements.toml/MDM entries)." ), ] = None class ConfigValueWriteParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) expected_version: Annotated[str | None, Field(alias="expectedVersion")] = None file_path: Annotated[ str | None, Field( alias="filePath", description="Path to the config file to write; defaults to the user's `config.toml` when omitted.", ), ] = None key_path: Annotated[str, Field(alias="keyPath")] merge_strategy: Annotated[MergeStrategy, Field(alias="mergeStrategy")] value: Any class ConfigWarningNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) details: Annotated[ str | None, Field(description="Optional extra guidance or error details.") ] = None path: Annotated[ str | None, Field( description="Optional path to the config file that triggered the warning." ), ] = None range: Annotated[ TextRange | None, Field( description="Optional range for the error location inside the config file." ), ] = None summary: Annotated[str, Field(description="Concise summary of the warning.")] class InputImageContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) detail: ImageDetail | None = None image_url: str type: Annotated[Literal["input_image"], Field(title="InputImageContentItemType")] class ContentItem( RootModel[InputTextContentItem | InputImageContentItem | OutputTextContentItem] ): model_config = ConfigDict( populate_by_name=True, ) root: InputTextContentItem | InputImageContentItem | OutputTextContentItem class ExperimentalFeature(BaseModel): model_config = ConfigDict( populate_by_name=True, ) announcement: Annotated[ str | None, Field( description="Announcement copy shown to users when the feature is introduced. Null when this feature is not in beta." ), ] = None default_enabled: Annotated[ bool, Field( alias="defaultEnabled", description="Whether this feature is enabled by default.", ), ] description: Annotated[ str | None, Field( description="Short summary describing what the feature does. Null when this feature is not in beta." ), ] = None display_name: Annotated[ str | None, Field( alias="displayName", description="User-facing display name shown in the experimental features UI. Null when this feature is not in beta.", ), ] = None enabled: Annotated[ bool, Field( description="Whether this feature is currently enabled in the loaded config." ), ] name: Annotated[ str, Field(description="Stable key used in config.toml and CLI flag toggles.") ] stage: Annotated[ ExperimentalFeatureStage, Field(description="Lifecycle stage of this feature flag."), ] class ExperimentalFeatureListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: list[ExperimentalFeature] next_cursor: Annotated[ str | None, Field( alias="nextCursor", description="Opaque cursor to pass to the next call to continue after the last item. If None, there are no more items to return.", ), ] = None class SpecialFileSystemPath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["special"], Field(title="SpecialFileSystemPathType")] value: FileSystemSpecialPath class FileSystemPath( RootModel[PathFileSystemPath | GlobPatternFileSystemPath | SpecialFileSystemPath] ): model_config = ConfigDict( populate_by_name=True, ) root: PathFileSystemPath | GlobPatternFileSystemPath | SpecialFileSystemPath class FileSystemSandboxEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) access: FileSystemAccessMode path: FileSystemPath class FileUpdateChange(BaseModel): model_config = ConfigDict( populate_by_name=True, ) diff: str kind: PatchChangeKind path: str class InputImageFunctionCallOutputContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) detail: ImageDetail | None = None image_url: str type: Annotated[ Literal["input_image"], Field(title="InputImageFunctionCallOutputContentItemType"), ] class FunctionCallOutputContentItem( RootModel[ InputTextFunctionCallOutputContentItem | InputImageFunctionCallOutputContentItem ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ 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 GetAccountResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) account: Account | None = None requires_openai_auth: Annotated[bool, Field(alias="requiresOpenaiAuth")] class GuardianApprovalReview(BaseModel): model_config = ConfigDict( populate_by_name=True, ) rationale: str | None = None risk_level: Annotated[GuardianRiskLevel | None, Field(alias="riskLevel")] = None status: GuardianApprovalReviewStatus user_authorization: Annotated[ GuardianUserAuthorization | None, Field(alias="userAuthorization") ] = None class CommandGuardianApprovalReviewAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: str cwd: AbsolutePathBuf source: GuardianCommandSource type: Annotated[ Literal["command"], Field(title="CommandGuardianApprovalReviewActionType") ] class ExecveGuardianApprovalReviewAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) argv: list[str] cwd: AbsolutePathBuf program: str source: GuardianCommandSource type: Annotated[ Literal["execve"], Field(title="ExecveGuardianApprovalReviewActionType") ] class NetworkAccessGuardianApprovalReviewAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) host: str port: Annotated[int, Field(ge=0)] protocol: NetworkApprovalProtocol target: str type: Annotated[ Literal["networkAccess"], Field(title="NetworkAccessGuardianApprovalReviewActionType"), ] class HookMetadata(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: str | None = None current_hash: Annotated[str, Field(alias="currentHash")] display_order: Annotated[int, Field(alias="displayOrder")] enabled: bool event_name: Annotated[HookEventName, Field(alias="eventName")] handler_type: Annotated[HookHandlerType, Field(alias="handlerType")] is_managed: Annotated[bool, Field(alias="isManaged")] key: str matcher: str | None = None plugin_id: Annotated[str | None, Field(alias="pluginId")] = None source: HookSource source_path: Annotated[AbsolutePathBuf, Field(alias="sourcePath")] status_message: Annotated[str | None, Field(alias="statusMessage")] = None timeout_sec: Annotated[int, Field(alias="timeoutSec", ge=0)] trust_status: Annotated[HookTrustStatus, Field(alias="trustStatus")] class HookOutputEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind: HookOutputEntryKind text: str class HookRunSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) completed_at: Annotated[int | None, Field(alias="completedAt")] = None display_order: Annotated[int, Field(alias="displayOrder")] duration_ms: Annotated[int | None, Field(alias="durationMs")] = None entries: list[HookOutputEntry] event_name: Annotated[HookEventName, Field(alias="eventName")] execution_mode: Annotated[HookExecutionMode, Field(alias="executionMode")] handler_type: Annotated[HookHandlerType, Field(alias="handlerType")] id: str scope: HookScope source: HookSource | None = "unknown" source_path: Annotated[AbsolutePathBuf, Field(alias="sourcePath")] started_at: Annotated[int, Field(alias="startedAt")] status: HookRunStatus status_message: Annotated[str | None, Field(alias="statusMessage")] = None class HookStartedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) run: HookRunSummary thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str | None, Field(alias="turnId")] = None class HooksListEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: str errors: list[HookErrorInfo] hooks: list[HookMetadata] warnings: list[str] class HooksListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: list[HooksListEntry] class ListMcpServerStatusParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cursor: Annotated[ str | None, Field(description="Opaque pagination cursor returned by a previous call."), ] = None detail: Annotated[ McpServerStatusDetail | None, Field( description="Controls how much MCP inventory data to fetch for each server. Defaults to `Full` when omitted." ), ] = None limit: Annotated[ int | None, Field( description="Optional page size; defaults to a server-defined value.", ge=0 ), ] = None class McpResourceReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) contents: list[ResourceContent] class McpServerStatus(BaseModel): model_config = ConfigDict( populate_by_name=True, ) auth_status: Annotated[McpAuthStatus, Field(alias="authStatus")] name: str resource_templates: Annotated[ list[ResourceTemplate], Field(alias="resourceTemplates") ] resources: list[Resource] tools: dict[str, Tool] class MemoryCitation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) entries: list[MemoryCitationEntry] thread_ids: Annotated[list[str], Field(alias="threadIds")] class MigrationDetails(BaseModel): model_config = ConfigDict( populate_by_name=True, ) commands: list[CommandMigration] | None = [] hooks: list[HookMigration] | None = [] mcp_servers: Annotated[ list[McpServerMigration] | None, Field(alias="mcpServers") ] = [] plugins: list[PluginsMigration] | None = [] sessions: list[SessionMigration] | None = [] subagents: list[SubagentMigration] | None = [] class Model(BaseModel): model_config = ConfigDict( populate_by_name=True, ) additional_speed_tiers: Annotated[ list[str] | None, Field( alias="additionalSpeedTiers", description="Deprecated: use `serviceTiers` instead.", ), ] = [] availability_nux: Annotated[ ModelAvailabilityNux | None, Field(alias="availabilityNux") ] = None default_reasoning_effort: Annotated[ ReasoningEffort, Field(alias="defaultReasoningEffort") ] description: str display_name: Annotated[str, Field(alias="displayName")] hidden: bool id: str input_modalities: Annotated[ list[InputModality] | None, Field(alias="inputModalities") ] = ["text", "image"] is_default: Annotated[bool, Field(alias="isDefault")] model: str service_tiers: Annotated[ list[ModelServiceTier] | None, Field(alias="serviceTiers") ] = [] supported_reasoning_efforts: Annotated[ list[ReasoningEffortOption], Field(alias="supportedReasoningEfforts") ] supports_personality: Annotated[bool | None, Field(alias="supportsPersonality")] = ( False ) upgrade: str | None = None upgrade_info: Annotated[ModelUpgradeInfo | None, Field(alias="upgradeInfo")] = None class ModelListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: list[Model] next_cursor: Annotated[ str | None, Field( alias="nextCursor", description="Opaque cursor to pass to the next call to continue after the last item. If None, there are no more items to return.", ), ] = None class OverriddenMetadata(BaseModel): model_config = ConfigDict( populate_by_name=True, ) effective_value: Annotated[Any, Field(alias="effectiveValue")] message: str overriding_layer: Annotated[ConfigLayerMetadata, Field(alias="overridingLayer")] class ExternalPermissionProfile(BaseModel): model_config = ConfigDict( populate_by_name=True, ) network: PermissionProfileNetworkPermissions type: Annotated[Literal["external"], Field(title="ExternalPermissionProfileType")] class RestrictedPermissionProfileFileSystemPermissions(BaseModel): model_config = ConfigDict( populate_by_name=True, ) entries: list[FileSystemSandboxEntry] glob_scan_max_depth: Annotated[ int | None, Field(alias="globScanMaxDepth", ge=1) ] = None type: Annotated[ Literal["restricted"], Field(title="RestrictedPermissionProfileFileSystemPermissionsType"), ] class PermissionProfileFileSystemPermissions( RootModel[ RestrictedPermissionProfileFileSystemPermissions | UnrestrictedPermissionProfileFileSystemPermissions ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( RestrictedPermissionProfileFileSystemPermissions | UnrestrictedPermissionProfileFileSystemPermissions ) class PluginSharePrincipal(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str principal_id: Annotated[str, Field(alias="principalId")] principal_type: Annotated[PluginSharePrincipalType, Field(alias="principalType")] role: PluginSharePrincipalRole class PluginShareTarget(BaseModel): model_config = ConfigDict( populate_by_name=True, ) principal_id: Annotated[str, Field(alias="principalId")] principal_type: Annotated[PluginSharePrincipalType, Field(alias="principalType")] role: PluginShareTargetRole class PluginShareUpdateTargetsParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) discoverability: PluginShareUpdateDiscoverability remote_plugin_id: Annotated[str, Field(alias="remotePluginId")] share_targets: Annotated[list[PluginShareTarget], Field(alias="shareTargets")] class PluginShareUpdateTargetsResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) discoverability: PluginShareDiscoverability principals: list[PluginSharePrincipal] class ProcessOutputDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cap_reached: Annotated[ bool, Field( alias="capReached", description="True on the final streamed chunk for this stream when output was truncated by `outputBytesCap`.", ), ] delta_base64: Annotated[ str, Field(alias="deltaBase64", description="Base64-encoded output bytes.") ] process_handle: Annotated[ str, Field( alias="processHandle", description="Client-supplied, connection-scoped `processHandle` from `process/spawn`.", ), ] stream: Annotated[ ProcessOutputStream, Field(description="Output stream this chunk belongs to.") ] class RateLimitSnapshot(BaseModel): model_config = ConfigDict( populate_by_name=True, ) credits: CreditsSnapshot | None = None limit_id: Annotated[str | None, Field(alias="limitId")] = None limit_name: Annotated[str | None, Field(alias="limitName")] = None plan_type: Annotated[PlanType | None, Field(alias="planType")] = None primary: RateLimitWindow | None = None rate_limit_reached_type: Annotated[ RateLimitReachedType | None, Field(alias="rateLimitReachedType") ] = None secondary: RateLimitWindow | None = None class MessageResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) content: list[ContentItem] id: str | None = None phase: MessagePhase | None = None role: str type: Annotated[Literal["message"], Field(title="MessageResponseItemType")] class WebSearchCallResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) action: ResponsesApiWebSearchAction | None = None id: str | None = None status: str | None = None type: Annotated[ Literal["web_search_call"], Field(title="WebSearchCallResponseItemType") ] class ReviewStartParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) delivery: Annotated[ ReviewDelivery | None, Field( description="Where to run the review: inline (default) on the current thread or detached on a new thread (returned in `reviewThreadId`)." ), ] = None target: ReviewTarget thread_id: Annotated[str, Field(alias="threadId")] class ThreadStatusChangedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/status/changed"], Field(title="Thread/status/changedNotificationMethod"), ] params: ThreadStatusChangedNotification class ThreadArchivedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/archived"], Field(title="Thread/archivedNotificationMethod") ] params: ThreadArchivedNotification class ThreadUnarchivedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/unarchived"], Field(title="Thread/unarchivedNotificationMethod") ] params: ThreadUnarchivedNotification class ThreadClosedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/closed"], Field(title="Thread/closedNotificationMethod") ] params: ThreadClosedNotification class SkillsChangedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["skills/changed"], Field(title="Skills/changedNotificationMethod") ] params: SkillsChangedNotification class ThreadNameUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/name/updated"], Field(title="Thread/name/updatedNotificationMethod"), ] params: ThreadNameUpdatedNotification class ThreadGoalClearedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/goal/cleared"], Field(title="Thread/goal/clearedNotificationMethod"), ] params: ThreadGoalClearedNotification class HookStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["hook/started"], Field(title="Hook/startedNotificationMethod") ] params: HookStartedNotification class TurnDiffUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["turn/diff/updated"], Field(title="Turn/diff/updatedNotificationMethod") ] params: TurnDiffUpdatedNotification class CommandExecOutputDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["command/exec/outputDelta"], Field(title="Command/exec/outputDeltaNotificationMethod"), ] params: CommandExecOutputDeltaNotification class ProcessOutputDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["process/outputDelta"], Field(title="Process/outputDeltaNotificationMethod"), ] params: ProcessOutputDeltaNotification class ItemCommandExecutionTerminalInteractionServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/commandExecution/terminalInteraction"], Field(title="Item/commandExecution/terminalInteractionNotificationMethod"), ] params: TerminalInteractionNotification class ServerRequestResolvedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["serverRequest/resolved"], Field(title="ServerRequest/resolvedNotificationMethod"), ] params: ServerRequestResolvedNotification class AccountUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["account/updated"], Field(title="Account/updatedNotificationMethod") ] params: AccountUpdatedNotification class WarningServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[Literal["warning"], Field(title="WarningNotificationMethod")] params: WarningNotification class ConfigWarningServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["configWarning"], Field(title="ConfigWarningNotificationMethod") ] params: ConfigWarningNotification class ThreadRealtimeStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/realtime/started"], Field(title="Thread/realtime/startedNotificationMethod"), ] params: ThreadRealtimeStartedNotification class ThreadRealtimeItemAddedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/realtime/itemAdded"], Field(title="Thread/realtime/itemAddedNotificationMethod"), ] params: ThreadRealtimeItemAddedNotification class ThreadRealtimeTranscriptDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/realtime/transcript/delta"], Field(title="Thread/realtime/transcript/deltaNotificationMethod"), ] params: ThreadRealtimeTranscriptDeltaNotification class ThreadRealtimeTranscriptDoneServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/realtime/transcript/done"], Field(title="Thread/realtime/transcript/doneNotificationMethod"), ] params: ThreadRealtimeTranscriptDoneNotification class ThreadRealtimeOutputAudioDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/realtime/outputAudio/delta"], Field(title="Thread/realtime/outputAudio/deltaNotificationMethod"), ] params: ThreadRealtimeOutputAudioDeltaNotification class ThreadRealtimeSdpServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/realtime/sdp"], Field(title="Thread/realtime/sdpNotificationMethod"), ] params: ThreadRealtimeSdpNotification class ThreadRealtimeErrorServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/realtime/error"], Field(title="Thread/realtime/errorNotificationMethod"), ] params: ThreadRealtimeErrorNotification class ThreadRealtimeClosedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/realtime/closed"], Field(title="Thread/realtime/closedNotificationMethod"), ] params: ThreadRealtimeClosedNotification class WindowsWorldWritableWarningServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["windows/worldWritableWarning"], Field(title="Windows/worldWritableWarningNotificationMethod"), ] params: WindowsWorldWritableWarningNotification class SkillDependencies(BaseModel): model_config = ConfigDict( populate_by_name=True, ) tools: list[SkillToolDependency] class SkillMetadata(BaseModel): model_config = ConfigDict( populate_by_name=True, ) dependencies: SkillDependencies | None = None description: str enabled: bool interface: SkillInterface | None = None name: str path: AbsolutePathBuf scope: SkillScope short_description: Annotated[ str | None, Field( alias="shortDescription", description="Legacy short_description from SKILL.md. Prefer SKILL.json interface.short_description.", ), ] = None class SkillsListEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: str errors: list[SkillErrorInfo] skills: list[SkillMetadata] class SkillsListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: list[SkillsListEntry] class ThreadSpawn(BaseModel): model_config = ConfigDict( populate_by_name=True, ) agent_nickname: str | None = None agent_path: AgentPath | None = None agent_role: str | None = None depth: int parent_thread_id: ThreadId class ThreadSpawnSubAgentSource(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) thread_spawn: ThreadSpawn class SubAgentSource( RootModel[SubAgentSourceValue | ThreadSpawnSubAgentSource | OtherSubAgentSource] ): model_config = ConfigDict( populate_by_name=True, ) root: SubAgentSourceValue | ThreadSpawnSubAgentSource | OtherSubAgentSource class ThreadForkParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approval_policy: Annotated[AskForApproval | None, Field(alias="approvalPolicy")] = ( None ) approvals_reviewer: Annotated[ ApprovalsReviewer | None, Field( alias="approvalsReviewer", description="Override where approval requests are routed for review on this thread and subsequent turns.", ), ] = None base_instructions: Annotated[str | None, Field(alias="baseInstructions")] = None config: dict[str, Any] | None = None cwd: str | None = None developer_instructions: Annotated[ str | None, Field(alias="developerInstructions") ] = None ephemeral: bool | None = None model: Annotated[ str | None, Field(description="Configuration overrides for the forked thread, if any."), ] = None model_provider: Annotated[str | None, Field(alias="modelProvider")] = None sandbox: SandboxMode | None = None service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread_id: Annotated[str, Field(alias="threadId")] thread_source: Annotated[ ThreadSource | None, Field( alias="threadSource", description="Optional client-supplied analytics source classification for this forked thread.", ), ] = None class ThreadGoal(BaseModel): model_config = ConfigDict( populate_by_name=True, ) created_at: Annotated[int, Field(alias="createdAt")] objective: str status: ThreadGoalStatus thread_id: Annotated[str, Field(alias="threadId")] time_used_seconds: Annotated[int, Field(alias="timeUsedSeconds")] token_budget: Annotated[int | None, Field(alias="tokenBudget")] = None tokens_used: Annotated[int, Field(alias="tokensUsed")] updated_at: Annotated[int, Field(alias="updatedAt")] class ThreadGoalUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) goal: ThreadGoal thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str | None, Field(alias="turnId")] = None class UserMessageThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) content: list[UserInput] id: str type: Annotated[Literal["userMessage"], Field(title="UserMessageThreadItemType")] class AgentMessageThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str memory_citation: Annotated[MemoryCitation | None, Field(alias="memoryCitation")] = ( None ) phase: MessagePhase | None = None text: str type: Annotated[Literal["agentMessage"], Field(title="AgentMessageThreadItemType")] class FileChangeThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) changes: list[FileUpdateChange] id: str status: PatchApplyStatus type: Annotated[Literal["fileChange"], Field(title="FileChangeThreadItemType")] class CollabAgentToolCallThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) agents_states: Annotated[ dict[str, CollabAgentState], Field( alias="agentsStates", description="Last known status of the target agents, when available.", ), ] id: Annotated[ str, Field(description="Unique identifier for this collab tool call.") ] model: Annotated[ str | None, Field(description="Model requested for the spawned agent, when applicable."), ] = None prompt: Annotated[ str | None, Field( description="Prompt text sent as part of the collab tool call, when available." ), ] = None reasoning_effort: Annotated[ ReasoningEffort | None, Field( alias="reasoningEffort", description="Reasoning effort requested for the spawned agent, when applicable.", ), ] = None receiver_thread_ids: Annotated[ 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: Annotated[ str, Field( alias="senderThreadId", description="Thread ID of the agent issuing the collab request.", ), ] status: Annotated[ CollabAgentToolCallStatus, Field(description="Current status of the collab tool call."), ] tool: Annotated[ CollabAgentTool, Field(description="Name of the collab tool that was invoked.") ] type: Annotated[ Literal["collabAgentToolCall"], Field(title="CollabAgentToolCallThreadItemType") ] class WebSearchThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) action: WebSearchAction | None = None id: str query: str type: Annotated[Literal["webSearch"], Field(title="WebSearchThreadItemType")] class ThreadItem( RootModel[ UserMessageThreadItem | HookPromptThreadItem | AgentMessageThreadItem | PlanThreadItem | ReasoningThreadItem | CommandExecutionThreadItem | FileChangeThreadItem | McpToolCallThreadItem | DynamicToolCallThreadItem | CollabAgentToolCallThreadItem | WebSearchThreadItem | ImageViewThreadItem | ImageGenerationThreadItem | EnteredReviewModeThreadItem | ExitedReviewModeThreadItem | ContextCompactionThreadItem ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( UserMessageThreadItem | HookPromptThreadItem | AgentMessageThreadItem | PlanThreadItem | ReasoningThreadItem | CommandExecutionThreadItem | FileChangeThreadItem | McpToolCallThreadItem | DynamicToolCallThreadItem | CollabAgentToolCallThreadItem | WebSearchThreadItem | ImageViewThreadItem | ImageGenerationThreadItem | EnteredReviewModeThreadItem | ExitedReviewModeThreadItem | ContextCompactionThreadItem ) class ThreadListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) archived: Annotated[ bool | None, Field( description="Optional archived filter; when set to true, only archived threads are returned. If false or null, only non-archived threads are returned." ), ] = None cursor: Annotated[ str | None, Field(description="Opaque pagination cursor returned by a previous call."), ] = None cwd: Annotated[ ThreadListCwdFilter | None, Field( description="Optional cwd filter or filters; when set, only threads whose session cwd exactly matches one of these paths are returned." ), ] = None limit: Annotated[ int | None, Field( description="Optional page size; defaults to a reasonable server-side value.", ge=0, ), ] = None model_providers: Annotated[ list[str] | None, Field( alias="modelProviders", description="Optional provider filter; when set, only sessions recorded under these providers are returned. When present but empty, includes all providers.", ), ] = None search_term: Annotated[ str | None, Field( alias="searchTerm", description="Optional substring filter for the extracted thread title.", ), ] = None sort_direction: Annotated[ SortDirection | None, Field( alias="sortDirection", description="Optional sort direction; defaults to descending (newest first).", ), ] = None sort_key: Annotated[ ThreadSortKey | None, Field( alias="sortKey", description="Optional sort key; defaults to created_at." ), ] = None source_kinds: Annotated[ list[ThreadSourceKind] | None, Field( alias="sourceKinds", description="Optional source filter; when set, only sessions from these source kinds are returned. When omitted or empty, defaults to interactive sources.", ), ] = None use_state_db_only: Annotated[ bool | None, Field( alias="useStateDbOnly", description="If true, return from the state DB without scanning JSONL rollouts to repair thread metadata. Omitted or false preserves scan-and-repair behavior.", ), ] = None class ThreadStartParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approval_policy: Annotated[AskForApproval | None, Field(alias="approvalPolicy")] = ( None ) approvals_reviewer: Annotated[ ApprovalsReviewer | None, Field( alias="approvalsReviewer", description="Override where approval requests are routed for review on this thread and subsequent turns.", ), ] = None base_instructions: Annotated[str | None, Field(alias="baseInstructions")] = None config: dict[str, Any] | None = None cwd: str | None = None developer_instructions: Annotated[ str | None, Field(alias="developerInstructions") ] = None ephemeral: bool | None = None model: str | None = None model_provider: Annotated[str | None, Field(alias="modelProvider")] = None personality: Personality | None = None sandbox: SandboxMode | None = None service_name: Annotated[str | None, Field(alias="serviceName")] = None service_tier: Annotated[str | None, Field(alias="serviceTier")] = None session_start_source: Annotated[ ThreadStartSource | None, Field(alias="sessionStartSource") ] = None thread_source: Annotated[ ThreadSource | None, Field( alias="threadSource", description="Optional client-supplied analytics source classification for this thread.", ), ] = None class ThreadTokenUsage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) last: TokenUsageBreakdown model_context_window: Annotated[int | None, Field(alias="modelContextWindow")] = ( None ) total: TokenUsageBreakdown class ThreadTokenUsageUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] token_usage: Annotated[ThreadTokenUsage, Field(alias="tokenUsage")] turn_id: Annotated[str, Field(alias="turnId")] class ThreadUnsubscribeResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: ThreadUnsubscribeStatus class ToolsV2(BaseModel): model_config = ConfigDict( populate_by_name=True, ) view_image: bool | None = None web_search: WebSearchToolConfig | None = None class TurnError(BaseModel): model_config = ConfigDict( populate_by_name=True, ) additional_details: Annotated[str | None, Field(alias="additionalDetails")] = None codex_error_info: Annotated[ CodexErrorInfo | None, Field(alias="codexErrorInfo") ] = None message: str class TurnPlanStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: TurnPlanStepStatus step: str class TurnPlanUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) explanation: str | None = None plan: list[TurnPlanStep] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class TurnStartParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approval_policy: Annotated[ AskForApproval | None, Field( alias="approvalPolicy", description="Override the approval policy for this turn and subsequent turns.", ), ] = None approvals_reviewer: Annotated[ ApprovalsReviewer | None, Field( alias="approvalsReviewer", description="Override where approval requests are routed for review on this turn and subsequent turns.", ), ] = None cwd: Annotated[ str | None, Field( description="Override the working directory for this turn and subsequent turns." ), ] = None effort: Annotated[ ReasoningEffort | None, Field( description="Override the reasoning effort for this turn and subsequent turns." ), ] = None input: list[UserInput] model: Annotated[ str | None, Field(description="Override the model for this turn and subsequent turns."), ] = None output_schema: Annotated[ Any | None, Field( alias="outputSchema", description="Optional JSON Schema used to constrain the final assistant message for this turn.", ), ] = None personality: Annotated[ Personality | None, Field( description="Override the personality for this turn and subsequent turns." ), ] = None sandbox_policy: Annotated[ SandboxPolicy | None, Field( alias="sandboxPolicy", description="Override the sandbox policy for this turn and subsequent turns.", ), ] = None service_tier: Annotated[ str | None, Field( alias="serviceTier", description="Override the service tier for this turn and subsequent turns.", ), ] = None summary: Annotated[ ReasoningSummary | None, Field( description="Override the reasoning summary for this turn and subsequent turns." ), ] = None thread_id: Annotated[str, Field(alias="threadId")] class TurnSteerParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) expected_turn_id: Annotated[ 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: Annotated[str, Field(alias="threadId")] class WindowsSandboxSetupCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) error: str | None = None mode: WindowsSandboxSetupMode success: bool class AccountRateLimitsUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) rate_limits: Annotated[RateLimitSnapshot, Field(alias="rateLimits")] class AdditionalFileSystemPermissions(BaseModel): model_config = ConfigDict( populate_by_name=True, ) entries: list[FileSystemSandboxEntry] | None = None glob_scan_max_depth: Annotated[ int | None, Field(alias="globScanMaxDepth", ge=1) ] = None read: Annotated[ list[AbsolutePathBuf] | None, Field(description="This will be removed in favor of `entries`."), ] = None write: Annotated[ list[AbsolutePathBuf] | None, Field(description="This will be removed in favor of `entries`."), ] = None class AppInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) app_metadata: Annotated[AppMetadata | None, Field(alias="appMetadata")] = None branding: AppBranding | None = None description: str | None = None distribution_channel: Annotated[str | None, Field(alias="distributionChannel")] = ( None ) id: str install_url: Annotated[str | None, Field(alias="installUrl")] = None is_accessible: Annotated[bool | None, Field(alias="isAccessible")] = False is_enabled: Annotated[ bool | None, Field( alias="isEnabled", description="Whether this app is enabled in config.toml. Example: ```toml [apps.bad_app] enabled = false ```", ), ] = True labels: dict[str, Any] | None = None logo_url: Annotated[str | None, Field(alias="logoUrl")] = None logo_url_dark: Annotated[str | None, Field(alias="logoUrlDark")] = None name: str plugin_display_names: Annotated[ list[str] | None, Field(alias="pluginDisplayNames") ] = [] class AppListUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: list[AppInfo] class AppsListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: list[AppInfo] next_cursor: Annotated[ str | None, Field( alias="nextCursor", description="Opaque cursor to pass to the next call to continue after the last item. If None, there are no more items to return.", ), ] = None class ThreadStartRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/start"], Field(title="Thread/startRequestMethod")] params: ThreadStartParams class ThreadForkRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/fork"], Field(title="Thread/forkRequestMethod")] params: ThreadForkParams class ThreadListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/list"], Field(title="Thread/listRequestMethod")] params: ThreadListParams class PluginShareUpdateTargetsRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["plugin/share/updateTargets"], Field(title="Plugin/share/updateTargetsRequestMethod"), ] params: PluginShareUpdateTargetsParams class TurnStartRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["turn/start"], Field(title="Turn/startRequestMethod")] params: TurnStartParams class TurnSteerRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["turn/steer"], Field(title="Turn/steerRequestMethod")] params: TurnSteerParams class ReviewStartRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["review/start"], Field(title="Review/startRequestMethod")] params: ReviewStartParams class McpServerStatusListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["mcpServerStatus/list"], Field(title="McpServerStatus/listRequestMethod"), ] params: ListMcpServerStatusParams class CommandExecRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["command/exec"], Field(title="Command/execRequestMethod")] params: CommandExecParams class CommandExecResizeRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["command/exec/resize"], Field(title="Command/exec/resizeRequestMethod") ] params: CommandExecResizeParams class ConfigValueWriteRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["config/value/write"], Field(title="Config/value/writeRequestMethod") ] params: ConfigValueWriteParams class ConfigBatchWriteParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) edits: list[ConfigEdit] expected_version: Annotated[str | None, Field(alias="expectedVersion")] = None file_path: Annotated[ str | None, Field( alias="filePath", description="Path to the config file to write; defaults to the user's `config.toml` when omitted.", ), ] = None reload_user_config: Annotated[ bool | None, Field( alias="reloadUserConfig", description="When true, hot-reload the updated user config into all loaded threads after writing.", ), ] = None class ConfigWriteResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file_path: Annotated[ AbsolutePathBuf, Field( alias="filePath", description="Canonical path to the config file that was written.", ), ] overridden_metadata: Annotated[ OverriddenMetadata | None, Field(alias="overriddenMetadata") ] = None status: WriteStatus version: str class ErrorNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) error: TurnError thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] will_retry: Annotated[bool, Field(alias="willRetry")] class ExternalAgentConfigMigrationItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: Annotated[ str | None, Field( description="Null or empty means home-scoped migration; non-empty means repo-scoped migration." ), ] = None description: str details: MigrationDetails | None = None item_type: Annotated[ExternalAgentConfigMigrationItemType, Field(alias="itemType")] class FileChangePatchUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) changes: list[FileUpdateChange] item_id: Annotated[str, Field(alias="itemId")] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class FunctionCallOutputBody(RootModel[str | list[FunctionCallOutputContentItem]]): model_config = ConfigDict( populate_by_name=True, ) root: str | list[FunctionCallOutputContentItem] class GetAccountRateLimitsResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) rate_limits: Annotated[ RateLimitSnapshot, Field( alias="rateLimits", description="Backward-compatible single-bucket view; mirrors the historical payload.", ), ] rate_limits_by_limit_id: Annotated[ dict[str, Any] | None, Field( alias="rateLimitsByLimitId", description="Multi-bucket view keyed by metered `limit_id` (for example, `codex`).", ), ] = None class HookCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) run: HookRunSummary thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str | None, Field(alias="turnId")] = None class ItemCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) completed_at_ms: Annotated[ int, Field( alias="completedAtMs", description="Unix timestamp (in milliseconds) when this item lifecycle completed.", ), ] item: ThreadItem thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class ItemStartedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item: ThreadItem started_at_ms: Annotated[ int, Field( alias="startedAtMs", description="Unix timestamp (in milliseconds) when this item lifecycle started.", ), ] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class ListMcpServerStatusResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: list[McpServerStatus] next_cursor: Annotated[ str | None, Field( alias="nextCursor", description="Opaque cursor to pass to the next call to continue after the last item. If None, there are no more items to return.", ), ] = None class ManagedPermissionProfile(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file_system: Annotated[ PermissionProfileFileSystemPermissions, Field(alias="fileSystem") ] network: PermissionProfileNetworkPermissions type: Annotated[Literal["managed"], Field(title="ManagedPermissionProfileType")] class PermissionProfile( RootModel[ ManagedPermissionProfile | DisabledPermissionProfile | ExternalPermissionProfile ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( ManagedPermissionProfile | DisabledPermissionProfile | ExternalPermissionProfile ) class PluginShareContext(BaseModel): model_config = ConfigDict( populate_by_name=True, ) creator_account_user_id: Annotated[ str | None, Field(alias="creatorAccountUserId") ] = None creator_name: Annotated[str | None, Field(alias="creatorName")] = None discoverability: PluginShareDiscoverability | None = None remote_plugin_id: Annotated[str, Field(alias="remotePluginId")] share_principals: Annotated[ list[PluginSharePrincipal] | None, Field(alias="sharePrincipals") ] = None share_url: Annotated[str | None, Field(alias="shareUrl")] = None class PluginShareSaveParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) discoverability: PluginShareDiscoverability | None = None plugin_path: Annotated[AbsolutePathBuf, Field(alias="pluginPath")] remote_plugin_id: Annotated[str | None, Field(alias="remotePluginId")] = None share_targets: Annotated[ list[PluginShareTarget] | None, Field(alias="shareTargets") ] = None class PluginSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) auth_policy: Annotated[PluginAuthPolicy, Field(alias="authPolicy")] availability: Annotated[ PluginAvailability | None, Field(description="Availability state for installing and using the plugin."), ] = "AVAILABLE" enabled: bool id: str install_policy: Annotated[PluginInstallPolicy, Field(alias="installPolicy")] installed: bool interface: PluginInterface | None = None keywords: list[str] | None = [] name: str share_context: Annotated[ PluginShareContext | None, Field( alias="shareContext", description="Remote sharing context associated with this plugin when available.", ), ] = None source: PluginSource class ProfileV2(BaseModel): model_config = ConfigDict( extra="allow", populate_by_name=True, ) approval_policy: AskForApproval | None = None approvals_reviewer: Annotated[ ApprovalsReviewer | None, Field( description="[UNSTABLE] Optional profile-level override for where approval requests are routed for review. If omitted, the enclosing config default is used." ), ] = None chatgpt_base_url: str | None = None model: str | None = None model_provider: str | None = None model_reasoning_effort: ReasoningEffort | None = None model_reasoning_summary: ReasoningSummary | None = None model_verbosity: Verbosity | None = None service_tier: str | None = None tools: ToolsV2 | None = None web_search: WebSearchMode | None = None class RequestPermissionProfile(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) file_system: Annotated[ AdditionalFileSystemPermissions | None, Field(alias="fileSystem") ] = None network: AdditionalNetworkPermissions | None = None class FunctionCallOutputResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) call_id: str output: FunctionCallOutputBody type: Annotated[ Literal["function_call_output"], Field(title="FunctionCallOutputResponseItemType"), ] class CustomToolCallOutputResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) call_id: str name: str | None = None output: FunctionCallOutputBody type: Annotated[ Literal["custom_tool_call_output"], Field(title="CustomToolCallOutputResponseItemType"), ] class ResponseItem( RootModel[ MessageResponseItem | ReasoningResponseItem | LocalShellCallResponseItem | FunctionCallResponseItem | ToolSearchCallResponseItem | FunctionCallOutputResponseItem | CustomToolCallResponseItem | CustomToolCallOutputResponseItem | ToolSearchOutputResponseItem | WebSearchCallResponseItem | ImageGenerationCallResponseItem | CompactionResponseItem | ContextCompactionResponseItem | OtherResponseItem ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( MessageResponseItem | ReasoningResponseItem | LocalShellCallResponseItem | FunctionCallResponseItem | ToolSearchCallResponseItem | FunctionCallOutputResponseItem | CustomToolCallResponseItem | CustomToolCallOutputResponseItem | ToolSearchOutputResponseItem | WebSearchCallResponseItem | ImageGenerationCallResponseItem | CompactionResponseItem | ContextCompactionResponseItem | OtherResponseItem ) class ErrorServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[Literal["error"], Field(title="ErrorNotificationMethod")] params: ErrorNotification class ThreadGoalUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/goal/updated"], Field(title="Thread/goal/updatedNotificationMethod"), ] params: ThreadGoalUpdatedNotification class ThreadTokenUsageUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/tokenUsage/updated"], Field(title="Thread/tokenUsage/updatedNotificationMethod"), ] params: ThreadTokenUsageUpdatedNotification class HookCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["hook/completed"], Field(title="Hook/completedNotificationMethod") ] params: HookCompletedNotification class TurnPlanUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["turn/plan/updated"], Field(title="Turn/plan/updatedNotificationMethod") ] params: TurnPlanUpdatedNotification class ItemStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/started"], Field(title="Item/startedNotificationMethod") ] params: ItemStartedNotification class ItemCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/completed"], Field(title="Item/completedNotificationMethod") ] params: ItemCompletedNotification class ItemFileChangePatchUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/fileChange/patchUpdated"], Field(title="Item/fileChange/patchUpdatedNotificationMethod"), ] params: FileChangePatchUpdatedNotification class AccountRateLimitsUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["account/rateLimits/updated"], Field(title="Account/rateLimits/updatedNotificationMethod"), ] params: AccountRateLimitsUpdatedNotification class AppListUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["app/list/updated"], Field(title="App/list/updatedNotificationMethod") ] params: AppListUpdatedNotification class WindowsSandboxSetupCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["windowsSandbox/setupCompleted"], Field(title="WindowsSandbox/setupCompletedNotificationMethod"), ] params: WindowsSandboxSetupCompletedNotification class SubAgentSessionSource(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) sub_agent: Annotated[SubAgentSource, Field(alias="subAgent")] class SessionSource( RootModel[SessionSourceValue | CustomSessionSource | SubAgentSessionSource] ): model_config = ConfigDict( populate_by_name=True, ) root: SessionSourceValue | CustomSessionSource | SubAgentSessionSource class Turn(BaseModel): model_config = ConfigDict( populate_by_name=True, ) completed_at: Annotated[ int | None, Field( alias="completedAt", description="Unix timestamp (in seconds) when the turn completed.", ), ] = None duration_ms: Annotated[ int | None, Field( alias="durationMs", description="Duration between turn start and completion in milliseconds, if known.", ), ] = None error: Annotated[ TurnError | None, Field(description="Only populated when the Turn's status is failed."), ] = None id: str items: Annotated[ list[ThreadItem], Field(description="Thread items currently included in this turn payload."), ] items_view: Annotated[ TurnItemsView | None, Field( alias="itemsView", description="Describes how much of `items` has been loaded for this turn.", ), ] = "full" started_at: Annotated[ int | None, Field( alias="startedAt", description="Unix timestamp (in seconds) when the turn started.", ), ] = None status: TurnStatus class TurnCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] turn: Turn class TurnStartResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) turn: Turn class TurnStartedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] turn: Turn class PluginShareSaveRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["plugin/share/save"], Field(title="Plugin/share/saveRequestMethod") ] params: PluginShareSaveParams class ConfigBatchWriteRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["config/batchWrite"], Field(title="Config/batchWriteRequestMethod") ] params: ConfigBatchWriteParams class Config(BaseModel): model_config = ConfigDict( extra="allow", populate_by_name=True, ) analytics: AnalyticsConfig | None = None approval_policy: AskForApproval | None = None approvals_reviewer: Annotated[ ApprovalsReviewer | None, Field( description="[UNSTABLE] Optional default for where approval requests are routed for review." ), ] = None compact_prompt: str | None = None developer_instructions: str | None = None forced_chatgpt_workspace_id: str | None = None forced_login_method: ForcedLoginMethod | None = None instructions: str | None = None model: str | None = None model_auto_compact_token_limit: int | None = None model_context_window: int | None = None model_provider: str | None = None model_reasoning_effort: ReasoningEffort | None = None model_reasoning_summary: ReasoningSummary | None = None model_verbosity: Verbosity | None = None profile: str | None = None profiles: dict[str, ProfileV2] | None = {} review_model: str | None = None sandbox_mode: SandboxMode | None = None sandbox_workspace_write: SandboxWorkspaceWrite | None = None service_tier: str | None = None tools: ToolsV2 | None = None web_search: WebSearchMode | None = None class ConfigReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) config: Config layers: list[ConfigLayer] | None = None origins: dict[str, ConfigLayerMetadata] class ExternalAgentConfigDetectResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) items: list[ExternalAgentConfigMigrationItem] class ExternalAgentConfigImportParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) migration_items: Annotated[ list[ExternalAgentConfigMigrationItem], Field(alias="migrationItems") ] class RequestPermissionsGuardianApprovalReviewAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) permissions: RequestPermissionProfile reason: str | None = None type: Annotated[ Literal["requestPermissions"], Field(title="RequestPermissionsGuardianApprovalReviewActionType"), ] class GuardianApprovalReviewAction( RootModel[ CommandGuardianApprovalReviewAction | ExecveGuardianApprovalReviewAction | ApplyPatchGuardianApprovalReviewAction | NetworkAccessGuardianApprovalReviewAction | McpToolCallGuardianApprovalReviewAction | RequestPermissionsGuardianApprovalReviewAction ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( CommandGuardianApprovalReviewAction | ExecveGuardianApprovalReviewAction | ApplyPatchGuardianApprovalReviewAction | NetworkAccessGuardianApprovalReviewAction | McpToolCallGuardianApprovalReviewAction | RequestPermissionsGuardianApprovalReviewAction ) class ItemGuardianApprovalReviewCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) action: GuardianApprovalReviewAction completed_at_ms: Annotated[ int, Field( alias="completedAtMs", description="Unix timestamp (in milliseconds) when this review completed.", ), ] decision_source: Annotated[AutoReviewDecisionSource, Field(alias="decisionSource")] review: GuardianApprovalReview review_id: Annotated[ str, Field(alias="reviewId", description="Stable identifier for this review.") ] started_at_ms: Annotated[ int, Field( alias="startedAtMs", description="Unix timestamp (in milliseconds) when this review started.", ), ] target_item_id: Annotated[ str | None, Field( alias="targetItemId", description="Identifier for the reviewed item or tool call when one exists.\n\nIn most cases, one review maps to one target item. The exceptions are - execve reviews, where a single command may contain multiple execve calls to review (only possible when using the shell_zsh_fork feature) - network policy reviews, where there is no target item\n\nA network call is triggered by a CommandExecution item, so having a target_item_id set to the CommandExecution item would be misleading because the review is about the network call, not the command execution. Therefore, target_item_id is set to None for network policy reviews.", ), ] = None thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class ItemGuardianApprovalReviewStartedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) action: GuardianApprovalReviewAction review: GuardianApprovalReview review_id: Annotated[ str, Field(alias="reviewId", description="Stable identifier for this review.") ] started_at_ms: Annotated[ int, Field( alias="startedAtMs", description="Unix timestamp (in milliseconds) when this review started.", ), ] target_item_id: Annotated[ str | None, Field( alias="targetItemId", description="Identifier for the reviewed item or tool call when one exists.\n\nIn most cases, one review maps to one target item. The exceptions are - execve reviews, where a single command may contain multiple execve calls to review (only possible when using the shell_zsh_fork feature) - network policy reviews, where there is no target item\n\nA network call is triggered by a CommandExecution item, so having a target_item_id set to the CommandExecution item would be misleading because the review is about the network call, not the command execution. Therefore, target_item_id is set to None for network policy reviews.", ), ] = None thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class PluginDetail(BaseModel): model_config = ConfigDict( populate_by_name=True, ) apps: list[AppSummary] description: str | None = None hooks: list[PluginHookSummary] marketplace_name: Annotated[str, Field(alias="marketplaceName")] marketplace_path: Annotated[ AbsolutePathBuf | None, Field(alias="marketplacePath") ] = None mcp_servers: Annotated[list[str], Field(alias="mcpServers")] skills: list[SkillSummary] summary: PluginSummary class PluginMarketplaceEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) interface: MarketplaceInterface | None = None name: str path: Annotated[ AbsolutePathBuf | None, Field( description="Local marketplace file path when the marketplace is backed by a local file. Remote-only catalog marketplaces do not have a local path." ), ] = None plugins: list[PluginSummary] class PluginReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) plugin: PluginDetail class PluginShareListItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) local_plugin_path: Annotated[ AbsolutePathBuf | None, Field(alias="localPluginPath") ] = None plugin: PluginSummary class PluginShareListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: list[PluginShareListItem] class RawResponseItemCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item: ResponseItem thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class ReviewStartResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) review_thread_id: Annotated[ str, Field( alias="reviewThreadId", description="Identifies the thread where the review runs.\n\nFor inline reviews, this is the original thread id. For detached reviews, this is the id of the new review thread.", ), ] turn: Turn class TurnStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["turn/started"], Field(title="Turn/startedNotificationMethod") ] params: TurnStartedNotification class TurnCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["turn/completed"], Field(title="Turn/completedNotificationMethod") ] params: TurnCompletedNotification class ItemAutoApprovalReviewStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/autoApprovalReview/started"], Field(title="Item/autoApprovalReview/startedNotificationMethod"), ] params: ItemGuardianApprovalReviewStartedNotification class ItemAutoApprovalReviewCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["item/autoApprovalReview/completed"], Field(title="Item/autoApprovalReview/completedNotificationMethod"), ] params: ItemGuardianApprovalReviewCompletedNotification class Thread(BaseModel): model_config = ConfigDict( populate_by_name=True, ) agent_nickname: Annotated[ str | None, Field( alias="agentNickname", description="Optional random unique nickname assigned to an AgentControl-spawned sub-agent.", ), ] = None agent_role: Annotated[ str | None, Field( alias="agentRole", description="Optional role (agent_role) assigned to an AgentControl-spawned sub-agent.", ), ] = None cli_version: Annotated[ str, Field( alias="cliVersion", description="Version of the CLI that created the thread.", ), ] created_at: Annotated[ int, Field( alias="createdAt", description="Unix timestamp (in seconds) when the thread was created.", ), ] cwd: Annotated[ AbsolutePathBuf, Field(description="Working directory captured for the thread.") ] ephemeral: Annotated[ bool, Field( description="Whether the thread is ephemeral and should not be materialized on disk." ), ] forked_from_id: Annotated[ str | None, Field( alias="forkedFromId", description="Source thread id when this thread was created by forking another thread.", ), ] = None git_info: Annotated[ GitInfo | None, Field( alias="gitInfo", description="Optional Git metadata captured when the thread was created.", ), ] = None id: str model_provider: Annotated[ str, Field( alias="modelProvider", description="Model provider used for this thread (for example, 'openai').", ), ] name: Annotated[ str | None, Field(description="Optional user-facing thread title.") ] = None path: Annotated[ str | None, Field(description="[UNSTABLE] Path to the thread on disk.") ] = None preview: Annotated[ str, Field( description="Usually the first user message in the thread, if available." ), ] session_id: Annotated[ str, Field( alias="sessionId", description="Session id shared by threads that belong to the same session tree.", ), ] source: Annotated[ SessionSource, Field( description="Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.)." ), ] status: Annotated[ ThreadStatus, Field(description="Current runtime status for the thread.") ] thread_source: Annotated[ ThreadSource | None, Field( alias="threadSource", description="Optional analytics source classification for this thread.", ), ] = None turns: Annotated[ 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: Annotated[ int, Field( alias="updatedAt", description="Unix timestamp (in seconds) when the thread was last updated.", ), ] class ThreadForkResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approval_policy: Annotated[AskForApproval, Field(alias="approvalPolicy")] approvals_reviewer: Annotated[ ApprovalsReviewer, Field( alias="approvalsReviewer", description="Reviewer currently used for approval requests on this thread.", ), ] cwd: AbsolutePathBuf instruction_sources: Annotated[ list[AbsolutePathBuf] | None, Field( alias="instructionSources", description="Instruction source files currently loaded for this thread.", ), ] = [] model: str model_provider: Annotated[str, Field(alias="modelProvider")] reasoning_effort: Annotated[ ReasoningEffort | None, Field(alias="reasoningEffort") ] = None sandbox: Annotated[ SandboxPolicy, Field( description="Legacy sandbox policy retained for compatibility. Experimental clients should prefer `permissionProfile` when they need exact runtime permissions." ), ] service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread: Thread class ThreadListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) backwards_cursor: Annotated[ str | None, Field( alias="backwardsCursor", description="Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one thread. Use it with the opposite `sortDirection`; for timestamp sorts it anchors at the start of the page timestamp so same-second updates are not skipped.", ), ] = None data: list[Thread] next_cursor: Annotated[ str | None, Field( alias="nextCursor", description="Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.", ), ] = None class ThreadMetadataUpdateResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread: Thread class ThreadReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread: Thread class ThreadResumeResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approval_policy: Annotated[AskForApproval, Field(alias="approvalPolicy")] approvals_reviewer: Annotated[ ApprovalsReviewer, Field( alias="approvalsReviewer", description="Reviewer currently used for approval requests on this thread.", ), ] cwd: AbsolutePathBuf instruction_sources: Annotated[ list[AbsolutePathBuf] | None, Field( alias="instructionSources", description="Instruction source files currently loaded for this thread.", ), ] = [] model: str model_provider: Annotated[str, Field(alias="modelProvider")] reasoning_effort: Annotated[ ReasoningEffort | None, Field(alias="reasoningEffort") ] = None sandbox: Annotated[ SandboxPolicy, Field( description="Legacy sandbox policy retained for compatibility. Experimental clients should prefer `permissionProfile` when they need exact runtime permissions." ), ] service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread: Thread class ThreadRollbackResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread: Annotated[ Thread, Field( description="The updated thread after applying the rollback, with `turns` populated.\n\nThe ThreadItems stored in each Turn are lossy since we explicitly do not persist all agent interactions, such as command executions. This is the same behavior as `thread/resume`." ), ] class ThreadStartResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approval_policy: Annotated[AskForApproval, Field(alias="approvalPolicy")] approvals_reviewer: Annotated[ ApprovalsReviewer, Field( alias="approvalsReviewer", description="Reviewer currently used for approval requests on this thread.", ), ] cwd: AbsolutePathBuf instruction_sources: Annotated[ list[AbsolutePathBuf] | None, Field( alias="instructionSources", description="Instruction source files currently loaded for this thread.", ), ] = [] model: str model_provider: Annotated[str, Field(alias="modelProvider")] reasoning_effort: Annotated[ ReasoningEffort | None, Field(alias="reasoningEffort") ] = None sandbox: Annotated[ SandboxPolicy, Field( description="Legacy sandbox policy retained for compatibility. Experimental clients should prefer `permissionProfile` when they need exact runtime permissions." ), ] service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread: Thread class ThreadStartedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread: Thread class ThreadUnarchiveResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread: Thread class ExternalAgentConfigImportRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["externalAgentConfig/import"], Field(title="ExternalAgentConfig/importRequestMethod"), ] params: ExternalAgentConfigImportParams class ClientRequest( RootModel[ InitializeRequest | ThreadStartRequest | ThreadResumeRequest | ThreadForkRequest | ThreadArchiveRequest | ThreadUnsubscribeRequest | ThreadNameSetRequest | ThreadMetadataUpdateRequest | ThreadUnarchiveRequest | ThreadCompactStartRequest | ThreadShellCommandRequest | ThreadApproveGuardianDeniedActionRequest | ThreadRollbackRequest | ThreadListRequest | ThreadLoadedListRequest | ThreadReadRequest | ThreadInjectItemsRequest | SkillsListRequest | HooksListRequest | MarketplaceAddRequest | MarketplaceRemoveRequest | MarketplaceUpgradeRequest | PluginListRequest | PluginReadRequest | PluginSkillReadRequest | PluginShareSaveRequest | PluginShareUpdateTargetsRequest | PluginShareListRequest | PluginShareDeleteRequest | AppListRequest | FsReadFileRequest | FsWriteFileRequest | FsCreateDirectoryRequest | FsGetMetadataRequest | FsReadDirectoryRequest | FsRemoveRequest | FsCopyRequest | FsWatchRequest | FsUnwatchRequest | SkillsConfigWriteRequest | PluginInstallRequest | PluginUninstallRequest | TurnStartRequest | TurnSteerRequest | TurnInterruptRequest | ReviewStartRequest | ModelListRequest | ModelProviderCapabilitiesReadRequest | ExperimentalFeatureListRequest | ExperimentalFeatureEnablementSetRequest | McpServerOauthLoginRequest | ConfigMcpServerReloadRequest | McpServerStatusListRequest | McpServerResourceReadRequest | McpServerToolCallRequest | WindowsSandboxSetupStartRequest | WindowsSandboxReadinessRequest | AccountLoginStartRequest | AccountLoginCancelRequest | AccountLogoutRequest | AccountRateLimitsReadRequest | AccountSendAddCreditsNudgeEmailRequest | FeedbackUploadRequest | CommandExecRequest | CommandExecWriteRequest | CommandExecTerminateRequest | CommandExecResizeRequest | ConfigReadRequest | ExternalAgentConfigDetectRequest | ExternalAgentConfigImportRequest | ConfigValueWriteRequest | ConfigBatchWriteRequest | ConfigRequirementsReadRequest | AccountReadRequest | FuzzyFileSearchRequest ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ InitializeRequest | ThreadStartRequest | ThreadResumeRequest | ThreadForkRequest | ThreadArchiveRequest | ThreadUnsubscribeRequest | ThreadNameSetRequest | ThreadMetadataUpdateRequest | ThreadUnarchiveRequest | ThreadCompactStartRequest | ThreadShellCommandRequest | ThreadApproveGuardianDeniedActionRequest | ThreadRollbackRequest | ThreadListRequest | ThreadLoadedListRequest | ThreadReadRequest | ThreadInjectItemsRequest | SkillsListRequest | HooksListRequest | MarketplaceAddRequest | MarketplaceRemoveRequest | MarketplaceUpgradeRequest | PluginListRequest | PluginReadRequest | PluginSkillReadRequest | PluginShareSaveRequest | PluginShareUpdateTargetsRequest | PluginShareListRequest | PluginShareDeleteRequest | AppListRequest | FsReadFileRequest | FsWriteFileRequest | FsCreateDirectoryRequest | FsGetMetadataRequest | FsReadDirectoryRequest | FsRemoveRequest | FsCopyRequest | FsWatchRequest | FsUnwatchRequest | SkillsConfigWriteRequest | PluginInstallRequest | PluginUninstallRequest | TurnStartRequest | TurnSteerRequest | TurnInterruptRequest | ReviewStartRequest | ModelListRequest | ModelProviderCapabilitiesReadRequest | ExperimentalFeatureListRequest | ExperimentalFeatureEnablementSetRequest | McpServerOauthLoginRequest | ConfigMcpServerReloadRequest | McpServerStatusListRequest | McpServerResourceReadRequest | McpServerToolCallRequest | WindowsSandboxSetupStartRequest | WindowsSandboxReadinessRequest | AccountLoginStartRequest | AccountLoginCancelRequest | AccountLogoutRequest | AccountRateLimitsReadRequest | AccountSendAddCreditsNudgeEmailRequest | FeedbackUploadRequest | CommandExecRequest | CommandExecWriteRequest | CommandExecTerminateRequest | CommandExecResizeRequest | ConfigReadRequest | ExternalAgentConfigDetectRequest | ExternalAgentConfigImportRequest | ConfigValueWriteRequest | ConfigBatchWriteRequest | ConfigRequirementsReadRequest | AccountReadRequest | FuzzyFileSearchRequest, Field( description="Request from the client to the server.", title="ClientRequest" ), ] class PluginListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) featured_plugin_ids: Annotated[ list[str] | None, Field(alias="featuredPluginIds") ] = [] marketplace_load_errors: Annotated[ list[MarketplaceLoadErrorInfo] | None, Field(alias="marketplaceLoadErrors") ] = [] marketplaces: list[PluginMarketplaceEntry] class ThreadStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: Annotated[ Literal["thread/started"], Field(title="Thread/startedNotificationMethod") ] params: ThreadStartedNotification class ServerNotification( RootModel[ ErrorServerNotification | ThreadStartedServerNotification | ThreadStatusChangedServerNotification | ThreadArchivedServerNotification | ThreadUnarchivedServerNotification | ThreadClosedServerNotification | SkillsChangedServerNotification | ThreadNameUpdatedServerNotification | ThreadGoalUpdatedServerNotification | ThreadGoalClearedServerNotification | ThreadTokenUsageUpdatedServerNotification | TurnStartedServerNotification | HookStartedServerNotification | TurnCompletedServerNotification | HookCompletedServerNotification | TurnDiffUpdatedServerNotification | TurnPlanUpdatedServerNotification | ItemStartedServerNotification | ItemAutoApprovalReviewStartedServerNotification | ItemAutoApprovalReviewCompletedServerNotification | ItemCompletedServerNotification | ItemAgentMessageDeltaServerNotification | ItemPlanDeltaServerNotification | CommandExecOutputDeltaServerNotification | ProcessOutputDeltaServerNotification | ProcessExitedServerNotification | ItemCommandExecutionOutputDeltaServerNotification | ItemCommandExecutionTerminalInteractionServerNotification | ItemFileChangeOutputDeltaServerNotification | ItemFileChangePatchUpdatedServerNotification | ServerRequestResolvedServerNotification | ItemMcpToolCallProgressServerNotification | McpServerOauthLoginCompletedServerNotification | McpServerStartupStatusUpdatedServerNotification | AccountUpdatedServerNotification | AccountRateLimitsUpdatedServerNotification | AppListUpdatedServerNotification | RemoteControlStatusChangedServerNotification | ExternalAgentConfigImportCompletedServerNotification | FsChangedServerNotification | ItemReasoningSummaryTextDeltaServerNotification | ItemReasoningSummaryPartAddedServerNotification | ItemReasoningTextDeltaServerNotification | ThreadCompactedServerNotification | ModelReroutedServerNotification | ModelVerificationServerNotification | WarningServerNotification | GuardianWarningServerNotification | DeprecationNoticeServerNotification | ConfigWarningServerNotification | FuzzyFileSearchSessionUpdatedServerNotification | FuzzyFileSearchSessionCompletedServerNotification | ThreadRealtimeStartedServerNotification | ThreadRealtimeItemAddedServerNotification | ThreadRealtimeTranscriptDeltaServerNotification | ThreadRealtimeTranscriptDoneServerNotification | ThreadRealtimeOutputAudioDeltaServerNotification | ThreadRealtimeSdpServerNotification | ThreadRealtimeErrorServerNotification | ThreadRealtimeClosedServerNotification | WindowsWorldWritableWarningServerNotification | WindowsSandboxSetupCompletedServerNotification | AccountLoginCompletedServerNotification ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ ErrorServerNotification | ThreadStartedServerNotification | ThreadStatusChangedServerNotification | ThreadArchivedServerNotification | ThreadUnarchivedServerNotification | ThreadClosedServerNotification | SkillsChangedServerNotification | ThreadNameUpdatedServerNotification | ThreadGoalUpdatedServerNotification | ThreadGoalClearedServerNotification | ThreadTokenUsageUpdatedServerNotification | TurnStartedServerNotification | HookStartedServerNotification | TurnCompletedServerNotification | HookCompletedServerNotification | TurnDiffUpdatedServerNotification | TurnPlanUpdatedServerNotification | ItemStartedServerNotification | ItemAutoApprovalReviewStartedServerNotification | ItemAutoApprovalReviewCompletedServerNotification | ItemCompletedServerNotification | ItemAgentMessageDeltaServerNotification | ItemPlanDeltaServerNotification | CommandExecOutputDeltaServerNotification | ProcessOutputDeltaServerNotification | ProcessExitedServerNotification | ItemCommandExecutionOutputDeltaServerNotification | ItemCommandExecutionTerminalInteractionServerNotification | ItemFileChangeOutputDeltaServerNotification | ItemFileChangePatchUpdatedServerNotification | ServerRequestResolvedServerNotification | ItemMcpToolCallProgressServerNotification | McpServerOauthLoginCompletedServerNotification | McpServerStartupStatusUpdatedServerNotification | AccountUpdatedServerNotification | AccountRateLimitsUpdatedServerNotification | AppListUpdatedServerNotification | RemoteControlStatusChangedServerNotification | ExternalAgentConfigImportCompletedServerNotification | FsChangedServerNotification | ItemReasoningSummaryTextDeltaServerNotification | ItemReasoningSummaryPartAddedServerNotification | ItemReasoningTextDeltaServerNotification | ThreadCompactedServerNotification | ModelReroutedServerNotification | ModelVerificationServerNotification | WarningServerNotification | GuardianWarningServerNotification | DeprecationNoticeServerNotification | ConfigWarningServerNotification | FuzzyFileSearchSessionUpdatedServerNotification | FuzzyFileSearchSessionCompletedServerNotification | ThreadRealtimeStartedServerNotification | ThreadRealtimeItemAddedServerNotification | ThreadRealtimeTranscriptDeltaServerNotification | ThreadRealtimeTranscriptDoneServerNotification | ThreadRealtimeOutputAudioDeltaServerNotification | ThreadRealtimeSdpServerNotification | ThreadRealtimeErrorServerNotification | ThreadRealtimeClosedServerNotification | WindowsWorldWritableWarningServerNotification | WindowsSandboxSetupCompletedServerNotification | AccountLoginCompletedServerNotification, Field( description="Notification sent from the server to the client.", title="ServerNotification", ), ]