Files
codex/sdk/python/src/openai_codex/generated/v2_all.py
Ahmed Ibrahim 45134c0463 Generate Python SDK types from repository app-server schemas (#44032)
## Why

Keep Python protocol models aligned with the checked-in app-server schemas and preserve reviewed generated artifacts when staging SDK releases.

## What changed

- Generate SDK types from the schema directory configured in `pyproject.toml`, with a `--schema-dir` override, instead of invoking the pinned runtime binary.
- Refresh Python artifacts through `just write-app-server-schema` for standard repository exports. Skip SDK updates for scratch and experimental exports.
- Regenerate protocol models and notification dispatch, deriving the known payload union from the registry so `Notification.payload` covers every registered event.
- Explicitly allowlist convenience API parameters so new protocol fields do not silently expand method signatures. Preserve existing approval path wrappers.
- Stage SDK releases using checked-in generated files without regenerating them.

## Testing

Add coverage for schema selection, refresh gating and failure handling, release artifact preservation, notification payload typing, and approval path compatibility. Update the generation drift test to use repository schemas.

GitOrigin-RevId: fab350b07cf170258b91fbafa8da384aeb2e3bd7
2026-09-09 03:27:31 +00:00

12495 lines
373 KiB
Python

# 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.<id>]` 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",
),
]