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
This commit is contained in:
Ahmed Ibrahim
2026-09-09 03:14:45 +00:00
committed by copyberry
parent fe52d795c9
commit 45134c0463
11 changed files with 2437 additions and 602 deletions

View File

@@ -3,6 +3,8 @@
from __future__ import annotations
from typing import TypeAlias
from pydantic import BaseModel
from .v2_all import AccountLoginCompletedNotification
@@ -10,6 +12,7 @@ from .v2_all import AccountRateLimitsUpdatedNotification
from .v2_all import AccountUpdatedNotification
from .v2_all import AgentMessageDeltaNotification
from .v2_all import AppListUpdatedNotification
from .v2_all import AuthRecoveryNotification
from .v2_all import CommandExecOutputDeltaNotification
from .v2_all import CommandExecutionOutputDeltaNotification
from .v2_all import ConfigWarningNotification
@@ -31,6 +34,7 @@ from .v2_all import ItemCompletedNotification
from .v2_all import ItemGuardianApprovalReviewCompletedNotification
from .v2_all import ItemGuardianApprovalReviewStartedNotification
from .v2_all import ItemStartedNotification
from .v2_all import McpServerEventStreamNotification
from .v2_all import McpServerOauthLoginCompletedNotification
from .v2_all import McpServerStatusUpdatedNotification
from .v2_all import McpToolCallProgressNotification
@@ -40,12 +44,14 @@ from .v2_all import ModelVerificationNotification
from .v2_all import PlanDeltaNotification
from .v2_all import ProcessExitedNotification
from .v2_all import ProcessOutputDeltaNotification
from .v2_all import ProjectChangedNotification
from .v2_all import ReasoningSummaryPartAddedNotification
from .v2_all import ReasoningSummaryTextDeltaNotification
from .v2_all import ReasoningTextDeltaNotification
from .v2_all import RemoteControlStatusChangedNotification
from .v2_all import ServerRequestResolvedNotification
from .v2_all import SkillsChangedNotification
from .v2_all import StrictReviewRequiredNotification
from .v2_all import TerminalInteractionNotification
from .v2_all import ThreadArchivedNotification
from .v2_all import ThreadClosedNotification
@@ -53,14 +59,20 @@ from .v2_all import ThreadDeletedNotification
from .v2_all import ThreadGoalClearedNotification
from .v2_all import ThreadGoalUpdatedNotification
from .v2_all import ThreadNameUpdatedNotification
from .v2_all import ThreadProjectUpdatedNotification
from .v2_all import ThreadQueueChangedNotification
from .v2_all import ThreadRealtimeClosedNotification
from .v2_all import ThreadRealtimeErrorNotification
from .v2_all import ThreadRealtimeItemAddedNotification
from .v2_all import ThreadRealtimeItemCompletedNotification
from .v2_all import ThreadRealtimeItemStartedNotification
from .v2_all import ThreadRealtimeItemTranscriptDeltaNotification
from .v2_all import ThreadRealtimeOutputAudioDeltaNotification
from .v2_all import ThreadRealtimeSdpNotification
from .v2_all import ThreadRealtimeStartedNotification
from .v2_all import ThreadRealtimeTranscriptDeltaNotification
from .v2_all import ThreadRealtimeTranscriptDoneNotification
from .v2_all import ThreadRevertedNotification
from .v2_all import ThreadSettingsUpdatedNotification
from .v2_all import ThreadStartedNotification
from .v2_all import ThreadStatusChangedNotification
@@ -75,11 +87,94 @@ from .v2_all import WarningNotification
from .v2_all import WindowsSandboxSetupCompletedNotification
from .v2_all import WindowsWorldWritableWarningNotification
NOTIFICATION_MODELS: dict[str, type[BaseModel]] = {
KnownNotificationPayload: TypeAlias = (
AccountLoginCompletedNotification
| AccountRateLimitsUpdatedNotification
| AccountUpdatedNotification
| AgentMessageDeltaNotification
| AppListUpdatedNotification
| AuthRecoveryNotification
| CommandExecOutputDeltaNotification
| CommandExecutionOutputDeltaNotification
| ConfigWarningNotification
| ContextCompactedNotification
| DeprecationNoticeNotification
| EnvironmentConnectionNotification
| ErrorNotification
| ExternalAgentConfigImportCompletedNotification
| ExternalAgentConfigImportProgressNotification
| FileChangeOutputDeltaNotification
| FileChangePatchUpdatedNotification
| FsChangedNotification
| FuzzyFileSearchSessionCompletedNotification
| FuzzyFileSearchSessionUpdatedNotification
| GuardianWarningNotification
| HookCompletedNotification
| HookStartedNotification
| ItemCompletedNotification
| ItemGuardianApprovalReviewCompletedNotification
| ItemGuardianApprovalReviewStartedNotification
| ItemStartedNotification
| McpServerEventStreamNotification
| McpServerOauthLoginCompletedNotification
| McpServerStatusUpdatedNotification
| McpToolCallProgressNotification
| ModelReroutedNotification
| ModelSafetyBufferingUpdatedNotification
| ModelVerificationNotification
| PlanDeltaNotification
| ProcessExitedNotification
| ProcessOutputDeltaNotification
| ProjectChangedNotification
| ReasoningSummaryPartAddedNotification
| ReasoningSummaryTextDeltaNotification
| ReasoningTextDeltaNotification
| RemoteControlStatusChangedNotification
| ServerRequestResolvedNotification
| SkillsChangedNotification
| StrictReviewRequiredNotification
| TerminalInteractionNotification
| ThreadArchivedNotification
| ThreadClosedNotification
| ThreadDeletedNotification
| ThreadGoalClearedNotification
| ThreadGoalUpdatedNotification
| ThreadNameUpdatedNotification
| ThreadProjectUpdatedNotification
| ThreadQueueChangedNotification
| ThreadRealtimeClosedNotification
| ThreadRealtimeErrorNotification
| ThreadRealtimeItemAddedNotification
| ThreadRealtimeItemCompletedNotification
| ThreadRealtimeItemStartedNotification
| ThreadRealtimeItemTranscriptDeltaNotification
| ThreadRealtimeOutputAudioDeltaNotification
| ThreadRealtimeSdpNotification
| ThreadRealtimeStartedNotification
| ThreadRealtimeTranscriptDeltaNotification
| ThreadRealtimeTranscriptDoneNotification
| ThreadRevertedNotification
| ThreadSettingsUpdatedNotification
| ThreadStartedNotification
| ThreadStatusChangedNotification
| ThreadTokenUsageUpdatedNotification
| ThreadUnarchivedNotification
| TurnCompletedNotification
| TurnDiffUpdatedNotification
| TurnModerationMetadataNotification
| TurnPlanUpdatedNotification
| TurnStartedNotification
| WarningNotification
| WindowsSandboxSetupCompletedNotification
| WindowsWorldWritableWarningNotification
)
NOTIFICATION_MODELS: dict[str, type[KnownNotificationPayload]] = {
"account/login/completed": AccountLoginCompletedNotification,
"account/rateLimits/updated": AccountRateLimitsUpdatedNotification,
"account/updated": AccountUpdatedNotification,
"app/list/updated": AppListUpdatedNotification,
"autoApprovalReview/strictReviewRequired": StrictReviewRequiredNotification,
"command/exec/outputDelta": CommandExecOutputDeltaNotification,
"configWarning": ConfigWarningNotification,
"deprecationNotice": DeprecationNoticeNotification,
@@ -106,13 +201,17 @@ NOTIFICATION_MODELS: dict[str, type[BaseModel]] = {
"item/reasoning/summaryTextDelta": ReasoningSummaryTextDeltaNotification,
"item/reasoning/textDelta": ReasoningTextDeltaNotification,
"item/started": ItemStartedNotification,
"mcpServer/event/stream/notification": McpServerEventStreamNotification,
"mcpServer/oauthLogin/completed": McpServerOauthLoginCompletedNotification,
"mcpServer/startupStatus/updated": McpServerStatusUpdatedNotification,
"model/rerouted": ModelReroutedNotification,
"model/safetyBuffering/updated": ModelSafetyBufferingUpdatedNotification,
"model/verification": ModelVerificationNotification,
"modelProvider/authRecoveryCompleted": AuthRecoveryNotification,
"modelProvider/authRecoveryStarted": AuthRecoveryNotification,
"process/exited": ProcessExitedNotification,
"process/outputDelta": ProcessOutputDeltaNotification,
"project/changed": ProjectChangedNotification,
"remoteControl/status/changed": RemoteControlStatusChangedNotification,
"serverRequest/resolved": ServerRequestResolvedNotification,
"skills/changed": SkillsChangedNotification,
@@ -125,14 +224,20 @@ NOTIFICATION_MODELS: dict[str, type[BaseModel]] = {
"thread/goal/cleared": ThreadGoalClearedNotification,
"thread/goal/updated": ThreadGoalUpdatedNotification,
"thread/name/updated": ThreadNameUpdatedNotification,
"thread/project/updated": ThreadProjectUpdatedNotification,
"thread/queue/changed": ThreadQueueChangedNotification,
"thread/realtime/closed": ThreadRealtimeClosedNotification,
"thread/realtime/error": ThreadRealtimeErrorNotification,
"thread/realtime/item/completed": ThreadRealtimeItemCompletedNotification,
"thread/realtime/item/started": ThreadRealtimeItemStartedNotification,
"thread/realtime/item/transcript/delta": ThreadRealtimeItemTranscriptDeltaNotification,
"thread/realtime/itemAdded": ThreadRealtimeItemAddedNotification,
"thread/realtime/outputAudio/delta": ThreadRealtimeOutputAudioDeltaNotification,
"thread/realtime/sdp": ThreadRealtimeSdpNotification,
"thread/realtime/started": ThreadRealtimeStartedNotification,
"thread/realtime/transcript/delta": ThreadRealtimeTranscriptDeltaNotification,
"thread/realtime/transcript/done": ThreadRealtimeTranscriptDoneNotification,
"thread/reverted": ThreadRevertedNotification,
"thread/settings/updated": ThreadSettingsUpdatedNotification,
"thread/started": ThreadStartedNotification,
"thread/status/changed": ThreadStatusChangedNotification,
@@ -150,6 +255,7 @@ NOTIFICATION_MODELS: dict[str, type[BaseModel]] = {
DIRECT_TURN_ID_NOTIFICATION_TYPES: tuple[type[BaseModel], ...] = (
AgentMessageDeltaNotification,
AuthRecoveryNotification,
CommandExecutionOutputDeltaNotification,
ContextCompactedNotification,
ErrorNotification,
@@ -169,6 +275,7 @@ DIRECT_TURN_ID_NOTIFICATION_TYPES: tuple[type[BaseModel], ...] = (
ReasoningSummaryPartAddedNotification,
ReasoningSummaryTextDeltaNotification,
ReasoningTextDeltaNotification,
StrictReviewRequiredNotification,
TerminalInteractionNotification,
ThreadGoalUpdatedNotification,
ThreadTokenUsageUpdatedNotification,

File diff suppressed because it is too large Load Diff