From 4d8437c24476953d65293d9e1fb45a3e2d9657ef Mon Sep 17 00:00:00 2001 From: xli-oai Date: Thu, 7 May 2026 21:07:31 -0700 Subject: [PATCH] Regenerate Python SDK artifacts --- sdk/python/src/codex_app_server/__init__.py | 2 - sdk/python/src/codex_app_server/api.py | 30 +- .../generated/notification_registry.py | 4 + .../src/codex_app_server/generated/v2_all.py | 902 ++++++++++-------- .../test_artifact_workflow_and_binaries.py | 3 + sdk/python/tests/test_client_rpc_methods.py | 1 + .../tests/test_public_api_runtime_behavior.py | 1 + .../tests/test_public_api_signatures.py | 4 + 8 files changed, 515 insertions(+), 432 deletions(-) diff --git a/sdk/python/src/codex_app_server/__init__.py b/sdk/python/src/codex_app_server/__init__.py index 33f9e628d9..8474747e32 100644 --- a/sdk/python/src/codex_app_server/__init__.py +++ b/sdk/python/src/codex_app_server/__init__.py @@ -22,7 +22,6 @@ from .generated.v2_all import ( ReasoningSummary, SandboxMode, SandboxPolicy, - ServiceTier, ThreadItem, ThreadForkParams, ThreadListParams, @@ -86,7 +85,6 @@ __all__ = [ "ReasoningSummary", "SandboxMode", "SandboxPolicy", - "ServiceTier", "ThreadStartParams", "ThreadResumeParams", "ThreadListParams", diff --git a/sdk/python/src/codex_app_server/api.py b/sdk/python/src/codex_app_server/api.py index 2c71859cc8..fab437327a 100644 --- a/sdk/python/src/codex_app_server/api.py +++ b/sdk/python/src/codex_app_server/api.py @@ -15,7 +15,6 @@ from .generated.v2_all import ( ReasoningSummary, SandboxMode, SandboxPolicy, - ServiceTier, SortDirection, ThreadArchiveResponse, ThreadCompactStartResponse, @@ -27,6 +26,7 @@ from .generated.v2_all import ( ThreadResumeParams, ThreadSetNameResponse, ThreadSortKey, + ThreadSource, ThreadSourceKind, ThreadStartSource, ThreadStartParams, @@ -152,8 +152,9 @@ class Codex: personality: Personality | None = None, sandbox: SandboxMode | None = None, service_name: str | None = None, - service_tier: ServiceTier | None = None, + service_tier: str | None = None, session_start_source: ThreadStartSource | None = None, + thread_source: ThreadSource | None = None, ) -> Thread: params = ThreadStartParams( approval_policy=approval_policy, @@ -170,6 +171,7 @@ class Codex: service_name=service_name, service_tier=service_tier, session_start_source=session_start_source, + thread_source=thread_source, ) started = self._client.thread_start(params) return Thread(self._client, started.thread.id) @@ -216,7 +218,7 @@ class Codex: model_provider: str | None = None, personality: Personality | None = None, sandbox: SandboxMode | None = None, - service_tier: ServiceTier | None = None, + service_tier: str | None = None, ) -> Thread: params = ThreadResumeParams( thread_id=thread_id, @@ -249,7 +251,8 @@ class Codex: model: str | None = None, model_provider: str | None = None, sandbox: SandboxMode | None = None, - service_tier: ServiceTier | None = None, + service_tier: str | None = None, + thread_source: ThreadSource | None = None, ) -> Thread: params = ThreadForkParams( thread_id=thread_id, @@ -264,6 +267,7 @@ class Codex: model_provider=model_provider, sandbox=sandbox, service_tier=service_tier, + thread_source=thread_source, ) forked = self._client.thread_fork(thread_id, params) return Thread(self._client, forked.thread.id) @@ -348,8 +352,9 @@ class AsyncCodex: personality: Personality | None = None, sandbox: SandboxMode | None = None, service_name: str | None = None, - service_tier: ServiceTier | None = None, + service_tier: str | None = None, session_start_source: ThreadStartSource | None = None, + thread_source: ThreadSource | None = None, ) -> AsyncThread: await self._ensure_initialized() params = ThreadStartParams( @@ -367,6 +372,7 @@ class AsyncCodex: service_name=service_name, service_tier=service_tier, session_start_source=session_start_source, + thread_source=thread_source, ) started = await self._client.thread_start(params) return AsyncThread(self, started.thread.id) @@ -414,7 +420,7 @@ class AsyncCodex: model_provider: str | None = None, personality: Personality | None = None, sandbox: SandboxMode | None = None, - service_tier: ServiceTier | None = None, + service_tier: str | None = None, ) -> AsyncThread: await self._ensure_initialized() params = ThreadResumeParams( @@ -448,7 +454,8 @@ class AsyncCodex: model: str | None = None, model_provider: str | None = None, sandbox: SandboxMode | None = None, - service_tier: ServiceTier | None = None, + service_tier: str | None = None, + thread_source: ThreadSource | None = None, ) -> AsyncThread: await self._ensure_initialized() params = ThreadForkParams( @@ -464,6 +471,7 @@ class AsyncCodex: model_provider=model_provider, sandbox=sandbox, service_tier=service_tier, + thread_source=thread_source, ) forked = await self._client.thread_fork(thread_id, params) return AsyncThread(self, forked.thread.id) @@ -500,7 +508,7 @@ class Thread: output_schema: JsonObject | None = None, personality: Personality | None = None, sandbox_policy: SandboxPolicy | None = None, - service_tier: ServiceTier | None = None, + service_tier: str | None = None, summary: ReasoningSummary | None = None, ) -> RunResult: turn = self.turn( @@ -535,7 +543,7 @@ class Thread: output_schema: JsonObject | None = None, personality: Personality | None = None, sandbox_policy: SandboxPolicy | None = None, - service_tier: ServiceTier | None = None, + service_tier: str | None = None, summary: ReasoningSummary | None = None, ) -> TurnHandle: wire_input = _to_wire_input(input) @@ -584,7 +592,7 @@ class AsyncThread: output_schema: JsonObject | None = None, personality: Personality | None = None, sandbox_policy: SandboxPolicy | None = None, - service_tier: ServiceTier | None = None, + service_tier: str | None = None, summary: ReasoningSummary | None = None, ) -> RunResult: turn = await self.turn( @@ -619,7 +627,7 @@ class AsyncThread: output_schema: JsonObject | None = None, personality: Personality | None = None, sandbox_policy: SandboxPolicy | None = None, - service_tier: ServiceTier | None = None, + service_tier: str | None = None, summary: ReasoningSummary | None = None, ) -> AsyncTurnHandle: await self._codex._ensure_initialized() diff --git a/sdk/python/src/codex_app_server/generated/notification_registry.py b/sdk/python/src/codex_app_server/generated/notification_registry.py index a97dc98f34..0b05154402 100644 --- a/sdk/python/src/codex_app_server/generated/notification_registry.py +++ b/sdk/python/src/codex_app_server/generated/notification_registry.py @@ -35,6 +35,8 @@ from .v2_all import McpToolCallProgressNotification from .v2_all import ModelReroutedNotification from .v2_all import ModelVerificationNotification from .v2_all import PlanDeltaNotification +from .v2_all import ProcessExitedNotification +from .v2_all import ProcessOutputDeltaNotification from .v2_all import ReasoningSummaryPartAddedNotification from .v2_all import ReasoningSummaryTextDeltaNotification from .v2_all import ReasoningTextDeltaNotification @@ -101,6 +103,8 @@ NOTIFICATION_MODELS: dict[str, type[BaseModel]] = { "mcpServer/startupStatus/updated": McpServerStatusUpdatedNotification, "model/rerouted": ModelReroutedNotification, "model/verification": ModelVerificationNotification, + "process/exited": ProcessExitedNotification, + "process/outputDelta": ProcessOutputDeltaNotification, "remoteControl/status/changed": RemoteControlStatusChangedNotification, "serverRequest/resolved": ServerRequestResolvedNotification, "skills/changed": SkillsChangedNotification, diff --git a/sdk/python/src/codex_app_server/generated/v2_all.py b/sdk/python/src/codex_app_server/generated/v2_all.py index ae85d122cc..8903dbc491 100644 --- a/sdk/python/src/codex_app_server/generated/v2_all.py +++ b/sdk/python/src/codex_app_server/generated/v2_all.py @@ -790,75 +790,6 @@ class DeprecationNoticeNotification(BaseModel): summary: Annotated[str, Field(description="Concise summary of what is deprecated.")] -class DeviceKeyAlgorithm(RootModel[Literal["ecdsa_p256_sha256"]]): - model_config = ConfigDict( - populate_by_name=True, - ) - root: Annotated[ - Literal["ecdsa_p256_sha256"], - Field( - description="Device-key algorithm reported at enrollment and signing boundaries." - ), - ] - - -class DeviceKeyProtectionClass(Enum): - hardware_secure_enclave = "hardware_secure_enclave" - hardware_tpm = "hardware_tpm" - os_protected_nonextractable = "os_protected_nonextractable" - - -class DeviceKeyProtectionPolicy(Enum): - hardware_only = "hardware_only" - allow_os_protected_nonextractable = "allow_os_protected_nonextractable" - - -class DeviceKeyPublicParams(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - key_id: Annotated[str, Field(alias="keyId")] - - -class DeviceKeyPublicResponse(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - algorithm: DeviceKeyAlgorithm - key_id: Annotated[str, Field(alias="keyId")] - protection_class: Annotated[ - DeviceKeyProtectionClass, Field(alias="protectionClass") - ] - public_key_spki_der_base64: Annotated[ - str, - Field( - alias="publicKeySpkiDerBase64", - description="SubjectPublicKeyInfo DER encoded as base64.", - ), - ] - - -class DeviceKeySignResponse(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - algorithm: DeviceKeyAlgorithm - signature_der_base64: Annotated[ - str, - Field( - alias="signatureDerBase64", - description="ECDSA signature DER encoded as base64.", - ), - ] - signed_payload_base64: Annotated[ - str, - Field( - alias="signedPayloadBase64", - description="Exact bytes signed by the device key, encoded as base64. Verifiers must verify this byte string directly and must not reserialize `payload`.", - ), - ] - - class InputTextDynamicToolCallOutputContentItem(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -1551,6 +1482,8 @@ class HookEventName(Enum): pre_tool_use = "preToolUse" permission_request = "permissionRequest" post_tool_use = "postToolUse" + pre_compact = "preCompact" + post_compact = "postCompact" session_start = "sessionStart" user_prompt_submit = "userPromptSubmit" stop = "stop" @@ -1616,6 +1549,13 @@ class HookSource(Enum): unknown = "unknown" +class HookTrustStatus(Enum): + managed = "managed" + untrusted = "untrusted" + trusted = "trusted" + modified = "modified" + + class HooksListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -1869,9 +1809,13 @@ class ManagedHooksRequirements(BaseModel): permission_request: Annotated[ list[ConfiguredHookMatcherGroup], Field(alias="PermissionRequest") ] + post_compact: Annotated[ + list[ConfiguredHookMatcherGroup], Field(alias="PostCompact") + ] post_tool_use: Annotated[ list[ConfiguredHookMatcherGroup], Field(alias="PostToolUse") ] + pre_compact: Annotated[list[ConfiguredHookMatcherGroup], Field(alias="PreCompact")] pre_tool_use: Annotated[list[ConfiguredHookMatcherGroup], Field(alias="PreToolUse")] session_start: Annotated[ list[ConfiguredHookMatcherGroup], Field(alias="SessionStart") @@ -2177,6 +2121,15 @@ class ModelReroutedNotification(BaseModel): turn_id: Annotated[str, Field(alias="turnId")] +class ModelServiceTier(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + description: str + id: str + name: str + + class ModelUpgradeInfo(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -2428,6 +2381,19 @@ class PluginAuthPolicy(Enum): on_use = "ON_USE" +class PluginAvailability(Enum): + disabled_by_admin = "DISABLED_BY_ADMIN" + available = "AVAILABLE" + + +class PluginHookSummary(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + event_name: Annotated[HookEventName, Field(alias="eventName")] + key: str + + class PluginInstallParams(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -2515,6 +2481,12 @@ class PluginInterface(BaseModel): website_url: Annotated[str | None, Field(alias="websiteUrl")] = None +class PluginListMarketplaceKind(Enum): + local = "local" + workspace_directory = "workspace-directory" + shared_with_me = "shared-with-me" + + class PluginListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -2525,6 +2497,13 @@ class PluginListParams(BaseModel): description="Optional working directories used to discover repo marketplaces. When omitted, only home-scoped marketplaces and the official curated marketplace are considered." ), ] = None + marketplace_kinds: Annotated[ + list[PluginListMarketplaceKind] | None, + Field( + alias="marketplaceKinds", + description="Optional marketplace kind filter. When omitted, only local marketplaces are queried, plus the default remote catalog when enabled by feature flag.", + ), + ] = None class PluginReadParams(BaseModel): @@ -2554,6 +2533,12 @@ class PluginShareDeleteResponse(BaseModel): ) +class PluginShareDiscoverability(Enum): + listed = "LISTED" + unlisted = "UNLISTED" + private = "PRIVATE" + + class PluginShareListParams(BaseModel): pass model_config = ConfigDict( @@ -2561,12 +2546,10 @@ class PluginShareListParams(BaseModel): ) -class PluginShareSaveParams(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - plugin_path: Annotated[AbsolutePathBuf, Field(alias="pluginPath")] - remote_plugin_id: Annotated[str | None, Field(alias="remotePluginId")] = None +class PluginSharePrincipalType(Enum): + user = "user" + group = "group" + workspace = "workspace" class PluginShareSaveResponse(BaseModel): @@ -2577,6 +2560,22 @@ class PluginShareSaveResponse(BaseModel): share_url: Annotated[str, Field(alias="shareUrl")] +class PluginShareTarget(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + principal_id: Annotated[str, Field(alias="principalId")] + principal_type: Annotated[PluginSharePrincipalType, Field(alias="principalType")] + + +class PluginShareUpdateTargetsParams(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + remote_plugin_id: Annotated[str, Field(alias="remotePluginId")] + share_targets: Annotated[list[PluginShareTarget], Field(alias="shareTargets")] + + class PluginSkillReadParams(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -2626,20 +2625,6 @@ class PluginSource(RootModel[LocalPluginSource | GitPluginSource | RemotePluginS root: LocalPluginSource | GitPluginSource | RemotePluginSource -class PluginSummary(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - auth_policy: Annotated[PluginAuthPolicy, Field(alias="authPolicy")] - enabled: bool - id: str - install_policy: Annotated[PluginInstallPolicy, Field(alias="installPolicy")] - installed: bool - interface: PluginInterface | None = None - name: str - source: PluginSource - - class PluginUninstallParams(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -2662,6 +2647,59 @@ class PluginsMigration(BaseModel): plugin_names: Annotated[list[str], Field(alias="pluginNames")] +class ProcessExitedNotification(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + exit_code: Annotated[int, Field(alias="exitCode", description="Process exit code.")] + process_handle: Annotated[ + str, + Field( + alias="processHandle", + description="Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + ), + ] + stderr: Annotated[ + str, + Field( + description="Buffered stderr capture.\n\nEmpty when stderr was streamed via `process/outputDelta`." + ), + ] + stderr_cap_reached: Annotated[ + bool, + Field( + alias="stderrCapReached", + description="Whether stderr reached `outputBytesCap`.\n\nIn streaming mode, stderr is empty and cap state is also reported on the final stderr `process/outputDelta` notification.", + ), + ] + stdout: Annotated[ + str, + Field( + description="Buffered stdout capture.\n\nEmpty when stdout was streamed via `process/outputDelta`." + ), + ] + stdout_cap_reached: Annotated[ + bool, + Field( + alias="stdoutCapReached", + description="Whether stdout reached `outputBytesCap`.\n\nIn streaming mode, stdout is empty and cap state is also reported on the final stdout `process/outputDelta` notification.", + ), + ] + + +class ProcessOutputStream(Enum): + stdout = "stdout" + stderr = "stderr" + + +class ProcessTerminalSize(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + cols: Annotated[int, Field(description="Terminal width in character cells.", ge=0)] + rows: Annotated[int, Field(description="Terminal height in character cells.", ge=0)] + + class RateLimitReachedType(Enum): rate_limit_reached = "rate_limit_reached" workspace_owner_credits_depleted = "workspace_owner_credits_depleted" @@ -2837,34 +2875,6 @@ class ReasoningTextDeltaNotification(BaseModel): turn_id: Annotated[str, Field(alias="turnId")] -class RemoteControlClientConnectionAudience( - RootModel[Literal["remote_control_client_websocket"]] -): - model_config = ConfigDict( - populate_by_name=True, - ) - root: Annotated[ - Literal["remote_control_client_websocket"], - Field( - description="Audience for a remote-control client connection device-key proof." - ), - ] - - -class RemoteControlClientEnrollmentAudience( - RootModel[Literal["remote_control_client_enrollment"]] -): - model_config = ConfigDict( - populate_by_name=True, - ) - root: Annotated[ - Literal["remote_control_client_enrollment"], - Field( - description="Audience for a remote-control client enrollment device-key proof." - ), - ] - - class RemoteControlConnectionStatus(Enum): disabled = "disabled" connecting = "connecting" @@ -3060,6 +3070,16 @@ class CompactionResponseItem(BaseModel): type: Annotated[Literal["compaction"], Field(title="CompactionResponseItemType")] +class ContextCompactionResponseItem(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + encrypted_content: str | None = None + type: Annotated[ + Literal["context_compaction"], Field(title="ContextCompactionResponseItemType") + ] + + class OtherResponseItem(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -3307,6 +3327,16 @@ class ItemPlanDeltaServerNotification(BaseModel): params: PlanDeltaNotification +class ProcessExitedServerNotification(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + method: Annotated[ + Literal["process/exited"], Field(title="Process/exitedNotificationMethod") + ] + params: ProcessExitedNotification + + class ItemCommandExecutionOutputDeltaServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -3519,11 +3549,6 @@ class ServerRequestResolvedNotification(BaseModel): thread_id: Annotated[str, Field(alias="threadId")] -class ServiceTier(Enum): - fast = "fast" - flex = "flex" - - class SessionMigration(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -3634,14 +3659,6 @@ class SkillsConfigWriteResponse(BaseModel): effective_enabled: Annotated[bool, Field(alias="effectiveEnabled")] -class SkillsListExtraRootsForCwd(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - cwd: str - extra_user_roots: Annotated[list[str], Field(alias="extraUserRoots")] - - class SkillsListParams(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -3659,13 +3676,6 @@ class SkillsListParams(BaseModel): description="When true, bypass the skills cache and re-scan skills from disk.", ), ] = None - per_cwd_extra_user_roots: Annotated[ - list[SkillsListExtraRootsForCwd] | None, - Field( - alias="perCwdExtraUserRoots", - description="Optional per-cwd extra roots to scan as user-scoped skills.", - ), - ] = None class SortDirection(Enum): @@ -3810,37 +3820,6 @@ class ThreadCompactStartResponse(BaseModel): ) -class ThreadForkParams(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - approval_policy: Annotated[AskForApproval | None, Field(alias="approvalPolicy")] = ( - None - ) - approvals_reviewer: Annotated[ - ApprovalsReviewer | None, - Field( - alias="approvalsReviewer", - description="Override where approval requests are routed for review on this thread and subsequent turns.", - ), - ] = None - base_instructions: Annotated[str | None, Field(alias="baseInstructions")] = None - config: dict[str, Any] | None = None - cwd: str | None = None - developer_instructions: Annotated[ - str | None, Field(alias="developerInstructions") - ] = None - ephemeral: bool | None = None - model: Annotated[ - str | None, - Field(description="Configuration overrides for the forked thread, if any."), - ] = None - model_provider: Annotated[str | None, Field(alias="modelProvider")] = None - sandbox: SandboxMode | None = None - service_tier: Annotated[ServiceTier | None, Field(alias="serviceTier")] = None - thread_id: Annotated[str, Field(alias="threadId")] - - class ThreadGoalClearedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -4311,7 +4290,7 @@ class ThreadResumeParams(BaseModel): model_provider: Annotated[str | None, Field(alias="modelProvider")] = None personality: Personality | None = None sandbox: SandboxMode | None = None - service_tier: Annotated[ServiceTier | None, Field(alias="serviceTier")] = None + service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread_id: Annotated[str, Field(alias="threadId")] @@ -4370,6 +4349,12 @@ class ThreadSortKey(Enum): updated_at = "updated_at" +class ThreadSource(Enum): + user = "user" + subagent = "subagent" + memory_consolidation = "memory_consolidation" + + class ThreadSourceKind(Enum): cli = "cli" vscode = "vscode" @@ -4528,6 +4513,12 @@ class TurnInterruptResponse(BaseModel): ) +class TurnItemsView(Enum): + not_loaded = "notLoaded" + summary = "summary" + full = "full" + + class TurnPlanStepStatus(Enum): pending = "pending" in_progress = "inProgress" @@ -4722,6 +4713,19 @@ class WebSearchToolConfig(BaseModel): 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" @@ -4872,15 +4876,6 @@ class ThreadResumeRequest(BaseModel): params: ThreadResumeParams -class ThreadForkRequest(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - id: RequestId - method: Annotated[Literal["thread/fork"], Field(title="Thread/forkRequestMethod")] - params: ThreadForkParams - - class ThreadArchiveRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -5094,15 +5089,16 @@ class PluginSkillReadRequest(BaseModel): params: PluginSkillReadParams -class PluginShareSaveRequest(BaseModel): +class PluginShareUpdateTargetsRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ - Literal["plugin/share/save"], Field(title="Plugin/share/saveRequestMethod") + Literal["plugin/share/updateTargets"], + Field(title="Plugin/share/updateTargetsRequestMethod"), ] - params: PluginShareSaveParams + params: PluginShareUpdateTargetsParams class PluginShareListRequest(BaseModel): @@ -5136,17 +5132,6 @@ class AppListRequest(BaseModel): params: AppsListParams -class DeviceKeyPublicRequest(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - id: RequestId - method: Annotated[ - Literal["device/key/public"], Field(title="Device/key/publicRequestMethod") - ] - params: DeviceKeyPublicParams - - class FsReadFileRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -5382,6 +5367,18 @@ class WindowsSandboxSetupStartRequest(BaseModel): params: WindowsSandboxSetupStartParams +class WindowsSandboxReadinessRequest(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + id: RequestId + method: Annotated[ + Literal["windowsSandbox/readiness"], + Field(title="WindowsSandbox/readinessRequestMethod"), + ] + params: None = None + + class AccountLoginStartRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -5843,159 +5840,6 @@ class ContentItem( root: InputTextContentItem | InputImageContentItem | OutputTextContentItem -class DeviceKeyCreateParams(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - account_user_id: Annotated[str, Field(alias="accountUserId")] - client_id: Annotated[str, Field(alias="clientId")] - protection_policy: Annotated[ - DeviceKeyProtectionPolicy | None, - Field( - alias="protectionPolicy", - description="Defaults to `hardware_only` when omitted.", - ), - ] = None - - -class DeviceKeyCreateResponse(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - algorithm: DeviceKeyAlgorithm - key_id: Annotated[str, Field(alias="keyId")] - protection_class: Annotated[ - DeviceKeyProtectionClass, Field(alias="protectionClass") - ] - public_key_spki_der_base64: Annotated[ - str, - Field( - alias="publicKeySpkiDerBase64", - description="SubjectPublicKeyInfo DER encoded as base64.", - ), - ] - - -class RemoteControlClientConnectionDeviceKeySignPayload(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - account_user_id: Annotated[str, Field(alias="accountUserId")] - audience: RemoteControlClientConnectionAudience - client_id: Annotated[str, Field(alias="clientId")] - nonce: str - scopes: Annotated[ - list[str], - Field( - description="Must contain exactly `remote_control_controller_websocket`." - ), - ] - session_id: Annotated[ - str, - Field( - alias="sessionId", - description="Backend-issued websocket session id that this proof authorizes.", - ), - ] - target_origin: Annotated[ - str, - Field( - alias="targetOrigin", - description="Origin of the backend endpoint that issued the challenge and will verify this proof.", - ), - ] - target_path: Annotated[ - str, - Field( - alias="targetPath", - description="Websocket route path that this proof authorizes.", - ), - ] - token_expires_at: Annotated[ - int, - Field( - alias="tokenExpiresAt", - description="Remote-control token expiration as Unix seconds.", - ), - ] - token_sha256_base64url: Annotated[ - str, - Field( - alias="tokenSha256Base64url", - description="SHA-256 of the controller-scoped remote-control token, encoded as unpadded base64url.", - ), - ] - type: Annotated[ - Literal["remoteControlClientConnection"], - Field(title="RemoteControlClientConnectionDeviceKeySignPayloadType"), - ] - - -class RemoteControlClientEnrollmentDeviceKeySignPayload(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - account_user_id: Annotated[str, Field(alias="accountUserId")] - audience: RemoteControlClientEnrollmentAudience - challenge_expires_at: Annotated[ - int, - Field( - alias="challengeExpiresAt", - description="Enrollment challenge expiration as Unix seconds.", - ), - ] - challenge_id: Annotated[ - str, - Field( - alias="challengeId", - description="Backend-issued enrollment challenge id that this proof authorizes.", - ), - ] - client_id: Annotated[str, Field(alias="clientId")] - device_identity_sha256_base64url: Annotated[ - str, - Field( - alias="deviceIdentitySha256Base64url", - description="SHA-256 of the requested device identity operation, encoded as unpadded base64url.", - ), - ] - nonce: str - target_origin: Annotated[ - str, - Field( - alias="targetOrigin", - description="Origin of the backend endpoint that issued the challenge and will verify this proof.", - ), - ] - target_path: Annotated[ - str, - Field( - alias="targetPath", - description="HTTP route path that this proof authorizes.", - ), - ] - type: Annotated[ - Literal["remoteControlClientEnrollment"], - Field(title="RemoteControlClientEnrollmentDeviceKeySignPayloadType"), - ] - - -class DeviceKeySignPayload( - RootModel[ - RemoteControlClientConnectionDeviceKeySignPayload - | RemoteControlClientEnrollmentDeviceKeySignPayload - ] -): - model_config = ConfigDict( - populate_by_name=True, - ) - root: Annotated[ - RemoteControlClientConnectionDeviceKeySignPayload - | RemoteControlClientEnrollmentDeviceKeySignPayload, - Field(description="Structured payloads accepted by `device/key/sign`."), - ] - - class ExperimentalFeature(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -6182,6 +6026,7 @@ class HookMetadata(BaseModel): populate_by_name=True, ) command: str | None = None + current_hash: Annotated[str, Field(alias="currentHash")] display_order: Annotated[int, Field(alias="displayOrder")] enabled: bool event_name: Annotated[HookEventName, Field(alias="eventName")] @@ -6194,6 +6039,7 @@ class HookMetadata(BaseModel): source_path: Annotated[AbsolutePathBuf, Field(alias="sourcePath")] status_message: Annotated[str | None, Field(alias="statusMessage")] = None timeout_sec: Annotated[int, Field(alias="timeoutSec", ge=0)] + trust_status: Annotated[HookTrustStatus, Field(alias="trustStatus")] class HookOutputEntry(BaseModel): @@ -6319,7 +6165,11 @@ class Model(BaseModel): populate_by_name=True, ) additional_speed_tiers: Annotated[ - list[str] | None, Field(alias="additionalSpeedTiers") + list[str] | None, + Field( + alias="additionalSpeedTiers", + description="Deprecated: use `serviceTiers` instead.", + ), ] = [] availability_nux: Annotated[ ModelAvailabilityNux | None, Field(alias="availabilityNux") @@ -6336,6 +6186,9 @@ class Model(BaseModel): ] = ["text", "image"] is_default: Annotated[bool, Field(alias="isDefault")] model: str + service_tiers: Annotated[ + list[ModelServiceTier] | None, Field(alias="serviceTiers") + ] = [] supported_reasoning_efforts: Annotated[ list[ReasoningEffortOption], Field(alias="supportedReasoningEfforts") ] @@ -6406,48 +6259,58 @@ class PermissionProfileFileSystemPermissions( ) -class PluginDetail(BaseModel): +class PluginSharePrincipal(BaseModel): model_config = ConfigDict( populate_by_name=True, ) - apps: list[AppSummary] - description: str | None = None - marketplace_name: Annotated[str, Field(alias="marketplaceName")] - marketplace_path: Annotated[ - AbsolutePathBuf | None, Field(alias="marketplacePath") - ] = None - mcp_servers: Annotated[list[str], Field(alias="mcpServers")] - skills: list[SkillSummary] - summary: PluginSummary - - -class PluginMarketplaceEntry(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - interface: MarketplaceInterface | None = None name: str - path: Annotated[ - AbsolutePathBuf | None, - Field( - description="Local marketplace file path when the marketplace is backed by a local file. Remote-only catalog marketplaces do not have a local path." - ), + principal_id: Annotated[str, Field(alias="principalId")] + principal_type: Annotated[PluginSharePrincipalType, Field(alias="principalType")] + + +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 - plugins: list[PluginSummary] -class PluginReadResponse(BaseModel): +class PluginShareUpdateTargetsResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, ) - plugin: PluginDetail + principals: list[PluginSharePrincipal] -class PluginShareListResponse(BaseModel): +class ProcessOutputDeltaNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) - data: list[PluginSummary] + cap_reached: Annotated[ + bool, + Field( + alias="capReached", + description="True on the final streamed chunk for this stream when output was truncated by `outputBytesCap`.", + ), + ] + delta_base64: Annotated[ + str, Field(alias="deltaBase64", description="Base64-encoded output bytes.") + ] + process_handle: Annotated[ + str, + Field( + alias="processHandle", + description="Client-supplied, connection-scoped `processHandle` from `process/spawn`.", + ), + ] + stream: Annotated[ + ProcessOutputStream, Field(description="Output stream this chunk belongs to.") + ] class RateLimitSnapshot(BaseModel): @@ -6606,6 +6469,17 @@ class CommandExecOutputDeltaServerNotification(BaseModel): params: CommandExecOutputDeltaNotification +class ProcessOutputDeltaServerNotification(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + method: Annotated[ + Literal["process/outputDelta"], + Field(title="Process/outputDeltaNotificationMethod"), + ] + params: ProcessOutputDeltaNotification + + class ItemCommandExecutionTerminalInteractionServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -6826,6 +6700,44 @@ class SubAgentSource( root: SubAgentSourceValue | ThreadSpawnSubAgentSource | OtherSubAgentSource +class ThreadForkParams(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + approval_policy: Annotated[AskForApproval | None, Field(alias="approvalPolicy")] = ( + None + ) + approvals_reviewer: Annotated[ + ApprovalsReviewer | None, + Field( + alias="approvalsReviewer", + description="Override where approval requests are routed for review on this thread and subsequent turns.", + ), + ] = None + base_instructions: Annotated[str | None, Field(alias="baseInstructions")] = None + config: dict[str, Any] | None = None + cwd: str | None = None + developer_instructions: Annotated[ + str | None, Field(alias="developerInstructions") + ] = None + ephemeral: bool | None = None + model: Annotated[ + str | None, + Field(description="Configuration overrides for the forked thread, if any."), + ] = None + model_provider: Annotated[str | None, Field(alias="modelProvider")] = None + sandbox: SandboxMode | None = None + service_tier: Annotated[str | None, Field(alias="serviceTier")] = None + thread_id: Annotated[str, Field(alias="threadId")] + thread_source: Annotated[ + ThreadSource | None, + Field( + alias="threadSource", + description="Optional client-supplied analytics source classification for this forked thread.", + ), + ] = None + + class ThreadGoal(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -7087,10 +6999,17 @@ class ThreadStartParams(BaseModel): personality: Personality | None = None sandbox: SandboxMode | None = None service_name: Annotated[str | None, Field(alias="serviceName")] = None - service_tier: Annotated[ServiceTier | None, Field(alias="serviceTier")] = None + service_tier: Annotated[str | None, Field(alias="serviceTier")] = None session_start_source: Annotated[ ThreadStartSource | None, Field(alias="sessionStartSource") ] = None + thread_source: Annotated[ + ThreadSource | None, + Field( + alias="threadSource", + description="Optional client-supplied analytics source classification for this thread.", + ), + ] = None class ThreadTokenUsage(BaseModel): @@ -7213,7 +7132,7 @@ class TurnStartParams(BaseModel): ), ] = None service_tier: Annotated[ - ServiceTier | None, + str | None, Field( alias="serviceTier", description="Override the service tier for this turn and subsequent turns.", @@ -7336,6 +7255,15 @@ class ThreadStartRequest(BaseModel): params: ThreadStartParams +class ThreadForkRequest(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + id: RequestId + method: Annotated[Literal["thread/fork"], Field(title="Thread/forkRequestMethod")] + params: ThreadForkParams + + class ThreadListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -7345,15 +7273,15 @@ class ThreadListRequest(BaseModel): params: ThreadListParams -class DeviceKeyCreateRequest(BaseModel): +class PluginShareSaveRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) id: RequestId method: Annotated[ - Literal["device/key/create"], Field(title="Device/key/createRequestMethod") + Literal["plugin/share/save"], Field(title="Plugin/share/saveRequestMethod") ] - params: DeviceKeyCreateParams + params: PluginShareSaveParams class TurnStartRequest(BaseModel): @@ -7466,14 +7394,6 @@ class ConfigWriteResponse(BaseModel): version: str -class DeviceKeySignParams(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - key_id: Annotated[str, Field(alias="keyId")] - payload: DeviceKeySignPayload - - class ErrorNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -7549,6 +7469,13 @@ 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")] @@ -7559,6 +7486,13 @@ class ItemStartedNotification(BaseModel): 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")] @@ -7601,17 +7535,45 @@ class PermissionProfile( ) -class PluginListResponse(BaseModel): +class PluginShareContext(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] + creator_account_user_id: Annotated[ + str | None, Field(alias="creatorAccountUserId") + ] = None + creator_name: Annotated[str | None, Field(alias="creatorName")] = None + remote_plugin_id: Annotated[str, Field(alias="remotePluginId")] + share_targets: Annotated[ + list[PluginSharePrincipal] | None, Field(alias="shareTargets") + ] = None + share_url: Annotated[str | None, Field(alias="shareUrl")] = None + + +class PluginSummary(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + auth_policy: Annotated[PluginAuthPolicy, Field(alias="authPolicy")] + availability: Annotated[ + PluginAvailability | None, + Field(description="Availability state for installing and using the plugin."), + ] = "AVAILABLE" + enabled: bool + id: str + install_policy: Annotated[PluginInstallPolicy, Field(alias="installPolicy")] + installed: bool + interface: PluginInterface | None = None + keywords: list[str] | None = [] + name: str + share_context: Annotated[ + PluginShareContext | None, + Field( + alias="shareContext", + description="Remote sharing context associated with this plugin when available.", + ), + ] = None + source: PluginSource class ProfileV2(BaseModel): @@ -7632,7 +7594,7 @@ class ProfileV2(BaseModel): model_reasoning_effort: ReasoningEffort | None = None model_reasoning_summary: ReasoningSummary | None = None model_verbosity: Verbosity | None = None - service_tier: ServiceTier | None = None + service_tier: str | None = None tools: ToolsV2 | None = None web_search: WebSearchMode | None = None @@ -7687,6 +7649,7 @@ class ResponseItem( | WebSearchCallResponseItem | ImageGenerationCallResponseItem | CompactionResponseItem + | ContextCompactionResponseItem | OtherResponseItem ] ): @@ -7706,6 +7669,7 @@ class ResponseItem( | WebSearchCallResponseItem | ImageGenerationCallResponseItem | CompactionResponseItem + | ContextCompactionResponseItem | OtherResponseItem ) @@ -7865,10 +7829,15 @@ class Turn(BaseModel): id: str items: Annotated[ list[ThreadItem], - Field( - description="Only populated on a `thread/resume` or `thread/fork` response. For all other responses and notifications returning a Turn, the items field will be an empty list." - ), + 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( @@ -7902,17 +7871,6 @@ class TurnStartedNotification(BaseModel): turn: Turn -class DeviceKeySignRequest(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - id: RequestId - method: Annotated[ - Literal["device/key/sign"], Field(title="Device/key/signRequestMethod") - ] - params: DeviceKeySignParams - - class ConfigBatchWriteRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -7954,7 +7912,7 @@ class Config(BaseModel): review_model: str | None = None sandbox_mode: SandboxMode | None = None sandbox_workspace_write: SandboxWorkspaceWrite | None = None - service_tier: ServiceTier | None = None + service_tier: str | None = None tools: ToolsV2 | None = None web_search: WebSearchMode | None = None @@ -8024,11 +7982,25 @@ class ItemGuardianApprovalReviewCompletedNotification(BaseModel): 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( @@ -8049,6 +8021,13 @@ class ItemGuardianApprovalReviewStartedNotification(BaseModel): 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( @@ -8060,6 +8039,62 @@ class ItemGuardianApprovalReviewStartedNotification(BaseModel): turn_id: Annotated[str, Field(alias="turnId")] +class PluginDetail(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + apps: list[AppSummary] + description: str | None = None + hooks: list[PluginHookSummary] + marketplace_name: Annotated[str, Field(alias="marketplaceName")] + marketplace_path: Annotated[ + AbsolutePathBuf | None, Field(alias="marketplacePath") + ] = None + mcp_servers: Annotated[list[str], Field(alias="mcpServers")] + skills: list[SkillSummary] + summary: PluginSummary + + +class PluginMarketplaceEntry(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + interface: MarketplaceInterface | None = None + name: str + path: Annotated[ + AbsolutePathBuf | None, + Field( + description="Local marketplace file path when the marketplace is backed by a local file. Remote-only catalog marketplaces do not have a local path." + ), + ] = None + plugins: list[PluginSummary] + + +class PluginReadResponse(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + plugin: PluginDetail + + +class PluginShareListItem(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + local_plugin_path: Annotated[ + AbsolutePathBuf | None, Field(alias="localPluginPath") + ] = None + plugin: PluginSummary + share_url: Annotated[str, Field(alias="shareUrl")] + + +class PluginShareListResponse(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + data: list[PluginShareListItem] + + class RawResponseItemCompletedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -8200,6 +8235,13 @@ class Thread(BaseModel): description="Usually the first user message in the thread, if available." ), ] + session_id: Annotated[ + str, + Field( + alias="sessionId", + description="Session id shared by threads that belong to the same session tree.", + ), + ] source: Annotated[ SessionSource, Field( @@ -8209,6 +8251,13 @@ class Thread(BaseModel): 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( @@ -8255,7 +8304,7 @@ class ThreadForkResponse(BaseModel): description="Legacy sandbox policy retained for compatibility. Experimental clients should prefer `permissionProfile` when they need exact runtime permissions." ), ] - service_tier: Annotated[ServiceTier | None, Field(alias="serviceTier")] = None + service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread: Thread @@ -8325,7 +8374,7 @@ class ThreadResumeResponse(BaseModel): description="Legacy sandbox policy retained for compatibility. Experimental clients should prefer `permissionProfile` when they need exact runtime permissions." ), ] - service_tier: Annotated[ServiceTier | None, Field(alias="serviceTier")] = None + service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread: Thread @@ -8372,7 +8421,7 @@ class ThreadStartResponse(BaseModel): description="Legacy sandbox policy retained for compatibility. Experimental clients should prefer `permissionProfile` when they need exact runtime permissions." ), ] - service_tier: Annotated[ServiceTier | None, Field(alias="serviceTier")] = None + service_tier: Annotated[str | None, Field(alias="serviceTier")] = None thread: Thread @@ -8430,12 +8479,10 @@ class ClientRequest( | PluginReadRequest | PluginSkillReadRequest | PluginShareSaveRequest + | PluginShareUpdateTargetsRequest | PluginShareListRequest | PluginShareDeleteRequest | AppListRequest - | DeviceKeyCreateRequest - | DeviceKeyPublicRequest - | DeviceKeySignRequest | FsReadFileRequest | FsWriteFileRequest | FsCreateDirectoryRequest @@ -8462,6 +8509,7 @@ class ClientRequest( | McpServerResourceReadRequest | McpServerToolCallRequest | WindowsSandboxSetupStartRequest + | WindowsSandboxReadinessRequest | AccountLoginStartRequest | AccountLoginCancelRequest | AccountLogoutRequest @@ -8512,12 +8560,10 @@ class ClientRequest( | PluginReadRequest | PluginSkillReadRequest | PluginShareSaveRequest + | PluginShareUpdateTargetsRequest | PluginShareListRequest | PluginShareDeleteRequest | AppListRequest - | DeviceKeyCreateRequest - | DeviceKeyPublicRequest - | DeviceKeySignRequest | FsReadFileRequest | FsWriteFileRequest | FsCreateDirectoryRequest @@ -8544,6 +8590,7 @@ class ClientRequest( | McpServerResourceReadRequest | McpServerToolCallRequest | WindowsSandboxSetupStartRequest + | WindowsSandboxReadinessRequest | AccountLoginStartRequest | AccountLoginCancelRequest | AccountLogoutRequest @@ -8568,6 +8615,19 @@ class ClientRequest( ] +class PluginListResponse(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + featured_plugin_ids: Annotated[ + list[str] | None, Field(alias="featuredPluginIds") + ] = [] + marketplace_load_errors: Annotated[ + list[MarketplaceLoadErrorInfo] | None, Field(alias="marketplaceLoadErrors") + ] = [] + marketplaces: list[PluginMarketplaceEntry] + + class ThreadStartedServerNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -8604,6 +8664,8 @@ class ServerNotification( | ItemAgentMessageDeltaServerNotification | ItemPlanDeltaServerNotification | CommandExecOutputDeltaServerNotification + | ProcessOutputDeltaServerNotification + | ProcessExitedServerNotification | ItemCommandExecutionOutputDeltaServerNotification | ItemCommandExecutionTerminalInteractionServerNotification | ItemFileChangeOutputDeltaServerNotification @@ -8671,6 +8733,8 @@ class ServerNotification( | ItemAgentMessageDeltaServerNotification | ItemPlanDeltaServerNotification | CommandExecOutputDeltaServerNotification + | ProcessOutputDeltaServerNotification + | ProcessExitedServerNotification | ItemCommandExecutionOutputDeltaServerNotification | ItemCommandExecutionTerminalInteractionServerNotification | ItemFileChangeOutputDeltaServerNotification diff --git a/sdk/python/tests/test_artifact_workflow_and_binaries.py b/sdk/python/tests/test_artifact_workflow_and_binaries.py index a30582517a..fa32ac7bae 100644 --- a/sdk/python/tests/test_artifact_workflow_and_binaries.py +++ b/sdk/python/tests/test_artifact_workflow_and_binaries.py @@ -98,6 +98,9 @@ def test_schema_normalization_only_flattens_string_literal_oneofs() -> None: "ExperimentalFeatureStage", "InputModality", "MessagePhase", + "PluginAvailability", + "ProcessOutputStream", + "TurnItemsView", ] diff --git a/sdk/python/tests/test_client_rpc_methods.py b/sdk/python/tests/test_client_rpc_methods.py index f1dd353b1f..1515f83f5f 100644 --- a/sdk/python/tests/test_client_rpc_methods.py +++ b/sdk/python/tests/test_client_rpc_methods.py @@ -62,6 +62,7 @@ def test_thread_resume_response_accepts_auto_review_reviewer() -> None: "id": "thread-1", "modelProvider": "openai", "preview": "", + "sessionId": "session-1", "source": "cli", "status": {"type": "idle"}, "turns": [], diff --git a/sdk/python/tests/test_public_api_runtime_behavior.py b/sdk/python/tests/test_public_api_runtime_behavior.py index 10865cf879..3e55a96912 100644 --- a/sdk/python/tests/test_public_api_runtime_behavior.py +++ b/sdk/python/tests/test_public_api_runtime_behavior.py @@ -93,6 +93,7 @@ def _item_completed_notification( method="item/completed", payload=ItemCompletedNotification.model_validate( { + "completedAtMs": 1, "item": item, "threadId": thread_id, "turnId": turn_id, diff --git a/sdk/python/tests/test_public_api_signatures.py b/sdk/python/tests/test_public_api_signatures.py index b432a6c33f..e72160e169 100644 --- a/sdk/python/tests/test_public_api_signatures.py +++ b/sdk/python/tests/test_public_api_signatures.py @@ -70,6 +70,7 @@ def test_generated_public_signatures_are_snake_case_and_typed() -> None: "service_name", "service_tier", "session_start_source", + "thread_source", ], Codex.thread_list: [ "archived", @@ -108,6 +109,7 @@ def test_generated_public_signatures_are_snake_case_and_typed() -> None: "model_provider", "sandbox", "service_tier", + "thread_source", ], Thread.turn: [ "approval_policy", @@ -148,6 +150,7 @@ def test_generated_public_signatures_are_snake_case_and_typed() -> None: "service_name", "service_tier", "session_start_source", + "thread_source", ], AsyncCodex.thread_list: [ "archived", @@ -186,6 +189,7 @@ def test_generated_public_signatures_are_snake_case_and_typed() -> None: "model_provider", "sandbox", "service_tier", + "thread_source", ], AsyncThread.turn: [ "approval_policy",