# 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")] uses_codex_managed_credentials: Annotated[ bool | None, Field(alias="usesCodexManagedCredentials") ] = False class AccountTokenUsageDailyBucket(BaseModel): model_config = ConfigDict( populate_by_name=True, ) start_date: Annotated[str, Field(alias="startDate")] tokens: int class AccountTokenUsageSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) current_streak_days: Annotated[int | None, Field(alias="currentStreakDays")] = None lifetime_tokens: Annotated[int | None, Field(alias="lifetimeTokens")] = None longest_running_turn_sec: Annotated[int | None, Field(alias="longestRunningTurnSec")] = None longest_streak_days: Annotated[int | None, Field(alias="longestStreakDays")] = None peak_daily_tokens: Annotated[int | None, Field(alias="peakDailyTokens")] = None class ActivePermissionProfile(BaseModel): model_config = ConfigDict( populate_by_name=True, ) extends: Annotated[ str | None, Field( description="Parent profile identifier from the selected permissions profile's `extends` setting, when present." ), ] = 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." ), ] class AddCreditsNudgeCreditType(Enum): credits = "credits" usage_limit = "usage_limit" class AddCreditsNudgeEmailStatus(Enum): sent = "sent" cooldown_active = "cooldown_active" class AdditionalContextKind(Enum): untrusted = "untrusted" application = "application" class AdditionalNetworkPermissions(BaseModel): model_config = ConfigDict( populate_by_name=True, ) enabled: bool | None = None class AgentMessageDelivery(RootModel[Literal["async"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["async"] 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 InputTextAgentMessageInputContent(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Annotated[Literal["input_text"], Field(title="InputTextAgentMessageInputContentType")] class EncryptedContentAgentMessageInputContent(BaseModel): model_config = ConfigDict( populate_by_name=True, ) encrypted_content: str type: Annotated[ Literal["encrypted_content"], Field(title="EncryptedContentAgentMessageInputContentType") ] class AgentMessageInputContent( RootModel[InputTextAgentMessageInputContent | EncryptedContentAgentMessageInputContent] ): model_config = ConfigDict( populate_by_name=True, ) root: InputTextAgentMessageInputContent | EncryptedContentAgentMessageInputContent class AgentPath(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: str class AllowDenyRequirement(Enum): allow = "allow" deny = "deny" 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 AppLinksConfig(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) 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, ) category: str | None = None description: str | None = None id: str install_url: Annotated[str | None, Field(alias="installUrl")] = None name: str class AppTemplateUnavailableReason(Enum): not_configured_for_workspace = "NOT_CONFIGURED_FOR_WORKSPACE" no_active_workspace = "NO_ACTIVE_WORKSPACE" class AppToolApproval(Enum): auto = "auto" prompt = "prompt" writes = "writes" approve = "approve" class AppToolConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approval_mode: AppToolApproval | None = None enabled: bool | None = None class AppToolSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) description: str disabled_reason: Annotated[str | None, Field(alias="disabledReason")] = None is_enabled: Annotated[bool | None, Field(alias="isEnabled")] = True is_read_only: Annotated[bool | None, Field(alias="isReadOnly")] = False name: str title: str | 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, ) approvals_reviewer: ApprovalsReviewer | None = None default_tools_approval_mode: AppToolApproval | None = None destructive_enabled: bool | None = True enabled: bool | None = True open_world_enabled: bool | None = True class AppsInstalledParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) force_refresh: Annotated[ bool | None, Field( alias="forceRefresh", description="When true and Apps are permitted, refresh and publish the hosted connector runtime tool snapshot first.", ), ] = None thread_id: Annotated[ str | None, Field( alias="threadId", description="Optional loaded thread id used to evaluate effective app configuration.", ), ] = None 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 AppsReadParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) app_ids: Annotated[ list[str], Field( alias="appIds", description="App ids to read. The server accepts at most 100 ids and deduplicates repeated ids while preserving their first-request order.", ), ] include_tools: Annotated[ bool | None, Field( alias="includeTools", description="When true, include display-only public tool summaries in the returned metadata.", ), ] = None thread_id: Annotated[ str | None, Field( alias="threadId", description="Optional loaded thread id used to evaluate effective app configuration.", ), ] = None class AskForApprovalValue(Enum): untrusted = "untrusted" 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 AsyncUserInputQuestion(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) options: list[str] | None = None title: str class AuthMode(Enum): apikey = "apikey" chatgpt = "chatgpt" chatgpt_auth_tokens = "chatgptAuthTokens" headers = "headers" agent_identity = "agentIdentity" personal_access_token = "personalAccessToken" bedrock_api_key = "bedrockApiKey" bedrock_access_keys = "bedrockAccessKeys" class AuthRecoveryNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: str provider: str thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class AutoCompactTokenLimitScope(Enum): total = "total" body_after_prefix = "body_after_prefix" 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 AutoReviewRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) ignore_rules: Annotated[list[str] | None, Field(alias="ignoreRules")] = None required_on_models: Annotated[list[str] | None, Field(alias="requiredOnModels")] = None class BrowserUseAccessApprovalLifetime(Enum): turn = "turn" thread = "thread" class BrowserUseOriginPolicy(BaseModel): model_config = ConfigDict( populate_by_name=True, ) access: AllowDenyRequirement | None = None access_approval_lifetime: Annotated[ BrowserUseAccessApprovalLifetime | None, Field(alias="accessApprovalLifetime") ] = None auto_review: Annotated[AllowDenyRequirement | None, Field(alias="autoReview")] = None downloads: AllowDenyRequirement | None = None full_cdp_access: Annotated[AllowDenyRequirement | None, Field(alias="fullCdpAccess")] = None persistent_approval: Annotated[bool | None, Field(alias="persistentApproval")] = None uploads: AllowDenyRequirement | None = None class BrowserUseOriginPolicyConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) access: AllowDenyRequirement | None = None downloads: AllowDenyRequirement | None = None full_cdp_access: AllowDenyRequirement | None = None uploads: AllowDenyRequirement | None = None class BrowserUseRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) allow_global_persistent_approval: Annotated[ bool | None, Field(alias="allowGlobalPersistentApproval") ] = None allow_history_access: Annotated[bool | None, Field(alias="allowHistoryAccess")] = None allow_webmcp: Annotated[bool | None, Field(alias="allowWebmcp")] = None default_origin_policy: Annotated[ BrowserUseOriginPolicy | None, Field(alias="defaultOriginPolicy") ] = None disable_auto_review: Annotated[bool | None, Field(alias="disableAutoReview")] = None origins: dict[str, Any] | None = None 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 EnvironmentCapabilityRootLocation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) environment_id: Annotated[str, Field(alias="environmentId")] path: Annotated[ str, Field(description="Absolute path for the root in the selected environment.") ] type: Annotated[Literal["environment"], Field(title="EnvironmentCapabilityRootLocationType")] class CapabilityRootLocation(RootModel[EnvironmentCapabilityRootLocation]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ EnvironmentCapabilityRootLocation, Field(description="Location used to resolve a selected capability root."), ] class CliAuthCredentialsStoreMode(Enum): file = "file" keyring = "keyring" auto = "auto" ephemeral = "ephemeral" 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" session_budget_exceeded = "sessionBudgetExceeded" usage_limit_exceeded = "usageLimitExceeded" rate_limit_exceeded = "rateLimitExceeded" server_overloaded = "serverOverloaded" cyber_policy = "cyberPolicy" misalignment_policy_violation = "misalignmentPolicyViolation" 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 CodexResponseHandoffMode(Enum): thinking = "thinking" commentary = "commentary" bem_tags = "bemTags" 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" send_message = "sendMessage" followup_task = "followupTask" interrupt_agent = "interruptAgent" list_agents = "listAgents" class CollabAgentToolCallStatus(Enum): in_progress = "inProgress" completed = "completed" failed = "failed" interrupted = "interrupted" 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 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 ComputerUseMacosConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) bundle_ids: dict[str, Any] | None = None class ComputerUseMacosRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) bundle_ids: Annotated[dict[str, Any] | None, Field(alias="bundleIds")] = None class ComputerUseWindowsExeConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) access: AllowDenyRequirement binary_name: str | None = None product_name: str publisher_name: str class ComputerUseWindowsExeRequirement(BaseModel): model_config = ConfigDict( populate_by_name=True, ) access: AllowDenyRequirement binary_name: Annotated[str | None, Field(alias="binaryName")] = None product_name: Annotated[str, Field(alias="productName")] publisher_name: Annotated[str, Field(alias="publisherName")] class ComputerUseWindowsRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) aumids: dict[str, Any] | None = None exes: list[ComputerUseWindowsExeRequirement] | None = None class PackagedDefaultsConfigLayerSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) file: Annotated[ AbsolutePathBuf, Field(description="Path to the packaged default configuration file.") ] type: Annotated[ Literal["packagedDefaults"], Field(title="PackagedDefaultsConfigLayerSourceType") ] 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 EnterpriseManagedConfigLayerSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[str, Field(description="Stable identifier for the delivered layer.")] name: Annotated[ str, Field( description="Admin-facing name for the delivered layer. This is surfaced in diagnostics so users know which cloud layer needs administrator attention." ), ] type: Annotated[ Literal["enterpriseManaged"], Field(title="EnterpriseManagedConfigLayerSourceType") ] 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." ), ] profile: Annotated[ str | None, Field( description="Name of the selected profile-v2 config layered on top of the base user config, when this layer represents one." ), ] = None 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[ PackagedDefaultsConfigLayerSource | MdmConfigLayerSource | SystemConfigLayerSource | EnterpriseManagedConfigLayerSource | UserConfigLayerSource | ProjectConfigLayerSource | SessionFlagsConfigLayerSource | LegacyManagedConfigTomlFromFileConfigLayerSource | LegacyManagedConfigTomlFromMdmConfigLayerSource ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( PackagedDefaultsConfigLayerSource | MdmConfigLayerSource | SystemConfigLayerSource | EnterpriseManagedConfigLayerSource | 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")] = None class CommandConfiguredHookHandler(BaseModel): model_config = ConfigDict( populate_by_name=True, ) additional_context_limit: Annotated[ int | None, Field( alias="additionalContextLimit", description="Approximate token threshold for spilling this hook's `additionalContext` to disk. `null` uses 2,500 tokens; `0` disables spilling for this hook. The threshold is evaluated against the original context; a spilled preview also includes recovery metadata.", ge=0, ), ] = None async_: Annotated[bool, Field(alias="async")] command: str command_windows: Annotated[str | None, Field(alias="commandWindows")] = None 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 McpToolConfiguredHookHandler(BaseModel): model_config = ConfigDict( populate_by_name=True, ) input: dict[str, Any] server: str status_message: Annotated[str | None, Field(alias="statusMessage")] = None timeout_sec: Annotated[int | None, Field(alias="timeoutSec", ge=0)] = None tool: str type: Annotated[Literal["mcp_tool"], Field(title="McpToolConfiguredHookHandlerType")] 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 | McpToolConfiguredHookHandler | PromptConfiguredHookHandler | AgentConfiguredHookHandler ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( CommandConfiguredHookHandler | McpToolConfiguredHookHandler | PromptConfiguredHookHandler | AgentConfiguredHookHandler ) class ConfiguredHookMatcherGroup(BaseModel): model_config = ConfigDict( populate_by_name=True, ) hooks: list[ConfiguredHookHandler] matcher: str | None = None class ConnectorMetadata(BaseModel): model_config = ConfigDict( populate_by_name=True, ) description: str | None = None distribution_channel: Annotated[str | None, Field(alias="distributionChannel")] = None icon_url: Annotated[str | None, Field(alias="iconUrl")] = None icon_url_dark: Annotated[str | None, Field(alias="iconUrlDark")] = None id: str install_url: Annotated[str | None, Field(alias="installUrl")] = None name: str plugin_display_names: Annotated[list[str] | None, Field(alias="pluginDisplayNames")] = [] tool_summaries: Annotated[list[AppToolSummary] | None, Field(alias="toolSummaries")] = None class ConsumeAccountRateLimitResetCreditOutcome(Enum): reset = "reset" nothing_to_reset = "nothingToReset" no_credit = "noCredit" already_redeemed = "alreadyRedeemed" class ConsumeAccountRateLimitResetCreditParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) credit_id: Annotated[ str | None, Field( alias="creditId", description="Opaque reset-credit identifier to redeem. When omitted, the backend selects the next available credit.", ), ] = None idempotency_key: Annotated[ str, Field( alias="idempotencyKey", description="Identifies one logical reset attempt. A UUID is recommended; reuse the same value when retrying that attempt.", ), ] class ConsumeAccountRateLimitResetCreditResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) outcome: ConsumeAccountRateLimitResetCreditOutcome class InputTextContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) text: str type: Annotated[Literal["input_text"], Field(title="InputTextContentItemType")] class InputAudioContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) audio_url: str type: Annotated[Literal["input_audio"], Field(title="InputAudioContentItemType")] 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 ConversationTextRole(Enum): user = "user" developer = "developer" assistant = "assistant" class CreditsSnapshot(BaseModel): model_config = ConfigDict( populate_by_name=True, ) balance: str | None = None has_credits: Annotated[bool, Field(alias="hasCredits")] unlimited: bool class CyberAccessProgram(Enum): standard = "standard" daybreak_blue = "daybreakBlue" daybreak_red = "daybreakRed" 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 DesktopOnboardingEntrypoint(RootModel[Literal["life_sciences"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["life_sciences"] 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 InputAudioDynamicToolCallOutputContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) audio_url: Annotated[str, Field(alias="audioUrl")] type: Annotated[ Literal["inputAudio"], Field(title="InputAudioDynamicToolCallOutputContentItemType") ] class DynamicToolCallOutputContentItem( RootModel[ InputTextDynamicToolCallOutputContentItem | InputImageDynamicToolCallOutputContentItem | InputAudioDynamicToolCallOutputContentItem ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( InputTextDynamicToolCallOutputContentItem | InputImageDynamicToolCallOutputContentItem | InputAudioDynamicToolCallOutputContentItem ) class DynamicToolCallStatus(Enum): in_progress = "inProgress" completed = "completed" failed = "failed" class FunctionDynamicToolNamespaceTool(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 type: Annotated[Literal["function"], Field(title="FunctionDynamicToolNamespaceToolType")] class DynamicToolNamespaceTool(RootModel[FunctionDynamicToolNamespaceTool]): model_config = ConfigDict( populate_by_name=True, ) root: FunctionDynamicToolNamespaceTool class FunctionDynamicToolSpec(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 type: Annotated[Literal["function"], Field(title="FunctionDynamicToolSpecType")] class NamespaceDynamicToolSpec(BaseModel): model_config = ConfigDict( populate_by_name=True, ) description: str name: str tools: list[DynamicToolNamespaceTool] type: Annotated[Literal["namespace"], Field(title="NamespaceDynamicToolSpecType")] class DynamicToolSpec(RootModel[FunctionDynamicToolSpec | NamespaceDynamicToolSpec]): model_config = ConfigDict( populate_by_name=True, ) root: FunctionDynamicToolSpec | NamespaceDynamicToolSpec class EnvironmentConnectionNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) environment_id: Annotated[str, Field(alias="environmentId")] thread_id: Annotated[str, Field(alias="threadId")] 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 thread_id: Annotated[ str | None, Field( alias="threadId", description="Optional loaded thread id. Pass this when showing feature state for an existing thread so enablement is computed from that thread's refreshed config, including project-local config for the thread's cwd.", ), ] = 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 directory.", ), ] = None max_session_age_days: Annotated[ int | None, Field( alias="maxSessionAgeDays", description="Maximum age in days for detected sessions. Missing values use the default limit.", ge=0, ), ] = None max_sessions: Annotated[ int | None, Field( alias="maxSessions", description="Maximum number of sessions to detect. Missing values use the default limit.", ge=0, ), ] = None migration_source: Annotated[ str | None, Field( alias="migrationSource", description="Optional migration-source selector. Missing or unrecognized values use the default source.", ), ] = None source: Annotated[ str | None, Field( description="Deprecated field retained for compatibility. This field is ignored; use `migrationSource` to select the migration source." ), ] = None class ExternalAgentConfigImportHistoryRecordResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) import_id: Annotated[str, Field(alias="importId")] class ExternalAgentConfigImportResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) import_id: Annotated[str, Field(alias="importId")] 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" memory = "MEMORY" sessions = "SESSIONS" class ExternalAgentDetectedConnectorSource(Enum): remote_mcp_servers_config = "remoteMcpServersConfig" session_tool_use = "sessionToolUse" class ExternalAgentImportedConnectorSource(RootModel[Literal["remoteMcpServersConfig"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["remoteMcpServersConfig"] class FeedbackRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) enabled: bool | None = None 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 | None, Field(alias="includeLogs")] = None 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" deny = "deny" 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 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 ForcedChatgptWorkspaceIds(RootModel[str | list[str]]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ str | list[str], Field( description="Backward-compatible API shape for ChatGPT workspace login restrictions." ), ] 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 InputAudioFunctionCallOutputContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) audio_url: str type: Annotated[ Literal["input_audio"], Field(title="InputAudioFunctionCallOutputContentItemType") ] class EncryptedContentFunctionCallOutputContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) encrypted_content: str type: Annotated[ Literal["encrypted_content"], Field(title="EncryptedContentFunctionCallOutputContentItemType"), ] 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`.", ), ] = None class GetAccountRateLimitsParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) exclude_reset_credit_details: Annotated[ bool | None, Field( alias="excludeResetCreditDetails", description="Skip the separate reset-credit detail lookup for background usage polls. The usage response still includes the available count; omitted/false preserves detailed reads.", ), ] = None supports_luna_reserve: Annotated[ bool | None, Field( alias="supportsLunaReserve", description="The client supports automatic Luna Reserve fallback. For eligible ChatGPT CLI users, allow the backend to record experiment exposure after ordinary usage is blocked.", ), ] = None class GetAccountTokenUsageParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[ str | None, Field( alias="threadId", description="When present, read estimated usage for this thread instead of account-wide token activity.", ), ] = None 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" session_end = "sessionEnd" user_prompt_submit = "userPromptSubmit" subagent_start = "subagentStart" subagent_stop = "subagentStop" stop = "stop" interrupt = "interrupt" class HookExecutionMode(Enum): sync = "sync" async_ = "async" class HookHandlerType(Enum): command = "command" mcp_tool = "mcpTool" 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" cloud_managed_config = "cloudManagedConfig" 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 UsageLimitExceededImageGenerationFailure(BaseModel): model_config = ConfigDict( populate_by_name=True, ) limit_id: Annotated[str, Field(alias="limitId")] resets_at: Annotated[int | None, Field(alias="resetsAt")] = None type: Annotated[ Literal["usageLimitExceeded"], Field(title="UsageLimitExceededImageGenerationFailureType") ] class ImageGenerationFailure(RootModel[UsageLimitExceededImageGenerationFailure]): model_config = ConfigDict( populate_by_name=True, ) root: UsageLimitExceededImageGenerationFailure class InAppBrowserRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) allow_external_browser_settings_import: Annotated[ bool | None, Field(alias="allowExternalBrowserSettingsImport") ] = None 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 extensions: Annotated[ dict[str, Any] | None, Field(description="MCP extension settings declared by the app-server client."), ] = None mcp_server_openai_form_elicitation: Annotated[ bool | None, Field( alias="mcpServerOpenaiFormElicitation", description="Legacy opt-in for the `openai/form` MCP extension.\n\nNew clients should declare `openai/form` in [`Self::extensions`].", ), ] = None 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" audio = "audio" class InstalledApp(BaseModel): model_config = ConfigDict( populate_by_name=True, ) callable: Annotated[ bool, Field( description="Whether the connector is enabled and has a non-synthetic, model-visible tool allowed by effective MCP and app/tool policy in the committed runtime snapshot." ), ] enabled: Annotated[ bool, Field( description="Effective enabled state after applying global, workspace, local, and managed configuration at read time." ), ] id: str runtime_name: Annotated[ str | None, Field( alias="runtimeName", description="Best-effort name carried by the runtime tool catalog. Canonical app metadata remains owned by `app/read`.", ), ] = None class InternalChatMessageMetadataPassthrough(BaseModel): model_config = ConfigDict( populate_by_name=True, ) turn_id: str | None = None class LegacyAppPathString(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: str 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 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 AmazonBedrockLoginAccountParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) api_key: Annotated[str, Field(alias="apiKey")] region: str type: Annotated[ Literal["amazonBedrock"], Field(title="AmazonBedrockv2::LoginAccountParamsType") ] class AmazonBedrockAccessKeysLoginAccountParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) access_key_id: Annotated[str, Field(alias="accessKeyId")] region: str secret_access_key: Annotated[str, Field(alias="secretAccessKey")] session_token: Annotated[str | None, Field(alias="sessionToken")] = None type: Annotated[ Literal["amazonBedrockAccessKeys"], Field(title="AmazonBedrockAccessKeysv2::LoginAccountParamsType"), ] 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 AmazonBedrockLoginAccountResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["amazonBedrock"], Field(title="AmazonBedrockv2::LoginAccountResponseType") ] class LoginAccountResponse( RootModel[ ApiKeyLoginAccountResponse | ChatgptLoginAccountResponse | ChatgptDeviceCodeLoginAccountResponse | ChatgptAuthTokensLoginAccountResponse | AmazonBedrockLoginAccountResponse ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ ApiKeyLoginAccountResponse | ChatgptLoginAccountResponse | ChatgptDeviceCodeLoginAccountResponse | ChatgptAuthTokensLoginAccountResponse | AmazonBedrockLoginAccountResponse, Field(title="LoginAccountResponse"), ] class LoginAppBrand(Enum): codex = "codex" chatgpt = "chatgpt" class LogoutAccountResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ManagedHooksRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) interrupt: Annotated[list[ConfiguredHookMatcherGroup] | None, Field(alias="Interrupt")] = [] 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_end: Annotated[list[ConfiguredHookMatcherGroup] | None, Field(alias="SessionEnd")] = [] session_start: Annotated[list[ConfiguredHookMatcherGroup], Field(alias="SessionStart")] stop: Annotated[list[ConfiguredHookMatcherGroup], Field(alias="Stop")] subagent_start: Annotated[list[ConfiguredHookMatcherGroup], Field(alias="SubagentStart")] subagent_stop: Annotated[list[ConfiguredHookMatcherGroup], Field(alias="SubagentStop")] 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): unknown = "unknown" unsupported = "unsupported" not_logged_in = "notLoggedIn" bearer_token = "bearerToken" o_auth = "oAuth" class McpResourceReadParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) connector_id: Annotated[str | None, Field(alias="connectorId")] = None origin_call_id: Annotated[ str | None, Field( alias="originCallId", description="Originating MCP tool call used to select the resource's app.", ), ] = None server: str thread_id: Annotated[str | None, Field(alias="threadId")] = None uri: str class McpServerConnectionStatus(Enum): not_started = "notStarted" starting = "starting" connected = "connected" authentication_required = "authenticationRequired" failed = "failed" cancelled = "cancelled" disabled = "disabled" class McpServerEventNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) method: str params: Any class McpServerEventStreamNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) notification: McpServerEventNotification subscription_id: Annotated[str, Field(alias="subscriptionId")] class McpServerInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, ) description: str | None = None icons: list | None = None name: str title: str | None = None version: str website_url: Annotated[str | None, Field(alias="websiteUrl")] = None class McpServerMigration(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str class McpServerOauthClientRegistration(Enum): auto = "auto" cimd = "cimd" dcr = "dcr" class McpServerOauthLoginCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) error: str | None = None name: str success: bool thread_id: Annotated[str | None, Field(alias="threadId")] = None class McpServerOauthLoginParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) client_registration: Annotated[ McpServerOauthClientRegistration | None, Field( alias="clientRegistration", description="Registration strategy for this login only; omission selects automatic discovery.", ), ] = None name: str scopes: list[str] | None = None thread_id: Annotated[str | None, Field(alias="threadId")] = 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 McpServerStartupFailureReason(RootModel[Literal["reauthenticationRequired"]]): model_config = ConfigDict( populate_by_name=True, ) root: Literal["reauthenticationRequired"] 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 failure_reason: Annotated[ McpServerStartupFailureReason | None, Field(alias="failureReason") ] = None name: str status: McpServerStartupState thread_id: Annotated[str | None, Field(alias="threadId")] = None 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 McpToolCallAppContext(BaseModel): model_config = ConfigDict( populate_by_name=True, ) action_name: Annotated[str | None, Field(alias="actionName")] = None app_name: Annotated[str | None, Field(alias="appName")] = None connector_id: Annotated[str, Field(alias="connectorId")] link_id: Annotated[str | None, Field(alias="linkId")] = None resource_uri: Annotated[str | None, Field(alias="resourceUri")] = 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 MisalignmentSteer(BaseModel): model_config = ConfigDict( populate_by_name=True, ) message: str 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 ModelSafetyBufferingUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) faster_model: Annotated[str | None, Field(alias="fasterModel")] = None model: str reasons: list[str] show_buffering_ui: Annotated[bool, Field(alias="showBufferingUi")] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] use_cases: Annotated[list[str], Field(alias="useCases")] 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 retirement_at: Annotated[ int | None, Field( alias="retirementAt", description="Informational Unix timestamp for this upgrade's scheduled retirement, if known.", ), ] = 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 MultiAgentModeValue(Enum): explicit_request_only = "explicitRequestOnly" proactive = "proactive" class CustomMultiAgentMode(BaseModel): model_config = ConfigDict( extra="forbid", populate_by_name=True, ) custom: str class MultiAgentMode(RootModel[MultiAgentModeValue | CustomMultiAgentMode]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ MultiAgentModeValue | CustomMultiAgentMode, Field( description="Controls the effective multi-agent delegation instructions for a turn. `custom` means the configured mode hint defines the policy instead of a built-in policy." ), ] class MultiAgentVersion(Enum): disabled = "disabled" v1 = "v1" v2 = "v2" 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" deny = "deny" class NonSteerableTurnKind(Enum): review = "review" compact = "compact" class NullableGetAccountRateLimitsParams(RootModel[GetAccountRateLimitsParams | None]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ GetAccountRateLimitsParams | None, Field(title="Nullable_GetAccountRateLimitsParams") ] class NullableGetAccountTokenUsageParams(RootModel[GetAccountTokenUsageParams | None]): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ GetAccountTokenUsageParams | None, Field(title="Nullable_GetAccountTokenUsageParams") ] 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 PathUri(RootModel[str]): model_config = ConfigDict( populate_by_name=True, ) root: str class PermissionProfileListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cursor: Annotated[ str | None, Field(description="Opaque pagination cursor returned by a previous call.") ] = None cwd: Annotated[ str | None, Field(description="Optional working directory to resolve project config layers."), ] = None limit: Annotated[ int | None, Field(description="Optional page size; defaults to the full result set.", ge=0) ] = None class PermissionProfileSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) allowed: Annotated[ bool, Field(description="Whether the effective requirements allow selecting this profile.") ] description: Annotated[ str | None, Field(description="Optional user-facing description for display in clients.") ] = None id: Annotated[str, Field(description="Available permission profile identifier.")] 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(str, Enum): free = "free" go = "go" plus = "plus" pro = "pro" prolite = "prolite" team = "team" self_serve_business_prolite = "self_serve_business_prolite" self_serve_business_usage_based = "self_serve_business_usage_based" business = "business" ent26 = "ent26" enterprise_cbp_automation = "enterprise_cbp_automation" enterprise_cbp_usage_based = "enterprise_cbp_usage_based" enterprise = "enterprise" edu = "edu" edu_plus = "edu_plus" edu_pro = "edu_pro" unknown = "unknown" @classmethod def _missing_(cls, value: object) -> PlanType | None: if not isinstance(value, str) or not value: return None member = str.__new__(cls, value) member._name_ = value member._value_ = value return member class PluginAuthPolicy(Enum): on_install = "ON_INSTALL" on_use = "ON_USE" class PluginAvailability(Enum): disabled_by_admin = "DISABLED_BY_ADMIN" available = "AVAILABLE" class PluginDisabledReason(Enum): disabled_by_admin = "disabled_by_admin" plan_not_eligible = "plan_not_eligible" required_app_unavailable = "required_app_unavailable" unknown = "unknown" 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, ) install_attempt_id: Annotated[ str | None, Field( alias="installAttemptId", description="Client-generated identifier used to correlate one installation attempt.", ), ] = None 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 PluginInstallPolicySource(Enum): workspace_setting = "WORKSPACE_SETTING" implicit_canonical_app = "IMPLICIT_CANONICAL_APP" 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 PluginInstalledParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwds: Annotated[ list[AbsolutePathBuf] | None, Field(description="Optional working directories used to discover repo marketplaces."), ] = None install_suggestion_plugin_names: Annotated[ list[str] | None, Field( alias="installSuggestionPluginNames", description="Additional uninstalled plugin names that should be returned when present locally. This is used by mention surfaces that intentionally expose install entrypoints.", ), ] = None 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_dark: Annotated[ AbsolutePathBuf | None, Field( alias="logoDark", description="Local dark-mode 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 logo_url_dark: Annotated[ str | None, Field( alias="logoUrlDark", description="Remote dark-mode 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" vertical = "vertical" workspace_directory = "workspace-directory" shared_with_me = "shared-with-me" created_by_me_remote = "created-by-me-remote" 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 force_refetch: Annotated[ bool | None, Field( alias="forceRefetch", description="Whether the client requests a fresh remote plugin catalog fetch.", ), ] = 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 PluginReconcileChangedPlugin(BaseModel): model_config = ConfigDict( populate_by_name=True, ) has_apps: Annotated[bool, Field(alias="hasApps")] has_hooks: Annotated[bool, Field(alias="hasHooks")] has_mcps: Annotated[bool, Field(alias="hasMcps")] has_skills: Annotated[ bool, Field( alias="hasSkills", description="Whether either bundle declares skill roots; not a validated inventory of enabled skills.", ), ] id: Annotated[ str, Field(description="Local plugin ID (`name@marketplace`), matching `PluginSummary.id`.") ] class PluginReconcileParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) reason: Annotated[ str | None, Field( description="Optional client-provided reason recorded with the reconciliation attempt." ), ] = None class PluginReconcileResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) changed_plugins: Annotated[ list[PluginReconcileChangedPlugin], Field( alias="changedPlugins", description="Plugins affected by bundle changes, enablement changes, or removals. Installed-state changes compare against the previous cached snapshot, including cached reinstalls. Removal hints survive cache cleanup failures; unchanged plugins are omitted.", ), ] failed_materialization_remote_plugin_ids: Annotated[ list[str], Field( alias="failedMaterializationRemotePluginIds", description="Subset of failures for which the requested bundle could not be materialized. A previously cached version may still be available.", ), ] failed_remote_plugin_ids: Annotated[ list[str], Field( alias="failedRemotePluginIds", description="Backend remote plugin IDs whose bundle or identity update failed.", ), ] class PluginSearchScope(Enum): global_ = "global" workspace = "workspace" personal = "personal" class PluginShareCheckoutParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) remote_plugin_id: Annotated[str, Field(alias="remotePluginId")] class PluginShareCheckoutResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) marketplace_name: Annotated[str, Field(alias="marketplaceName")] marketplace_path: Annotated[AbsolutePathBuf, Field(alias="marketplacePath")] plugin_id: Annotated[str, Field(alias="pluginId")] plugin_name: Annotated[str, Field(alias="pluginName")] plugin_path: Annotated[AbsolutePathBuf, Field(alias="pluginPath")] remote_plugin_id: Annotated[str, Field(alias="remotePluginId")] remote_version: Annotated[str | None, Field(alias="remoteVersion")] = 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, ) can_publish_to_workspace: Annotated[bool | None, Field(alias="canPublishToWorkspace")] = None 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" listed = "LISTED" 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 NpmPluginSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) package: str registry: Annotated[ str | None, Field( description="Optional HTTPS registry URL. Authentication stays in the user's npm config." ), ] = None type: Annotated[Literal["npm"], Field(title="NpmPluginSourceType")] version: Annotated[str | None, Field(description="Optional npm version or version range.")] = ( None ) class RemotePluginSource(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["remote"], Field(title="RemotePluginSourceType")] class PluginSource( RootModel[LocalPluginSource | GitPluginSource | NpmPluginSource | RemotePluginSource] ): model_config = ConfigDict( populate_by_name=True, ) root: LocalPluginSource | GitPluginSource | NpmPluginSource | 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 ProjectChangeType(Enum): created = "created" updated = "updated" deleted = "deleted" class ProjectChangedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) change_type: Annotated[ProjectChangeType, Field(alias="changeType")] project_id: Annotated[str, Field(alias="projectId")] class ProjectRoot(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: AbsolutePathBuf class ProjectSortKey(Enum): position = "position" recency_at = "recencyAt" 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 RateLimitResetCreditStatus(Enum): available = "available" redeeming = "redeeming" redeemed = "redeemed" unknown = "unknown" class RateLimitResetType(Enum): codex_rate_limits = "codexRateLimits" unknown = "unknown" 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" v3 = "v3" 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(str, Enum): none = "none" minimal = "minimal" low = "low" medium = "medium" high = "high" xhigh = "xhigh" max = "max" ultra = "ultra" @classmethod def _missing_(cls, value: object) -> ReasoningEffort | None: if not isinstance(value, str) or not value: return None member = str.__new__(cls, value) member._name_ = value member._value_ = value return member 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 RemoteControlDisableParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) ephemeral: bool | None = None class RemoteControlEnableParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) ephemeral: bool | None = None 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")] server_name: Annotated[str, Field(alias="serverName")] 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 AgentMessageResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) author: str content: list[AgentMessageInputContent] id: str | None = None internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | None = None recipient: str type: Annotated[Literal["agent_message"], Field(title="AgentMessageResponseItemType")] class ReasoningResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) content: list[ReasoningItemContent] | None = None encrypted_content: str | None = None id: str | None = None internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | 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 internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | None = 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 encrypted_function_args: list[str] | None = None id: str | None = None internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | 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 internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | 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 internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | None = None name: str namespace: str | None = None 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 id: str | None = None internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | None = None 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 | None = None internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | None = None 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 id: str | None = None internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | None = None type: Annotated[Literal["compaction"], Field(title="CompactionResponseItemType")] class CompactionTriggerResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["compaction_trigger"], Field(title="CompactionTriggerResponseItemType")] class ContextCompactionResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) encrypted_content: str | None = None id: str | None = None internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | 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 ResponseUsageMetadata(BaseModel): model_config = ConfigDict( populate_by_name=True, ) amount: str | None = None metadata: Any | None = None 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 DailyScheduledTaskSchedule(BaseModel): model_config = ConfigDict( populate_by_name=True, ) time: str type: Annotated[Literal["daily"], Field(title="DailyScheduledTaskScheduleType")] class WeekdaysScheduledTaskSchedule(BaseModel): model_config = ConfigDict( populate_by_name=True, ) time: str type: Annotated[Literal["weekdays"], Field(title="WeekdaysScheduledTaskScheduleType")] class ScheduledTaskWeekday(Enum): mo = "MO" tu = "TU" we = "WE" th = "TH" fr = "FR" sa = "SA" su = "SU" class SelectedCapabilityRoot(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[ str, Field(description="Stable identifier supplied by the capability selection platform.") ] location: Annotated[ CapabilityRootLocation, Field(description="Where the selected root can be resolved.") ] 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 ServerDiagnosticsGauge(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str value: Annotated[int, Field(ge=0)] class ServerDiagnosticsProcess(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: Annotated[int, Field(ge=0)] physical_footprint_bytes: Annotated[int | None, Field(alias="physicalFootprintBytes", ge=0)] = ( None ) resident_memory_bytes: Annotated[int | None, Field(alias="residentMemoryBytes", ge=0)] = None class ProjectChangedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["project/changed"], Field(title="Project/changedNotificationMethod")] params: ProjectChangedNotification class ThreadEnvironmentConnectedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/environment/connected"], Field(title="Thread/environment/connectedNotificationMethod"), ] params: EnvironmentConnectionNotification class ThreadEnvironmentDisconnectedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/environment/disconnected"], Field(title="Thread/environment/disconnectedNotificationMethod"), ] params: EnvironmentConnectionNotification class ItemAgentMessageDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/agentMessage/delta"], Field(title="Item/agentMessage/deltaNotificationMethod") ] params: AgentMessageDeltaNotification class ItemPlanDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["item/plan/delta"], Field(title="Item/plan/deltaNotificationMethod")] params: PlanDeltaNotification class ProcessExitedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["process/exited"], Field(title="Process/exitedNotificationMethod")] params: ProcessExitedNotification class ItemCommandExecutionOutputDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/commandExecution/outputDelta"], Field(title="Item/commandExecution/outputDeltaNotificationMethod"), ] params: CommandExecutionOutputDeltaNotification class ItemFileChangeOutputDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/fileChange/outputDelta"], Field(title="Item/fileChange/outputDeltaNotificationMethod"), ] params: FileChangeOutputDeltaNotification class ItemMcpToolCallProgressServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/mcpToolCall/progress"], Field(title="Item/mcpToolCall/progressNotificationMethod"), ] params: McpToolCallProgressNotification class McpServerOauthLoginCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["mcpServer/oauthLogin/completed"], Field(title="McpServer/oauthLogin/completedNotificationMethod"), ] params: McpServerOauthLoginCompletedNotification class McpServerStartupStatusUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["mcpServer/startupStatus/updated"], Field(title="McpServer/startupStatus/updatedNotificationMethod"), ] params: McpServerStatusUpdatedNotification class McpServerEventStreamNotificationServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["mcpServer/event/stream/notification"], Field(title="McpServer/event/stream/notificationNotificationMethod"), ] params: McpServerEventStreamNotification class RemoteControlStatusChangedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["remoteControl/status/changed"], Field(title="RemoteControl/status/changedNotificationMethod"), ] params: RemoteControlStatusChangedNotification class FsChangedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["fs/changed"], Field(title="Fs/changedNotificationMethod")] params: FsChangedNotification class ItemReasoningSummaryTextDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/reasoning/summaryTextDelta"], Field(title="Item/reasoning/summaryTextDeltaNotificationMethod"), ] params: ReasoningSummaryTextDeltaNotification class ItemReasoningSummaryPartAddedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/reasoning/summaryPartAdded"], Field(title="Item/reasoning/summaryPartAddedNotificationMethod"), ] params: ReasoningSummaryPartAddedNotification class ItemReasoningTextDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/reasoning/textDelta"], Field(title="Item/reasoning/textDeltaNotificationMethod"), ] params: ReasoningTextDeltaNotification class ThreadCompactedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/compacted"], Field(title="Thread/compactedNotificationMethod") ] params: ContextCompactedNotification class ModelReroutedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["model/rerouted"], Field(title="Model/reroutedNotificationMethod")] params: ModelReroutedNotification class ModelVerificationServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["model/verification"], Field(title="Model/verificationNotificationMethod") ] params: ModelVerificationNotification class ModelProviderAuthRecoveryStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["modelProvider/authRecoveryStarted"], Field(title="ModelProvider/authRecoveryStartedNotificationMethod"), ] params: AuthRecoveryNotification class ModelProviderAuthRecoveryCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["modelProvider/authRecoveryCompleted"], Field(title="ModelProvider/authRecoveryCompletedNotificationMethod"), ] params: AuthRecoveryNotification class ModelSafetyBufferingUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["model/safetyBuffering/updated"], Field(title="Model/safetyBuffering/updatedNotificationMethod"), ] params: ModelSafetyBufferingUpdatedNotification class GuardianWarningServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["guardianWarning"], Field(title="GuardianWarningNotificationMethod")] params: GuardianWarningNotification class DeprecationNoticeServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["deprecationNotice"], Field(title="DeprecationNoticeNotificationMethod") ] params: DeprecationNoticeNotification class FuzzyFileSearchSessionUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["fuzzyFileSearch/sessionUpdated"], Field(title="FuzzyFileSearch/sessionUpdatedNotificationMethod"), ] params: FuzzyFileSearchSessionUpdatedNotification class FuzzyFileSearchSessionCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["fuzzyFileSearch/sessionCompleted"], Field(title="FuzzyFileSearch/sessionCompletedNotificationMethod"), ] params: FuzzyFileSearchSessionCompletedNotification 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_large_url: Annotated[ str | None, Field(alias="iconLargeUrl", description="Remote large icon URL from the plugin catalog."), ] = None icon_small: Annotated[AbsolutePathBuf | None, Field(alias="iconSmall")] = None icon_small_url: Annotated[ str | None, Field(alias="iconSmallUrl", description="Remote small icon URL from the plugin catalog."), ] = None short_description: Annotated[str | None, Field(alias="shortDescription")] = None class SkillMigration(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str 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 SkillsExtraRootsSetParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) extra_roots: Annotated[list[AbsolutePathBuf], Field(alias="extraRoots")] class SkillsExtraRootsSetResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) 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 SpendControlLimitSnapshot(BaseModel): model_config = ConfigDict( populate_by_name=True, ) limit: str remaining_percent: Annotated[int, Field(alias="remainingPercent")] resets_at: Annotated[int, Field(alias="resetsAt")] used: str class StrictReviewRequiredNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) started_at_ms: Annotated[ int, Field( alias="startedAtMs", description="Unix timestamp (in milliseconds) when this review started.", ), ] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] class SubAgentActivityKind(Enum): started = "started" interacted = "interacted" interrupted = "interrupted" completed = "completed" 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 ThreadDeleteParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadDeleteResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ThreadDeletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadEnvironment(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: LegacyAppPathString environment_id: Annotated[str, Field(alias="environmentId")] runtime_workspace_roots: Annotated[ list[LegacyAppPathString], Field(alias="runtimeWorkspaceRoots") ] class ThreadExtra(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ThreadGoalClearParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadGoalClearResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cleared: bool class ThreadGoalClearedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadGoalGetParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] class ThreadGoalStatus(Enum): active = "active" paused = "paused" blocked = "blocked" usage_limited = "usageLimited" budget_limited = "budgetLimited" complete = "complete" class ThreadHistoryMode(Enum): legacy = "legacy" paginated = "paginated" 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 McpToolCallThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) app_context: Annotated[McpToolCallAppContext | None, Field(alias="appContext")] = None 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", description="Deprecated: use `appContext.resourceUri` instead.", ), ] = None plugin_id: Annotated[str | None, Field(alias="pluginId")] = None read_only_hint: Annotated[bool | None, Field(alias="readOnlyHint")] = 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 SubAgentActivityThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) agent_path: Annotated[str, Field(alias="agentPath")] agent_thread_id: Annotated[str, Field(alias="agentThreadId")] id: str kind: SubAgentActivityKind type: Annotated[Literal["subAgentActivity"], Field(title="SubAgentActivityThreadItemType")] class ImageViewThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str path: LegacyAppPathString type: Annotated[Literal["imageView"], Field(title="ImageViewThreadItemType")] class SleepThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) duration_ms: Annotated[int, Field(alias="durationMs", ge=0)] id: str type: Annotated[Literal["sleep"], Field(title="SleepThreadItemType")] class ImageGenerationThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) failure: ImageGenerationFailure | None = None id: str result: str revised_prompt: Annotated[str | None, Field(alias="revisedPrompt")] = None saved_path: Annotated[AbsolutePathBuf | None, Field(alias="savedPath")] = None status: str transparent_background: Annotated[bool | None, Field(alias="transparentBackground")] = None 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 ThreadItemsListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cursor: Annotated[ str | None, Field( description="Opaque cursor to pass to the next call to continue after the last item." ), ] = None limit: Annotated[int | None, Field(description="Optional item page size.", ge=0)] = None sort_direction: Annotated[ SortDirection | None, Field( alias="sortDirection", description="Optional item pagination direction; defaults to ascending.", ), ] = None thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[ str | None, Field( alias="turnId", description="Optional turn id to filter by. When omitted, returns items across the thread.", ), ] = None 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 ThreadProjectUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) project_id: Annotated[str | None, Field(alias="projectId")] = None thread_id: Annotated[str, Field(alias="threadId")] class ThreadQueueChangedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] 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. Full-history hydration is deprecated for paginated threads; prefer a metadata-only read and page with `thread/turns/list` and `thread/items/list`.", ), ] = None 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 WholeItemThreadRealtimeBemItemPresentation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["wholeItem"], Field(title="WholeItemThreadRealtimeBemItemPresentationType") ] class InlineMarkdownThreadRealtimeBemItemPresentation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[ Literal["inlineMarkdown"], Field(title="InlineMarkdownThreadRealtimeBemItemPresentationType"), ] class InlineVisualizationThreadRealtimeBemItemPresentation(BaseModel): model_config = ConfigDict( populate_by_name=True, ) index: Annotated[int, Field(ge=0)] type: Annotated[ Literal["inlineVisualization"], Field(title="InlineVisualizationThreadRealtimeBemItemPresentationType"), ] class ThreadRealtimeBemItemPresentation( RootModel[ WholeItemThreadRealtimeBemItemPresentation | InlineMarkdownThreadRealtimeBemItemPresentation | InlineVisualizationThreadRealtimeBemItemPresentation ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ WholeItemThreadRealtimeBemItemPresentation | InlineMarkdownThreadRealtimeBemItemPresentation | InlineVisualizationThreadRealtimeBemItemPresentation, Field( description="EXPERIMENTAL - how an existing agent item appears in a realtime conversation." ), ] 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 ThreadRealtimeInitialItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) role: ConversationTextRole text: str class RealtimeSessionStartedThreadRealtimeItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str realtime_session_id: Annotated[str, Field(alias="realtimeSessionId")] type: Annotated[ Literal["realtimeSessionStarted"], Field(title="RealtimeSessionStartedThreadRealtimeItemType"), ] class BemItemPromotedThreadRealtimeItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str realtime_session_id: Annotated[str, Field(alias="realtimeSessionId")] item_id: str presentation: ThreadRealtimeBemItemPresentation turn_id: str type: Annotated[ Literal["bemItemPromoted"], Field(title="BemItemPromotedThreadRealtimeItemType") ] class ThreadRealtimeItemAddedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item: Any thread_id: Annotated[str, Field(alias="threadId")] class ThreadRealtimeItemTranscriptDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) delta: str item_id: Annotated[str, Field(alias="itemId")] 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 ThreadRealtimeSessionOutcome(Enum): ended = "ended" failed = "failed" 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 ExistingCallThreadRealtimeStartTransport(BaseModel): model_config = ConfigDict( populate_by_name=True, ) call_id: Annotated[ str, Field( alias="callId", description="Identifier of a realtime call already created and negotiated by the client.", ), ] type: Annotated[ Literal["existingCall"], Field(title="ExistingCallThreadRealtimeStartTransportType") ] class ThreadRealtimeStartTransport( RootModel[ WebsocketThreadRealtimeStartTransport | WebrtcThreadRealtimeStartTransport | ExistingCallThreadRealtimeStartTransport ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ WebsocketThreadRealtimeStartTransport | WebrtcThreadRealtimeStartTransport | ExistingCallThreadRealtimeStartTransport, 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 ThreadRealtimeTranscriptRole(Enum): user = "user" assistant = "assistant" 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 exclude_turns: Annotated[ bool | None, Field( alias="excludeTurns", description="When true, return only thread metadata and live-resume state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after resuming. Full-history hydration is deprecated for paginated threads; use this with `thread/turns/list` and `thread/items/list` instead.", ), ] = 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 ThreadRevertParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) before_turn_id: Annotated[ str, Field( alias="beforeTurnId", description="Turn excluded from the replacement history, together with every later turn.", ), ] thread_id: Annotated[str, Field(alias="threadId")] class ThreadRevertedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) 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 ThreadSearchSortKey(Enum): created_at = "created_at" updated_at = "updated_at" recency_at = "recency_at" class ThreadSectionAppearance(BaseModel): model_config = ConfigDict( populate_by_name=True, ) color: str | None = None icon: str | None = None class ThreadSectionCreateParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) appearance: ThreadSectionAppearance | None = None name: Annotated[str, Field(description="The user-visible name of the section.")] class ThreadSectionDeleteParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) section_id: Annotated[ str, Field( alias="sectionId", description="The stable, server-generated identity of the section to delete.", ), ] class ThreadSectionDeleteResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ThreadSectionListParams(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="Maximum number of sections to return.", ge=0) ] = None class ThreadSectionMoveParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) before_thread_id: Annotated[ str | None, Field( alias="beforeThreadId", description="Existing thread to insert before; omission or null appends to the section.", ), ] = None section_id: Annotated[ str | None, Field( alias="sectionId", description="Destination section, or `null` to remove the thread from its section.", ), ] = None thread_id: Annotated[ str, Field(alias="threadId", description="Thread to move into, within, or out of a section."), ] class ThreadSectionMoveResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ThreadSectionUpdateParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) appearance: Annotated[ ThreadSectionAppearance | None, Field( description="Omit to preserve appearance, use `null` to clear it, or provide a replacement." ), ] = None name: Annotated[str, Field(description="The updated user-visible name of the section.")] section_id: Annotated[ str, Field( alias="sectionId", description="The stable, server-generated identity of the section to update.", ), ] 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")] timeout_ms: Annotated[ int | None, Field( alias="timeoutMs", description="Maximum execution time in milliseconds. Defaults to one hour when omitted or null. Must be non-negative; zero requests an immediate timeout, not unlimited execution. Does not affect the immediate RPC acknowledgement.", ), ] = None class ThreadShellCommandResponse(BaseModel): pass model_config = ConfigDict( populate_by_name=True, ) class ThreadSortKey(Enum): created_at = "created_at" updated_at = "updated_at" recency_at = "recency_at" section_position = "section_position" class ThreadSource(str, Enum): user = "user" subagent = "subagent" memory_consolidation = "memory_consolidation" @classmethod def _missing_(cls, value: object) -> ThreadSource | None: if not isinstance(value, str): return None member = str.__new__(cls, value) member._name_ = value member._value_ = value return member 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 TurnStartedThreadTimelineEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) position: Annotated[int, Field(ge=0)] started_at: int | None = None turn_id: str type: Annotated[Literal["turnStarted"], Field(title="TurnStartedThreadTimelineEntryType")] 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 ThreadUsageBreakdownGroup(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cached_input_tokens: Annotated[int | None, Field(alias="cachedInputTokens")] = None estimated_usage_credits_micros: Annotated[int, Field(alias="estimatedUsageCreditsMicros")] input_tokens: Annotated[int | None, Field(alias="inputTokens")] = None model: str | None = None net_new_input_tokens: Annotated[int | None, Field(alias="netNewInputTokens")] = None output_tokens: Annotated[int | None, Field(alias="outputTokens")] = None reasoning_effort: Annotated[str | None, Field(alias="reasoningEffort")] = None speed: str | None = None total_tokens: Annotated[int | None, Field(alias="totalTokens")] = None class TokenUsageBreakdown(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cache_write_input_tokens: Annotated[int | None, Field(alias="cacheWriteInputTokens")] = 0 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: LegacyAppPathString environment_id: Annotated[str, Field(alias="environmentId")] runtime_workspace_roots: Annotated[ list[LegacyAppPathString] | None, Field( alias="runtimeWorkspaceRoots", description="Environment-native runtime workspace roots. Omitted defaults to `cwd`.", ), ] = None 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 TurnModerationMetadataNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) metadata: Any thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] 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, ) detail: ImageDetail | None = None type: Annotated[Literal["image"], Field(title="ImageUserInputType")] url: str class LocalImageUserInput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) detail: ImageDetail | None = None path: str type: Annotated[Literal["localImage"], Field(title="LocalImageUserInputType")] class AudioUserInput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) type: Annotated[Literal["audio"], Field(title="AudioUserInputType")] url: str class LocalAudioUserInput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: str type: Annotated[Literal["localAudio"], Field(title="LocalAudioUserInputType")] 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 | AudioUserInput | LocalAudioUserInput | SkillUserInput | MentionUserInput ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( TextUserInput | ImageUserInput | LocalImageUserInput | AudioUserInput | LocalAudioUserInput | 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" indexed = "indexed" 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 WorkspaceMessageType(Enum): headline = "headline" announcement = "announcement" unknown = "unknown" class WriteStatus(Enum): ok = "ok" ok_overridden = "okOverridden" class ChatgptAccount(BaseModel): model_config = ConfigDict( populate_by_name=True, ) email: str | None 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 AccountLoginCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) error: str | None = None login_id: Annotated[str | None, Field(alias="loginId")] = None onboarding_entrypoint: Annotated[ DesktopOnboardingEntrypoint | None, Field(alias="onboardingEntrypoint") ] = None success: bool 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 AdditionalContextEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind: AdditionalContextKind value: str class AppConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approvals_reviewer: ApprovalsReviewer | None = None default_tools_approval_mode: AppToolApproval | None = None default_tools_enabled: bool | None = None destructive_enabled: bool | None = None enabled: bool | None = True links: Annotated[ AppLinksConfig | None, Field(description="Per-account approval settings keyed by link ID.") ] = None open_world_enabled: bool | None = None tools: AppToolsConfig | None = None class AppLinkConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approvals_reviewer: ApprovalsReviewer | None = None default_tools_approval_mode: AppToolApproval | 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 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 AppTemplateSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) canonical_connector_id: Annotated[str | None, Field(alias="canonicalConnectorId")] = None category: str | None = None description: str | None = None logo_url: Annotated[str | None, Field(alias="logoUrl")] = None logo_url_dark: Annotated[str | None, Field(alias="logoUrlDark")] = None materialized_app_ids: Annotated[list[str], Field(alias="materializedAppIds")] name: str reason: AppTemplateUnavailableReason | None = None template_id: Annotated[str, Field(alias="templateId")] class ApplicationNetworkRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) domains: dict[str, NetworkDomainPermission] enabled: Annotated[ bool, Field(description="When enabled, only explicitly allowed exact domains may be contacted."), ] class ApplicationRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) network: ApplicationNetworkRequirements | None = None class AppsConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) field_default: Annotated[AppsDefaultConfig | None, Field(alias="_default")] = None class AppsInstalledResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) apps: list[InstalledApp] class AppsReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) apps: list[ConnectorMetadata] missing_app_ids: Annotated[list[str], Field(alias="missingAppIds")] class BrowserUseConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) allow_history_access: bool | None = None default_origin_policy: BrowserUseOriginPolicyConfig | None = None origins: dict[str, Any] | None = 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 ThreadDeleteRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/delete"], Field(title="Thread/deleteRequestMethod")] params: ThreadDeleteParams 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 ThreadGoalGetRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/goal/get"], Field(title="Thread/goal/getRequestMethod")] params: ThreadGoalGetParams class ThreadGoalClearRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/goal/clear"], Field(title="Thread/goal/clearRequestMethod")] params: ThreadGoalClearParams 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 ThreadSectionMoveRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["thread/section/move"], Field(title="Thread/section/moveRequestMethod") ] params: ThreadSectionMoveParams 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 ThreadRevertRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/revert"], Field(title="Thread/revertRequestMethod")] params: ThreadRevertParams class ThreadSectionListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["threadSection/list"], Field(title="ThreadSection/listRequestMethod")] params: ThreadSectionListParams class ThreadSectionCreateRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["threadSection/create"], Field(title="ThreadSection/createRequestMethod") ] params: ThreadSectionCreateParams class ThreadSectionUpdateRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["threadSection/update"], Field(title="ThreadSection/updateRequestMethod") ] params: ThreadSectionUpdateParams class ThreadSectionDeleteRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["threadSection/delete"], Field(title="ThreadSection/deleteRequestMethod") ] params: ThreadSectionDeleteParams 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 ThreadItemsListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/items/list"], Field(title="Thread/items/listRequestMethod")] params: ThreadItemsListParams 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 SkillsExtraRootsSetRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["skills/extraRoots/set"], Field(title="Skills/extraRoots/setRequestMethod") ] params: SkillsExtraRootsSetParams 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 PluginInstalledRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["plugin/installed"], Field(title="Plugin/installedRequestMethod")] params: PluginInstalledParams class PluginReconcileRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["plugin/reconcile"], Field(title="Plugin/reconcileRequestMethod")] params: PluginReconcileParams 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 PluginShareCheckoutRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["plugin/share/checkout"], Field(title="Plugin/share/checkoutRequestMethod") ] params: PluginShareCheckoutParams 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 AppReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["app/read"], Field(title="App/readRequestMethod")] params: AppsReadParams class AppListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["app/list"], Field(title="App/listRequestMethod")] params: AppsListParams class AppInstalledRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["app/installed"], Field(title="App/installedRequestMethod")] params: AppsInstalledParams 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 PermissionProfileListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["permissionProfile/list"], Field(title="PermissionProfile/listRequestMethod") ] params: PermissionProfileListParams 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 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: GetAccountRateLimitsParams | None = None class AccountRateLimitResetCreditConsumeRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["account/rateLimitResetCredit/consume"], Field(title="Account/rateLimitResetCredit/consumeRequestMethod"), ] params: ConsumeAccountRateLimitResetCreditParams class AccountUsageReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["account/usage/read"], Field(title="Account/usage/readRequestMethod")] params: GetAccountTokenUsageParams | None = None class AccountWorkspaceMessagesReadRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["account/workspaceMessages/read"], Field(title="Account/workspaceMessages/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 ExternalAgentConfigImportReadHistoriesRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["externalAgentConfig/import/readHistories"], Field(title="ExternalAgentConfig/import/readHistoriesRequestMethod"), ] params: None = None 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 ReadCommandAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) command: str name: str path: LegacyAppPathString type: Annotated[Literal["read"], Field(title="ReadCommandActionType")] class CommandAction( RootModel[ ReadCommandAction | ListFilesCommandAction | SearchCommandAction | UnknownCommandAction ] ): model_config = ConfigDict( populate_by_name=True, ) root: ReadCommandAction | ListFilesCommandAction | SearchCommandAction | UnknownCommandAction 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 ComputerUseRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) allow_locked_computer_use: Annotated[bool | None, Field(alias="allowLockedComputerUse")] = None allow_persistent_approval: Annotated[bool | None, Field(alias="allowPersistentApproval")] = None default_app_access: Annotated[AllowDenyRequirement | None, Field(alias="defaultAppAccess")] = ( None ) macos: ComputerUseMacosRequirements | None = None windows: ComputerUseWindowsRequirements | None = None class ComputerUseWindowsConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) aumids: dict[str, Any] | None = None exes: list[ComputerUseWindowsExeConfig] | None = None 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 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 ConfigurationReasoning(BaseModel): model_config = ConfigDict( populate_by_name=True, ) effort: ReasoningEffort 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 | InputAudioContentItem | OutputTextContentItem ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( InputTextContentItem | InputImageContentItem | InputAudioContentItem | 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 ExternalAgentConfigImportHistoryRecordSuccessParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: str | None = None item_type: Annotated[ExternalAgentConfigMigrationItemType, Field(alias="itemType")] source: str | None = None target: str | None = None title: Annotated[ str | None, Field(description="Original title for an imported session, when available.") ] = None class ExternalAgentConfigImportItemTypeFailure(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: str | None = None error_type: Annotated[str | None, Field(alias="errorType")] = None failure_stage: Annotated[str, Field(alias="failureStage")] item_type: Annotated[ExternalAgentConfigMigrationItemType, Field(alias="itemType")] message: str source: str | None = None sub_error_type: Annotated[str | None, Field(alias="subErrorType")] = None class ExternalAgentConfigImportItemTypeSuccess(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cwd: str | None = None item_type: Annotated[ExternalAgentConfigMigrationItemType, Field(alias="itemType")] source: str | None = None target: str | None = None title: Annotated[ str | None, Field(description="Original title for an imported session; null for other item types."), ] = None class ExternalAgentConfigImportTypeResult(BaseModel): model_config = ConfigDict( populate_by_name=True, ) failures: list[ExternalAgentConfigImportItemTypeFailure] item_type: Annotated[ExternalAgentConfigMigrationItemType, Field(alias="itemType")] successes: list[ExternalAgentConfigImportItemTypeSuccess] class ExternalAgentDetectedConnectorCandidate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str session_count: Annotated[int, Field(alias="sessionCount", ge=0)] source: ExternalAgentDetectedConnectorSource class ExternalAgentImportedConnectorCandidate(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str session_count: Annotated[int, Field(alias="sessionCount", ge=0)] source: ExternalAgentImportedConnectorSource class PathFileSystemPath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) path: LegacyAppPathString type: Annotated[Literal["path"], Field(title="PathFileSystemPathType")] class KindFileSystemSpecialPath(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind: Literal["project_roots"] subpath: LegacyAppPathString | None = None class FileSystemSpecialPath1(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind: Literal["unknown"] path: str subpath: LegacyAppPathString | 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 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 | InputAudioFunctionCallOutputContentItem | EncryptedContentFunctionCallOutputContentItem ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ InputTextFunctionCallOutputContentItem | InputImageFunctionCallOutputContentItem | InputAudioFunctionCallOutputContentItem | EncryptedContentFunctionCallOutputContentItem, 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 WriteStdinGuardianApprovalReviewAction(BaseModel): model_config = ConfigDict( populate_by_name=True, ) approval_id: Annotated[str, Field(alias="approvalId")] cwd: LegacyAppPathString process_id: Annotated[str, Field(alias="processId")] stdin: str type: Annotated[ Literal["writeStdin"], Field(title="WriteStdinGuardianApprovalReviewActionType") ] 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 HookMetadata1(BaseModel): model_config = ConfigDict( populate_by_name=True, ) additional_context_limit: Annotated[ int | None, Field( alias="additionalContextLimit", description="Configured `additionalContext` spill threshold. `null` uses 2,500 tokens; `0` disables spilling.", ge=0, ), ] = None current_hash: Annotated[str, Field(alias="currentHash")] display_order: Annotated[int, Field(alias="displayOrder")] enabled: bool event_name: Annotated[HookEventName, Field(alias="eventName")] 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")] async_: Annotated[bool | None, Field(alias="async")] = False command: str handler_type: Annotated[Literal["command"], Field(alias="handlerType")] class HookMetadata2(BaseModel): model_config = ConfigDict( populate_by_name=True, ) additional_context_limit: Annotated[ int | None, Field( alias="additionalContextLimit", description="Configured `additionalContext` spill threshold. `null` uses 2,500 tokens; `0` disables spilling.", ge=0, ), ] = None current_hash: Annotated[str, Field(alias="currentHash")] display_order: Annotated[int, Field(alias="displayOrder")] enabled: bool event_name: Annotated[HookEventName, Field(alias="eventName")] 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")] handler_type: Annotated[Literal["mcpTool"], Field(alias="handlerType")] server: str tool: str class PromptHookMetadata(BaseModel): model_config = ConfigDict( populate_by_name=True, ) additional_context_limit: Annotated[ int | None, Field( alias="additionalContextLimit", description="Configured `additionalContext` spill threshold. `null` uses 2,500 tokens; `0` disables spilling.", ge=0, ), ] = None current_hash: Annotated[str, Field(alias="currentHash")] display_order: Annotated[int, Field(alias="displayOrder")] enabled: bool event_name: Annotated[HookEventName, Field(alias="eventName")] 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")] handler_type: Annotated[Literal["prompt"], Field(alias="handlerType")] class AgentHookMetadata(BaseModel): model_config = ConfigDict( populate_by_name=True, ) additional_context_limit: Annotated[ int | None, Field( alias="additionalContextLimit", description="Configured `additionalContext` spill threshold. `null` uses 2,500 tokens; `0` disables spilling.", ge=0, ), ] = None current_hash: Annotated[str, Field(alias="currentHash")] display_order: Annotated[int, Field(alias="displayOrder")] enabled: bool event_name: Annotated[HookEventName, Field(alias="eventName")] 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")] handler_type: Annotated[Literal["agent"], Field(alias="handlerType")] class HookMetadata( RootModel[HookMetadata1 | HookMetadata2 | PromptHookMetadata | AgentHookMetadata] ): model_config = ConfigDict( populate_by_name=True, ) root: HookMetadata1 | HookMetadata2 | PromptHookMetadata | AgentHookMetadata 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 thread_id: Annotated[str | None, Field(alias="threadId")] = None class ChatgptLoginAccountParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) app_brand: Annotated[LoginAppBrand | None, Field(alias="appBrand")] = None codex_streamlined_login: Annotated[bool | None, Field(alias="codexStreamlinedLogin")] = None type: Annotated[Literal["chatgpt"], Field(title="Chatgptv2::LoginAccountParamsType")] use_hosted_login_success_page: Annotated[ bool | None, Field(alias="useHostedLoginSuccessPage") ] = None class LoginAccountParams( RootModel[ ApiKeyLoginAccountParams | ChatgptLoginAccountParams | ChatgptDeviceCodeLoginAccountParams | ChatgptAuthTokensLoginAccountParams | AmazonBedrockLoginAccountParams | AmazonBedrockAccessKeysLoginAccountParams ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ ApiKeyLoginAccountParams | ChatgptLoginAccountParams | ChatgptDeviceCodeLoginAccountParams | ChatgptAuthTokensLoginAccountParams | AmazonBedrockLoginAccountParams | AmazonBedrockAccessKeysLoginAccountParams, Field(title="LoginAccountParams"), ] class McpResourceReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) contents: list[ResourceContent] origin_call_id: Annotated[ str | None, Field( alias="originCallId", description="Originating call when the server applied app-specific resource scoping.", ), ] = None class McpServerStatus(BaseModel): model_config = ConfigDict( populate_by_name=True, ) auth_status: Annotated[McpAuthStatus, Field(alias="authStatus")] name: str plugin_id: Annotated[str | None, Field(alias="pluginId")] = None resource_templates: Annotated[list[ResourceTemplate], Field(alias="resourceTemplates")] resources: list[Resource] runtime_status: Annotated[ McpServerConnectionStatus | None, Field( alias="runtimeStatus", description="Current thread-runtime connection state; null when unavailable or the configuration changed.", ), ] = None server_info: Annotated[McpServerInfo | None, Field(alias="serverInfo")] = None tools: dict[str, Tool] tools_error: Annotated[ str | None, Field( alias="toolsError", description="Tool discovery failed and no catalog was returned. Null when a catalog is returned, including cached or empty catalogs.", ), ] = None 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")] = [] memory: list[str] | None = None plugins: list[PluginsMigration] | None = [] sessions: list[SessionMigration] | None = [] skills: list[SkillMigration] | None = [] subagents: list[SubagentMigration] | None = [] class MisalignmentErrorDetails(BaseModel): model_config = ConfigDict( populate_by_name=True, ) detailed_explanation: Annotated[ str | None, Field( alias="detailedExplanation", description="A substantive localized explanation is required before offering continuation.", ), ] = None error_type: Annotated[ str | None, Field( alias="errorType", description="Open-ended classification; clients must accept categories added by Responses.", ), ] = None steer: Annotated[ MisalignmentSteer | None, Field( description="Instruction to submit as the next turn's user input if continuation is confirmed." ), ] = 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")] default_service_tier: Annotated[ str | None, Field( alias="defaultServiceTier", description="Catalog default service tier id for this model, when one is configured.", ), ] = None 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 model_specialty: Annotated[str | None, Field(alias="modelSpecialty")] = None multi_agent_version: Annotated[ MultiAgentVersion | None, Field( alias="multiAgentVersion", description="Multi-agent runtime declared by this model, when available.", ), ] = None 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 NewThreadModelDefaults(BaseModel): model_config = ConfigDict( populate_by_name=True, ) model: str | None = None model_reasoning_effort: Annotated[ ReasoningEffort | None, Field(alias="modelReasoningEffort") ] = None service_tier: Annotated[str | None, Field(alias="serviceTier")] = 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 PermissionProfileListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: list[PermissionProfileSummary] 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 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 Project(BaseModel): model_config = ConfigDict( populate_by_name=True, ) created_at: Annotated[int, Field(alias="createdAt")] id: str metadata: dict[str, str] name: str position: int recency_at: Annotated[ int | None, Field( alias="recencyAt", description="Newest non-archived member thread's recency, in Unix seconds; null when none exist.", ), ] = None roots: list[ProjectRoot] updated_at: Annotated[int, Field(alias="updatedAt")] class QueuedSubmission(BaseModel): model_config = ConfigDict( populate_by_name=True, ) client_user_message_id: Annotated[str, Field(alias="clientUserMessageId")] id: str input: list[UserInput] class RateLimitResetCredit(BaseModel): model_config = ConfigDict( populate_by_name=True, ) description: Annotated[ str | None, Field( description="Backend-provided display description for this credit, or `null` when unavailable." ), ] = None expires_at: Annotated[ int | None, Field( alias="expiresAt", description="Unix timestamp in seconds when the credit expires, or `null` if it does not expire.", ), ] = None granted_at: Annotated[ int, Field( alias="grantedAt", description="Unix timestamp in seconds when the credit was granted." ), ] id: Annotated[str, Field(description="Opaque backend identifier for this reset credit.")] reset_type: Annotated[RateLimitResetType, Field(alias="resetType")] status: RateLimitResetCreditStatus title: Annotated[ str | None, Field( description="Backend-provided display title for this credit, or `null` when unavailable." ), ] = None class RateLimitResetCreditsSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) available_count: Annotated[int, Field(alias="availableCount")] credits: Annotated[ list[RateLimitResetCredit] | None, Field( description="Detail rows for available reset credits, when the backend provides them.\n\n`null` means only `availableCount` is known, while an empty array means details were fetched and no available credits were returned. The backend may cap this list, so its length can be less than `availableCount`." ), ] = None class RateLimitSnapshot(BaseModel): model_config = ConfigDict( populate_by_name=True, ) credits: CreditsSnapshot | None = None individual_limit: Annotated[ SpendControlLimitSnapshot | None, Field(alias="individualLimit") ] = None limit_id: Annotated[str | None, Field(alias="limitId")] = None limit_name: Annotated[str | None, Field(alias="limitName")] = None normal_model_slug: Annotated[ str | None, Field( alias="normalModelSlug", description="Normal model whose display name and reasoning options describe this quota alias.", ), ] = 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 spend_control_reached: Annotated[ bool | None, Field( alias="spendControlReached", description="Backend-reported spend-control state. `None` is unavailable, not a sparse-update recovery.", ), ] = None class RawResponseCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) response_id: Annotated[str, Field(alias="responseId")] thread_id: Annotated[str, Field(alias="threadId")] turn_id: Annotated[str, Field(alias="turnId")] usage: TokenUsageBreakdown | None = None usage_metadata: Annotated[ResponseUsageMetadata | None, Field(alias="usageMetadata")] = None class MessageResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) content: list[ContentItem] id: str | None = None internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | 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 internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | None = None status: str | None = None type: Annotated[Literal["web_search_call"], Field(title="WebSearchCallResponseItemType")] class ConfigurationUpdateResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) reasoning: ConfigurationReasoning type: Annotated[ Literal["configuration_update"], Field(title="ConfigurationUpdateResponseItemType") ] 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`). Detached delivery is deprecated and emits `deprecationNotice`. Use `thread/start` followed by an inline review for a separate review thread." ), ] = None target: ReviewTarget thread_id: Annotated[str, Field(alias="threadId")] class HourlyScheduledTaskSchedule(BaseModel): model_config = ConfigDict( populate_by_name=True, ) days: list[ScheduledTaskWeekday] | None = None interval_hours: Annotated[int, Field(alias="intervalHours", ge=0)] type: Annotated[Literal["hourly"], Field(title="HourlyScheduledTaskScheduleType")] class WeeklyScheduledTaskSchedule(BaseModel): model_config = ConfigDict( populate_by_name=True, ) days: list[ScheduledTaskWeekday] time: str type: Annotated[Literal["weekly"], Field(title="WeeklyScheduledTaskScheduleType")] class ScheduledTaskSchedule( RootModel[ HourlyScheduledTaskSchedule | DailyScheduledTaskSchedule | WeekdaysScheduledTaskSchedule | WeeklyScheduledTaskSchedule ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( HourlyScheduledTaskSchedule | DailyScheduledTaskSchedule | WeekdaysScheduledTaskSchedule | WeeklyScheduledTaskSchedule ) class ScheduledTaskSummary(BaseModel): model_config = ConfigDict( populate_by_name=True, ) key: str name: str prompt: str schedule: ScheduledTaskSchedule class ThreadStatusChangedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/status/changed"], Field(title="Thread/status/changedNotificationMethod") ] params: ThreadStatusChangedNotification class ThreadArchivedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["thread/archived"], Field(title="Thread/archivedNotificationMethod")] params: ThreadArchivedNotification class ThreadDeletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["thread/deleted"], Field(title="Thread/deletedNotificationMethod")] params: ThreadDeletedNotification class ThreadUnarchivedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/unarchived"], Field(title="Thread/unarchivedNotificationMethod") ] params: ThreadUnarchivedNotification class ThreadClosedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["thread/closed"], Field(title="Thread/closedNotificationMethod")] params: ThreadClosedNotification class ThreadRevertedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["thread/reverted"], Field(title="Thread/revertedNotificationMethod")] params: ThreadRevertedNotification class SkillsChangedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["skills/changed"], Field(title="Skills/changedNotificationMethod")] params: SkillsChangedNotification class ThreadNameUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/name/updated"], Field(title="Thread/name/updatedNotificationMethod") ] params: ThreadNameUpdatedNotification class ThreadGoalClearedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/goal/cleared"], Field(title="Thread/goal/clearedNotificationMethod") ] params: ThreadGoalClearedNotification class ThreadQueueChangedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/queue/changed"], Field(title="Thread/queue/changedNotificationMethod") ] params: ThreadQueueChangedNotification class ThreadProjectUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/project/updated"], Field(title="Thread/project/updatedNotificationMethod") ] params: ThreadProjectUpdatedNotification class HookStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["hook/started"], Field(title="Hook/startedNotificationMethod")] params: HookStartedNotification class TurnDiffUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["turn/diff/updated"], Field(title="Turn/diff/updatedNotificationMethod") ] params: TurnDiffUpdatedNotification class AutoApprovalReviewStrictReviewRequiredServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["autoApprovalReview/strictReviewRequired"], Field(title="AutoApprovalReview/strictReviewRequiredNotificationMethod"), ] params: StrictReviewRequiredNotification class CommandExecOutputDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["command/exec/outputDelta"], Field(title="Command/exec/outputDeltaNotificationMethod"), ] params: CommandExecOutputDeltaNotification class ProcessOutputDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["process/outputDelta"], Field(title="Process/outputDeltaNotificationMethod") ] params: ProcessOutputDeltaNotification class ItemCommandExecutionTerminalInteractionServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/commandExecution/terminalInteraction"], Field(title="Item/commandExecution/terminalInteractionNotificationMethod"), ] params: TerminalInteractionNotification class ServerRequestResolvedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["serverRequest/resolved"], Field(title="ServerRequest/resolvedNotificationMethod") ] params: ServerRequestResolvedNotification class AccountUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["account/updated"], Field(title="Account/updatedNotificationMethod")] params: AccountUpdatedNotification class TurnModerationMetadataServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["turn/moderationMetadata"], Field(title="Turn/moderationMetadataNotificationMethod") ] params: TurnModerationMetadataNotification class WarningServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["warning"], Field(title="WarningNotificationMethod")] params: WarningNotification class ConfigWarningServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["configWarning"], Field(title="ConfigWarningNotificationMethod")] params: ConfigWarningNotification class ThreadRealtimeStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/realtime/started"], Field(title="Thread/realtime/startedNotificationMethod") ] params: ThreadRealtimeStartedNotification class ThreadRealtimeItemAddedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/realtime/itemAdded"], Field(title="Thread/realtime/itemAddedNotificationMethod"), ] params: ThreadRealtimeItemAddedNotification class ThreadRealtimeItemTranscriptDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/realtime/item/transcript/delta"], Field(title="Thread/realtime/item/transcript/deltaNotificationMethod"), ] params: ThreadRealtimeItemTranscriptDeltaNotification class ThreadRealtimeTranscriptDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None 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, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None 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, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None 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, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/realtime/sdp"], Field(title="Thread/realtime/sdpNotificationMethod") ] params: ThreadRealtimeSdpNotification class ThreadRealtimeErrorServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/realtime/error"], Field(title="Thread/realtime/errorNotificationMethod") ] params: ThreadRealtimeErrorNotification class ThreadRealtimeClosedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/realtime/closed"], Field(title="Thread/realtime/closedNotificationMethod") ] params: ThreadRealtimeClosedNotification class WindowsWorldWritableWarningServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["windows/worldWritableWarning"], Field(title="Windows/worldWritableWarningNotificationMethod"), ] params: WindowsWorldWritableWarningNotification class AccountLoginCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["account/login/completed"], Field(title="Account/login/completedNotificationMethod") ] params: AccountLoginCompletedNotification 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 plugin_id: Annotated[ str | None, Field( alias="pluginId", description="Owning plugin ID, matching `PluginSummary.id`, when known.", ), ] = None 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 exclude_turns: Annotated[ bool | None, Field( alias="excludeTurns", description="When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking. Full-history hydration is deprecated for paginated threads; use this with `thread/turns/list` and `thread/items/list` instead.", ), ] = None last_turn_id: Annotated[ str | None, Field( alias="lastTurnId", description="Optional last turn id to fork through, inclusive.\n\nWhen specified, turns after `last_turn_id` are omitted from the fork. The referenced turn cannot be in progress.", ), ] = 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 ThreadGoalGetResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) goal: ThreadGoal | None = None class ThreadGoalSetParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) objective: str | None = None status: ThreadGoalStatus | None = None thread_id: Annotated[str, Field(alias="threadId")] token_budget: Annotated[int | None, Field(alias="tokenBudget")] = None class ThreadGoalSetResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) goal: ThreadGoal 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, ) client_id: Annotated[str | None, Field(alias="clientId")] = None content: list[UserInput] id: str type: Annotated[Literal["userMessage"], Field(title="UserMessageThreadItemType")] class AgentMessageThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) delivery: AgentMessageDelivery | None = None id: str memory_citation: Annotated[MemoryCitation | None, Field(alias="memoryCitation")] = None phase: MessagePhase | None = None questions: list[AsyncUserInputQuestion] | None = None text: str type: Annotated[Literal["agentMessage"], Field(title="AgentMessageThreadItemType")] 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[LegacyAppPathString, 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 plugin_id: Annotated[ str | None, Field( alias="pluginId", description="Trusted first-party plugin id when this command resolves to one plugin script.", ), ] = None process_id: Annotated[ str | None, Field( alias="processId", description="Identifier for the underlying PTY process (when available).", ), ] = None script_path: Annotated[ str | None, Field( alias="scriptPath", description="Safe plugin-relative path when this command resolves to one plugin script.", ), ] = None source: CommandExecutionSource | None = "agent" status: CommandExecutionStatus type: Annotated[Literal["commandExecution"], Field(title="CommandExecutionThreadItemType")] 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 results: Annotated[ list | None, Field( description="Structured search results returned out-of-band by standalone web search.\n\nThese stay as opaque JSON at the extension/app-server boundary so new result fields and result types can pass through without a Codex release." ), ] = None type: Annotated[Literal["webSearch"], Field(title="WebSearchThreadItemType")] 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 originators: Annotated[ list[str] | None, Field( description="Optional originator allowlist, matching any supplied value exactly. Supported by hosted backends only; the local app-server rejects a nonempty list. Omitted or empty lists leave originators unrestricted." ), ] = None search_term: Annotated[ str | None, Field( alias="searchTerm", description="Optional substring filter for the extracted thread title.", ), ] = None section_id: Annotated[ str | None, Field( alias="sectionId", description="Omit to include every section, set to `null` for unsectioned threads, or provide a section ID to return only threads in that section.", ), ] = 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 TranscriptSegmentThreadRealtimeItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str realtime_session_id: Annotated[str, Field(alias="realtimeSessionId")] role: ThreadRealtimeTranscriptRole text: str type: Annotated[ Literal["transcriptSegment"], Field(title="TranscriptSegmentThreadRealtimeItemType") ] class RealtimeSessionClosedThreadRealtimeItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str realtime_session_id: Annotated[str, Field(alias="realtimeSessionId")] outcome: ThreadRealtimeSessionOutcome type: Annotated[ Literal["realtimeSessionClosed"], Field(title="RealtimeSessionClosedThreadRealtimeItemType") ] class ThreadRealtimeItem( RootModel[ RealtimeSessionStartedThreadRealtimeItem | TranscriptSegmentThreadRealtimeItem | BemItemPromotedThreadRealtimeItem | RealtimeSessionClosedThreadRealtimeItem ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ RealtimeSessionStartedThreadRealtimeItem | TranscriptSegmentThreadRealtimeItem | BemItemPromotedThreadRealtimeItem | RealtimeSessionClosedThreadRealtimeItem, Field( description="EXPERIMENTAL - a thread-scoped realtime item in the canonical timeline." ), ] class ThreadRealtimeItemCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item: ThreadRealtimeItem thread_id: Annotated[str, Field(alias="threadId")] class ThreadRealtimeItemStartedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item: ThreadRealtimeItem thread_id: Annotated[str, Field(alias="threadId")] class ThreadResumeInitialTurnsPageParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) items_view: Annotated[ TurnItemsView | None, Field( alias="itemsView", description="How much item detail to include for each returned turn; defaults to summary.", ), ] = None limit: Annotated[int | None, Field(description="Optional turn page size.", ge=0)] = None sort_direction: Annotated[ SortDirection | None, Field( alias="sortDirection", description="Optional turn pagination direction; defaults to descending.", ), ] = None class ThreadSection(BaseModel): model_config = ConfigDict( populate_by_name=True, ) appearance: Annotated[ ThreadSectionAppearance | None, Field(description="Optional appearance synchronized across clients."), ] = None id: Annotated[ str, Field( description="Opaque UUIDv7 identity that remains stable when the section is renamed." ), ] name: Annotated[str, Field(description="The current user-visible section name.")] class ThreadSectionCreateResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) section: ThreadSection class ThreadSectionListResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) data: list[ThreadSection] next_cursor: Annotated[ str | None, Field( alias="nextCursor", description="Opaque cursor for the next page, or `null` when no sections remain.", ), ] = None class ThreadSectionUpdateResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) section: ThreadSection class ThreadSettings(BaseModel): model_config = ConfigDict( populate_by_name=True, ) active_permission_profile: Annotated[ ActivePermissionProfile | None, Field(alias="activePermissionProfile") ] = None approval_policy: Annotated[AskForApproval, Field(alias="approvalPolicy")] approvals_reviewer: Annotated[ApprovalsReviewer, Field(alias="approvalsReviewer")] collaboration_mode: Annotated[CollaborationMode, Field(alias="collaborationMode")] cwd: AbsolutePathBuf effort: ReasoningEffort | None = None model: str model_provider: Annotated[str, Field(alias="modelProvider")] personality: Personality | None = None sandbox_policy: Annotated[SandboxPolicy, Field(alias="sandboxPolicy")] service_tier: Annotated[str | None, Field(alias="serviceTier")] = None summary: ReasoningSummary | None = None class ThreadSettingsUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread_id: Annotated[str, Field(alias="threadId")] thread_settings: Annotated[ThreadSettings, Field(alias="threadSettings")] 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 RealtimeThreadTimelineEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item: ThreadRealtimeItem position: Annotated[int, Field(ge=0)] type: Annotated[Literal["realtime"], Field(title="RealtimeThreadTimelineEntryType")] 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 ThreadTurnsListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) cursor: Annotated[ str | None, Field( description="Opaque cursor to pass to the next call to continue after the last turn." ), ] = None items_view: Annotated[ TurnItemsView | None, Field( alias="itemsView", description="How much item detail to include for each returned turn; defaults to summary.", ), ] = None limit: Annotated[int | None, Field(description="Optional turn page size.", ge=0)] = None sort_direction: Annotated[ SortDirection | None, Field( alias="sortDirection", description="Optional turn pagination direction; defaults to descending.", ), ] = None thread_id: Annotated[str, Field(alias="threadId")] class ThreadUnsubscribeResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) status: ThreadUnsubscribeStatus class ThreadUsage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) estimated_usage_credits_micros: Annotated[int, Field(alias="estimatedUsageCreditsMicros")] estimated_usage_usd_micros: Annotated[int | None, Field(alias="estimatedUsageUsdMicros")] = None groups: list[ThreadUsageBreakdownGroup] thread_id: Annotated[str, Field(alias="threadId")] class ToolsV2(BaseModel): model_config = ConfigDict( populate_by_name=True, ) 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 misalignment: Annotated[ MisalignmentErrorDetails | None, Field( description="Optional public explanation and continuation instruction for a misalignment block." ), ] = None 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 TurnSteerParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) client_user_message_id: Annotated[str | None, Field(alias="clientUserMessageId")] = None 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 WorkspaceMessage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) archived_at: Annotated[ int | None, Field( alias="archivedAt", description="Unix timestamp (in seconds) when the message was archived.", ), ] = None created_at: Annotated[ int | None, Field( alias="createdAt", description="Unix timestamp (in seconds) when the message was created.", ), ] = None message_body: Annotated[str, Field(alias="messageBody")] message_id: Annotated[str, Field(alias="messageId")] message_type: Annotated[WorkspaceMessageType, Field(alias="messageType")] class AccountRateLimitsUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) rate_limits: Annotated[RateLimitSnapshot, Field(alias="rateLimits")] 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 icon_assets: Annotated[dict[str, Any] | None, Field(alias="iconAssets")] = None icon_dark_assets: Annotated[dict[str, Any] | None, Field(alias="iconDarkAssets")] = 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 ThreadGoalSetRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/goal/set"], Field(title="Thread/goal/setRequestMethod")] params: ThreadGoalSetParams class ThreadListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/list"], Field(title="Thread/listRequestMethod")] params: ThreadListParams class ThreadTurnsListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["thread/turns/list"], Field(title="Thread/turns/listRequestMethod")] params: ThreadTurnsListParams 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 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 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 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 ComputerUseConfig(BaseModel): model_config = ConfigDict( populate_by_name=True, ) default_app_access: AllowDenyRequirement | None = None macos: ComputerUseMacosConfig | None = None windows: ComputerUseWindowsConfig | None = None 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 browser_use: BrowserUseConfig | None = None compact_prompt: str | None = None computer_use: ComputerUseConfig | None = None desktop: dict[str, Any] | None = None developer_instructions: str | None = None forced_chatgpt_workspace_id: ForcedChatgptWorkspaceIds | 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_auto_compact_token_limit_scope: AutoCompactTokenLimitScope | 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 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 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 updated runtime settings into loaded threads after writing. Session-static model, reasoning-effort, Plan-mode reasoning-effort, service-tier, and personality defaults are not reloaded.", ), ] = None class ConfigReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) config: Config layers: list[ConfigLayer] | None = None origins: dict[str, ConfigLayerMetadata] 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 ExternalAgentConfigImportCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) import_id: Annotated[str, Field(alias="importId")] item_type_results: Annotated[ list[ExternalAgentConfigImportTypeResult], Field(alias="itemTypeResults") ] class ExternalAgentConfigImportHistory(BaseModel): model_config = ConfigDict( populate_by_name=True, ) completed_at_ms: Annotated[int, Field(alias="completedAtMs")] failures: list[ExternalAgentConfigImportItemTypeFailure] import_id: Annotated[str, Field(alias="importId")] provider_id: Annotated[str | None, Field(alias="providerId")] = None successes: list[ExternalAgentConfigImportItemTypeSuccess] class ExternalAgentConfigImportHistoryRecordTypeResultParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) failures: list[ExternalAgentConfigImportItemTypeFailure] item_type: Annotated[ExternalAgentConfigMigrationItemType, Field(alias="itemType")] successes: list[ExternalAgentConfigImportHistoryRecordSuccessParams] class ExternalAgentConfigImportProgressNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) import_id: Annotated[str, Field(alias="importId")] item_type_results: Annotated[ list[ExternalAgentConfigImportTypeResult], Field(alias="itemTypeResults") ] 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 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 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, ) account_id: Annotated[ str | None, Field( alias="accountId", description="Account associated with this usage snapshot, when supplied by the backend.", ), ] = None ordinary_usage_allowed: Annotated[ bool | None, Field( alias="ordinaryUsageAllowed", description="Backend permission for ordinary included usage, validated against the active account. Null means unavailable; clients must not infer recovery from percentages or reset times.", ), ] = None rate_limit_reset_credits: Annotated[ RateLimitResetCreditsSummary | None, Field(alias="rateLimitResetCredits") ] = None rate_limit_upsell: Annotated[ Any | None, Field( alias="rateLimitUpsell", description="Optional backend-owned banner from the same usage read. Its nested keys retain the backend's snake_case contract; an absent banner leaves the client's existing UI unchanged.", ), ] = None 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 GetAccountTokenUsageResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) daily_usage_buckets: Annotated[ list[AccountTokenUsageDailyBucket] | None, Field(alias="dailyUsageBuckets") ] = None summary: AccountTokenUsageSummary thread_usage: Annotated[ ThreadUsage | None, Field( alias="threadUsage", description="Estimated usage when a thread was requested and its billing route is available.", ), ] = None class GetWorkspaceMessagesResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) feature_enabled: Annotated[ bool, Field( alias="featureEnabled", description="Whether the workspace-message backend route is available for this client.", ), ] messages: Annotated[ list[WorkspaceMessage], Field(description="Active workspace messages returned by the backend."), ] 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 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 ModelsRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) new_thread: Annotated[NewThreadModelDefaults | None, Field(alias="newThread")] = None class PluginShareContext(BaseModel): model_config = ConfigDict( populate_by_name=True, ) can_publish_to_workspace: Annotated[bool | None, Field(alias="canPublishToWorkspace")] = None 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")] remote_version: Annotated[ str | None, Field( alias="remoteVersion", description="Version of the remote shared plugin release when available.", ), ] = None 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" disabled_reason: Annotated[ PluginDisabledReason | None, Field( alias="disabledReason", description="Why the remote plugin is unavailable, when provided by plugin-service.", ), ] = None eligible_plan_types: Annotated[ list[str] | None, Field( alias="eligiblePlanTypes", description="Raw plugin-service plan identifiers eligible to install the plugin.", ), ] = None enabled: bool id: str install_policy: Annotated[PluginInstallPolicy, Field(alias="installPolicy")] install_policy_source: Annotated[ PluginInstallPolicySource | None, Field(alias="installPolicySource") ] = None installed: bool installed_at: Annotated[ int | None, Field( alias="installedAt", description="Unix timestamp in seconds when the remote plugin was installed, when available.", ), ] = None interface: PluginInterface | None = None keywords: list[str] | None = [] local_version: Annotated[ str | None, Field( alias="localVersion", description="Version of the locally materialized plugin package when available.", ), ] = None must_show_installation_interstitial: Annotated[ bool | None, Field(alias="mustShowInstallationInterstitial") ] = None name: str remote_plugin_id: Annotated[ str | None, Field( alias="remotePluginId", description="Backend remote plugin identifier when available." ), ] = None share_context: Annotated[ PluginShareContext | None, Field( alias="shareContext", description="Remote sharing context associated with this plugin when available.", ), ] = None source: PluginSource version: Annotated[ str | None, Field(description="Version advertised by the remote marketplace backend when available."), ] = None class FunctionCallOutputResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) call_id: str | None = None id: str | None = None internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | None = None name: str | None = None namespace: str | None = None output: FunctionCallOutputBody type: Annotated[ Literal["function_call_output"], Field(title="FunctionCallOutputResponseItemType") ] class CustomToolCallOutputResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) call_id: str id: str | None = None internal_chat_message_metadata_passthrough: InternalChatMessageMetadataPassthrough | None = None name: str | None = None output: FunctionCallOutputBody type: Annotated[ Literal["custom_tool_call_output"], Field(title="CustomToolCallOutputResponseItemType") ] class ResponseItem( RootModel[ MessageResponseItem | AgentMessageResponseItem | ReasoningResponseItem | LocalShellCallResponseItem | FunctionCallResponseItem | ToolSearchCallResponseItem | FunctionCallOutputResponseItem | CustomToolCallResponseItem | CustomToolCallOutputResponseItem | ToolSearchOutputResponseItem | WebSearchCallResponseItem | ImageGenerationCallResponseItem | CompactionResponseItem | ConfigurationUpdateResponseItem | CompactionTriggerResponseItem | ContextCompactionResponseItem | OtherResponseItem ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( MessageResponseItem | AgentMessageResponseItem | ReasoningResponseItem | LocalShellCallResponseItem | FunctionCallResponseItem | ToolSearchCallResponseItem | FunctionCallOutputResponseItem | CustomToolCallResponseItem | CustomToolCallOutputResponseItem | ToolSearchOutputResponseItem | WebSearchCallResponseItem | ImageGenerationCallResponseItem | CompactionResponseItem | ConfigurationUpdateResponseItem | CompactionTriggerResponseItem | ContextCompactionResponseItem | OtherResponseItem ) class ErrorServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["error"], Field(title="ErrorNotificationMethod")] params: ErrorNotification class ThreadGoalUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/goal/updated"], Field(title="Thread/goal/updatedNotificationMethod") ] params: ThreadGoalUpdatedNotification class ThreadSettingsUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/settings/updated"], Field(title="Thread/settings/updatedNotificationMethod") ] params: ThreadSettingsUpdatedNotification class ThreadTokenUsageUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/tokenUsage/updated"], Field(title="Thread/tokenUsage/updatedNotificationMethod"), ] params: ThreadTokenUsageUpdatedNotification class HookCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["hook/completed"], Field(title="Hook/completedNotificationMethod")] params: HookCompletedNotification class TurnPlanUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["turn/plan/updated"], Field(title="Turn/plan/updatedNotificationMethod") ] params: TurnPlanUpdatedNotification class ItemFileChangePatchUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/fileChange/patchUpdated"], Field(title="Item/fileChange/patchUpdatedNotificationMethod"), ] params: FileChangePatchUpdatedNotification class AccountRateLimitsUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["account/rateLimits/updated"], Field(title="Account/rateLimits/updatedNotificationMethod"), ] params: AccountRateLimitsUpdatedNotification class AppListUpdatedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["app/list/updated"], Field(title="App/list/updatedNotificationMethod") ] params: AppListUpdatedNotification class ExternalAgentConfigImportProgressServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["externalAgentConfig/import/progress"], Field(title="ExternalAgentConfig/import/progressNotificationMethod"), ] params: ExternalAgentConfigImportProgressNotification class ExternalAgentConfigImportCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["externalAgentConfig/import/completed"], Field(title="ExternalAgentConfig/import/completedNotificationMethod"), ] params: ExternalAgentConfigImportCompletedNotification class ThreadRealtimeItemStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/realtime/item/started"], Field(title="Thread/realtime/item/startedNotificationMethod"), ] params: ThreadRealtimeItemStartedNotification class ThreadRealtimeItemCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["thread/realtime/item/completed"], Field(title="Thread/realtime/item/completedNotificationMethod"), ] params: ThreadRealtimeItemCompletedNotification class WindowsSandboxSetupCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None 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 FunctionCallOutputThreadItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: str name: str namespace: str | None = None output: FunctionCallOutputBody type: Annotated[Literal["functionCallOutput"], Field(title="FunctionCallOutputThreadItemType")] class ThreadItem( RootModel[ UserMessageThreadItem | HookPromptThreadItem | AgentMessageThreadItem | FunctionCallOutputThreadItem | PlanThreadItem | ReasoningThreadItem | CommandExecutionThreadItem | FileChangeThreadItem | McpToolCallThreadItem | DynamicToolCallThreadItem | CollabAgentToolCallThreadItem | SubAgentActivityThreadItem | WebSearchThreadItem | ImageViewThreadItem | SleepThreadItem | ImageGenerationThreadItem | EnteredReviewModeThreadItem | ExitedReviewModeThreadItem | ContextCompactionThreadItem ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( UserMessageThreadItem | HookPromptThreadItem | AgentMessageThreadItem | FunctionCallOutputThreadItem | PlanThreadItem | ReasoningThreadItem | CommandExecutionThreadItem | FileChangeThreadItem | McpToolCallThreadItem | DynamicToolCallThreadItem | CollabAgentToolCallThreadItem | SubAgentActivityThreadItem | WebSearchThreadItem | ImageViewThreadItem | SleepThreadItem | ImageGenerationThreadItem | EnteredReviewModeThreadItem | ExitedReviewModeThreadItem | ContextCompactionThreadItem ) class ThreadItemEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item: ThreadItem turn_id: Annotated[str, Field(alias="turnId", description="Turn containing this item.")] class ThreadItemsListResponse(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 item.", ), ] = None data: list[ThreadItemEntry] 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 ItemThreadTimelineEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item: ThreadItem position: Annotated[int, Field(ge=0)] turn_id: Annotated[str, Field(alias="turnId")] type: Annotated[Literal["item"], Field(title="ItemThreadTimelineEntryType")] class TurnCompletedThreadTimelineEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) completed_at: int | None = None duration_ms: int | None = None error: TurnError | None = None position: Annotated[int, Field(ge=0)] started_at: int | None = None status: TurnStatus turn_id: str type: Annotated[Literal["turnCompleted"], Field(title="TurnCompletedThreadTimelineEntryType")] class ThreadTimelineEntry( RootModel[ ItemThreadTimelineEntry | RealtimeThreadTimelineEntry | TurnStartedThreadTimelineEntry | TurnCompletedThreadTimelineEntry ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ ItemThreadTimelineEntry | RealtimeThreadTimelineEntry | TurnStartedThreadTimelineEntry | TurnCompletedThreadTimelineEntry, Field(description="EXPERIMENTAL - one item or turn boundary in canonical rollout order."), ] 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: Annotated[ str, Field(description="Identifier for this turn. Codex-generated turn IDs are UUIDv7.") ] 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 TurnToolOutput(BaseModel): model_config = ConfigDict( populate_by_name=True, ) name: str namespace: str | None = None output: FunctionCallOutputBody class TurnsPage(BaseModel): model_config = ConfigDict( populate_by_name=True, ) backwards_cursor: Annotated[str | None, Field(alias="backwardsCursor")] = None data: list[Turn] next_cursor: Annotated[str | None, Field(alias="nextCursor")] = None 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[LegacyAppPathString] | None, Field(description="This will be removed in favor of `entries`."), ] = None write: Annotated[ list[LegacyAppPathString] | None, Field(description="This will be removed in favor of `entries`."), ] = None 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 ConfigRequirements(BaseModel): model_config = ConfigDict( populate_by_name=True, ) additional_developer_instructions: Annotated[ str | None, Field(alias="additionalDeveloperInstructions") ] = None allow_appshots: Annotated[bool | None, Field(alias="allowAppshots")] = None allow_browser_and_computer_use: Annotated[ bool | None, Field(alias="allowBrowserAndComputerUse") ] = None allow_login_shell: Annotated[bool | None, Field(alias="allowLoginShell")] = None allow_managed_hooks_only: Annotated[bool | None, Field(alias="allowManagedHooksOnly")] = None allow_remote_control: Annotated[bool | None, Field(alias="allowRemoteControl")] = None allowed_approval_policies: Annotated[ list[AskForApproval] | None, Field(alias="allowedApprovalPolicies") ] = None allowed_permission_profiles: Annotated[ dict[str, Any] | None, Field(alias="allowedPermissionProfiles") ] = None allowed_sandbox_modes: Annotated[ list[SandboxMode] | None, Field(alias="allowedSandboxModes") ] = None allowed_web_search_modes: Annotated[ list[WebSearchMode] | None, Field(alias="allowedWebSearchModes") ] = None allowed_windows_sandbox_implementations: Annotated[ list[WindowsSandboxSetupMode] | None, Field(alias="allowedWindowsSandboxImplementations") ] = None auto_review: Annotated[AutoReviewRequirements | None, Field(alias="autoReview")] = None browser_use: Annotated[BrowserUseRequirements | None, Field(alias="browserUse")] = None chatgpt_base_url: Annotated[str | None, Field(alias="chatgptBaseUrl")] = None check_for_update_on_startup: Annotated[bool | None, Field(alias="checkForUpdateOnStartup")] = ( None ) cli_auth_credentials_store: Annotated[ CliAuthCredentialsStoreMode | None, Field(alias="cliAuthCredentialsStore") ] = None computer_use: Annotated[ComputerUseRequirements | None, Field(alias="computerUse")] = None default_permissions: Annotated[str | None, Field(alias="defaultPermissions")] = None enforce_residency: Annotated[ResidencyRequirement | None, Field(alias="enforceResidency")] = ( None ) feature_requirements: Annotated[dict[str, Any] | None, Field(alias="featureRequirements")] = ( None ) feedback: FeedbackRequirements | None = None in_app_browser: Annotated[InAppBrowserRequirements | None, Field(alias="inAppBrowser")] = None log_dir: Annotated[str | None, Field(alias="logDir")] = None model_catalog_json: Annotated[str | None, Field(alias="modelCatalogJson")] = None models: ModelsRequirements | None = None sqlite_home: Annotated[str | None, Field(alias="sqliteHome")] = None windows_sandbox_private_desktop: Annotated[ bool | None, Field(alias="windowsSandboxPrivateDesktop") ] = 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 ExternalAgentConfigDetectResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) connectors: list[ExternalAgentDetectedConnectorCandidate] | None = [] items: list[ExternalAgentConfigMigrationItem] class ExternalAgentConfigImportHistoriesReadResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) connectors: list[ExternalAgentImportedConnectorCandidate] data: list[ExternalAgentConfigImportHistory] class ExternalAgentConfigImportHistoryRecordParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) item_type_results: Annotated[ list[ExternalAgentConfigImportHistoryRecordTypeResultParams], Field( alias="itemTypeResults", description="Completed results grouped by imported item type." ), ] provider_id: Annotated[ str, Field( alias="providerId", description="Opaque provider identifier for the externally completed import.", ), ] class ExternalAgentConfigImportParams(BaseModel): model_config = ConfigDict( populate_by_name=True, ) migration_items: Annotated[ list[ExternalAgentConfigMigrationItem], Field(alias="migrationItems") ] migration_source: Annotated[ str | None, Field( alias="migrationSource", description="Migration-source selector used to produce the migration items. Pass the same value to detection and import; missing or unrecognized values use the default source.", ), ] = None provider_id: Annotated[ str | None, Field( alias="providerId", description="Opaque provider identifier supplied by the caller for analytics attribution and import history display. This does not select the migration source.", ), ] = None source: Annotated[ str | None, Field(description="Optional identifier for the product that initiated the import."), ] = 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 PluginDetail(BaseModel): model_config = ConfigDict( populate_by_name=True, ) app_templates: Annotated[list[AppTemplateSummary], Field(alias="appTemplates")] 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")] scheduled_tasks: Annotated[list[ScheduledTaskSummary] | None, Field(alias="scheduledTasks")] = ( None ) share_url: Annotated[str | None, Field(alias="shareUrl")] = None 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 PluginSearchResult(BaseModel): model_config = ConfigDict( populate_by_name=True, ) marketplace_name: Annotated[str, Field(alias="marketplaceName")] marketplace_path: Annotated[AbsolutePathBuf | None, Field(alias="marketplacePath")] = None plugin: PluginSummary 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 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 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, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["turn/started"], Field(title="Turn/startedNotificationMethod")] params: TurnStartedNotification class TurnCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["turn/completed"], Field(title="Turn/completedNotificationMethod")] params: TurnCompletedNotification class ItemStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["item/started"], Field(title="Item/startedNotificationMethod")] params: ItemStartedNotification class ItemCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["item/completed"], Field(title="Item/completedNotificationMethod")] params: ItemCompletedNotification 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 history_mode: Annotated[ ThreadHistoryMode | None, Field( alias="historyMode", description="Persisted thread history contract selected when this thread was created.", ), ] = "legacy" id: Annotated[ str, Field(description="Identifier for this thread. Codex-generated thread IDs are UUIDv7.") ] model: Annotated[ str | None, Field( description="Current configured model when loaded, otherwise the latest persisted model. Null when unavailable. This is not per-turn execution telemetry." ), ] = None 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 originator: Annotated[ str | None, Field( description="Originator recorded when the thread was created, independent of its current client or executor. Null when the recorded originator is unavailable." ), ] = None parent_thread_id: Annotated[ str | None, Field( alias="parentThreadId", description="The ID of the parent thread. This will only be set if this thread is a subagent.", ), ] = 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.") ] project_id: Annotated[ str | None, Field( alias="projectId", description="Canonical project assignment owned by app-server, if any.", ), ] = None reasoning_effort: Annotated[ ReasoningEffort | None, Field( alias="reasoningEffort", description="Current configured reasoning effort when loaded, otherwise the latest persisted effort. Null when unset or unavailable. This is not per-turn execution telemetry.", ), ] = None recency_at: Annotated[ int | None, Field( alias="recencyAt", description="Unix timestamp (in seconds) used for thread recency ordering.", ), ] = None section: Annotated[ ThreadSection | None, Field(description="The independently persisted section selected for this thread, if any."), ] = None section_entered_at: Annotated[ int | None, Field( alias="sectionEnteredAt", description="Unix timestamp in seconds when the thread entered its current section.", ), ] = None 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[LegacyAppPathString] | None, Field( alias="instructionSources", description="Environment-native paths to 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 `activePermissionProfile` for profile provenance." ), ] 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[LegacyAppPathString] | None, Field( alias="instructionSources", description="Environment-native paths to instruction source files currently loaded for this thread.", ), ] = [] items_backwards_cursor: Annotated[ str | None, Field( alias="itemsBackwardsCursor", description='Opaque cursor for hydrating paginated items backwards.\n\nPass this as `cursor` to `thread/items/list` with `sortDirection: "desc"`. The first page includes the item identified by the cursor.', ), ] = None 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 `activePermissionProfile` for profile provenance." ), ] service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread: Thread turns_backwards_cursor: Annotated[ str | None, Field( alias="turnsBackwardsCursor", description='Opaque cursor for hydrating paginated turns backwards.\n\nPass this as `cursor` to `thread/turns/list` with `sortDirection: "desc"`. The first page includes the turn identified by the cursor.', ), ] = None class ThreadRevertResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) items_backwards_cursor: Annotated[ str | None, Field( alias="itemsBackwardsCursor", description='Opaque cursor for hydrating paginated items backwards.\n\nPass this as `cursor` to `thread/items/list` with `sortDirection: "desc"`. The first page includes the item identified by the cursor.', ), ] = None thread: Annotated[ Thread, Field( description="Updated loaded thread metadata. `turns` is always empty; hydrate retained history through `thread/turns/list`." ), ] turns_backwards_cursor: Annotated[ str | None, Field( alias="turnsBackwardsCursor", description='Opaque cursor for hydrating paginated turns backwards.\n\nPass this as `cursor` to `thread/turns/list` with `sortDirection: "desc"`. The first page includes the turn identified by the cursor.', ), ] = None 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 ThreadSearchResult(BaseModel): model_config = ConfigDict( populate_by_name=True, ) snippet: str thread: Thread 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[LegacyAppPathString] | None, Field( alias="instructionSources", description="Environment-native paths to 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 `activePermissionProfile` for profile provenance." ), ] service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread: Thread class ThreadStartedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread: Thread class ThreadTurnsListResponse(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 turn. Use it with the opposite `sortDirection` to include the anchor turn again and catch updates to that turn.", ), ] = None data: list[Turn] next_cursor: Annotated[ str | None, Field( alias="nextCursor", description="Opaque cursor to pass to the next call to continue after the last turn. if None, there are no more turns to return.", ), ] = None class ThreadUnarchiveResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) thread: Thread 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 client_user_message_id: Annotated[str | None, Field(alias="clientUserMessageId")] = 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 service_tier_for_turn: Annotated[ str | None, Field( alias="serviceTierForTurn", description="Override the service tier only when this request starts a new turn. Use \"default\" for standard speed. Omitted or null inherits the thread's tier. Does not change the thread's tier or a turn being steered.", ), ] = 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")] tool_output: Annotated[TurnToolOutput | None, Field(alias="toolOutput")] = None turn_trigger: Annotated[ str | None, Field( alias="turnTrigger", description="Optional source classification for the caller that starts this turn. Ignored when this request steers an already-active turn.", ), ] = None class TurnStartRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[Literal["turn/start"], Field(title="Turn/startRequestMethod")] params: TurnStartParams class ExternalAgentConfigImportRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["externalAgentConfig/import"], Field(title="ExternalAgentConfig/importRequestMethod"), ] params: ExternalAgentConfigImportParams class ExternalAgentConfigImportRecordHistoryRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ Literal["externalAgentConfig/import/recordHistory"], Field(title="ExternalAgentConfig/import/recordHistoryRequestMethod"), ] params: ExternalAgentConfigImportHistoryRecordParams class ClientRequest( RootModel[ InitializeRequest | ThreadStartRequest | ThreadResumeRequest | ThreadForkRequest | ThreadArchiveRequest | ThreadDeleteRequest | ThreadUnsubscribeRequest | ThreadNameSetRequest | ThreadGoalSetRequest | ThreadGoalGetRequest | ThreadGoalClearRequest | ThreadMetadataUpdateRequest | ThreadSectionMoveRequest | ThreadUnarchiveRequest | ThreadCompactStartRequest | ThreadShellCommandRequest | ThreadApproveGuardianDeniedActionRequest | ThreadRollbackRequest | ThreadRevertRequest | ThreadListRequest | ThreadSectionListRequest | ThreadSectionCreateRequest | ThreadSectionUpdateRequest | ThreadSectionDeleteRequest | ThreadLoadedListRequest | ThreadReadRequest | ThreadTurnsListRequest | ThreadItemsListRequest | ThreadInjectItemsRequest | SkillsListRequest | SkillsExtraRootsSetRequest | HooksListRequest | MarketplaceAddRequest | MarketplaceRemoveRequest | MarketplaceUpgradeRequest | PluginListRequest | PluginInstalledRequest | PluginReconcileRequest | PluginReadRequest | PluginSkillReadRequest | PluginShareSaveRequest | PluginShareUpdateTargetsRequest | PluginShareListRequest | PluginShareCheckoutRequest | PluginShareDeleteRequest | AppReadRequest | AppListRequest | AppInstalledRequest | FsReadFileRequest | FsWriteFileRequest | FsCreateDirectoryRequest | FsGetMetadataRequest | FsReadDirectoryRequest | FsRemoveRequest | FsCopyRequest | FsWatchRequest | FsUnwatchRequest | SkillsConfigWriteRequest | PluginInstallRequest | PluginUninstallRequest | TurnStartRequest | TurnSteerRequest | TurnInterruptRequest | ReviewStartRequest | ModelListRequest | ModelProviderCapabilitiesReadRequest | ExperimentalFeatureListRequest | PermissionProfileListRequest | ExperimentalFeatureEnablementSetRequest | McpServerOauthLoginRequest | ConfigMcpServerReloadRequest | McpServerStatusListRequest | McpServerResourceReadRequest | McpServerToolCallRequest | WindowsSandboxSetupStartRequest | WindowsSandboxReadinessRequest | AccountLoginStartRequest | AccountLoginCancelRequest | AccountLogoutRequest | AccountRateLimitsReadRequest | AccountRateLimitResetCreditConsumeRequest | AccountUsageReadRequest | AccountWorkspaceMessagesReadRequest | AccountSendAddCreditsNudgeEmailRequest | FeedbackUploadRequest | CommandExecRequest | CommandExecWriteRequest | CommandExecTerminateRequest | CommandExecResizeRequest | ConfigReadRequest | ExternalAgentConfigDetectRequest | ExternalAgentConfigImportRequest | ExternalAgentConfigImportRecordHistoryRequest | ExternalAgentConfigImportReadHistoriesRequest | ConfigValueWriteRequest | ConfigBatchWriteRequest | ConfigRequirementsReadRequest | AccountReadRequest | FuzzyFileSearchRequest ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ InitializeRequest | ThreadStartRequest | ThreadResumeRequest | ThreadForkRequest | ThreadArchiveRequest | ThreadDeleteRequest | ThreadUnsubscribeRequest | ThreadNameSetRequest | ThreadGoalSetRequest | ThreadGoalGetRequest | ThreadGoalClearRequest | ThreadMetadataUpdateRequest | ThreadSectionMoveRequest | ThreadUnarchiveRequest | ThreadCompactStartRequest | ThreadShellCommandRequest | ThreadApproveGuardianDeniedActionRequest | ThreadRollbackRequest | ThreadRevertRequest | ThreadListRequest | ThreadSectionListRequest | ThreadSectionCreateRequest | ThreadSectionUpdateRequest | ThreadSectionDeleteRequest | ThreadLoadedListRequest | ThreadReadRequest | ThreadTurnsListRequest | ThreadItemsListRequest | ThreadInjectItemsRequest | SkillsListRequest | SkillsExtraRootsSetRequest | HooksListRequest | MarketplaceAddRequest | MarketplaceRemoveRequest | MarketplaceUpgradeRequest | PluginListRequest | PluginInstalledRequest | PluginReconcileRequest | PluginReadRequest | PluginSkillReadRequest | PluginShareSaveRequest | PluginShareUpdateTargetsRequest | PluginShareListRequest | PluginShareCheckoutRequest | PluginShareDeleteRequest | AppReadRequest | AppListRequest | AppInstalledRequest | FsReadFileRequest | FsWriteFileRequest | FsCreateDirectoryRequest | FsGetMetadataRequest | FsReadDirectoryRequest | FsRemoveRequest | FsCopyRequest | FsWatchRequest | FsUnwatchRequest | SkillsConfigWriteRequest | PluginInstallRequest | PluginUninstallRequest | TurnStartRequest | TurnSteerRequest | TurnInterruptRequest | ReviewStartRequest | ModelListRequest | ModelProviderCapabilitiesReadRequest | ExperimentalFeatureListRequest | PermissionProfileListRequest | ExperimentalFeatureEnablementSetRequest | McpServerOauthLoginRequest | ConfigMcpServerReloadRequest | McpServerStatusListRequest | McpServerResourceReadRequest | McpServerToolCallRequest | WindowsSandboxSetupStartRequest | WindowsSandboxReadinessRequest | AccountLoginStartRequest | AccountLoginCancelRequest | AccountLogoutRequest | AccountRateLimitsReadRequest | AccountRateLimitResetCreditConsumeRequest | AccountUsageReadRequest | AccountWorkspaceMessagesReadRequest | AccountSendAddCreditsNudgeEmailRequest | FeedbackUploadRequest | CommandExecRequest | CommandExecWriteRequest | CommandExecTerminateRequest | CommandExecResizeRequest | ConfigReadRequest | ExternalAgentConfigDetectRequest | ExternalAgentConfigImportRequest | ExternalAgentConfigImportRecordHistoryRequest | ExternalAgentConfigImportReadHistoriesRequest | ConfigValueWriteRequest | ConfigBatchWriteRequest | ConfigRequirementsReadRequest | AccountReadRequest | FuzzyFileSearchRequest, Field(description="Request from the client to the server.", title="ClientRequest"), ] 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 | WriteStdinGuardianApprovalReviewAction | ApplyPatchGuardianApprovalReviewAction | NetworkAccessGuardianApprovalReviewAction | McpToolCallGuardianApprovalReviewAction | RequestPermissionsGuardianApprovalReviewAction ] ): model_config = ConfigDict( populate_by_name=True, ) root: ( CommandGuardianApprovalReviewAction | ExecveGuardianApprovalReviewAction | WriteStdinGuardianApprovalReviewAction | 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) - stdin reviews, which refer to the existing parent command item and have a separate approval ID in the action payload - 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) - stdin reviews, which refer to the existing parent command item and have a separate approval ID in the action payload - 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 PluginInstalledResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) marketplace_load_errors: Annotated[ list[MarketplaceLoadErrorInfo] | None, Field(alias="marketplaceLoadErrors") ] = [] marketplaces: list[PluginMarketplaceEntry] 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, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[Literal["thread/started"], Field(title="Thread/startedNotificationMethod")] params: ThreadStartedNotification class ItemAutoApprovalReviewStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/autoApprovalReview/started"], Field(title="Item/autoApprovalReview/startedNotificationMethod"), ] params: ItemGuardianApprovalReviewStartedNotification class ItemAutoApprovalReviewCompletedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) emitted_at_ms: Annotated[ int | None, Field( alias="emittedAtMs", description="Unix timestamp (in milliseconds) when app-server emitted this notification.", ), ] = None method: Annotated[ Literal["item/autoApprovalReview/completed"], Field(title="Item/autoApprovalReview/completedNotificationMethod"), ] params: ItemGuardianApprovalReviewCompletedNotification class ServerNotification( RootModel[ ErrorServerNotification | ThreadStartedServerNotification | ThreadStatusChangedServerNotification | ThreadArchivedServerNotification | ThreadDeletedServerNotification | ThreadUnarchivedServerNotification | ThreadClosedServerNotification | ThreadRevertedServerNotification | SkillsChangedServerNotification | ThreadNameUpdatedServerNotification | ThreadGoalUpdatedServerNotification | ThreadGoalClearedServerNotification | ThreadQueueChangedServerNotification | ProjectChangedServerNotification | ThreadProjectUpdatedServerNotification | ThreadEnvironmentConnectedServerNotification | ThreadEnvironmentDisconnectedServerNotification | ThreadSettingsUpdatedServerNotification | ThreadTokenUsageUpdatedServerNotification | TurnStartedServerNotification | HookStartedServerNotification | TurnCompletedServerNotification | HookCompletedServerNotification | TurnDiffUpdatedServerNotification | TurnPlanUpdatedServerNotification | ItemStartedServerNotification | ItemAutoApprovalReviewStartedServerNotification | ItemAutoApprovalReviewCompletedServerNotification | AutoApprovalReviewStrictReviewRequiredServerNotification | ItemCompletedServerNotification | ItemAgentMessageDeltaServerNotification | ItemPlanDeltaServerNotification | CommandExecOutputDeltaServerNotification | ProcessOutputDeltaServerNotification | ProcessExitedServerNotification | ItemCommandExecutionOutputDeltaServerNotification | ItemCommandExecutionTerminalInteractionServerNotification | ItemFileChangeOutputDeltaServerNotification | ItemFileChangePatchUpdatedServerNotification | ServerRequestResolvedServerNotification | ItemMcpToolCallProgressServerNotification | McpServerOauthLoginCompletedServerNotification | McpServerStartupStatusUpdatedServerNotification | McpServerEventStreamNotificationServerNotification | AccountUpdatedServerNotification | AccountRateLimitsUpdatedServerNotification | AppListUpdatedServerNotification | RemoteControlStatusChangedServerNotification | ExternalAgentConfigImportProgressServerNotification | ExternalAgentConfigImportCompletedServerNotification | FsChangedServerNotification | ItemReasoningSummaryTextDeltaServerNotification | ItemReasoningSummaryPartAddedServerNotification | ItemReasoningTextDeltaServerNotification | ThreadCompactedServerNotification | ModelReroutedServerNotification | ModelVerificationServerNotification | ModelProviderAuthRecoveryStartedServerNotification | ModelProviderAuthRecoveryCompletedServerNotification | TurnModerationMetadataServerNotification | ModelSafetyBufferingUpdatedServerNotification | WarningServerNotification | GuardianWarningServerNotification | DeprecationNoticeServerNotification | ConfigWarningServerNotification | FuzzyFileSearchSessionUpdatedServerNotification | FuzzyFileSearchSessionCompletedServerNotification | ThreadRealtimeStartedServerNotification | ThreadRealtimeItemAddedServerNotification | ThreadRealtimeItemStartedServerNotification | ThreadRealtimeItemTranscriptDeltaServerNotification | ThreadRealtimeItemCompletedServerNotification | ThreadRealtimeTranscriptDeltaServerNotification | ThreadRealtimeTranscriptDoneServerNotification | ThreadRealtimeOutputAudioDeltaServerNotification | ThreadRealtimeSdpServerNotification | ThreadRealtimeErrorServerNotification | ThreadRealtimeClosedServerNotification | WindowsWorldWritableWarningServerNotification | WindowsSandboxSetupCompletedServerNotification | AccountLoginCompletedServerNotification ] ): model_config = ConfigDict( populate_by_name=True, ) root: Annotated[ ErrorServerNotification | ThreadStartedServerNotification | ThreadStatusChangedServerNotification | ThreadArchivedServerNotification | ThreadDeletedServerNotification | ThreadUnarchivedServerNotification | ThreadClosedServerNotification | ThreadRevertedServerNotification | SkillsChangedServerNotification | ThreadNameUpdatedServerNotification | ThreadGoalUpdatedServerNotification | ThreadGoalClearedServerNotification | ThreadQueueChangedServerNotification | ProjectChangedServerNotification | ThreadProjectUpdatedServerNotification | ThreadEnvironmentConnectedServerNotification | ThreadEnvironmentDisconnectedServerNotification | ThreadSettingsUpdatedServerNotification | ThreadTokenUsageUpdatedServerNotification | TurnStartedServerNotification | HookStartedServerNotification | TurnCompletedServerNotification | HookCompletedServerNotification | TurnDiffUpdatedServerNotification | TurnPlanUpdatedServerNotification | ItemStartedServerNotification | ItemAutoApprovalReviewStartedServerNotification | ItemAutoApprovalReviewCompletedServerNotification | AutoApprovalReviewStrictReviewRequiredServerNotification | ItemCompletedServerNotification | ItemAgentMessageDeltaServerNotification | ItemPlanDeltaServerNotification | CommandExecOutputDeltaServerNotification | ProcessOutputDeltaServerNotification | ProcessExitedServerNotification | ItemCommandExecutionOutputDeltaServerNotification | ItemCommandExecutionTerminalInteractionServerNotification | ItemFileChangeOutputDeltaServerNotification | ItemFileChangePatchUpdatedServerNotification | ServerRequestResolvedServerNotification | ItemMcpToolCallProgressServerNotification | McpServerOauthLoginCompletedServerNotification | McpServerStartupStatusUpdatedServerNotification | McpServerEventStreamNotificationServerNotification | AccountUpdatedServerNotification | AccountRateLimitsUpdatedServerNotification | AppListUpdatedServerNotification | RemoteControlStatusChangedServerNotification | ExternalAgentConfigImportProgressServerNotification | ExternalAgentConfigImportCompletedServerNotification | FsChangedServerNotification | ItemReasoningSummaryTextDeltaServerNotification | ItemReasoningSummaryPartAddedServerNotification | ItemReasoningTextDeltaServerNotification | ThreadCompactedServerNotification | ModelReroutedServerNotification | ModelVerificationServerNotification | ModelProviderAuthRecoveryStartedServerNotification | ModelProviderAuthRecoveryCompletedServerNotification | TurnModerationMetadataServerNotification | ModelSafetyBufferingUpdatedServerNotification | WarningServerNotification | GuardianWarningServerNotification | DeprecationNoticeServerNotification | ConfigWarningServerNotification | FuzzyFileSearchSessionUpdatedServerNotification | FuzzyFileSearchSessionCompletedServerNotification | ThreadRealtimeStartedServerNotification | ThreadRealtimeItemAddedServerNotification | ThreadRealtimeItemStartedServerNotification | ThreadRealtimeItemTranscriptDeltaServerNotification | ThreadRealtimeItemCompletedServerNotification | ThreadRealtimeTranscriptDeltaServerNotification | ThreadRealtimeTranscriptDoneServerNotification | ThreadRealtimeOutputAudioDeltaServerNotification | ThreadRealtimeSdpServerNotification | ThreadRealtimeErrorServerNotification | ThreadRealtimeClosedServerNotification | WindowsWorldWritableWarningServerNotification | WindowsSandboxSetupCompletedServerNotification | AccountLoginCompletedServerNotification, Field( description="Notification sent from the server to the client.", title="ServerNotification", ), ]